diff --git a/core/views/survex.py b/core/views/survex.py
index c80c76d..57a8d1a 100644
--- a/core/views/survex.py
+++ b/core/views/survex.py
@@ -223,10 +223,12 @@ class SvxForm(forms.Form):
comment = f"Online survex edit: {self.data['filename']}.svx on dev machine '{socket.gethostname()}' "
only_commit(fname, comment)
+ msg = "SAVED and committed to git (if there were differences)"
# should only call this is something changed
- parse_one_file(self.data["filename"])
-
- return "SAVED and committed to git (if there were differences)"
+ if parse_one_file(self.data["filename"]):
+ return msg
+ else:
+ return msg + "\nBUT PARSING failed. Do a completely new databaseReset."
def Process(self):
print(">>>>....\n....Processing\n")
diff --git a/parsers/survex.py b/parsers/survex.py
index 1e961c8..0156140 100644
--- a/parsers/survex.py
+++ b/parsers/survex.py
@@ -373,7 +373,7 @@ class LoadingSurvex:
if self.inheritteam:
message = (
- f"- INHERITING ({survexblock.parent})>({survexblock}) {survexblock.survexfile.path} '{self.inheritteam}'"
+ f"- no *team INHERITING ({survexblock.parent})>({survexblock}) {survexblock.survexfile.path} '{self.inheritteam}'"
)
print(self.insp + message)
# stash_data_issue(
@@ -2315,85 +2315,31 @@ def parse_one_file(fpath): # --------------------------------------in progress--
It gets overwritten, and then nullified, on repeated SAVE & import.
I should learn how to step through with the debugger.
"""
- def parse_new_svx(fpath):
- newfileroot = MakeFileRoot(fpath)
- survexblockparent = SurvexBlock(
- name="adhoc_parent", survexpath="", survexfile=newfileroot, legsall=0, legslength=0.0
- )
- survexblockparent.save()
-
- svx_load.survexdict[newfileroot.survexdirectory] = []
- svx_load.survexdict[newfileroot.survexdirectory].append(newfileroot)
- svx_load.svxdirs[""] = newfileroot.survexdirectory
-
- # ----------------------------------------------------------------
- svx_load.LinearLoad(survexblockparent, newfileroot.path, fname)
- # ----------------------------------------------------------------
-
- def reparse_existing_svx(svxs):
- """If this SurvexFile object already exists in the database, we want to keep the parent survexblock
- but replace everything else by parsing the file.
- But we do not want to delete and recreate the object as other survex files may have this as the parent
- and we are not processing any *include we find
- """
- svx = svxs[0] # first and only member of QuerySet
- blocks = SurvexBlock.objects.filter(survexfile=svx)
-
- if len(blocks) >= 1:
- print(f"Blocks in '{svx}': {blocks}")
- survexblockparent=blocks[0].parent # all should have same parent
- # But may have been obliterated by previous error
-
- # Stamp all over the accumulated lengths and legs in the parent block,
- # This also obliterates survey lengths from all other 'sibling' survex files
- # to the one being re-parsed
- if survexblockparent:
- survexblockparent.legsall=0
- survexblockparent.legslength=0.0
- survexblockparent.save()
-
- display_contents(blocks)
- print(f"ABORTING - UNSOLVED BUGS. Do a complete databaseReset")
- return True
- blocks.delete() # deletes all pre-existing SurvexBlocks attached to this SurvexFile
- bafter = SurvexBlock.objects.filter(survexfile=svx)
- display_contents(bafter)
-
- # all these foreign keys should be recreated properly when the file is parsed.
- # so why is /expedition/1996 crashing in nasty template error?
- else:
- print(f"ABORTING - UNSOLVED BUGS. Do a complete databaseReset")
- return True
+ def parse_new_svx(fpath, blockroot=None, svxfileroot=None):
+ if svxfileroot == None:
+ svxfileroot = MakeFileRoot(fpath)
+ svxfileroot.save()
+
+ if blockroot == None:
+ newname = "adhoc_" + str(Path(str(svxfileroot)).name)
survexblockparent = SurvexBlock(
- name="fresh_parent", survexpath="", survexfile=svx, legsall=0, legslength=0.0
+ name=newname, survexpath="", survexfile=svxfileroot, legsall=0, legslength=0.0
)
survexblockparent.save()
-
- print(f" - {survexblockparent=}")
+ blockroot = survexblockparent
+ svx_load.survexdict[svxfileroot.survexdirectory] = []
+ svx_load.survexdict[svxfileroot.survexdirectory].append(svxfileroot)
+ svx_load.svxdirs[""] = svxfileroot.survexdirectory
- svx_load.survexdict[svx.survexdirectory] = []
- svx_load.survexdict[svx.survexdirectory].append(svx)
- svx_load.svxdirs[""] = svx.survexdirectory
-
# ----------------------------------------------------------------
- svx_load.LinearLoad(survexblockparent, fpath, fname)
+ svx_load.LinearLoad(blockroot, svxfileroot.path, fname)
# ----------------------------------------------------------------
- # For some reason I have not yet worked out, I am getting the parent block
- # added in as one of the child blocks of the survexfile
- # so explicitly remove it.
- blocks = SurvexBlock.objects.filter(survexfile=svx)
- print(f"\nAfter import. {svx=}")
- display_contents(blocks)
- #survexblockparent.survexfile = MakeFileRoot("")
- survexblockparent.delete()
- blocks = SurvexBlock.objects.filter(survexfile=svx)
- print(f"\nAfter import, specific removal. {svx=}")
- display_contents(blocks)
print(f"\n - Loading One Survex file '{fpath}'", file=sys.stderr)
svx_load = LoadingSurvex()
+ svx_load.survexdict = {}
fname = Path(settings.SURVEX_DATA, (fpath + ".svx"))
# print(f" - {fname=}")
@@ -2403,9 +2349,54 @@ def parse_one_file(fpath): # --------------------------------------in progress--
if len(svxs)>1:
print(f" ! Mistake? More than one survex file object in database with the same file-path {svxs}")
print(f" - Aborting file parsing & import into database.")
- return True
+ return False
print(f" - Pre-existing survexfile {svxs}.")
- reparse_existing_svx(svxs)
+ # reparse_existing_svx(svxs)
+ existingsvx = SurvexFile.objects.get(path=fpath)
+ existingcave = existingsvx.cave
+ print(f" - survexfile is {existingsvx} id={existingsvx.id} {existingcave}")
+
+ sbs = existingsvx.survexblock_set.all()
+ existingparent = None
+ parents =set()
+ if sbs:
+ for sb in sbs:
+ print(f" - cleaning survex block {sb=}")
+ try:
+ if sb.parent:
+ parents.add(sb.parent)
+ except:
+ print(f" ! FAILURE to access sb.parent {sb=}")
+ sb.delete()
+ if parents:
+ print(f" - set of parent blocks {parents}")
+ if len(parents) > 1:
+ print(f" - WARNING more than one parent survex block!")
+ existingparent = parents.pop()
+
+ # print(f" - deleting survex file {existingsvx=}")
+ # existingsvx.delete()
+ print(f" - Reloading and parsing this survexfile '{fpath}' Loading...")
+
+ parse_new_svx(fpath, blockroot=existingparent, svxfileroot=existingsvx)
+
+ svxs = SurvexFile.objects.filter(path=fpath)
+ if len(svxs)>1:
+ print(f" ! Mistake? More than one survex file object in database with the same file-path {svxs}")
+ print(f" - Aborting file parsing & import into database.")
+ return False
+ replacesvx = SurvexFile.objects.get(path=fpath)
+ replacesvx.cave = existingcave
+ print(f" - new/replacement survexfile {svxs}. id={replacesvx.id}")
+ replacesvx.save()
+
+ if parents:
+ sbs = replacesvx.survexblock_set.all()
+ for sb in sbs:
+ print(f" - re-setting survex block parent{sb=}")
+ sb.parent = existingparent # should be all the same
+ sb.save()
+
else:
print(f" - Not seen this survexfile before '{fpath}' Loading...")
parse_new_svx(fpath)
@@ -2420,9 +2411,10 @@ def parse_one_file(fpath): # --------------------------------------in progress--
tf += len(svx_load.survexdict[d])
print(f" - Number of SurvexFiles: {tf:,}")
print(f" - Number of Survex legs: {legsnumber:,}")
- print(f" - Length of Survex legs: {svx_load.slength:.2f}")
+ print(f" - Length of Survex legs: {svx_load.slength:.2f} m")
svx_load = None
+ return True
def MakeSurvexFileRoot():
"""Returns a file_object.path = SURVEX_TOPNAME associated with directory_object.path = SURVEX_DATA"""
@@ -2445,6 +2437,7 @@ def MakeFileRoot(fn):
CHANGE THIS to just use the same block root as for SURVEX_TOPNAME ?
"""
+ print(f" - making a new root survexfile for this import: {fn}")
fileroot = SurvexFile(path=fn, cave=None)
fileroot.survexdirectory = SurvexDirectory.objects.get(id=1) # just re-use the first thing we made
fileroot.save()
diff --git a/templates/svxfile.html b/templates/svxfile.html
index ae0e20d..428d143 100644
--- a/templates/svxfile.html
+++ b/templates/svxfile.html
@@ -81,7 +81,7 @@ LOGMESSAGES
{% endif %}
underground survey length: {{svxlength|floatformat:2}} metres
-parent survex file {{survexfile.cave.survex_file}} for this cave
+parent survex file {{survexfile.cave.survex_file}} for this cave {{survexfile.cave}}
{% for sb in svxblocks %}
block:({{sb}}) has parent block:({{sb.parent}})
{% empty %}