diff --git a/core/models/survex.py b/core/models/survex.py index af948b8..f2ba667 100644 --- a/core/models/survex.py +++ b/core/models/survex.py @@ -161,7 +161,7 @@ class SurvexPersonRole(models.Model): expeditionday = models.ForeignKey("ExpeditionDay", null=True,on_delete=models.SET_NULL) def __str__(self): - return str(self.person) + " - " + str(self.survexblock) + return str(self.personname) + " - " + str(self.survexblock) class Wallet(models.Model): '''We do not keep the JSON values in the database, we query them afresh each time, diff --git a/core/views/scans.py b/core/views/scans.py index ceda72b..f641423 100644 --- a/core/views/scans.py +++ b/core/views/scans.py @@ -84,7 +84,7 @@ def fillblankpeople(w): w.persons = wp if len(wp) == 1: nobody = wp[0].lower() - if nobody == 'unknown' or nobody == 'nobody' or nobody == ' ': + if nobody == 'unknown' or nobody == 'nobody' or nobody == ' ' or nobody == '': populatewallet(w) def fillblankothers(w): @@ -93,7 +93,7 @@ def fillblankothers(w): datewallet(w, earliest) c = w.cave() - if not c: + if not c or c == "": caveifywallet(w) def fixsurvextick(w, ticks): diff --git a/core/views/uploads.py b/core/views/uploads.py index 5515982..8c8721b 100644 --- a/core/views/uploads.py +++ b/core/views/uploads.py @@ -205,8 +205,13 @@ def get_complaints(complaints, waldata, svxfiles, files, wallet, wurl): if waldata["cave"]: try: caveid = waldata["cave"] - caveid = caveid.replace("/","-") - caveobject = getCave(caveid) + if type(caveid) is list: + for i in caveid: + i = i.replace("/","-") + caveobject = getCave(i) # only th elast one gets recorded.. ouch. + else: + caveid = caveid + caveobject = getCave(caveid) print(f'getCave for id "{waldata["cave"]}" {caveobject}') # if not caveobject.url == waldata["description url"]: # complaints.append(f'The URL of cave description \"{waldata["description url"]}\" does not match the one on record for this cave which is: "{caveobject.url}". If the wallet is not for a cave, put a useful URL here.') @@ -248,7 +253,9 @@ def scanupload(request, path=None): def read_json(): '''Read JSON from the wallet metadata file in the repo - or fills with blank data if that files can't be read''' + or fills with blank data if that files can't be read + + Should sanitise to ensure no spurious backslashes e.g. in windows style paths''' waldata = {} if contents_path.is_file(): create = False # yes wallet exists because JSON exists, even if no files in the surveyscans folder, or even if that folder does not exist @@ -477,9 +484,12 @@ def scanupload(request, path=None): if dirs: dirs = sorted(dirs) - - waldata = read_json() - + try: + waldata = read_json() + except: + message = f'Nasty failure in parsing wallets metadata in {contents_path}. Probably backslash not forward slash in filename path' + return render(request, 'errors/generic.html', {'message': message}) + jsonfile = Path(settings.DRAWINGS_DATA, "walletjson") / wallet[0:4] / wallet / "contents.json" # print(f'! - FORM scanupload - jsonfile {jsonfile}') if not Path(jsonfile).is_file(): @@ -501,8 +511,8 @@ def scanupload(request, path=None): # waldata["people"] = list(waldata["people"]) - if not waldata["date"] or not waldata["people"] or waldata["people"] == ["Unknown"]: # json file does not exist, blank data, or people not typed into JSON file - # refactor into separate functions for no date set or no people set + if not waldata["date"] or not waldata["people"] or waldata["people"] == ["Unknown"] or waldata["people"] == [""] or waldata["cave"] == "": # json file does not exist, blank data, or people not typed into JSON file + # refactor into separate functions for no date set or no people set or no cave set # print(f'No date set') print(f'\n - Incomplete, empty or default wallet data {wallet} {waldata=}') refs=[] @@ -551,11 +561,13 @@ def scanupload(request, path=None): QSpeople = SurvexPersonRole.objects.filter(survexblock=b) print(f' - - {QSpeople=}') for p in QSpeople: + print(f' - - {p.personname} ') team.append(p.personname) # else: # print(f' - Wallet not matching *ref {b.scanswallet=} {wallet}') if dates: waldata["date"] = min(dates).isoformat() + print(f' - - {team=} ') team = list(set(team)) waldata["people"] = team diff --git a/parsers/survex.py b/parsers/survex.py index 7693826..d3eec8c 100644 --- a/parsers/survex.py +++ b/parsers/survex.py @@ -230,6 +230,7 @@ class LoadingSurvex(): if mteammember: for tm in self.rx_person.split(mteammember.group(2)): if tm: + tm = tm.strip('\"\'') personexpedition = survexblock.expedition and GetPersonExpeditionNameLookup(survexblock.expedition).get(tm.lower()) if (personexpedition, tm) not in teammembers: teammembers.append((personexpedition, tm))