mirror of
https://expo.survex.com/repositories/troggle/.git
synced 2024-11-22 07:11:52 +00:00
Parse all files, not just those in the *include tree
This commit is contained in:
parent
9e5bdace2c
commit
7e47fe1f30
@ -457,7 +457,7 @@ def readcaves():
|
|||||||
DataIssue.objects.filter(parser='caves ok').delete()
|
DataIssue.objects.filter(parser='caves ok').delete()
|
||||||
DataIssue.objects.filter(parser='entrances').delete()
|
DataIssue.objects.filter(parser='entrances').delete()
|
||||||
|
|
||||||
print(" - Creating Areas 1623, 1624 and 1626")
|
print(" - Creating Areas 1623, 1624, 1627 and 1626")
|
||||||
# This crashes on the server with MariaDB even though a null parent is explicitly allowed.
|
# This crashes on the server with MariaDB even though a null parent is explicitly allowed.
|
||||||
area_1623= Area.objects.create(short_name = "1623", super=None)
|
area_1623= Area.objects.create(short_name = "1623", super=None)
|
||||||
print(" - Saving Area 1623")
|
print(" - Saving Area 1623")
|
||||||
@ -468,6 +468,9 @@ def readcaves():
|
|||||||
area_1626= Area.objects.create(short_name = "1626", super=None)
|
area_1626= Area.objects.create(short_name = "1626", super=None)
|
||||||
print(" - Saving Area 1626")
|
print(" - Saving Area 1626")
|
||||||
area_1626.save()
|
area_1626.save()
|
||||||
|
area_1627= Area.objects.create(short_name = "1627", super=None)
|
||||||
|
print(" - Saving Area 1627")
|
||||||
|
area_1627.save()
|
||||||
|
|
||||||
|
|
||||||
with transaction.atomic():
|
with transaction.atomic():
|
||||||
|
@ -6,7 +6,7 @@ import copy
|
|||||||
import subprocess
|
import subprocess
|
||||||
|
|
||||||
from pathlib import Path
|
from pathlib import Path
|
||||||
from datetime import datetime, timedelta, date
|
from datetime import datetime, timedelta, date, timezone
|
||||||
|
|
||||||
from django.utils.timezone import get_current_timezone
|
from django.utils.timezone import get_current_timezone
|
||||||
from django.utils.timezone import make_aware
|
from django.utils.timezone import make_aware
|
||||||
@ -39,9 +39,12 @@ todo = '''Also walk the entire tree in the :loser: repo looking for unconnected
|
|||||||
|
|
||||||
'''
|
'''
|
||||||
survexblockroot = None
|
survexblockroot = None
|
||||||
|
survexomitsroot = None
|
||||||
ROOTBLOCK = "rootblock"
|
ROOTBLOCK = "rootblock"
|
||||||
|
OMITBLOCK = "omitblock"
|
||||||
METRESINFEET = 3.28084
|
METRESINFEET = 3.28084
|
||||||
|
|
||||||
|
stop_dup_warning = False
|
||||||
debugprint = False # Turns on debug printout for just one *include file
|
debugprint = False # Turns on debug printout for just one *include file
|
||||||
debugprinttrigger = "!"
|
debugprinttrigger = "!"
|
||||||
# debugprinttrigger = "caves-1623/40/old/EisSVH"
|
# debugprinttrigger = "caves-1623/40/old/EisSVH"
|
||||||
@ -182,7 +185,7 @@ class LoadingSurvex():
|
|||||||
callcount = 0
|
callcount = 0
|
||||||
caverncount = 0
|
caverncount = 0
|
||||||
ignoreprefix = ["surface", "kataster", "fixedpts", "gpx"]
|
ignoreprefix = ["surface", "kataster", "fixedpts", "gpx"]
|
||||||
ignorenoncave = ["caves-1623", "caves-1626", "caves-1623/2007-neu"]
|
ignorenoncave = ["caves-1623", "caves-1623/2007-NEU","caves-1626", "caves-1624", "caves-1627", "fixedpts/gps/gps00raw", ""]
|
||||||
includedfilename =""
|
includedfilename =""
|
||||||
currentsurvexblock = None
|
currentsurvexblock = None
|
||||||
currentsurvexfile = None
|
currentsurvexfile = None
|
||||||
@ -344,7 +347,7 @@ class LoadingSurvex():
|
|||||||
the rest is discarded after error-checking.
|
the rest is discarded after error-checking.
|
||||||
Now skipping the error checking - returns as soon as the leg is not one we count.
|
Now skipping the error checking - returns as soon as the leg is not one we count.
|
||||||
|
|
||||||
REPLACE ALL THIS by reading the .log output of cavern for the file
|
REPLACE ALL THIS by reading the .log output of cavern for the file. But we need the lengths per Block, not by File. Hmm.
|
||||||
"""
|
"""
|
||||||
invalid_clino = 180.0
|
invalid_clino = 180.0
|
||||||
invalid_compass = 720.0
|
invalid_compass = 720.0
|
||||||
@ -457,7 +460,7 @@ class LoadingSurvex():
|
|||||||
print(("! Clino misread in", survexblock.survexfile.path))
|
print(("! Clino misread in", survexblock.survexfile.path))
|
||||||
print((" datastar:", datastar))
|
print((" datastar:", datastar))
|
||||||
print((" Line:", ls))
|
print((" Line:", ls))
|
||||||
message = ' ! Value Error: Clino misread in line %s in %s' % (ls, survexblock.survexfile.path)
|
message = f' ! Value Error: Clino misread in line \'{sline.lower()}\' {datastar=} {self.datastar=} {ls=} in\n{survexblock}\n{survexblock.survexfile}\n{survexblock.survexfile.path}'
|
||||||
DataIssue.objects.create(parser='survexleg', message=message, url=get_offending_filename(survexblock.survexfile.path))
|
DataIssue.objects.create(parser='survexleg', message=message, url=get_offending_filename(survexblock.survexfile.path))
|
||||||
lclino = invalid_clino
|
lclino = invalid_clino
|
||||||
|
|
||||||
@ -668,17 +671,24 @@ class LoadingSurvex():
|
|||||||
datastar["tape"] = i-1
|
datastar["tape"] = i-1
|
||||||
self.datastar = copy.deepcopy(datastar)
|
self.datastar = copy.deepcopy(datastar)
|
||||||
return
|
return
|
||||||
elif ls[0] == "cartesian" or ls[0] == "nosurvey" or ls[0] == "diving" or ls[0] == "cylpolar" or ls[0] == "passage":
|
elif ls[0] == "passage" or ls[0] == "nosurvey" or ls[0] == "diving" or ls[0] == "cylpolar":
|
||||||
# message = " ! - *data {} blocks ignored. {}|{}" '{}' .format(ls[0].upper(), survexblock.name, survexblock.survexpath, args)
|
#message = " ! - *data {} blocks ignored. {}|{}" '{}' .format(ls[0].upper(), survexblock.name, survexblock.survexpath, args)
|
||||||
# print(message)
|
# print(message)
|
||||||
# print(message,file=sys.stderr)
|
#print(message,file=sys.stderr)
|
||||||
# DataIssue.objects.create(parser='survex', message=message)
|
#DataIssue.objects.create(parser='survex', message=message)
|
||||||
|
self.datastar["type"] = ls[0]
|
||||||
|
elif ls[0] == "cartesian": # We should not ignore this ?! Default for Germans ?
|
||||||
|
#message = " ! - *data {} blocks ignored. {}|{}" '{}' .format(ls[0].upper(), survexblock.name, survexblock.survexpath, args)
|
||||||
|
# print(message)
|
||||||
|
#print(message,file=sys.stderr)
|
||||||
|
#DataIssue.objects.create(parser='survex', message=message)
|
||||||
self.datastar["type"] = ls[0]
|
self.datastar["type"] = ls[0]
|
||||||
else:
|
else:
|
||||||
message = " ! - Unrecognised *data statement '{}' {}|{}".format(args, survexblock.name, survexblock.survexpath)
|
message = " ! - Unrecognised *data statement '{}' {}|{}".format(args, survexblock.name, survexblock.survexpath)
|
||||||
print(message)
|
print(message)
|
||||||
print(message,file=sys.stderr)
|
print(message,file=sys.stderr)
|
||||||
DataIssue.objects.create(parser='survex', message=message, url=get_offending_filename(survexblock.survexfile.path))
|
DataIssue.objects.create(parser='survex', message=message, url=get_offending_filename(survexblock.survexfile.path))
|
||||||
|
self.datastar["type"] = ls[0]
|
||||||
|
|
||||||
def LoadSurvexFlags(self, args):
|
def LoadSurvexFlags(self, args):
|
||||||
# Valid flags are DUPLICATE, SPLAY, and SURFACE, and a flag may be preceded with NOT to turn it off.
|
# Valid flags are DUPLICATE, SPLAY, and SURFACE, and a flag may be preceded with NOT to turn it off.
|
||||||
@ -779,11 +789,11 @@ class LoadingSurvex():
|
|||||||
# Yes we didn't find this cave, but we know it is a pending one. So not an error.
|
# Yes we didn't find this cave, but we know it is a pending one. So not an error.
|
||||||
# print(f'! ALREADY PENDING {caveid}',file=sys.stderr)
|
# print(f'! ALREADY PENDING {caveid}',file=sys.stderr)
|
||||||
return
|
return
|
||||||
|
|
||||||
message = f" ! Error: {caveid} not a cave nor ignorable. headpath:'{headpath}' while parsing '{includelabel=}.svx' at depth:[{len(depth)}]. ignore prefix list:'{self.ignoreprefix}'"
|
message = f" ! Warning: cave identifier '{caveid}' (guessed from file path) is not a known cave. Need to add to expoweb/cave_data/pending.txt ? In '{includelabel}.svx' at depth:[{len(depth)}]."
|
||||||
print("\n"+message)
|
print("\n"+message)
|
||||||
print("\n"+message,file=sys.stderr)
|
print("\n"+message,file=sys.stderr)
|
||||||
DataIssue.objects.create(parser='survex', message=message, url=get_offending_filename(headpath))
|
DataIssue.objects.create(parser='survex', message=message, url=get_offending_filename(includelabel))
|
||||||
print(f' # datastack in LoadSurvexFile:{includelabel} type:', end="",file=sys.stderr)
|
print(f' # datastack in LoadSurvexFile:{includelabel} type:', end="",file=sys.stderr)
|
||||||
for dict in self.datastack:
|
for dict in self.datastack:
|
||||||
print(f'<{dict["type"].upper()} >', end="",file=sys.stderr)
|
print(f'<{dict["type"].upper()} >', end="",file=sys.stderr)
|
||||||
@ -1190,6 +1200,7 @@ class LoadingSurvex():
|
|||||||
and reads only the *include and *begin and *end statements. It produces a linearised
|
and reads only the *include and *begin and *end statements. It produces a linearised
|
||||||
list of the include tree and detects blocks included more than once.
|
list of the include tree and detects blocks included more than once.
|
||||||
"""
|
"""
|
||||||
|
global stop_dup_warning
|
||||||
thissvxline = 0
|
thissvxline = 0
|
||||||
indent = " " * self.depthinclude
|
indent = " " * self.depthinclude
|
||||||
sys.stderr.flush();
|
sys.stderr.flush();
|
||||||
@ -1202,18 +1213,23 @@ class LoadingSurvex():
|
|||||||
|
|
||||||
if path in self.svxfileslist:
|
if path in self.svxfileslist:
|
||||||
# We have already used os.normpath() so this is OK. "/../" and "//" have been simplified already.
|
# We have already used os.normpath() so this is OK. "/../" and "//" have been simplified already.
|
||||||
message = f" * Warning. Duplicate detected. We have already seen this *include '{path}' from another survex file. Detected at callcount:{self.callcount} depth:{self.depthinclude}"
|
if stop_dup_warning:
|
||||||
print(message)
|
#print("D",end="", file=sys.stderr)
|
||||||
print(message,file=flinear)
|
pass
|
||||||
print("\n"+message,file=sys.stderr)
|
else:
|
||||||
DataIssue.objects.create(parser='survex', message=message, url=get_offending_filename(path))
|
message = f" * Warning. Duplicate detected. We have already seen this *include '{path}' from another survex file. Detected at callcount:{self.callcount} depth:{self.depthinclude}"
|
||||||
if self.svxfileslist.count(path) > 20:
|
|
||||||
message = " ! ERROR. Survex file already *included 20x. Probably an infinite loop so fix your *include statements that include this. Aborting. {}".format(path)
|
|
||||||
print(message)
|
print(message)
|
||||||
print(message,file=flinear)
|
print(message,file=flinear)
|
||||||
print(message,file=sys.stderr)
|
#print(message,file=sys.stderr)
|
||||||
|
DataIssue.objects.create(parser='survex', message=message, url=get_offending_filename(path))
|
||||||
|
if self.svxfileslist.count(path) > 2:
|
||||||
|
message = " ! ERROR. Should have been caught before this. Survex file already *included 2x. Probably an infinite loop so fix your *include statements that include this. Aborting. {}".format(path)
|
||||||
|
print(message)
|
||||||
|
print(message,file=flinear)
|
||||||
|
#print(message,file=sys.stderr)
|
||||||
DataIssue.objects.create(parser='survex', message=message, url=get_offending_filename(path))
|
DataIssue.objects.create(parser='survex', message=message, url=get_offending_filename(path))
|
||||||
return
|
return
|
||||||
|
return
|
||||||
self.svxfileslist.append(path)
|
self.svxfileslist.append(path)
|
||||||
|
|
||||||
try:
|
try:
|
||||||
@ -1254,7 +1270,7 @@ class LoadingSurvex():
|
|||||||
includepath = os.path.normpath(os.path.join(os.path.split(path)[0], re.sub(r"\.svx$", "", args)))
|
includepath = os.path.normpath(os.path.join(os.path.split(path)[0], re.sub(r"\.svx$", "", args)))
|
||||||
|
|
||||||
fullpath = os.path.join(settings.SURVEX_DATA, includepath + ".svx")
|
fullpath = os.path.join(settings.SURVEX_DATA, includepath + ".svx")
|
||||||
self.RunSurvexIfNeeded(os.path.join(settings.SURVEX_DATA, includepath))
|
self.RunSurvexIfNeeded(os.path.join(settings.SURVEX_DATA, includepath), path)
|
||||||
self.checkUniqueness(os.path.join(settings.SURVEX_DATA, includepath))
|
self.checkUniqueness(os.path.join(settings.SURVEX_DATA, includepath))
|
||||||
if os.path.isfile(fullpath):
|
if os.path.isfile(fullpath):
|
||||||
#--------------------------------------------------------
|
#--------------------------------------------------------
|
||||||
@ -1280,7 +1296,7 @@ class LoadingSurvex():
|
|||||||
self.depthinclude -= 1
|
self.depthinclude -= 1
|
||||||
#--------------------------------------------------------
|
#--------------------------------------------------------
|
||||||
else:
|
else:
|
||||||
message = " ! ERROR *include file not found for:'{}'".format(includepath)
|
message = f" ! ERROR *include file '{includepath}' not found, listed in '{fin.name}'"
|
||||||
print(message)
|
print(message)
|
||||||
print(message,file=sys.stderr)
|
print(message,file=sys.stderr)
|
||||||
DataIssue.objects.create(parser='survex', message=message, url=get_offending_filename(path))
|
DataIssue.objects.create(parser='survex', message=message, url=get_offending_filename(path))
|
||||||
@ -1329,7 +1345,7 @@ class LoadingSurvex():
|
|||||||
print(message)
|
print(message)
|
||||||
|
|
||||||
|
|
||||||
def RunSurvexIfNeeded(self,fullpath):
|
def RunSurvexIfNeeded(self,fullpath, calledpath):
|
||||||
now = time.time()
|
now = time.time()
|
||||||
cav_t = now - 365*24*3600
|
cav_t = now - 365*24*3600
|
||||||
log_t = now - 365*24*3600
|
log_t = now - 365*24*3600
|
||||||
@ -1368,7 +1384,7 @@ class LoadingSurvex():
|
|||||||
outputdir = Path(svxpath).parent
|
outputdir = Path(svxpath).parent
|
||||||
|
|
||||||
if not svxpath.is_file():
|
if not svxpath.is_file():
|
||||||
message = f' ! BAD survex file "{fullpath}" specified in *include (somewhere).. '
|
message = f' ! BAD survex file "{fullpath}" specified in *include in {calledpath} '
|
||||||
DataIssue.objects.create(parser='entrances', message=message)
|
DataIssue.objects.create(parser='entrances', message=message)
|
||||||
print(message)
|
print(message)
|
||||||
return
|
return
|
||||||
@ -1410,6 +1426,7 @@ class LoadingSurvex():
|
|||||||
def FindAndLoadSurvex(survexblockroot):
|
def FindAndLoadSurvex(survexblockroot):
|
||||||
"""Follows the *include links successively to find files in the whole include tree
|
"""Follows the *include links successively to find files in the whole include tree
|
||||||
"""
|
"""
|
||||||
|
global stop_dup_warning
|
||||||
print(' - redirecting stdout to svxblks.log...')
|
print(' - redirecting stdout to svxblks.log...')
|
||||||
stdout_orig = sys.stdout
|
stdout_orig = sys.stdout
|
||||||
# Redirect sys.stdout to the file
|
# Redirect sys.stdout to the file
|
||||||
@ -1419,22 +1436,21 @@ def FindAndLoadSurvex(survexblockroot):
|
|||||||
survexfileroot = survexblockroot.survexfile # i.e. SURVEX_TOPNAME only
|
survexfileroot = survexblockroot.survexfile # i.e. SURVEX_TOPNAME only
|
||||||
collatefilename = "_" + survexfileroot.path + ".svx"
|
collatefilename = "_" + survexfileroot.path + ".svx"
|
||||||
|
|
||||||
|
|
||||||
svx_scan = LoadingSurvex()
|
svx_scan = LoadingSurvex()
|
||||||
svx_scan.callcount = 0
|
svx_scan.callcount = 0
|
||||||
svx_scan.depthinclude = 0
|
svx_scan.depthinclude = 0
|
||||||
fullpathtotop = os.path.join(survexfileroot.survexdirectory.path, survexfileroot.path)
|
fullpathtotop = os.path.join(survexfileroot.survexdirectory.path, survexfileroot.path)
|
||||||
|
|
||||||
# Rather than do this check for the presence of the .log and .3d files synchronously here,
|
|
||||||
# we should instead run this in a separate thread asynchronously.
|
|
||||||
print(" - RunSurvexIfNeeded cavern on '{}'".format(fullpathtotop), file=sys.stderr)
|
print(" - RunSurvexIfNeeded cavern on '{}'".format(fullpathtotop), file=sys.stderr)
|
||||||
svx_scan.RunSurvexIfNeeded(fullpathtotop)
|
svx_scan.RunSurvexIfNeeded(fullpathtotop, fullpathtotop)
|
||||||
svx_scan.checkUniqueness(fullpathtotop)
|
svx_scan.checkUniqueness(fullpathtotop)
|
||||||
|
|
||||||
indent=""
|
indent=""
|
||||||
fcollate = open(collatefilename, 'w')
|
fcollate = open(collatefilename, 'w')
|
||||||
|
|
||||||
mem0 = get_process_memory()
|
mem0 = get_process_memory()
|
||||||
print(" - MEM:{:7.2f} MB START".format(mem0),file=sys.stderr)
|
print(" - MEM:{:7.2f} MB START".format(mem0),file=sys.stderr)
|
||||||
flinear = open('svxlinear.log', 'w')
|
flinear = open('svxlinear.log', 'w')
|
||||||
flinear.write(" - MEM:{:7.2f} MB START {}\n".format(mem0,survexfileroot.path))
|
flinear.write(" - MEM:{:7.2f} MB START {}\n".format(mem0,survexfileroot.path))
|
||||||
print(" ", file=sys.stderr,end='')
|
print(" ", file=sys.stderr,end='')
|
||||||
@ -1447,6 +1463,7 @@ def FindAndLoadSurvex(survexblockroot):
|
|||||||
from pstats import SortKey
|
from pstats import SortKey
|
||||||
pr = cProfile.Profile()
|
pr = cProfile.Profile()
|
||||||
pr.enable()
|
pr.enable()
|
||||||
|
#print(f"###{survexblockroot=} {survexfileroot.path=}",file=sys.stderr)
|
||||||
#----------------------------------------------------------------
|
#----------------------------------------------------------------
|
||||||
svx_scan.PushdownStackScan(survexblockroot, survexfileroot.path, finroot, flinear, fcollate)
|
svx_scan.PushdownStackScan(survexblockroot, survexfileroot.path, finroot, flinear, fcollate)
|
||||||
#----------------------------------------------------------------
|
#----------------------------------------------------------------
|
||||||
@ -1455,47 +1472,113 @@ def FindAndLoadSurvex(survexblockroot):
|
|||||||
ps = pstats.Stats(pr, stream=f)
|
ps = pstats.Stats(pr, stream=f)
|
||||||
ps.sort_stats(SortKey.CUMULATIVE)
|
ps.sort_stats(SortKey.CUMULATIVE)
|
||||||
ps.print_stats()
|
ps.print_stats()
|
||||||
|
|
||||||
flinear.write("{:2} {} *edulcni {}\n".format(svx_scan.depthinclude, indent, survexfileroot.path))
|
flinear.write("{:2} {} *edulcni {}\n".format(svx_scan.depthinclude, indent, survexfileroot.path))
|
||||||
fcollate.write(";*edulcni {}\n".format(survexfileroot.path))
|
fcollate.write(";*edulcni {}\n".format(survexfileroot.path))
|
||||||
mem1 = get_process_memory()
|
mem1 = get_process_memory()
|
||||||
flinear.write("\n - MEM:{:.2f} MB STOP {}\n".format(mem1,survexfileroot.path))
|
flinear.write("\n - MEM:{:.2f} MB STOP {}\n".format(mem1,survexfileroot.path))
|
||||||
flinear.write(" - MEM:{:.3f} MB USED\n".format(mem1-mem0))
|
flinear.write(" - MEM:{:.3f} MB ADDITIONALLY USED\n".format(mem1-mem0))
|
||||||
svxfileslist = svx_scan.svxfileslist
|
flinear.write(" - {:,} survex files in linear include list \n".format(len(svx_scan.svxfileslist)))
|
||||||
flinear.write(" - {:,} survex files in linear include list \n".format(len(svxfileslist)))
|
|
||||||
flinear.close()
|
print(" - {:,} runs of survex 'cavern' refreshing .3d files".format(svx_scan.caverncount),file=sys.stderr)
|
||||||
fcollate.close()
|
print(" - {:,} survex files from tree in linear include list".format(len(svx_scan.svxfileslist)),file=sys.stderr)
|
||||||
|
|
||||||
print("\n - {:,} runs of survex 'cavern' refreshing .3d files \n".format(svx_scan.caverncount),file=sys.stderr)
|
|
||||||
|
|
||||||
svx_scan = None # Hmm. Does this actually delete all the instance variables if they are lists, dicts etc.?
|
|
||||||
print("\n - {:,} survex files in linear include list \n".format(len(svxfileslist)),file=sys.stderr)
|
|
||||||
|
|
||||||
mem1 = get_process_memory()
|
mem1 = get_process_memory()
|
||||||
print(" - MEM:{:7.2f} MB END ".format(mem0),file=sys.stderr)
|
print(" - MEM:{:7.2f} MB END ".format(mem1),file=sys.stderr)
|
||||||
print(" - MEM:{:7.3f} MB USED".format(mem1-mem0),file=sys.stderr)
|
print(" - MEM:{:7.3f} MB ADDITIONALLY USED".format(mem1-mem0),file=sys.stderr)
|
||||||
|
|
||||||
a = []
|
#
|
||||||
|
# Process all the omitted files in :loser: with some exceptions
|
||||||
|
#
|
||||||
|
unseens = set()
|
||||||
b=[]
|
b=[]
|
||||||
|
|
||||||
for p in Path(settings.SURVEX_DATA).rglob('*.svx'):
|
for p in Path(settings.SURVEX_DATA).rglob('*.svx'):
|
||||||
if p.is_file():
|
if p.is_file():
|
||||||
po = p.relative_to(Path(settings.SURVEX_DATA))
|
po = p.relative_to(Path(settings.SURVEX_DATA))
|
||||||
pox = po.with_suffix('')
|
pox = po.with_suffix('')
|
||||||
if str(pox) not in svxfileslist:
|
if str(pox) not in svx_scan.svxfileslist:
|
||||||
print(f"[{pox}]", file=sys.stderr)
|
# print(f"[{pox}]", file=sys.stderr)
|
||||||
a.append(pox)
|
unseens.add(pox)
|
||||||
else:
|
else:
|
||||||
print("'", end=" ", file=sys.stderr)
|
|
||||||
b.append(pox)
|
b.append(pox)
|
||||||
|
|
||||||
|
if len(b) != len(svx_scan.svxfileslist):
|
||||||
|
print(f" ! Mismatch. {len(b)} survex files found which should be {len(svx_scan.svxfileslist)} in main tree)", file=sys.stderr)
|
||||||
|
|
||||||
|
excpts = ["surface/terrain", "kataster/kataster-boundaries", "template", "docs", "_unseens"]
|
||||||
|
removals = []
|
||||||
|
for x in unseens:
|
||||||
|
for o in excpts:
|
||||||
|
if str(x).strip().startswith(o):
|
||||||
|
removals.append(x)
|
||||||
|
for x in removals:
|
||||||
|
unseens.remove(x)
|
||||||
|
print(f" - {len(unseens)} survex files found which were not included in main tree. ({len(svx_scan.svxfileslist)} in main tree)", file=sys.stderr)
|
||||||
|
print(f" -- Now loading the previously-omitted survex files.", file=sys.stderr)
|
||||||
|
|
||||||
|
with open(Path(settings.SURVEX_DATA, '_unseens.svx'), 'w') as u:
|
||||||
|
u.write(f"; {len(unseens):,} survex files not *included by {settings.SURVEX_TOPNAME} (which are {len(svx_scan.svxfileslist):,} files)\n")
|
||||||
|
u.write(f"; autogenerated by parser/survex.py from databasereset.py on '{datetime.now(timezone.utc)}'\n")
|
||||||
|
u.write(f"; omitting any file beginning with {excpts}\n\n")
|
||||||
|
u.write(f"*begin unseens\n")
|
||||||
|
for x in sorted(unseens):
|
||||||
|
u.write(f" *include {x}\n")
|
||||||
|
u.write(f"*end unseens\n")
|
||||||
|
|
||||||
print("=>", len(a), len(b), len(svxfileslist), file=sys.stderr)
|
survexfileroot = survexblockroot.survexfile # i.e. SURVEX_TOPNAME only
|
||||||
|
|
||||||
|
omit_scan = LoadingSurvex()
|
||||||
|
omit_scan.callcount = 0
|
||||||
|
omit_scan.depthinclude = 0
|
||||||
|
fullpathtotop = os.path.join(survexfileroot.survexdirectory.path, '_unseens.svx')
|
||||||
|
|
||||||
for i in [0,1,2,3,4,5]:
|
# copy the list to prime the next pass through the files
|
||||||
print(f"==> [{svxfileslist[i]}]", file=sys.stderr)
|
omit_scan.svxfileslist = svx_scan.svxfileslist[:]
|
||||||
|
svx_scan.svxfileslist = [] # free memory
|
||||||
|
svx_scan = None # Hmm. Does this actually delete all the instance variables if they are lists, dicts etc.?
|
||||||
|
|
||||||
|
print(" - RunSurvexIfNeeded cavern on '{}'".format(fullpathtotop), file=sys.stderr)
|
||||||
|
omit_scan.RunSurvexIfNeeded(fullpathtotop, fullpathtotop)
|
||||||
|
omit_scan.checkUniqueness(fullpathtotop)
|
||||||
|
|
||||||
|
mem0 = get_process_memory()
|
||||||
|
print(" - MEM:{:7.2f} MB START '_unseens'".format(mem0),file=sys.stderr)
|
||||||
|
#flinear = open('svxlinear.log', 'w')
|
||||||
|
flinear.write(f" - MEM:{mem0:7.2f} MB START '_unseens'\n")
|
||||||
|
print(" ", file=sys.stderr,end='')
|
||||||
|
|
||||||
|
finroot = open(fullpathtotop)
|
||||||
|
fcollate.write(";*include {}\n".format('_unseens.svx'))
|
||||||
|
flinear.write("{:2} {} *include {}\n".format(omit_scan.depthinclude, indent, '_unseens'))
|
||||||
|
stop_dup_warning = True
|
||||||
|
#----------------------------------------------------------------
|
||||||
|
omit_scan.PushdownStackScan(survexblockroot, '_unseens', finroot, flinear, fcollate)
|
||||||
|
#----------------------------------------------------------------
|
||||||
|
stop_dup_warning = False
|
||||||
|
|
||||||
|
flinear.write("{:2} {} *edulcni {}\n".format(omit_scan.depthinclude, indent, '_unseens'))
|
||||||
|
fcollate.write(";*edulcni {}\n".format('_unseens.svx'))
|
||||||
|
mem1 = get_process_memory()
|
||||||
|
flinear.write("\n - MEM:{:.2f} MB STOP {} OMIT\n".format(mem1,'_unseens.svx'))
|
||||||
|
flinear.write(" - MEM:{:.3f} MB ADDITIONALLY USED OMIT\n".format(mem1-mem0))
|
||||||
|
flinear.write(" - {:,} survex files in linear include list OMIT \n".format(len(omit_scan.svxfileslist)))
|
||||||
|
|
||||||
svxfileslist = [] # free memory
|
flinear.close()
|
||||||
|
fcollate.close()
|
||||||
|
|
||||||
|
print("\n - {:,} runs of survex 'cavern' refreshing .3d files in the unseen list \n".format(omit_scan.caverncount),file=sys.stderr)
|
||||||
|
|
||||||
|
print("\n - {:,} survex files in linear include list including previously unseen ones \n".format(len(omit_scan.svxfileslist)),file=sys.stderr)
|
||||||
|
omit_scan = None # Hmm. Does this actually delete all the instance variables if they are lists, dicts etc.?
|
||||||
|
|
||||||
|
mem1 = get_process_memory()
|
||||||
|
print(" - MEM:{:7.2f} MB END ".format(mem1),file=sys.stderr)
|
||||||
|
print(" - MEM:{:7.3f} MB ADDITIONALLY USED".format(mem1-mem0),file=sys.stderr)
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
# Before doing this, it would be good to identify the *equate and *entrance we need that are relevant to the
|
# Before doing this, it would be good to identify the *equate and *entrance we need that are relevant to the
|
||||||
# entrance locations currently loaded after this by LoadPos(), but could better be done before ?
|
# entrance locations currently loaded after this by LoadPos(), but could better be done before ?
|
||||||
@ -1503,6 +1586,8 @@ def FindAndLoadSurvex(survexblockroot):
|
|||||||
|
|
||||||
print('\n - Loading All Survex Blocks (LinearLoad)',file=sys.stderr)
|
print('\n - Loading All Survex Blocks (LinearLoad)',file=sys.stderr)
|
||||||
svx_load = LoadingSurvex()
|
svx_load = LoadingSurvex()
|
||||||
|
mem1 = get_process_memory()
|
||||||
|
print(" - MEM:{:7.2f} MB after creating empty loading object.".format(mem1),file=sys.stderr)
|
||||||
|
|
||||||
svx_load.survexdict[survexfileroot.survexdirectory] = []
|
svx_load.survexdict[survexfileroot.survexdirectory] = []
|
||||||
svx_load.survexdict[survexfileroot.survexdirectory].append(survexfileroot)
|
svx_load.survexdict[survexfileroot.survexdirectory].append(survexfileroot)
|
||||||
@ -1525,7 +1610,7 @@ def FindAndLoadSurvex(survexblockroot):
|
|||||||
# ps.print_stats()
|
# ps.print_stats()
|
||||||
|
|
||||||
print("\n - MEM:{:7.2f} MB STOP".format(mem1),file=sys.stderr)
|
print("\n - MEM:{:7.2f} MB STOP".format(mem1),file=sys.stderr)
|
||||||
print(" - MEM:{:7.3f} MB USED".format(mem1-mem0),file=sys.stderr)
|
print(" - MEM:{:7.3f} MB ADDITIONALLY USED".format(mem1-mem0),file=sys.stderr)
|
||||||
|
|
||||||
# Close the logging file, Restore sys.stdout to our old saved file handle
|
# Close the logging file, Restore sys.stdout to our old saved file handle
|
||||||
sys.stdout.close()
|
sys.stdout.close()
|
||||||
@ -1536,12 +1621,12 @@ def FindAndLoadSurvex(survexblockroot):
|
|||||||
legsnumber = svx_load.legsnumber
|
legsnumber = svx_load.legsnumber
|
||||||
mem1 = get_process_memory()
|
mem1 = get_process_memory()
|
||||||
|
|
||||||
print(" - Number of SurvexDirectories: {}".format(len(svx_load.survexdict)))
|
print(" - Number of SurvexDirectories: {:,}".format(len(svx_load.survexdict)))
|
||||||
tf=0
|
tf=0
|
||||||
for d in svx_load.survexdict:
|
for d in svx_load.survexdict:
|
||||||
tf += len(svx_load.survexdict[d])
|
tf += len(svx_load.survexdict[d])
|
||||||
print(" - Number of SurvexFiles: {}".format(tf))
|
print(f" - Number of SurvexFiles: {tf:,}")
|
||||||
print(f" - Number of Survex legs: {legsnumber}")
|
print(f" - Number of Survex legs: {legsnumber:,}")
|
||||||
svx_load = None
|
svx_load = None
|
||||||
|
|
||||||
return legsnumber
|
return legsnumber
|
||||||
@ -1562,6 +1647,14 @@ def MakeSurvexFileRoot():
|
|||||||
fileroot.survexdirectory = directoryroot # i.e. SURVEX_DATA/SURVEX_TOPNAME
|
fileroot.survexdirectory = directoryroot # i.e. SURVEX_DATA/SURVEX_TOPNAME
|
||||||
fileroot.save() # mutually dependent objects need a double-save like this
|
fileroot.save() # mutually dependent objects need a double-save like this
|
||||||
return fileroot
|
return fileroot
|
||||||
|
|
||||||
|
def MakeOmitFileRoot(fn):
|
||||||
|
"""Returns a file_object.path = _unseens.svx associated with directory_object.path = SURVEX_DATA
|
||||||
|
"""
|
||||||
|
fileroot = SurvexFile(path=fn, cave=None)
|
||||||
|
fileroot.survexdirectory = SurvexDirectory.objects.get(path=settings.SURVEX_DATA)
|
||||||
|
fileroot.save()
|
||||||
|
return fileroot
|
||||||
|
|
||||||
def LoadSurvexBlocks():
|
def LoadSurvexBlocks():
|
||||||
|
|
||||||
@ -1571,7 +1664,7 @@ def LoadSurvexBlocks():
|
|||||||
SurvexDirectory.objects.all().delete()
|
SurvexDirectory.objects.all().delete()
|
||||||
SurvexPersonRole.objects.all().delete()
|
SurvexPersonRole.objects.all().delete()
|
||||||
SurvexStation.objects.all().delete()
|
SurvexStation.objects.all().delete()
|
||||||
print(" - survex Data Issues flushed")
|
print(" - survex Data Issues flushed")
|
||||||
DataIssue.objects.filter(parser='survex').delete()
|
DataIssue.objects.filter(parser='survex').delete()
|
||||||
DataIssue.objects.filter(parser='svxdate').delete()
|
DataIssue.objects.filter(parser='svxdate').delete()
|
||||||
DataIssue.objects.filter(parser='survexleg').delete()
|
DataIssue.objects.filter(parser='survexleg').delete()
|
||||||
@ -1588,9 +1681,12 @@ def LoadSurvexBlocks():
|
|||||||
# fix by restarting db on server
|
# fix by restarting db on server
|
||||||
# sudo service mariadb stop
|
# sudo service mariadb stop
|
||||||
# sudo service mariadb start
|
# sudo service mariadb start
|
||||||
|
|
||||||
|
|
||||||
survexblockroot.save()
|
survexblockroot.save()
|
||||||
|
|
||||||
|
omitsfileroot = MakeOmitFileRoot("_unseens.svx")
|
||||||
|
survexomitsroot = SurvexBlock(name=OMITBLOCK, survexpath="", cave=None, survexfile=omitsfileroot,
|
||||||
|
legsall=0, legslength=0.0)
|
||||||
|
survexomitsroot.save()
|
||||||
|
|
||||||
print(' - Loading Survex Blocks...')
|
print(' - Loading Survex Blocks...')
|
||||||
memstart = get_process_memory()
|
memstart = get_process_memory()
|
||||||
|
Loading…
Reference in New Issue
Block a user