summaryrefslogtreecommitdiffstats
path: root/core/models/wallets.py
diff options
context:
space:
mode:
authorPhilip Sargent <philip.sargent@gmail.com>2023-10-21 16:22:20 +0300
committerPhilip Sargent <philip.sargent@gmail.com>2023-10-21 16:22:20 +0300
commite7a0c57330a9c3808531b4d401d0cedf0f0c0638 (patch)
tree83eea4cf4da7a90b1f9062bf1988ef45f9d3ef5c /core/models/wallets.py
parent24029be7d3406e4c3ce7790c066b4ad6033c4202 (diff)
downloadtroggle-e7a0c57330a9c3808531b4d401d0cedf0f0c0638.tar.gz
troggle-e7a0c57330a9c3808531b4d401d0cedf0f0c0638.tar.bz2
troggle-e7a0c57330a9c3808531b4d401d0cedf0f0c0638.zip
wallets & caves now many:many
Diffstat (limited to 'core/models/wallets.py')
-rw-r--r--core/models/wallets.py32
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