summaryrefslogtreecommitdiffstats
path: root/parsers/survex.py
diff options
context:
space:
mode:
authorPhilip Sargent <philip.sargent@klebos.com>2020-06-24 19:07:11 +0100
committerPhilip Sargent <philip.sargent@klebos.com>2020-06-24 19:07:11 +0100
commit664c18ebbebfd01c69dc6de0b38a78703aa35d36 (patch)
treefbb61f2dc32984de92881a05a4899cecde83c03d /parsers/survex.py
parent3645c9868575417f745003404d7a8294f44420cd (diff)
downloadtroggle-664c18ebbebfd01c69dc6de0b38a78703aa35d36.tar.gz
troggle-664c18ebbebfd01c69dc6de0b38a78703aa35d36.tar.bz2
troggle-664c18ebbebfd01c69dc6de0b38a78703aa35d36.zip
refactor team and ignore sections
Diffstat (limited to 'parsers/survex.py')
-rw-r--r--parsers/survex.py109
1 files changed, 46 insertions, 63 deletions
diff --git a/parsers/survex.py b/parsers/survex.py
index fdc48f8..f800039 100644
--- a/parsers/survex.py
+++ b/parsers/survex.py
@@ -68,6 +68,39 @@ class LoadSurvex():
def __init__(self):
pass
+ def LoadSurvexIgnore(self, survexblock, line, cmd):
+ if cmd == "title":
+ pass # unused in troggle today - but will become text list on SurvexBlock
+ elif cmd == "require":
+ pass # should we check survex version available for processing?
+ elif cmd in ["equate", "fix", "alias", "calibrate", "cs","entrance", "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"]:
+ message = "! Unparsed [*{}]: '{}' {}".format(cmd, line, survexblock.survexfile.path)
+ print((self.insp+message))
+ models.DataIssue.objects.create(parser='survex', message=message)
+ else:
+ message = "! Bad svx command: [*{}] {} ({}) {}".format(cmd, line, survexblock, survexblock.survexfile.path)
+ print((self.insp+message))
+ models.DataIssue.objects.create(parser='survex', message=message)
+
+ def LoadSurvexTeam(self, survexblock, line):
+ teammembers = [ ]
+ mteammember = self.rx_team.match(line)
+ if mteammember:
+ for tm in self.rx_person.split(mteammember.group(2)):
+ if tm:
+ personexpedition = survexblock.expedition and GetPersonExpeditionNameLookup(survexblock.expedition).get(tm.lower())
+ if (personexpedition, tm) not in teammembers:
+ teammembers.append((personexpedition, tm))
+ personrole = models_survex.SurvexPersonRole(survexblock=survexblock, nrole=mteammember.group(1).lower(), personexpedition=personexpedition, personname=tm)
+ personrole.expeditionday = survexblock.expeditionday
+ if personexpedition:
+ personrole.person=personexpedition.person
+ personrole.save()
+
def LoadSurvexDate(self, survexblock, line):
# we should make this a date range for everything
if len(line) == 10:
@@ -140,8 +173,6 @@ class LoadSurvex():
assert self.rx_linelen.match(lclino) and lclino != "-", ls
survexleg.compass = float(lcompass)
survexleg.clino = float(lclino)
-
- # No need to save as we are measuring lengths only on parsing now.
# delete the object so that django autosaving doesn't save it.
survexleg = None
@@ -152,7 +183,6 @@ class LoadSurvex():
self.survexlegsalllength += float(ls[itape])
except ValueError:
print("! Length not added")
- # No need to save as we are measuring lengths only on parsing now.
def LoadSurvexLinePassage(self, survexblock, stardata, sline, comment):
@@ -239,9 +269,7 @@ class LoadSurvex():
crashes on memory-constrained machines. Begin-end blocks may also be nested.
"""
iblankbegins = 0
- text = [ ]
stardata = self.stardatadefault
- teammembers = [ ]
insp =self.insp
blocklegs = self.survexlegsnumber
@@ -282,9 +310,9 @@ class LoadSurvex():
continue
# detect the star ref command
- mstar = self.rx_starref.match(sline)
- if mstar:
- self.LoadSurvexRef(survexblock, mstar)
+ rstar = self.rx_starref.match(sline)
+ if rstar:
+ self.LoadSurvexRef(survexblock, rstar)
# detect the star command
mstar = self.rx_star.match(sline)
@@ -295,7 +323,7 @@ class LoadSurvex():
elif stardata["type"] == "passage":
pass
#self.LoadSurvexLinePassage(survexblock, stardata, sline, comment)
- #Missing "station" in stardata.
+ #Missing "station" in stardata.
continue
# detect the star command
@@ -382,34 +410,10 @@ class LoadSurvex():
survexblock.legsall = legsinblock
survexblock.save()
return
-
- elif re.match("date$(?i)", cmd):
- self.LoadSurvexDate(survexblock, line)
-
- elif re.match("team$(?i)", cmd):
- pass
- # print(insp+' - Team found: ')
- mteammember = self.rx_team.match(line)
- if mteammember:
- for tm in self.rx_person.split(mteammember.group(2)):
- if tm:
- personexpedition = survexblock.expedition and GetPersonExpeditionNameLookup(survexblock.expedition).get(tm.lower())
- if (personexpedition, tm) not in teammembers:
- teammembers.append((personexpedition, tm))
- personrole = models_survex.SurvexPersonRole(survexblock=survexblock, nrole=mteammember.group(1).lower(), personexpedition=personexpedition, personname=tm)
- personrole.expeditionday = survexblock.expeditionday
- if personexpedition:
- personrole.person=personexpedition.person
- personrole.save()
-
- elif cmd == "title":
- # unused in troggle today - but will become text list on SurvexBlock
- pass
-
- elif cmd == "require":
- # should we check survex version available for processing?
+ elif cmd == "flags":
+ # Here we could set on/off 'splay', 'not splay', 'surface', 'not surface', or 'duplicate'
+ # but this data is only used for sense-checking not to actually calculate anything important
pass
-
elif cmd == "data":
ls = line.lower().split()
stardata = { "type":ls[0] }
@@ -422,33 +426,14 @@ class LoadSurvex():
stardata = self.stardatadefault
else:
assert ls[0] == "passage", line
-
- elif cmd == "equate":
- #LoadSurvexEquate(survexblock, line)
- pass
-
elif cmd == "set" and re.match("names(?i)", line):
pass
- elif cmd == "flags":
- # Here we could set on/off 'splay', 'not splay', 'surface', 'not surface', or 'duplicate'
- # but this data is only used for sense-checking not to actually calculate anything important
- pass
- elif cmd == "fix":
- # troggle does not use survex stations except for entrances which are loaded elsewhere
- pass
- elif cmd in ["alias", "calibrate", "cs","entrance", "export", "case",
- "declination", "infer","instrument", "sd", "units"]:
- # we ignore all these, which is fine.
- pass
+ elif re.match("date$(?i)", cmd):
+ self.LoadSurvexDate(survexblock, line)
+ elif re.match("team$(?i)", cmd):
+ self.LoadSurvexTeam(survexblock, line)
else:
- if cmd not in ["include", "data", "flags", "title", "set", "ref"]:
- message = "! Bad svx command: [*{}] {} ({}) {}".format(cmd, line, survexblock, survexblock.survexfile.path)
- print((insp+message))
- models.DataIssue.objects.create(parser='survex', message=message)
- else:
- message = "! Unparsed [*{}]: '{}' {}".format(cmd, line, survexblock.survexfile.path)
- print((insp+message))
- models.DataIssue.objects.create(parser='survex', message=message)
+ self.LoadSurvexIgnore(survexblock, line, cmd)
def FindAndLoadAllSurvex(survexblockroot, survexfileroot):
@@ -479,14 +464,12 @@ def FindAndLoadAllSurvex(survexblockroot, survexfileroot):
def LoadAllSurvexBlocks():
print(' - Flushing All Survex Blocks...')
-
models_survex.SurvexBlock.objects.all().delete()
models_survex.SurvexFile.objects.all().delete()
models_survex.SurvexDirectory.objects.all().delete()
models_survex.SurvexPersonRole.objects.all().delete()
models_survex.SurvexStation.objects.all().delete()
-
- print(" - Data flushed")
+ print(" - survex Data Issues flushed")
models.DataIssue.objects.filter(parser='survex').delete()
survexfileroot = models_survex.SurvexFile(path=settings.SURVEX_TOPNAME, cave=None)