mirror of
https://expo.survex.com/repositories/troggle/.git
synced 2025-12-15 13:27:11 +00:00
start refactor survex import
This commit is contained in:
@@ -3,6 +3,7 @@ import os
|
|||||||
import datetime
|
import datetime
|
||||||
import logging
|
import logging
|
||||||
import re
|
import re
|
||||||
|
import resource
|
||||||
from subprocess import call
|
from subprocess import call
|
||||||
|
|
||||||
from urllib.parse import urljoin
|
from urllib.parse import urljoin
|
||||||
@@ -22,6 +23,11 @@ from django.template import Context, loader
|
|||||||
|
|
||||||
import troggle.core.models_survex
|
import troggle.core.models_survex
|
||||||
|
|
||||||
|
def get_process_memory():
|
||||||
|
usage=resource.getrusage(resource.RUSAGE_SELF)
|
||||||
|
return usage[2]/1024.0
|
||||||
|
|
||||||
|
|
||||||
def get_related_by_wikilinks(wiki_text):
|
def get_related_by_wikilinks(wiki_text):
|
||||||
found=re.findall(settings.QM_PATTERN,wiki_text)
|
found=re.findall(settings.QM_PATTERN,wiki_text)
|
||||||
res=[]
|
res=[]
|
||||||
|
|||||||
@@ -81,13 +81,6 @@ class SurvexStation(models.Model):
|
|||||||
else:
|
else:
|
||||||
return r
|
return r
|
||||||
|
|
||||||
class SurvexLeg():
|
|
||||||
"""No longer a models.Model subclass, so no longer a database table
|
|
||||||
"""
|
|
||||||
tape = 0.0
|
|
||||||
compass = 0.0
|
|
||||||
clino = 0.0
|
|
||||||
|
|
||||||
#
|
#
|
||||||
# Single SurvexBlock
|
# Single SurvexBlock
|
||||||
#
|
#
|
||||||
|
|||||||
@@ -12,7 +12,7 @@ from django.views.generic.list import ListView
|
|||||||
|
|
||||||
from troggle.core.models import Expedition, Person, PersonExpedition
|
from troggle.core.models import Expedition, Person, PersonExpedition
|
||||||
from troggle.core.models_caves import Cave, LogbookEntry
|
from troggle.core.models_caves import Cave, LogbookEntry
|
||||||
from troggle.core.models_survex import SurvexLeg, SurvexBlock
|
from troggle.core.models_survex import SurvexBlock
|
||||||
|
|
||||||
import troggle.settings as settings
|
import troggle.settings as settings
|
||||||
|
|
||||||
@@ -106,7 +106,6 @@ def stats(request):
|
|||||||
legsbyexpo.append((expedition, {"nsurvexlegs": "{:,}".format(legsyear),
|
legsbyexpo.append((expedition, {"nsurvexlegs": "{:,}".format(legsyear),
|
||||||
"survexleglength":"{:,.0f}".format(survexleglength)}))
|
"survexleglength":"{:,.0f}".format(survexleglength)}))
|
||||||
legsbyexpo.reverse()
|
legsbyexpo.reverse()
|
||||||
#survexlegs = SurvexLeg.objects.all()
|
|
||||||
|
|
||||||
renderDict = {**statsDict, **{ "nsurvexlegs": "{:,}".format(nimportlegs), "totalsurvexlength":totalsurvexlength/1000, "addupsurvexlength":addupsurvexlength/1000, "legsbyexpo":legsbyexpo }} # new syntax
|
renderDict = {**statsDict, **{ "nsurvexlegs": "{:,}".format(nimportlegs), "totalsurvexlength":totalsurvexlength/1000, "addupsurvexlength":addupsurvexlength/1000, "legsbyexpo":legsbyexpo }} # new syntax
|
||||||
return render(request,'statistics.html', renderDict)
|
return render(request,'statistics.html', renderDict)
|
||||||
|
|||||||
@@ -2,7 +2,6 @@ import sys
|
|||||||
import os
|
import os
|
||||||
import re
|
import re
|
||||||
import time
|
import time
|
||||||
import resource
|
|
||||||
|
|
||||||
from datetime import datetime, timedelta
|
from datetime import datetime, timedelta
|
||||||
from subprocess import call, Popen, PIPE
|
from subprocess import call, Popen, PIPE
|
||||||
@@ -17,35 +16,71 @@ import troggle.core.models_survex as models_survex
|
|||||||
from troggle.parsers.people import GetPersonExpeditionNameLookup
|
from troggle.parsers.people import GetPersonExpeditionNameLookup
|
||||||
from troggle.core.views_caves import MapLocations
|
from troggle.core.views_caves import MapLocations
|
||||||
|
|
||||||
|
|
||||||
"""A 'survex block' is a *begin...*end set of cave data.
|
|
||||||
A 'scansfolder' is what we today call a "survey scans folder" or a "wallet".
|
|
||||||
"""
|
|
||||||
|
|
||||||
rx_braskets= re.compile(r"[()]")
|
|
||||||
rx_line_length = re.compile(r"[\d\-+.]+$")
|
|
||||||
survexlegsalllength = 0.0
|
|
||||||
survexlegsnumber = 0
|
|
||||||
survexblockroot = None
|
survexblockroot = None
|
||||||
ROOTBLOCK = "rootblock"
|
ROOTBLOCK = "rootblock"
|
||||||
|
|
||||||
|
class SurvexLeg():
|
||||||
|
"""No longer a models.Model subclass, so no longer a database table
|
||||||
|
"""
|
||||||
|
tape = 0.0
|
||||||
|
compass = 0.0
|
||||||
|
clino = 0.0
|
||||||
|
|
||||||
def LoadSurvexLineLeg(survexblock, stardata, sline, comment, cave):
|
class LoadSurvex():
|
||||||
|
"""A 'survex block' is a *begin...*end set of cave data.
|
||||||
|
A survex file can contain many begin-end blocks, which can be nested, and which can *include
|
||||||
|
other survex files.
|
||||||
|
A 'scansfolder' is what we today call a "survey scans folder" or a "wallet".
|
||||||
|
"""
|
||||||
|
|
||||||
|
# This interprets the survex "*data normal" command which sets out the order of the fields in the data, e.g.
|
||||||
|
# *DATA normal from to length gradient bearing ignore ignore ignore ignore
|
||||||
|
stardatadefault = {"type":"normal", "t":"leg", "from":0, "to":1, "tape":2, "compass":3, "clino":4}
|
||||||
|
stardataparamconvert = {"length":"tape", "bearing":"compass", "gradient":"clino"}
|
||||||
|
|
||||||
|
rx_braskets= re.compile(r"[()]")
|
||||||
|
rx_linelen = re.compile(r"[\d\-+.]+$")
|
||||||
|
rx_team = re.compile(r"(?i)(Insts|Notes|Tape|Dog|Useless|Pics|Helper|Disto|Consultant)\s+(.*)$")
|
||||||
|
rx_person = re.compile(r"(?i) and | / |, | & | \+ |^both$|^none$")
|
||||||
|
rx_qm = re.compile(r'^\s*QM(\d)\s+?([a-dA-DxX])\s+([\w\-]+)\.(\d+)\s+(([\w\-]+)\.(\d+)|\-)\s+(.+)$')
|
||||||
|
# remember there is also QM_PATTERN used in views_other and set in settings.py
|
||||||
|
|
||||||
|
rx_comment = re.compile(r"([^;]*?)\s*(?:;\s*(.*))?\n?$")
|
||||||
|
rx_ref = re.compile(r'.*?ref.*?(\d+)\s*#\s*(X)?\s*(\d+)')
|
||||||
|
rx_star = re.compile(r'\s*\*[\s,]*(\w+)\s*(.*?)\s*(?:;.*)?$')
|
||||||
|
# years from 1960 to 2039
|
||||||
|
rx_starref = re.compile(r'(?i)^\s*\*ref[\s.:]*((?:19[6789]\d)|(?:20[0123]\d))\s*#?\s*(X)?\s*(.*?\d+.*?)$')
|
||||||
|
# rx_starref = re.compile("""?x # VERBOSE mode - can't get this to work
|
||||||
|
# ^\s*\*ref # look for *ref at start of line
|
||||||
|
# [\s.:]* # some spaces, stops or colons
|
||||||
|
# ((?:19[6789]\d)|(?:20[0123]\d)) # a date from 1960 to 2039 - captured as one field
|
||||||
|
# \s*# # spaces then hash separator
|
||||||
|
# ?\s*(X) # optional X - captured
|
||||||
|
# ?\s*(.*?\d+.*?) # maybe a space, then at least one digit in the string - captured
|
||||||
|
# $(?i)""", re.X) # the end (do the whole thing case insensitively)
|
||||||
|
|
||||||
|
survexlegsalllength = 0.0
|
||||||
|
survexlegsnumber = 0
|
||||||
|
insp = ""
|
||||||
|
callcount = 0
|
||||||
|
|
||||||
|
def __init__(self):
|
||||||
|
pass
|
||||||
|
|
||||||
|
def LoadSurvexLineLeg(self,survexblock, stardata, sline, comment):
|
||||||
"""This reads compass, clino and tape data but only keeps the tape lengths,
|
"""This reads compass, clino and tape data but only keeps the tape lengths,
|
||||||
the rest is discarded after error-checking.
|
the rest is discarded after error-checking.
|
||||||
"""
|
"""
|
||||||
global survexlegsalllength
|
|
||||||
global survexlegsnumber
|
|
||||||
ls = sline.lower().split()
|
ls = sline.lower().split()
|
||||||
survexleg = models_survex.SurvexLeg()
|
survexleg = SurvexLeg()
|
||||||
# this next fails for two surface survey svx files which use / for decimal point
|
# this next fails for two surface survey svx files which use / for decimal point
|
||||||
# e.g. '29/09' in the tape measurement, or use decimals but in brackets, e.g. (06.05)
|
# e.g. '29/09' in the tape measurement, or use decimals but in brackets, e.g. (06.05)
|
||||||
if stardata["type"] == "normal":
|
if stardata["type"] == "normal":
|
||||||
tape = rx_braskets.sub("",ls[stardata["tape"]])
|
tape = self.rx_braskets.sub("",ls[stardata["tape"]])
|
||||||
tape = tape.replace("/",".")
|
tape = tape.replace("/",".")
|
||||||
try:
|
try:
|
||||||
survexleg.tape = float(tape)
|
survexleg.tape = float(tape)
|
||||||
survexlegsnumber += 1
|
self.survexlegsnumber += 1
|
||||||
except ValueError:
|
except ValueError:
|
||||||
print(("! Tape misread in", survexblock.survexfile.path))
|
print(("! Tape misread in", survexblock.survexfile.path))
|
||||||
print((" Stardata:", stardata))
|
print((" Stardata:", stardata))
|
||||||
@@ -89,14 +124,11 @@ def LoadSurvexLineLeg(survexblock, stardata, sline, comment, cave):
|
|||||||
survexleg.compass = 1000
|
survexleg.compass = 1000
|
||||||
survexleg.clino = -90.0
|
survexleg.clino = -90.0
|
||||||
else:
|
else:
|
||||||
assert rx_line_length.match(lcompass), ls
|
assert self.rx_linelen.match(lcompass), ls
|
||||||
assert rx_line_length.match(lclino) and lclino != "-", ls
|
assert self.rx_linelen.match(lclino) and lclino != "-", ls
|
||||||
survexleg.compass = float(lcompass)
|
survexleg.compass = float(lcompass)
|
||||||
survexleg.clino = float(lclino)
|
survexleg.clino = float(lclino)
|
||||||
|
|
||||||
if cave:
|
|
||||||
survexleg.cave = cave
|
|
||||||
|
|
||||||
# No need to save as we are measuring lengths only on parsing now.
|
# No need to save as we are measuring lengths only on parsing now.
|
||||||
# delete the object so that django autosaving doesn't save it.
|
# delete the object so that django autosaving doesn't save it.
|
||||||
survexleg = None
|
survexleg = None
|
||||||
@@ -105,50 +137,17 @@ def LoadSurvexLineLeg(survexblock, stardata, sline, comment, cave):
|
|||||||
if itape:
|
if itape:
|
||||||
try:
|
try:
|
||||||
survexblock.totalleglength += float(ls[itape])
|
survexblock.totalleglength += float(ls[itape])
|
||||||
survexlegsalllength += float(ls[itape])
|
self.survexlegsalllength += float(ls[itape])
|
||||||
except ValueError:
|
except ValueError:
|
||||||
print("! Length not added")
|
print("! Length not added")
|
||||||
# No need to save as we are measuring lengths only on parsing now.
|
# No need to save as we are measuring lengths only on parsing now.
|
||||||
|
|
||||||
|
|
||||||
# def LoadSurvexEquate(survexblock, sline):
|
def LoadSurvexLinePassage(self,survexblock, stardata, sline, comment):
|
||||||
# #print sline #
|
|
||||||
# stations = sline.split()
|
|
||||||
# assert len(stations) > 1
|
|
||||||
# for station in stations:
|
|
||||||
# survexblock.MakeSurvexStation(station)
|
|
||||||
|
|
||||||
|
|
||||||
def LoadSurvexLinePassage(survexblock, stardata, sline, comment):
|
|
||||||
# do not import this: *data passage.. data which is LRUD not tape/compass/clino
|
# do not import this: *data passage.. data which is LRUD not tape/compass/clino
|
||||||
pass
|
pass
|
||||||
|
|
||||||
# This interprets the survex "*data normal" command which sets out the order of the fields in the data, e.g.
|
def RecursiveLoad(self,survexblock, survexfile, fin):
|
||||||
# *DATA normal from to length gradient bearing ignore ignore ignore ignore
|
|
||||||
stardatadefault = {"type":"normal", "t":"leg", "from":0, "to":1, "tape":2, "compass":3, "clino":4}
|
|
||||||
stardataparamconvert = {"length":"tape", "bearing":"compass", "gradient":"clino"}
|
|
||||||
|
|
||||||
rx_comment = re.compile(r"([^;]*?)\s*(?:;\s*(.*))?\n?$")
|
|
||||||
rx_ref = re.compile(r'.*?ref.*?(\d+)\s*#\s*(X)?\s*(\d+)')
|
|
||||||
rx_star = re.compile(r'\s*\*[\s,]*(\w+)\s*(.*?)\s*(?:;.*)?$')
|
|
||||||
# years from 1960 to 2039
|
|
||||||
rx_starref = re.compile(r'(?i)^\s*\*ref[\s.:]*((?:19[6789]\d)|(?:20[0123]\d))\s*#?\s*(X)?\s*(.*?\d+.*?)$')
|
|
||||||
# rx_starref = re.compile("""?x # VERBOSE mode - can't get this to work
|
|
||||||
# ^\s*\*ref # look for *ref at start of line
|
|
||||||
# [\s.:]* # some spaces, stops or colons
|
|
||||||
# ((?:19[6789]\d)|(?:20[0123]\d)) # a date from 1960 to 2039 - captured as one field
|
|
||||||
# \s*# # spaces then hash separator
|
|
||||||
# ?\s*(X) # optional X - captured
|
|
||||||
# ?\s*(.*?\d+.*?) # maybe a space, then at least one digit in the string - captured
|
|
||||||
# $(?i)""", re.X) # the end (do the whole thing case insensitively)
|
|
||||||
|
|
||||||
rx_team = re.compile(r"(?i)(Insts|Notes|Tape|Dog|Useless|Pics|Helper|Disto|Consultant)\s+(.*)$")
|
|
||||||
rx_person = re.compile(r"(?i) and | / |, | & | \+ |^both$|^none$")
|
|
||||||
rx_qm = re.compile(r'^\s*QM(\d)\s+?([a-dA-DxX])\s+([\w\-]+)\.(\d+)\s+(([\w\-]+)\.(\d+)|\-)\s+(.+)$')
|
|
||||||
|
|
||||||
insp = ""
|
|
||||||
callcount = 0
|
|
||||||
def RecursiveLoad(survexblock, survexfile, fin):
|
|
||||||
"""Follows the *include links in all the survex files from the root file 1623.svx
|
"""Follows the *include links in all the survex files from the root file 1623.svx
|
||||||
and reads in the survex blocks, other data and the wallet references (scansfolder) as it
|
and reads in the survex blocks, other data and the wallet references (scansfolder) as it
|
||||||
goes. This part of the data import process is where the maximum memory is used and where it
|
goes. This part of the data import process is where the maximum memory is used and where it
|
||||||
@@ -156,20 +155,19 @@ def RecursiveLoad(survexblock, survexfile, fin):
|
|||||||
"""
|
"""
|
||||||
iblankbegins = 0
|
iblankbegins = 0
|
||||||
text = [ ]
|
text = [ ]
|
||||||
stardata = stardatadefault
|
stardata = self.stardatadefault
|
||||||
teammembers = [ ]
|
teammembers = [ ]
|
||||||
global insp
|
insp =self.insp
|
||||||
global callcount
|
blocklegs = self.survexlegsnumber
|
||||||
global survexlegsnumber
|
|
||||||
|
|
||||||
print(insp+" - MEM:{:.3f} Reading. parent:{} <> {} ".format(get_process_memory(),survexblock.survexfile.path,survexfile.path))
|
print(insp+" - MEM:{:.3f} Reading. parent:{} <> {} ".format(models.get_process_memory(),survexblock.survexfile.path,survexfile.path))
|
||||||
stamp = datetime.now()
|
stamp = datetime.now()
|
||||||
lineno = 0
|
lineno = 0
|
||||||
|
|
||||||
sys.stderr.flush();
|
sys.stderr.flush();
|
||||||
callcount +=1
|
self.callcount +=1
|
||||||
if callcount >=10:
|
if self.callcount >=10:
|
||||||
callcount=0
|
self.callcount=0
|
||||||
print(".", file=sys.stderr,end='')
|
print(".", file=sys.stderr,end='')
|
||||||
|
|
||||||
# Try to find the cave in the DB if not use the string as before
|
# Try to find the cave in the DB if not use the string as before
|
||||||
@@ -186,9 +184,9 @@ def RecursiveLoad(survexblock, survexfile, fin):
|
|||||||
for svxline in svxlines:
|
for svxline in svxlines:
|
||||||
lineno += 1
|
lineno += 1
|
||||||
# break the line at the comment
|
# break the line at the comment
|
||||||
sline, comment = rx_comment.match(svxline.strip()).groups()
|
sline, comment = self.rx_comment.match(svxline.strip()).groups()
|
||||||
# detect ref line pointing to the scans directory
|
# detect ref line pointing to the scans directory
|
||||||
mref = comment and rx_ref.match(comment)
|
mref = comment and self.rx_ref.match(comment)
|
||||||
if mref:
|
if mref:
|
||||||
yr, letterx, wallet = mref.groups()
|
yr, letterx, wallet = mref.groups()
|
||||||
if not letterx:
|
if not letterx:
|
||||||
@@ -209,11 +207,11 @@ def RecursiveLoad(survexblock, survexfile, fin):
|
|||||||
|
|
||||||
# This whole section should be moved if we can have *QM become a proper survex command
|
# This whole section should be moved if we can have *QM become a proper survex command
|
||||||
# Spec of QM in SVX files, currently commented out need to add to survex
|
# Spec of QM in SVX files, currently commented out need to add to survex
|
||||||
# needs to match rx_qm
|
# needs to match self.rx_qm
|
||||||
# ;Serial number grade(A/B/C/D/X) nearest-station resolution-station description
|
# ;Serial number grade(A/B/C/D/X) nearest-station resolution-station description
|
||||||
# ;QM1 a hobnob_hallway_2.42 hobnob-hallway_3.42 junction of keyhole passage
|
# ;QM1 a hobnob_hallway_2.42 hobnob-hallway_3.42 junction of keyhole passage
|
||||||
# ;QM1 a hobnob_hallway_2.42 - junction of keyhole passage
|
# ;QM1 a hobnob_hallway_2.42 - junction of keyhole passage
|
||||||
qmline = comment and rx_qm.match(comment)
|
qmline = comment and self.rx_qm.match(comment)
|
||||||
if qmline:
|
if qmline:
|
||||||
qm_no = qmline.group(1)
|
qm_no = qmline.group(1)
|
||||||
qm_grade = qmline.group(2)
|
qm_grade = qmline.group(2)
|
||||||
@@ -252,7 +250,7 @@ def RecursiveLoad(survexblock, survexfile, fin):
|
|||||||
continue
|
continue
|
||||||
|
|
||||||
# detect the star ref command
|
# detect the star ref command
|
||||||
mstar = rx_starref.match(sline)
|
mstar = self.rx_starref.match(sline)
|
||||||
if mstar:
|
if mstar:
|
||||||
yr,letterx,wallet = mstar.groups()
|
yr,letterx,wallet = mstar.groups()
|
||||||
if not letterx:
|
if not letterx:
|
||||||
@@ -275,13 +273,14 @@ def RecursiveLoad(survexblock, survexfile, fin):
|
|||||||
continue
|
continue
|
||||||
|
|
||||||
# detect the star command
|
# detect the star command
|
||||||
mstar = rx_star.match(sline)
|
mstar = self.rx_star.match(sline)
|
||||||
if not mstar:
|
if not mstar:
|
||||||
if "from" in stardata:
|
if "from" in stardata:
|
||||||
LoadSurvexLineLeg(survexblock, stardata, sline, comment, survexfile.cave)
|
self.LoadSurvexLineLeg(survexblock, stardata, sline, comment)
|
||||||
pass
|
pass
|
||||||
elif stardata["type"] == "passage":
|
elif stardata["type"] == "passage":
|
||||||
LoadSurvexLinePassage(survexblock, stardata, sline, comment)
|
pass
|
||||||
|
#self.LoadSurvexLinePassage(survexblock, stardata, sline, comment)
|
||||||
#Missing "station" in stardata.
|
#Missing "station" in stardata.
|
||||||
continue
|
continue
|
||||||
|
|
||||||
@@ -308,11 +307,14 @@ def RecursiveLoad(survexblock, survexfile, fin):
|
|||||||
if includesurvexfile.exists():
|
if includesurvexfile.exists():
|
||||||
survexblock.save()
|
survexblock.save()
|
||||||
fininclude = includesurvexfile.OpenFile()
|
fininclude = includesurvexfile.OpenFile()
|
||||||
insp += "> "
|
self.survexlegsnumber = blocklegs
|
||||||
RecursiveLoad(survexblock, includesurvexfile, fininclude)
|
self.insp += "> "
|
||||||
|
self.RecursiveLoad(survexblock, includesurvexfile, fininclude)
|
||||||
#--------------------------------------------------------
|
#--------------------------------------------------------
|
||||||
fininclude.close()
|
fininclude.close()
|
||||||
insp = insp[2:]
|
self.insp = self.insp[2:]
|
||||||
|
insp = self.insp
|
||||||
|
blocklegs = self.survexlegsnumber
|
||||||
else:
|
else:
|
||||||
print((insp+' ! ERROR *include file not found for %s' % includesurvexfile))
|
print((insp+' ! ERROR *include file not found for %s' % includesurvexfile))
|
||||||
|
|
||||||
@@ -333,7 +335,7 @@ def RecursiveLoad(survexblock, survexfile, fin):
|
|||||||
else:
|
else:
|
||||||
print((insp+' - No match (b) for %s' % newsvxpath))
|
print((insp+' - No match (b) for %s' % newsvxpath))
|
||||||
|
|
||||||
previousnlegs = survexlegsnumber
|
previousnlegs = blocklegs
|
||||||
name = line.lower()
|
name = line.lower()
|
||||||
print(insp+' - Begin found for:{}, creating new SurvexBlock '.format(name))
|
print(insp+' - Begin found for:{}, creating new SurvexBlock '.format(name))
|
||||||
survexblockdown = models_survex.SurvexBlock(name=name, parent=survexblock,
|
survexblockdown = models_survex.SurvexBlock(name=name, parent=survexblock,
|
||||||
@@ -344,12 +346,15 @@ def RecursiveLoad(survexblock, survexfile, fin):
|
|||||||
survexblock.save()
|
survexblock.save()
|
||||||
survexblock = survexblockdown
|
survexblock = survexblockdown
|
||||||
print(insp+" - ENTERING nested *begin/*end block: {}".format(name))
|
print(insp+" - ENTERING nested *begin/*end block: {}".format(name))
|
||||||
insp += "> "
|
self.survexlegsnumber = blocklegs
|
||||||
RecursiveLoad(survexblockdown, survexfile, fin)
|
self.insp += "> "
|
||||||
|
self.RecursiveLoad(survexblockdown, survexfile, fin)
|
||||||
#--------------------------------------------------------
|
#--------------------------------------------------------
|
||||||
# do not close the file as there may be more blocks in this one
|
# do not close the file as there may be more blocks in this one
|
||||||
# and it is re-read afresh with every nested begin-end block.
|
# and it is re-read afresh with every nested begin-end block.
|
||||||
insp = insp[2:]
|
self.insp = self.insp[2:]
|
||||||
|
insp = self.insp
|
||||||
|
blocklegs = self.survexlegsnumber
|
||||||
else:
|
else:
|
||||||
iblankbegins += 1
|
iblankbegins += 1
|
||||||
|
|
||||||
@@ -358,8 +363,8 @@ def RecursiveLoad(survexblock, survexfile, fin):
|
|||||||
print(insp+" - RETURNING from nested *begin/*end block: {}".format(line))
|
print(insp+" - RETURNING from nested *begin/*end block: {}".format(line))
|
||||||
iblankbegins -= 1
|
iblankbegins -= 1
|
||||||
else:
|
else:
|
||||||
legsinblock = survexlegsnumber - previousnlegs
|
legsinblock = self.survexlegsnumber - previousnlegs
|
||||||
print(insp+" - LEGS: {} (previous: {}, now:{})".format(legsinblock,previousnlegs,survexlegsnumber))
|
print(insp+" - LEGS: {} (previous: {}, now:{})".format(legsinblock,previousnlegs,self.survexlegsnumber))
|
||||||
survexblock.legsall = legsinblock
|
survexblock.legsall = legsinblock
|
||||||
survexblock.save()
|
survexblock.save()
|
||||||
endstamp = datetime.now()
|
endstamp = datetime.now()
|
||||||
@@ -379,9 +384,9 @@ def RecursiveLoad(survexblock, survexfile, fin):
|
|||||||
elif re.match("team$(?i)", cmd):
|
elif re.match("team$(?i)", cmd):
|
||||||
pass
|
pass
|
||||||
# print(insp+' - Team found: ')
|
# print(insp+' - Team found: ')
|
||||||
mteammember = rx_team.match(line)
|
mteammember = self.rx_team.match(line)
|
||||||
if mteammember:
|
if mteammember:
|
||||||
for tm in rx_person.split(mteammember.group(2)):
|
for tm in self.rx_person.split(mteammember.group(2)):
|
||||||
if tm:
|
if tm:
|
||||||
personexpedition = survexblock.expedition and GetPersonExpeditionNameLookup(survexblock.expedition).get(tm.lower())
|
personexpedition = survexblock.expedition and GetPersonExpeditionNameLookup(survexblock.expedition).get(tm.lower())
|
||||||
if (personexpedition, tm) not in teammembers:
|
if (personexpedition, tm) not in teammembers:
|
||||||
@@ -393,9 +398,7 @@ def RecursiveLoad(survexblock, survexfile, fin):
|
|||||||
personrole.save()
|
personrole.save()
|
||||||
|
|
||||||
elif cmd == "title":
|
elif cmd == "title":
|
||||||
# unused in troggle.
|
# unused in troggle today - but will become text list on SurvexBlock
|
||||||
#survextitle = models_survex.SurvexTitle(survexblock=survexblock, title=line.strip('"'), cave=survexfile.cave)
|
|
||||||
#survextitle.save()
|
|
||||||
pass
|
pass
|
||||||
|
|
||||||
elif cmd == "require":
|
elif cmd == "require":
|
||||||
@@ -406,11 +409,11 @@ def RecursiveLoad(survexblock, survexfile, fin):
|
|||||||
ls = line.lower().split()
|
ls = line.lower().split()
|
||||||
stardata = { "type":ls[0] }
|
stardata = { "type":ls[0] }
|
||||||
for i in range(0, len(ls)):
|
for i in range(0, len(ls)):
|
||||||
stardata[stardataparamconvert.get(ls[i], ls[i])] = i - 1
|
stardata[self.stardataparamconvert.get(ls[i], ls[i])] = i - 1
|
||||||
if ls[0] in ["normal", "cartesian", "nosurvey"]:
|
if ls[0] in ["normal", "cartesian", "nosurvey"]:
|
||||||
assert (("from" in stardata and "to" in stardata) or "station" in stardata), line
|
assert (("from" in stardata and "to" in stardata) or "station" in stardata), line
|
||||||
elif ls[0] == "default":
|
elif ls[0] == "default":
|
||||||
stardata = stardatadefault
|
stardata = self.stardatadefault
|
||||||
else:
|
else:
|
||||||
assert ls[0] == "passage", line
|
assert ls[0] == "passage", line
|
||||||
|
|
||||||
@@ -425,8 +428,7 @@ def RecursiveLoad(survexblock, survexfile, fin):
|
|||||||
# but this data is only used for sense-checking not to actually calculate anything important
|
# but this data is only used for sense-checking not to actually calculate anything important
|
||||||
pass
|
pass
|
||||||
elif cmd == "fix":
|
elif cmd == "fix":
|
||||||
# troggle does not use survex stations
|
# troggle does not use survex stations except for entrances which are loaded elsewhere
|
||||||
#survexblock.MakeSurvexStation(line.split()[0])
|
|
||||||
pass
|
pass
|
||||||
elif cmd in ["alias", "calibrate", "cs","entrance", "export", "case",
|
elif cmd in ["alias", "calibrate", "cs","entrance", "export", "case",
|
||||||
"declination", "infer","instrument", "sd", "units"]:
|
"declination", "infer","instrument", "sd", "units"]:
|
||||||
@@ -442,46 +444,39 @@ def RecursiveLoad(survexblock, survexfile, fin):
|
|||||||
print((insp+message))
|
print((insp+message))
|
||||||
models.DataIssue.objects.create(parser='survex', message=message)
|
models.DataIssue.objects.create(parser='survex', message=message)
|
||||||
|
|
||||||
endstamp = datetime.now()
|
|
||||||
timetaken = endstamp - stamp
|
|
||||||
# print(insp+' - Time to process: ' + str(timetaken))
|
|
||||||
|
|
||||||
def get_process_memory():
|
|
||||||
usage=resource.getrusage(resource.RUSAGE_SELF)
|
|
||||||
return usage[2]/1024.0
|
|
||||||
|
|
||||||
|
|
||||||
def FindAndLoadAllSurvex(survexblockroot, survexfileroot):
|
def FindAndLoadAllSurvex(survexblockroot, survexfileroot):
|
||||||
"""Follows the *include links recursively to find files
|
"""Follows the *include links recursively to find files
|
||||||
"""
|
"""
|
||||||
print(' - redirecting stdout to loadsurvexblks.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
|
||||||
sys.stdout = open('loadsurvexblks.log', 'w')
|
sys.stdout = open('svxblks.log', 'w')
|
||||||
|
|
||||||
|
svxl = LoadSurvex()
|
||||||
|
|
||||||
finroot = survexfileroot.OpenFile()
|
finroot = survexfileroot.OpenFile()
|
||||||
RecursiveLoad(survexblockroot, survexfileroot, finroot)
|
svxl.RecursiveLoad(survexblockroot, survexfileroot, finroot)
|
||||||
finroot.close()
|
finroot.close()
|
||||||
|
|
||||||
# Close the logging file
|
survexlegsnumber = svxl.survexlegsnumber
|
||||||
|
survexlegsalllength = svxl.survexlegsalllength
|
||||||
|
|
||||||
|
# Close the logging file, Restore sys.stdout to our old saved file handle
|
||||||
sys.stdout.close()
|
sys.stdout.close()
|
||||||
print("+", file=sys.stderr)
|
print("+", file=sys.stderr)
|
||||||
sys.stderr.flush();
|
sys.stderr.flush();
|
||||||
# Restore sys.stdout to our old saved file handler
|
|
||||||
sys.stdout = stdout_orig
|
sys.stdout = stdout_orig
|
||||||
|
return (survexlegsnumber, survexlegsalllength)
|
||||||
|
|
||||||
|
|
||||||
def LoadAllSurvexBlocks():
|
def LoadAllSurvexBlocks():
|
||||||
global survexlegsalllength
|
|
||||||
global survexlegsnumber
|
|
||||||
|
|
||||||
print(' - Flushing All Survex Blocks...')
|
print(' - Flushing All Survex Blocks...')
|
||||||
|
|
||||||
models_survex.SurvexBlock.objects.all().delete()
|
models_survex.SurvexBlock.objects.all().delete()
|
||||||
models_survex.SurvexFile.objects.all().delete()
|
models_survex.SurvexFile.objects.all().delete()
|
||||||
models_survex.SurvexDirectory.objects.all().delete()
|
models_survex.SurvexDirectory.objects.all().delete()
|
||||||
# models_survex.SurvexEquate.objects.all().delete()
|
|
||||||
# models_survex.SurvexTitle.objects.all().delete()
|
|
||||||
models_survex.SurvexPersonRole.objects.all().delete()
|
models_survex.SurvexPersonRole.objects.all().delete()
|
||||||
models_survex.SurvexStation.objects.all().delete()
|
models_survex.SurvexStation.objects.all().delete()
|
||||||
|
|
||||||
@@ -497,7 +492,10 @@ def LoadAllSurvexBlocks():
|
|||||||
survexblockroot.save()
|
survexblockroot.save()
|
||||||
|
|
||||||
print(' - Loading All Survex Blocks...')
|
print(' - Loading All Survex Blocks...')
|
||||||
FindAndLoadAllSurvex(survexblockroot, survexfileroot)
|
memstart = models.get_process_memory()
|
||||||
|
survexlegsnumber, survexlegsalllength = FindAndLoadAllSurvex(survexblockroot, survexfileroot)
|
||||||
|
memend = models.get_process_memory()
|
||||||
|
print(" - MEMORY start:{:.3f} MB end:{:.3f} MB increase={:.3f} MB",format(memstart,memend,memend-memstart))
|
||||||
|
|
||||||
survexblockroot.totalleglength = survexlegsalllength
|
survexblockroot.totalleglength = survexlegsalllength
|
||||||
survexblockroot.legsall = survexlegsnumber
|
survexblockroot.legsall = survexlegsnumber
|
||||||
|
|||||||
Reference in New Issue
Block a user