forked from expo/troggle
splays and alias splays implemented
This commit is contained in:
@@ -57,7 +57,7 @@ class LoadingSurvex():
|
||||
# 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
|
||||
datastardefault = {"type":"normal", "from":0, "to":1, "tape":2, "compass":3, "clino":4}
|
||||
flagsdefault = {"duplicate":False, "surface":False, "splay":False, "skiplegs":False}
|
||||
flagsdefault = {"duplicate":False, "surface":False, "splay":False, "skiplegs":False, "splayalias":False}
|
||||
|
||||
datastar ={}
|
||||
flagsstar = {}
|
||||
@@ -74,6 +74,7 @@ class LoadingSurvex():
|
||||
stacksvxfiles = []
|
||||
svxfileslist = []
|
||||
svxdirs = {}
|
||||
expos = {}
|
||||
survexdict = {} # each key is a directory, and its value is a list of files
|
||||
lineno = 0
|
||||
insp = ""
|
||||
@@ -93,11 +94,11 @@ class LoadingSurvex():
|
||||
def LoadSurvexIgnore(self, survexblock, line, cmd):
|
||||
if cmd == "require":
|
||||
pass # should we check survex version available for processing?
|
||||
elif cmd in ["equate", "fix", "alias", "calibrate", "cs","entrance", "export", "case",
|
||||
elif cmd in ["equate", "fix", "calibrate", "cs", "export", "case",
|
||||
"declination", "infer","instrument", "sd", "units"]:
|
||||
pass # we ignore all these, which is fine.
|
||||
else:
|
||||
if cmd in ["include", "data", "flags", "title", "set", "ref"]:
|
||||
if cmd in ["include", "data", "flags", "title", "entrance","set", "units", "alias", "ref"]:
|
||||
message = "! Unparsed [*{}]: '{}' {}".format(cmd, line, survexblock.survexfile.path)
|
||||
print((self.insp+message))
|
||||
models.DataIssue.objects.create(parser='survex', message=message)
|
||||
@@ -122,18 +123,40 @@ class LoadingSurvex():
|
||||
personrole.person=personexpedition.person
|
||||
personrole.save()
|
||||
|
||||
def LoadSurvexEntrance(self, survexblock, line):
|
||||
# Not using this yet
|
||||
pass
|
||||
|
||||
def LoadSurvexAlias(self, survexblock, line):
|
||||
# *alias station - ..
|
||||
splayalias = re.match("(?i)station\s*\-\s*\.\.\s*$",line)
|
||||
if splayalias:
|
||||
self.flagsstar["splayalias"] = True
|
||||
else:
|
||||
message = "! Bad *ALIAS: '{}' ({}) {}".format(line, survexblock, survexblock.survexfile.path)
|
||||
print((self.insp+message))
|
||||
models.DataIssue.objects.create(parser='survex', message=message)
|
||||
|
||||
def LoadSurvexDate(self, survexblock, line):
|
||||
# we should make this a date range for everything
|
||||
if len(line) == 10:
|
||||
year = line[:4]
|
||||
# make_aware is a django function, and may not be correct to use it like this anyway! We want Austrian time.
|
||||
survexblock.date = make_aware(datetime.strptime(re.sub(r"\.", "-", line), '%Y-%m-%d'), get_current_timezone())
|
||||
expeditions = models.Expedition.objects.filter(year=line[:4])
|
||||
if expeditions:
|
||||
# cacheing to save DB query on every block and to prepare for django-less troggle in future
|
||||
if year in self.expos:
|
||||
expo = self.expos[year]
|
||||
else:
|
||||
expeditions = models.Expedition.objects.filter(year=year)
|
||||
assert len(expeditions) == 1
|
||||
survexblock.expedition = expeditions[0]
|
||||
survexblock.expeditionday = survexblock.expedition.get_expedition_day(survexblock.date)
|
||||
survexblock.save()
|
||||
expo= expeditions[0]
|
||||
self.expos[year]= expo
|
||||
|
||||
def LoadSurvexLineLeg(self, survexblock, sline, comment):
|
||||
survexblock.expedition = expo
|
||||
survexblock.expeditionday = survexblock.expedition.get_expedition_day(survexblock.date)
|
||||
survexblock.save()
|
||||
|
||||
def LoadSurvexLeg(self, survexblock, sline, comment):
|
||||
"""This reads compass, clino and tape data but only keeps the tape lengths,
|
||||
the rest is discarded after error-checking.
|
||||
"""
|
||||
@@ -141,8 +164,9 @@ class LoadingSurvex():
|
||||
invalid_compass = 720.0
|
||||
invalid_tape = 0.0
|
||||
|
||||
# if self.flagsstar["skiplegs"]:
|
||||
# return
|
||||
if self.flagsstar["skiplegs"]:
|
||||
#print("skip in ", self.flagsstar, survexblock.survexfile.path)
|
||||
return
|
||||
|
||||
#print("! LEG datastar type:{}++{}\n{} ".format(self.datastar["type"].upper(), survexblock.survexfile.path, sline))
|
||||
# SKIP PASSAGES *data passage
|
||||
@@ -165,7 +189,22 @@ class LoadingSurvex():
|
||||
survexleg = SurvexLeg()
|
||||
|
||||
ls = sline.lower().split()
|
||||
|
||||
|
||||
# skip all splay legs
|
||||
if ls[datastar["from"]] == "..":
|
||||
#print("Splay in ", survexblock.survexfile.path)
|
||||
return
|
||||
if ls[datastar["to"]] == "..":
|
||||
#print("Splay in ", survexblock.survexfile.path)
|
||||
return
|
||||
if self.flagsstar["splayalias"]:
|
||||
if ls[datastar["from"]] == "-":
|
||||
#print("Aliased splay in ", survexblock.survexfile.path)
|
||||
return
|
||||
if ls[datastar["to"]] == "-":
|
||||
#print("Aliased splay in ", survexblock.survexfile.path)
|
||||
return
|
||||
|
||||
try:
|
||||
tape = ls[datastar["tape"]]
|
||||
except:
|
||||
@@ -176,8 +215,7 @@ class LoadingSurvex():
|
||||
models.DataIssue.objects.create(parser='survexleg', message=message)
|
||||
survexleg.tape = invalid_tape
|
||||
return
|
||||
# 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' or '(06.05)' in the tape measurement
|
||||
# tape = tape.replace("(","") # edited original file (only one) instead
|
||||
# tape = tape.replace(")","") # edited original file (only one) instead
|
||||
# tape = tape.replace("/",".") # edited original file (only one) instead.
|
||||
@@ -192,7 +230,7 @@ class LoadingSurvex():
|
||||
models.DataIssue.objects.create(parser='survexleg', message=message)
|
||||
survexleg.tape = invalid_tape
|
||||
try:
|
||||
survexblock.totalleglength += survexleg.tape
|
||||
survexblock.legslength += survexleg.tape
|
||||
self.slength += survexleg.tape
|
||||
except ValueError:
|
||||
message = ' ! Value Error: Tape length not added %s in %s' % (ls, survexblock.survexfile.path)
|
||||
@@ -238,8 +276,6 @@ class LoadingSurvex():
|
||||
models.DataIssue.objects.create(parser='survexleg', message=message)
|
||||
survexleg.compass = invalid_compass
|
||||
|
||||
if self.flagsstar["skiplegs"]:
|
||||
return
|
||||
# delete the object to save memory
|
||||
survexleg = None
|
||||
|
||||
@@ -651,6 +687,7 @@ class LoadingSurvex():
|
||||
# ------------ * FLAGS
|
||||
self.flagsstack.append(copy.deepcopy(self.flagsstar))
|
||||
# ------------ * FLAGS
|
||||
pass
|
||||
|
||||
def popblock():
|
||||
nonlocal blkid
|
||||
@@ -675,7 +712,7 @@ class LoadingSurvex():
|
||||
if oldflags["skiplegs"] != self.flagsstar["skiplegs"]:
|
||||
print(" # POP 'any' flag now:'{}' was:{} ".format(self.flagsstar["skiplegs"], oldflags["skiplegs"]))
|
||||
|
||||
def starstatement(mstar):
|
||||
def starstatement(star):
|
||||
nonlocal survexblock
|
||||
nonlocal blkid
|
||||
nonlocal pathlist
|
||||
@@ -684,7 +721,7 @@ class LoadingSurvex():
|
||||
nonlocal slengthtotal
|
||||
nonlocal nlegstotal
|
||||
|
||||
cmd, args = mstar.groups()
|
||||
cmd, args = star.groups()
|
||||
cmd = cmd.lower()
|
||||
|
||||
# ------------------------BEGIN
|
||||
@@ -702,7 +739,7 @@ class LoadingSurvex():
|
||||
newsurvexblock = models_survex.SurvexBlock(name=blkid, parent=survexblock,
|
||||
survexpath=pathlist,
|
||||
cave=self.currentcave, survexfile=self.currentsurvexfile,
|
||||
legsall=0, legssplay=0, legssurfc=0, totalleglength=0.0)
|
||||
legsall=0, legslength=0.0)
|
||||
newsurvexblock.save()
|
||||
newsurvexblock.title = "("+survexblock.title+")" # copy parent inititally
|
||||
survexblock = newsurvexblock
|
||||
@@ -712,7 +749,7 @@ class LoadingSurvex():
|
||||
# ---------------------------END
|
||||
elif re.match("end$(?i)", cmd):
|
||||
survexblock.legsall = self.legsnumber
|
||||
survexblock.totalleglength = self.slength
|
||||
survexblock.legslength = self.slength
|
||||
printend()
|
||||
slengthtotal += self.slength
|
||||
nlegstotal += self.legsnumber
|
||||
@@ -751,6 +788,10 @@ class LoadingSurvex():
|
||||
|
||||
elif re.match("(?i)data$", cmd):
|
||||
self.LoadSurvexDataCmd(survexblock, args)
|
||||
elif re.match("(?i)alias$", cmd):
|
||||
self.LoadSurvexAlias(survexblock, args)
|
||||
elif re.match("(?i)entrance$", cmd):
|
||||
self.LoadSurvexEntrance(survexblock, args)
|
||||
elif re.match("(?i)date$", cmd):
|
||||
self.LoadSurvexDate(survexblock, args)
|
||||
elif re.match("(?i)team$", cmd):
|
||||
@@ -777,12 +818,12 @@ class LoadingSurvex():
|
||||
continue # skip blank lines
|
||||
|
||||
# detect a star command
|
||||
mstar = self.rx_star.match(sline)
|
||||
if mstar:
|
||||
star = self.rx_star.match(sline)
|
||||
if star:
|
||||
# yes we are reading a *command
|
||||
starstatement(mstar)
|
||||
starstatement(star)
|
||||
else: # not a *cmd so we are reading data OR a ";" rx_comment failed
|
||||
self.LoadSurvexLineLeg(survexblock, sline, comment)
|
||||
self.LoadSurvexLeg(survexblock, sline, comment)
|
||||
|
||||
self.legsnumber = slengthtotal
|
||||
self.slength = nlegstotal
|
||||
@@ -825,9 +866,9 @@ class LoadingSurvex():
|
||||
fcollate.write("{}\n".format(svxline.strip()))
|
||||
|
||||
sline, comment = self.rx_comment.match(svxline.strip()).groups()
|
||||
mstar = self.rx_star.match(sline)
|
||||
if mstar: # yes we are reading a *cmd
|
||||
cmd, args = mstar.groups()
|
||||
star = self.rx_star.match(sline)
|
||||
if star: # yes we are reading a *cmd
|
||||
cmd, args = star.groups()
|
||||
cmd = cmd.lower()
|
||||
if re.match("(?i)include$", cmd):
|
||||
includepath = os.path.normpath(os.path.join(os.path.split(path)[0], re.sub(r"\.svx$", "", args)))
|
||||
@@ -1043,7 +1084,7 @@ def LoadSurvexBlocks():
|
||||
survexfileroot = MakeSurvexFileRoot()
|
||||
# this next makes a block_object assciated with a file_object.path = SURVEX_TOPNAME
|
||||
survexblockroot = models_survex.SurvexBlock(name=ROOTBLOCK, survexpath="", cave=None, survexfile=survexfileroot,
|
||||
legsall=0, legssplay=0, legssurfc=0, totalleglength=0.0)
|
||||
legsall=0, legslength=0.0)
|
||||
# this is the first so id=1
|
||||
survexblockroot.save()
|
||||
|
||||
@@ -1056,7 +1097,7 @@ def LoadSurvexBlocks():
|
||||
print(" - MEMORY start:{:.3f} MB end:{:.3f} MB increase={:.3f} MB".format(memstart,memend, memend-memstart))
|
||||
|
||||
# Don't do this, it double-counts everything:
|
||||
#survexblockroot.totalleglength = slength
|
||||
#survexblockroot.legslength = slength
|
||||
#survexblockroot.legsall = legsnumber
|
||||
survexblockroot.save()
|
||||
|
||||
|
||||
Reference in New Issue
Block a user