diff options
-rw-r--r-- | core/migrations/0001_initial.py | 55 | ||||
-rw-r--r-- | core/models.py | 2 | ||||
-rw-r--r-- | core/models_survex.py | 4 | ||||
-rw-r--r-- | core/views_logbooks.py | 32 | ||||
-rw-r--r-- | core/views_statistics.py | 22 | ||||
-rw-r--r-- | flatpages/migrations/0001_initial.py | 2 | ||||
-rw-r--r-- | lines-of-python.txt | 32 | ||||
-rw-r--r-- | lines-of-templates.txt | 8 | ||||
-rw-r--r-- | parsers/survex.py | 101 | ||||
-rw-r--r-- | templates/statistics.html | 8 | ||||
-rw-r--r-- | templates/svxcavesingle.html | 2 |
11 files changed, 125 insertions, 143 deletions
diff --git a/core/migrations/0001_initial.py b/core/migrations/0001_initial.py index 080ef64..4f91b89 100644 --- a/core/migrations/0001_initial.py +++ b/core/migrations/0001_initial.py @@ -1,5 +1,5 @@ # -*- coding: utf-8 -*- -# Generated by Django 1.11.29 on 2020-06-26 23:53 +# Generated by Django 1.11.29 on 2020-07-04 12:11 from __future__ import unicode_literals from django.conf import settings @@ -25,7 +25,7 @@ class Migration(migrations.Migration): ('short_name', models.CharField(max_length=100)), ('name', models.CharField(blank=True, max_length=200, null=True)), ('description', models.TextField(blank=True, null=True)), - ('parent', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, to='core.Area')), + ('parent', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, to='core.Area')), ], options={ 'abstract': False, @@ -191,8 +191,8 @@ class Migration(migrations.Migration): ('slug', models.SlugField()), ('filename', models.CharField(max_length=200, null=True)), ('entry_type', models.CharField(choices=[('wiki', 'Wiki style logbook'), ('html', 'Html style logbook')], default='wiki', max_length=50, null=True)), - ('expedition', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, to='core.Expedition')), - ('expeditionday', models.ForeignKey(null=True, on_delete=django.db.models.deletion.CASCADE, to='core.ExpeditionDay')), + ('expedition', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, to='core.Expedition')), + ('expeditionday', models.ForeignKey(null=True, on_delete=django.db.models.deletion.SET_NULL, to='core.ExpeditionDay')), ], options={ 'verbose_name_plural': 'Logbook Entries', @@ -290,7 +290,7 @@ class Migration(migrations.Migration): ('area', models.CharField(blank=True, max_length=100, null=True)), ('completion_description', models.TextField(blank=True, null=True)), ('comment', models.TextField(blank=True, null=True)), - ('found_by', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, related_name='QMs_found', to='core.LogbookEntry')), + ('found_by', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='QMs_found', to='core.LogbookEntry')), ], options={ 'abstract': False, @@ -313,7 +313,7 @@ class Migration(migrations.Migration): ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), ('ffile', models.CharField(max_length=200)), ('name', models.CharField(max_length=200)), - ('scansfolder', models.ForeignKey(null=True, on_delete=django.db.models.deletion.CASCADE, to='core.ScansFolder')), + ('scansfolder', models.ForeignKey(null=True, on_delete=django.db.models.deletion.SET_NULL, to='core.ScansFolder')), ], options={ 'ordering': ('name',), @@ -324,17 +324,16 @@ class Migration(migrations.Migration): fields=[ ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), ('name', models.CharField(max_length=100)), + ('title', models.CharField(max_length=100)), ('date', models.DateField(blank=True, null=True)), ('survexpath', models.CharField(max_length=200)), ('legsall', models.IntegerField(null=True)), - ('legssplay', models.IntegerField(null=True)), - ('legssurfc', models.IntegerField(null=True)), - ('totalleglength', models.FloatField(null=True)), - ('cave', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, to='core.Cave')), - ('expedition', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, to='core.Expedition')), - ('expeditionday', models.ForeignKey(null=True, on_delete=django.db.models.deletion.CASCADE, to='core.ExpeditionDay')), - ('parent', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, to='core.SurvexBlock')), - ('scansfolder', models.ForeignKey(null=True, on_delete=django.db.models.deletion.CASCADE, to='core.ScansFolder')), + ('legslength', models.FloatField(null=True)), + ('cave', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, to='core.Cave')), + ('expedition', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, to='core.Expedition')), + ('expeditionday', models.ForeignKey(null=True, on_delete=django.db.models.deletion.SET_NULL, to='core.ExpeditionDay')), + ('parent', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, to='core.SurvexBlock')), + ('scansfolder', models.ForeignKey(null=True, on_delete=django.db.models.deletion.SET_NULL, to='core.ScansFolder')), ], options={ 'ordering': ('id',), @@ -345,7 +344,7 @@ class Migration(migrations.Migration): fields=[ ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), ('path', models.CharField(max_length=200)), - ('cave', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, to='core.Cave')), + ('cave', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, to='core.Cave')), ], options={ 'ordering': ('id',), @@ -356,8 +355,8 @@ class Migration(migrations.Migration): fields=[ ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), ('path', models.CharField(max_length=200)), - ('cave', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, to='core.Cave')), - ('survexdirectory', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, to='core.SurvexDirectory')), + ('cave', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, to='core.Cave')), + ('survexdirectory', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, to='core.SurvexDirectory')), ], options={ 'ordering': ('id',), @@ -369,10 +368,10 @@ class Migration(migrations.Migration): ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), ('nrole', models.CharField(blank=True, choices=[('insts', 'Instruments'), ('dog', 'Other'), ('notes', 'Notes'), ('pics', 'Pictures'), ('tape', 'Tape measure'), ('useless', 'Useless'), ('helper', 'Helper'), ('disto', 'Disto'), ('consultant', 'Consultant')], max_length=200, null=True)), ('personname', models.CharField(max_length=100)), - ('expeditionday', models.ForeignKey(null=True, on_delete=django.db.models.deletion.CASCADE, to='core.ExpeditionDay')), - ('person', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, to='core.Person')), - ('personexpedition', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, to='core.PersonExpedition')), - ('persontrip', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, to='core.PersonTrip')), + ('expeditionday', models.ForeignKey(null=True, on_delete=django.db.models.deletion.SET_NULL, to='core.ExpeditionDay')), + ('person', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, to='core.Person')), + ('personexpedition', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, to='core.PersonExpedition')), + ('persontrip', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, to='core.PersonTrip')), ('survexblock', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='core.SurvexBlock')), ], ), @@ -384,7 +383,7 @@ class Migration(migrations.Migration): ('x', models.FloatField(blank=True, null=True)), ('y', models.FloatField(blank=True, null=True)), ('z', models.FloatField(blank=True, null=True)), - ('block', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='core.SurvexBlock')), + ('block', models.ForeignKey(null=True, on_delete=django.db.models.deletion.SET_NULL, to='core.SurvexBlock')), ], ), migrations.CreateModel( @@ -392,8 +391,8 @@ class Migration(migrations.Migration): fields=[ ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), ('title', models.CharField(max_length=200)), - ('cave', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, to='core.Cave')), - ('survexblock', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='core.SurvexBlock')), + ('cave', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, to='core.Cave')), + ('survexblock', models.ForeignKey(null=True, on_delete=django.db.models.deletion.SET_NULL, to='core.SurvexBlock')), ], ), migrations.CreateModel( @@ -417,22 +416,22 @@ class Migration(migrations.Migration): migrations.AddField( model_name='survexdirectory', name='primarysurvexfile', - field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, related_name='primarysurvexfile', to='core.SurvexFile'), + field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='primarysurvexfile', to='core.SurvexFile'), ), migrations.AddField( model_name='survexblock', name='survexfile', - field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, to='core.SurvexFile'), + field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, to='core.SurvexFile'), ), migrations.AddField( model_name='qm', name='nearest_station', - field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, to='core.SurvexStation'), + field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, to='core.SurvexStation'), ), migrations.AddField( model_name='qm', name='ticked_off_by', - field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, related_name='QMs_ticked_off', to='core.LogbookEntry'), + field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='QMs_ticked_off', to='core.LogbookEntry'), ), migrations.AddField( model_name='cavedescription', diff --git a/core/models.py b/core/models.py index f6ab815..7ccef54 100644 --- a/core/models.py +++ b/core/models.py @@ -219,7 +219,7 @@ class PersonExpedition(TroggleModel): def surveyedleglength(self): survexblocks = [personrole.survexblock for personrole in self.personrole_set.all() ] - return sum([survexblock.totalleglength for survexblock in set(survexblocks)]) + return sum([survexblock.legslength for survexblock in set(survexblocks)]) # would prefer to return actual person trips so we could link to first and last ones def day_min(self): diff --git a/core/models_survex.py b/core/models_survex.py index 65bbaaa..375144c 100644 --- a/core/models_survex.py +++ b/core/models_survex.py @@ -113,9 +113,7 @@ class SurvexBlock(models.Model): scansfolder = models.ForeignKey("ScansFolder", null=True,on_delete=models.SET_NULL) legsall = models.IntegerField(null=True) # summary data for this block - legssplay = models.IntegerField(null=True) # summary data for this block - legssurfc = models.IntegerField(null=True) # summary data for this block - totalleglength = models.FloatField(null=True) + legslength = models.FloatField(null=True) class Meta: ordering = ('id',) diff --git a/core/views_logbooks.py b/core/views_logbooks.py index 1b4e6d1..1f1e2d1 100644 --- a/core/views_logbooks.py +++ b/core/views_logbooks.py @@ -166,38 +166,6 @@ def personForm(request,pk): form=PersonForm(instance=person) return render(request,'personform.html', {'form':form,}) -def experimental(request): - blockroots = models.SurvexBlock.objects.filter(name="rootblock") - if len(blockroots)>1: - print(" ! more than one root survexblock {}".format(len(blockroots))) - for sbr in blockroots: - print("{} {} {} {}".format(sbr.id, sbr.name, sbr.text, sbr.date)) - sbr = blockroots[0] - totalsurvexlength = sbr.totalleglength - try: - nimportlegs = int(sbr.text) - except: - print("{} {} {} {}".format(sbr.id, sbr.name, sbr.text, sbr.date)) - nimportlegs = -1 - - legsbyexpo = [ ] - addupsurvexlength = 0 - for expedition in Expedition.objects.all(): - survexblocks = expedition.survexblock_set.all() - legsyear=0 - survexleglength = 0.0 - for survexblock in survexblocks: - survexleglength += survexblock.totalleglength - try: - legsyear += int(survexblock.text) - except: - pass - addupsurvexlength += survexleglength - legsbyexpo.append((expedition, {"nsurvexlegs":legsyear, "survexleglength":survexleglength})) - legsbyexpo.reverse() - - return render(request, 'experimental.html', { "nsurvexlegs":nimportlegs, "totalsurvexlength":totalsurvexlength, "addupsurvexlength":addupsurvexlength, "legsbyexpo":legsbyexpo }) - @login_required_if_public def newLogbookEntry(request, expeditionyear, pdate = None, pslug = None): expedition = Expedition.objects.get(year=expeditionyear) diff --git a/core/views_statistics.py b/core/views_statistics.py index 5b85ef1..0ce8845 100644 --- a/core/views_statistics.py +++ b/core/views_statistics.py @@ -71,24 +71,6 @@ def stats(request): statsDict['caveCount'] = "{:,}".format(Cave.objects.count()) statsDict['personCount'] = "{:,}".format(Person.objects.count()) statsDict['logbookEntryCount'] = "{:,}".format(LogbookEntry.objects.count()) - try: - blockroots = SurvexBlock.objects.filter(name="rootblock") - if len(blockroots)>1: - print(" ! more than one root survexblock {}".format(len(blockroots))) - for sbr in blockroots: - print("{} {} {} {}".format(sbr.id, sbr.name, sbr.legsall, sbr.date)) - sbr = blockroots[0] - totalsurvexlength = sbr.totalleglength - nimportlegs = sbr.legsall - except: - # if no files yet imported into database - #survexfile = models_survex.SurvexFile(path=settings.SURVEX_TOPNAME, cave=None) - #survexblockdummy = models_survex.SurvexBlock(name="dummy", survexpath="", cave=None, survexfile=survexfile, - #legsall=0, legssplay=0, legssurfc=0, totalleglength=0.0) - #sbr = survexblockdummy - totalsurvexlength = 0.0 - nimportlegs = -1 - print("{} {} {} {}".format(sbr.id, sbr.name, sbr.legsall, sbr.date)) legsbyexpo = [ ] addupsurvexlength = 0 @@ -97,7 +79,7 @@ def stats(request): legsyear=0 survexleglength = 0.0 for survexblock in survexblocks: - survexleglength += survexblock.totalleglength + survexleglength += survexblock.legslength try: legsyear += int(survexblock.legsall) except: @@ -107,5 +89,5 @@ def stats(request): "survexleglength":"{:,.0f}".format(survexleglength)})) legsbyexpo.reverse() - renderDict = {**statsDict, **{ "nsurvexlegs": "{:,}".format(nimportlegs), "totalsurvexlength":totalsurvexlength/1000, "addupsurvexlength":addupsurvexlength/1000, "legsbyexpo":legsbyexpo }} # new syntax + renderDict = {**statsDict, **{ "addupsurvexlength":addupsurvexlength/1000, "legsbyexpo":legsbyexpo }} # new syntax return render(request,'statistics.html', renderDict) diff --git a/flatpages/migrations/0001_initial.py b/flatpages/migrations/0001_initial.py index f487926..c3798a8 100644 --- a/flatpages/migrations/0001_initial.py +++ b/flatpages/migrations/0001_initial.py @@ -1,5 +1,5 @@ # -*- coding: utf-8 -*- -# Generated by Django 1.11.29 on 2020-06-26 23:53 +# Generated by Django 1.11.29 on 2020-07-04 12:11 from __future__ import unicode_literals from django.db import migrations, models diff --git a/lines-of-python.txt b/lines-of-python.txt index edd5d66..cba37cc 100644 --- a/lines-of-python.txt +++ b/lines-of-python.txt @@ -16,40 +16,40 @@ 39 ./localsettings-expo-live.py 39 ./localsettingsdocker.py 39 ./localsettingsserver.py -40 ./parsers/imports.py 41 ./localsettingspotatohut.py 41 ./middleware.py 44 ./dump.py +44 ./parsers/imports.py 48 ./core/templatetags/survex_markup.py 49 ./parsers/subcaves.py 52 ./reset-django.py 63 ./logbooksdump.py 68 ./urls.py -69 ./core/TESTS/tests.py +71 ./core/TESTS/tests.py 73 ./localsettings.py 73 ./localsettingsWSL.py 73 ./settings.py -91 ./core/views_statistics.py +78 ./core/views_statistics.py 97 ./core/forms.py 97 ./core/view_surveys.py 98 ./core/admin.py -99 ./parsers/QMs.py 102 ./parsers/people.py +105 ./parsers/QMs.py 124 ./core/templatetags/wiki_markup.py -135 ./utils.py -141 ./core/models_survex.py -146 ./parsers/surveys.py +142 ./core/models_survex.py +144 ./utils.py +148 ./parsers/surveys.py 164 ./flatpages/views.py 164 ./modelviz.py 171 ./core/models.py 175 ./core/views_other.py -198 ./parsers/caves.py -216 ./core/views_logbooks.py -255 ./core/views_survex.py +187 ./core/views_logbooks.py +226 ./parsers/caves.py +263 ./core/views_survex.py 276 ./profiles/views.py -280 ./databaseReset.py -387 ./core/views_caves.py -449 ./core/models_caves.py -515 ./parsers/logbooks.py -556 ./parsers/survex.py -6049 +290 ./databaseReset.py +401 ./core/views_caves.py +492 ./parsers/logbooks.py +593 ./core/models_caves.py +908 ./parsers/survex.py +6564 diff --git a/lines-of-templates.txt b/lines-of-templates.txt index c5e7fc7..6780a44 100644 --- a/lines-of-templates.txt +++ b/lines-of-templates.txt @@ -30,14 +30,14 @@ 20 ./templates/cavebase.html 20 ./templates/plainbase.html 21 ./templates/logbook2005style.html -22 ./templates/tasks.html -23 ./templates/statistics.html 24 ./README/index.html 24 ./templates/dataformat/logbookentry.html 25 ./templates/manyscansfolders.html 25 ./templates/profiles/select_profile.html 27 ./templates/scansfolder.html +27 ./templates/statistics.html 31 ./templates/caveindex.html +31 ./templates/tasks.html 33 ./templates/tunnelfiles.html 35 ./templates/person.html 35 ./templates/qm.html @@ -61,6 +61,6 @@ 75 ./templates/newlogbookentry.html 85 ./templates/editfile.html 102 ./templates/prospecting.html -115 ./templates/controlPanel.html +117 ./templates/controlPanel.html 439 ./templates/cave.html -2435 +2450 diff --git a/parsers/survex.py b/parsers/survex.py index 272dc19..4d47d7b 100644 --- a/parsers/survex.py +++ b/parsers/survex.py @@ -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() diff --git a/templates/statistics.html b/templates/statistics.html index cd9bf4a..1ccab1d 100644 --- a/templates/statistics.html +++ b/templates/statistics.html @@ -10,18 +10,12 @@ <p>{{ expoCount }} expeditions: {{ personCount }} people, {{ caveCount }} caves and {{ logbookEntryCount }} logbook entries. <p>Number of survey legs: {{nsurvexlegs}}<br /> -Total length: {{totalsurvexlength|stringformat:".1f"}} km added-up on importing survex files.<br /> Total length: {{addupsurvexlength|stringformat:".1f"}} km adding up the total for each year.</p> -<p>These are raw tape lengths which include pitches, splays and surface-surveys. There is also some doubt that the parsing is -correct so maybe some long lengths are misinterpeted: compass readings as tape-lengths for example: LoadSurvexDataCmd -in parsers/survex.py would be a good place to start. +<p>These are uncorrected tape lengths which include pitches and duplicates but exclude splays or surface-surveys. <p> This is work in progress (July 2020). -<p>However the number of survey legs should be correct, and the by-year total <em>should</em> be -the same as the by-file-import total.<br>Obviously there is still work to do. - <table> <tr><th>Year</th><th>Survex<br>Survey<br>Blocks</th><th>Survex<br>Survey Legs</th><th>Total length<br>(m)</th></tr> {% for legs in legsbyexpo %} diff --git a/templates/svxcavesingle.html b/templates/svxcavesingle.html index 64c867e..b2c1096 100644 --- a/templates/svxcavesingle.html +++ b/templates/svxcavesingle.html @@ -57,7 +57,7 @@ {% endfor %} </td> - <td>{{survexblock.totalleglength}}</td> + <td>{{survexblock.legslength}}</td> <td> {% for survextitle in survexblock.survextitle_set.all %} |