diff options
Diffstat (limited to 'core/models/wallets.py')
-rw-r--r-- | core/models/wallets.py | 32 |
1 files changed, 31 insertions, 1 deletions
diff --git a/core/models/wallets.py b/core/models/wallets.py index bae919a..3f59da0 100644 --- a/core/models/wallets.py +++ b/core/models/wallets.py @@ -10,6 +10,8 @@ from django.conf import settings from django.db import models from django.urls import reverse +from troggle.core.views.caves import get_cave_leniently + # from troggle.core.models.survex import SurvexBlock # from troggle.core.models.troggle import DataIssue # circular import. Hmm @@ -74,12 +76,15 @@ archaic_wallets = [ class Wallet(models.Model): """We do not keep the JSON values in the database, we query them afresh each time, but we may change this if we need to do a Django query on e.g. personame + + ManyToMany field uses modern Django: a hidden Class, unlike CaveAndEntrances which is explict and visible. """ fpath = models.CharField(max_length=200) walletname = models.CharField(max_length=200) walletdate = models.DateField(blank=True, null=True) walletyear = models.DateField(blank=True, null=True) + caves = models.ManyToManyField("Cave", related_name="wallets") class Meta: ordering = ("walletname",) @@ -139,7 +144,31 @@ class Wallet(models.Model): from troggle.core.models.troggle import DataIssue DataIssue.objects.update_or_create(parser="wallets", message=message, url=wurl) return waldata - + + def allcaves(self): + """Reads all the JSON data just to get the JSON date.""" + if not (jsondata := self.get_json()): # WALRUS + print(f"Failed to read JSON file {self}") + return None + cavelist = jsondata["cave"] + if type(cavelist) is list: + for i in cavelist: + if i != "": + i = i.replace("/", "-") + caveobject = get_cave_leniently(i) + self.caves.add(caveobject) # new many-to-many field + else: + # either single cave or the square barckets have been removed and it s a singoe string + ids = cavelist.split(",") + for i in ids: + j = i.replace("'","").replace("/", "-").strip('[] "') + if i != "": + try: + caveobject = get_cave_leniently(j) # may fail if garbage value ,e.g. space, in wallet data + self.caves.add(caveobject) + except: + print(f"FAIL adding cave to wallet.caves '{j}'") + pass def year(self): """This gets the year syntactically without opening and reading the JSON""" if len(self.walletname) < 5: @@ -180,6 +209,7 @@ class Wallet(models.Model): self.save() return self.walletdate + # for gods sake redo this, it parse JSON twice every time.. def people(self): if not self.get_json(): return None |