From 3645c9868575417f745003404d7a8294f44420cd Mon Sep 17 00:00:00 2001 From: Philip Sargent Date: Wed, 24 Jun 2020 17:55:42 +0100 Subject: [PATCH] extract *date function --- parsers/survex.py | 47 ++++++++++++++++++++++++++--------------------- 1 file changed, 26 insertions(+), 21 deletions(-) diff --git a/parsers/survex.py b/parsers/survex.py index 959bd26..fdc48f8 100644 --- a/parsers/survex.py +++ b/parsers/survex.py @@ -63,10 +63,22 @@ class LoadSurvex(): survexlegsnumber = 0 insp = "" callcount = 0 + stardata ={} def __init__(self): pass + def LoadSurvexDate(self, survexblock, line): + # we should make this a date range for everything + if len(line) == 10: + 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: + assert len(expeditions) == 1 + survexblock.expedition = expeditions[0] + survexblock.expeditionday = survexblock.expedition.get_expedition_day(survexblock.date) + survexblock.save() + def LoadSurvexLineLeg(self, survexblock, stardata, sline, comment): """This reads compass, clino and tape data but only keeps the tape lengths, the rest is discarded after error-checking. @@ -147,7 +159,7 @@ class LoadSurvex(): # do not import this: *data passage.. data which is LRUD not tape/compass/clino pass - def LoadSurvexRef(self, insp, survexblock, mstar): + def LoadSurvexRef(self, survexblock, mstar): # *REF but also ; Ref yr,letterx,wallet = mstar.groups() if not letterx: @@ -165,15 +177,15 @@ class LoadSurvex(): survexblock.save() if len(manyscansfolders) > 1: message = ' ! Wallet *REF {} - multiple scan folders found {}'.format(refscan, survexblock.survexfile.path) - print((insp+message)) + print((self.insp+message)) models.DataIssue.objects.create(parser='survex', message=message) else: message = ' ! Wallet *REF {} - NOT found in manyscansfolders {}'.format(refscan, survexblock.survexfile.path) - print((insp+message)) + print((self.insp+message)) models.DataIssue.objects.create(parser='survex', message=message) - def LoadSurvexQM(self, insp, qmline): + def LoadSurvexQM(self, insp, survexblock, qmline): qm_no = qmline.group(1) qm_grade = qmline.group(2) qm_from_section = qmline.group(3) @@ -210,11 +222,13 @@ class LoadSurvex(): grade=qm_grade.upper(), location_description=qm_notes) else: - message = ' ! QM in svx file NOT resolved and NOT found {}'.format(qm_notes) + message = ' ! QM {} in {} NOT resolved and NOT found'.format(qm_no, survexblock.survexfile.path) print(insp+message) models.DataIssue.objects.create(parser='survex', message=message) else: - print(insp+' - QM found but resolved {}'.format(qm_notes)) + message = ' ! QM {} in {} found and resolved as {}'.format(qm_no, survexblock.survexfile.path,qm_resolve_section) + print(insp+message) + models.DataIssue.objects.create(parser='survex', message=message) pass @@ -222,7 +236,7 @@ class LoadSurvex(): """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 goes. This part of the data import process is where the maximum memory is used and where it - crashes on memory-constrained machines. + crashes on memory-constrained machines. Begin-end blocks may also be nested. """ iblankbegins = 0 text = [ ] @@ -256,14 +270,13 @@ class LoadSurvex(): lineno += 1 # break the line at the comment sline, comment = self.rx_comment.match(svxline.strip()).groups() - # detect ref line pointing to the scans directory mref = comment and self.rx_ref.match(comment) if mref: - self.LoadSurvexRef(insp, survexblock, mref) + self.LoadSurvexRef(survexblock, mref) qmline = comment and self.rx_qm.match(comment) if qmline: - self.LoadSurvexQM(insp, qmline) + self.LoadSurvexQM(insp, survexblock, qmline) if not sline: continue @@ -271,7 +284,7 @@ class LoadSurvex(): # detect the star ref command mstar = self.rx_starref.match(sline) if mstar: - self.LoadSurvexRef(insp, survexblock, mstar) + self.LoadSurvexRef(survexblock, mstar) # detect the star command mstar = self.rx_star.match(sline) @@ -368,19 +381,10 @@ class LoadSurvex(): print(insp+" - LEGS: {} (previous: {}, now:{})".format(legsinblock,previousnlegs,self.survexlegsnumber)) survexblock.legsall = legsinblock survexblock.save() - endstamp = datetime.now() - timetaken = endstamp - stamp return elif re.match("date$(?i)", cmd): - if len(line) == 10: - 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: - assert len(expeditions) == 1 - survexblock.expedition = expeditions[0] - survexblock.expeditionday = survexblock.expedition.get_expedition_day(survexblock.date) - survexblock.save() + self.LoadSurvexDate(survexblock, line) elif re.match("team$(?i)", cmd): pass @@ -411,6 +415,7 @@ class LoadSurvex(): stardata = { "type":ls[0] } for i in range(0, len(ls)): stardata[self.stardataparamconvert.get(ls[i], ls[i])] = i - 1 + self.stardata = stardata if ls[0] in ["normal", "cartesian", "nosurvey"]: assert (("from" in stardata and "to" in stardata) or "station" in stardata), line elif ls[0] == "default":