From 931c33cfdb498deaca00b4293f4290e5edb6a8a6 Mon Sep 17 00:00:00 2001 From: Philip Sargent <philip.sargent@klebos.com> Date: Thu, 21 Jul 2022 19:01:04 +0300 Subject: [PATCH] Clean DataIssues output, new therionrefs.log file --- .gitignore | 1 + parsers/caves.py | 36 ++++++++++++++++++++++++------------ parsers/drawings.py | 13 ++++++++++--- 3 files changed, 35 insertions(+), 15 deletions(-) diff --git a/.gitignore b/.gitignore index 4228331..e304964 100644 --- a/.gitignore +++ b/.gitignore @@ -127,3 +127,4 @@ media/jslib/openlayers/Lang/zh-CN.js media/jslib/openlayers/Lang/zh-TW.js _test_response.html _deploy/wsl/localsettingsWSL.py.bak +therionrefs.log diff --git a/parsers/caves.py b/parsers/caves.py index 96497c4..91f353a 100644 --- a/parsers/caves.py +++ b/parsers/caves.py @@ -26,6 +26,8 @@ todo='''- db Update does not work when a cave id is in the pending list but a pr So we will need a separate file-editing capability just for this configuration file ?! - crashes on MariaDB on server when deleting Caves and complains Area needs a non null parent, But this is not true. + The only solution we have found is to let it crash, then stop and restart MariaDB (requires a logon able to sudo) + and then restart the databasereset.py again. (status as of July 2022) ''' entrances_xslug = {} caves_xslug = {} @@ -47,7 +49,7 @@ def dummy_entrance(k, slug, msg="DUMMY"): slug = slug, primary = False) except: message = f" ! {k:11s} {msg} entrance create failure" - DataIssue.objects.create(parser='caves', message=message, url=f'/cave/{slug}') + DataIssue.objects.create(parser='caves', message=message, url=f'{slug}') print(message) ent.cached_primary_slug = slug @@ -56,7 +58,7 @@ def dummy_entrance(k, slug, msg="DUMMY"): return ent else: message = f" ! {k:11s} {msg} cave SLUG '{slug}' create failure" - DataIssue.objects.create(parser='caves', message=message, url=f'/cave/{slug}') + DataIssue.objects.create(parser='caves', message=message, url=f'{slug}') print(message) raise @@ -69,12 +71,13 @@ def set_dummy_entrance(id, slug, cave, msg="DUMMY"): letter = "" entrances_xslug[slug] = entrance ce = CaveAndEntrance.objects.update_or_create(cave = cave, entrance_letter = "", entrance = entrance) - message = f' ! Warning: Dummy Entrance created for {id}, slug:"{slug}" ' - DataIssue.objects.create(parser='caves', message=message, url=f'/cave/{slug}') + message = f' ! Warning: Dummy Entrance created for {id}' + + DataIssue.objects.create(parser='caves', message=message, url=f'{cave.url}') print(message) except: message = f' ! Entrance Dummy setting failure, slug:"{slug}" cave id :"{id}" ' - DataIssue.objects.create(parser='caves', message=message, url=f'/cave/{slug}') + DataIssue.objects.create(parser='caves', message=message, url=f'{cave.url}') print(message) def do_pending_cave(k, url, area_1623): @@ -82,19 +85,28 @@ def do_pending_cave(k, url, area_1623): default for a PENDING cave, should be overwritten in the db later if a real cave of the same name exists in expoweb/cave_data/1623-"k".html ''' + slug = "1623-" + k + default_note = f"_Survex file found in loser repo but no description in expoweb <br><br><br>\n" default_note += f"INSTRUCTIONS: First open 'This survex file' (link above the CaveView panel) to find the date and info. Then " default_note += f"<br><br>\n\n - (1) search in the survex file for the *ref to find a " default_note += f"relevant wallet, e.g.<a href='/survey_scans/2009%252311/'>2009#11</a> and read the notes image files <br>\n - " default_note += f"<br><br>\n\n - (2) search in the Expo for that year e.g. <a href='/expedition/{k[0:4]}'>{k[0:4]}</a> to find a " - default_note += f"relevant logbook entry, then <br>\n - " + default_note += f"relevant logbook entry, remember that the date may have been recorded incorrectly, " + default_note += f"so check for trips i.e. logbook entries involving the same people as were listed in the survex file, " + default_note += f"and you should also check the scanned copy of the logbook (linked from each logbook entry page) " + default_note += f"just in case a vital trip was not transcribed, then <br>\n - " default_note += f"click on 'Edit this cave' and copy the information you find in the survex file and the logbook" + default_note += f"and delete all the text in the 'Notes' section - which is the text you are reading now." + default_note += f"<br><br>\n\n - Only two fields on this form are essential. " + default_note += f"Documentation of all the fields on 'Edit this cave' form is in <a href='/handbook/survey/caveentryfields.html'>handbook/survey/caveentryfields</a>" default_note += f"<br><br>\n\n - " - default_note += f"When you Submit it will create a file file in expoweb/cave_data/ " + default_note += f"When you Submit it will create a new file in expoweb/cave_data/ " default_note += f"<br><br>\n\n - Now you can edit the entrance info: click on Edit below for the dummy entrance. " default_note += f"and then Submit to save it (if you forget to do this, a dummy entrance will be created for your new cave description)." + default_note += f"<br><br>\n\n - Finally, you need to find a nerd to edit the file '<var>expoweb/cave_data/pending.txt</var>' " + default_note += f"to remove the line <br><var>{slug}</var><br> as it is no longer 'pending' but 'done. Well Done." - slug = "1623-" + k cave = Cave( unofficial_number = k, @@ -424,7 +436,7 @@ def readcave(filename): ce = CaveAndEntrance.objects.update_or_create(cave = c, entrance_letter = letter, entrance = entrance) except: message = f' ! Entrance setting failure, slug:"{slug}" #entrances:{len(entrances)} {entrance} letter:"{letter}" cave:"{c}" filename:"cave_data/{filename}"' - DataIssue.objects.create(parser='caves', message=message) + DataIssue.objects.create(parser='caves', message=message, url=f'{c.url}_edit/') print(message) if survex_file[0]: @@ -436,18 +448,18 @@ def readcave(filename): if description_file[0]: # if not an empty string message = f' - {slug:12} complex description filename "{description_file[0]}" inside "{CAVEDESCRIPTIONS}/{filename}"' - DataIssue.objects.create(parser='caves ok', message=message, url=f'{slug}/edit/') + DataIssue.objects.create(parser='caves ok', message=message, url=f'/{slug}_cave_edit/') print(message) if not (Path(EXPOWEB) / description_file[0]).is_file(): message = f' ! {slug:12} description filename "{EXPOWEB}/{description_file[0]}" does not refer to a real file' - DataIssue.objects.create(parser='caves', message=message, url=f'/cave/{slug}/edit/') + DataIssue.objects.create(parser='caves', message=message, url=f'/{slug}_cave_edit/') print(message) #c.description_file="" # done only once, to clear out cruft. #c.save() else: # more than one item in long list message = f' ! ABORT loading this cave. in "{filename}"' - DataIssue.objects.create(parser='caves', message=message, url=f'/cave/{slugs}/edit/') + DataIssue.objects.create(parser='caves', message=message, url=f'/{slug}_cave_edit/') print(message) def getXML(text, itemname, minItems = 1, maxItems = None, printwarnings = True, context = ""): diff --git a/parsers/drawings.py b/parsers/drawings.py index 2f4e4a9..a6c16be 100644 --- a/parsers/drawings.py +++ b/parsers/drawings.py @@ -128,15 +128,19 @@ def settherionfileinfo(filetuple): # scrap blownout -projection plan -scale [-81.0 -42.0 216.0 -42.0 0.0 0.0 7.5438 0.0 m] for xth_me in rx_xth_me.findall(ttext): + # WORK IN PROGRESS. Do not clutter up the DataIssues list with this message = f'! Un-parsed image filename: {therionfile.dwgname} : {xth_me.split()[-3]} - {therionfile.dwgpath}' - #print(message) - DataIssue.objects.create(parser='xTherion', message=message, url=f'/dwgdataraw/{therionfile.dwgpath}') + # print(message) + # DataIssue.objects.create(parser='xTherion', message=message, url=f'/dwgdataraw/{therionfile.dwgpath}') + with open('therionrefs.log', 'a') as lg: + lg.write(message + '\n') + findimageinsert(therionfile, xth_me) for inp in rx_input.findall(ttext): # if this 'input' is a .th2 file we have already seen, then we can assign this as a sub-file # but we would need to disentangle to get the current path properly - message = f'! Un-set Therion .th2 input: - {therionfile.dwgname} : {inp} - {therionfile.dwgpath}' + message = f'! Un-set (?) Therion .th2 input: - {therionfile.dwgname} : {inp} - {therionfile.dwgpath}' #print(message) DataIssue.objects.create(parser='xTherion', message=message, url=f'/dwgdataraw/{therionfile.dwgpath}') findimportinsert(therionfile, inp) @@ -207,6 +211,9 @@ def load_drawings_files(): DataIssue.objects.filter(parser='Therion').delete() DataIssue.objects.filter(parser='xTherion').delete() DataIssue.objects.filter(parser='Tunnel').delete() + if(os.path.isfile('therionrefs.log')): + os.remove('therionrefs.log') + drawingsdirs = [ "" ] while drawingsdirs: