summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--core/models/survex.py23
-rw-r--r--parsers/locations.py61
2 files changed, 48 insertions, 36 deletions
diff --git a/core/models/survex.py b/core/models/survex.py
index 37e8eb5..7c0f38e 100644
--- a/core/models/survex.py
+++ b/core/models/survex.py
@@ -86,22 +86,23 @@ class SurvexStationLookUpManager(models.Manager):
class SurvexStation(models.Model):
name = models.CharField(max_length=100)
- block = models.ForeignKey("SurvexBlock", null=True, on_delete=models.SET_NULL)
+ # block = models.ForeignKey("SurvexBlock", null=True, on_delete=models.SET_NULL)
+ # block not used since 2020. survex stations objects are only used for entrnce locations and all taken from the .3d file
objects = SurvexStationLookUpManager() # overwrites SurvexStation.objects and enables lookup()
x = models.FloatField(blank=True, null=True)
y = models.FloatField(blank=True, null=True)
z = models.FloatField(blank=True, null=True)
- def path(self):
- r = self.name
- b = self.block
- while True:
- if b.name:
- r = b.name + "." + r
- if b.parent:
- b = b.parent
- else:
- return r
+ # def path(self):
+ # r = self.name
+ # b = self.block
+ # while True:
+ # if b.name:
+ # r = b.name + "." + r
+ # if b.parent:
+ # b = b.parent
+ # else:
+ # return r
class Meta:
ordering = ("id",)
diff --git a/parsers/locations.py b/parsers/locations.py
index 8384028..b3a318c 100644
--- a/parsers/locations.py
+++ b/parsers/locations.py
@@ -192,30 +192,42 @@ def LoadPositions():
posfile = open(pospath)
posfile.readline() # Drop header
- try:
- survexblockroot = SurvexBlock.objects.get(name=ROOTBLOCK)
- except:
- try:
- survexblockroot = SurvexBlock.objects.get(id=1)
- except:
- message = " ! FAILED to find root SurvexBlock"
- print(message)
- stash_data_issue(parser="entrances", message=message)
- raise
+
+ # not used survexblock on a SurvexStation since we stopped storing all of them in 2020:
+ # try:
+ # survexblockroot = SurvexBlock.objects.get(name=ROOTBLOCK)
+ # except:
+ # try:
+ # survexblockroot = SurvexBlock.objects.get(id=1)
+ # except:
+ # message = " ! FAILED to find root SurvexBlock"
+ # print(message)
+ # stash_data_issue(parser="entrances", message=message)
+ # raise
+ sbdict = {}
+ dups = 0
+ lineno = 1 # we dropped the header
for line in posfile.readlines():
+ lineno += 1
r = poslineregex.match(line)
if r:
- x, y, z, id = r.groups()
+ x, y, z, sbid = r.groups() # renamed id to sbid so as to not confuse with Django internal .id
+ if sbid in sbdict:
+ dups += 1
+ message = f" ! DUPLICATE SurvexBlock identifier in .pos file '{sbid}'\n{sbs[sbid]}\n{lineno} / {line}"
+ print(message)
+ stash_data_issue(parser="entrances", message=message)
+ else:
+ sbdict[sbid] = lineno
+
for sid in mappoints:
- if id.endswith(sid):
- blockpath = "." + id[: -len(sid)].strip(".")
- # But why are we doing this? Why do we need the survexblock id for each of these ?
+ if sbid.endswith(sid):
+ blockpath = "." + sbid[: -len(sid)].strip(".") # only the most recent one that is mappoints
+ # But why are we doing this? Why do we want the survexblock id for each of these ?
# ..because mostly they don't actually appear in any SVX file. We should match them up
# via the cave data, not by this half-arsed syntactic match which almost never works. PMS.
- # It is pointless linking them all to the root survexblock, they don't need it.
- # If there is a link to a survexblock it should be the one the station appears in !
- # But we are reading the .pos file so we only know the SurvexFile not the SurvexBlock..
+ # We are reading the .pos file so we only know the SurvexFile not the SurvexBlock.
# ghastly.
if False:
try:
@@ -223,29 +235,28 @@ def LoadPositions():
if len(sbqs) == 1:
sbqs[0]
if len(sbqs) > 1:
- message = f" ! MULTIPLE SurvexBlocks {len(sbqs):3} matching Entrance point {blockpath} {sid} '{id}'"
+ message = f" ! MULTIPLE {len(sbqs):3} SurvexBlocks '{blockpath}' from survex files mention Entrance point '{sbid}' (line {lineno})"
print(message)
stash_data_issue(parser="entrances", message=message)
+ for b in sbqs:
+ print(f" - {b}")
sbqs[0]
- elif len(sbqs) <= 0:
- message = f" ! ZERO SurvexBlocks matching Entrance point {blockpath} {sid} '{id}'"
- print(message)
- stash_data_issue(parser="entrances", message=message)
except:
- message = f" ! FAIL in getting SurvexBlock matching Entrance point {blockpath} {sid}"
+ message = f" ! {lineno} FAIL in getting SurvexBlock matching Entrance point {blockpath} {sid}"
print(message)
stash_data_issue(parser="entrances", message=message)
try:
- ss = SurvexStation(name=id, block=survexblockroot)
+ ss = SurvexStation(name=sbid)
ss.x = float(x)
ss.y = float(y)
ss.z = float(z)
ss.save()
found += 1
except:
- message = f" ! FAIL to create SurvexStation Entrance point {blockpath} {sid}"
+ message = f" ! {lineno} FAIL to create SurvexStation Entrance point {blockpath} {sid}"
print(message)
stash_data_issue(parser="entrances", message=message)
raise
print(f" - {found} SurvexStation entrances found.")
+ print(f" - {dups} Duplicated SurvexStation entrances found")
store_data_issues()