summaryrefslogtreecommitdiffstats
path: root/core
diff options
context:
space:
mode:
Diffstat (limited to 'core')
-rw-r--r--core/TESTS/tests-cuyc-ignored.py2
-rw-r--r--core/models/logbooks.py6
-rw-r--r--core/models/survex.py14
-rw-r--r--core/models/wallets.py86
-rw-r--r--core/views/wallets_edit.py31
5 files changed, 77 insertions, 62 deletions
diff --git a/core/TESTS/tests-cuyc-ignored.py b/core/TESTS/tests-cuyc-ignored.py
index ac4e5b3..976c97f 100644
--- a/core/TESTS/tests-cuyc-ignored.py
+++ b/core/TESTS/tests-cuyc-ignored.py
@@ -26,7 +26,7 @@ from django.test import Client, SimpleTestCase, TestCase, TransactionTestCase
class ImportTest(TestCase):
def test_import_imports(self):
- ed to go through all modules and copy all imports here
+ #ed to go through all modules and copy all imports here
from io import StringIO
from cuy.club.models import (Article, Event, Member, Webpage,
diff --git a/core/models/logbooks.py b/core/models/logbooks.py
index b0bde61..34032fd 100644
--- a/core/models/logbooks.py
+++ b/core/models/logbooks.py
@@ -85,12 +85,12 @@ class LogbookEntry(TroggleModel):
if self in todays:
index = todays.index(self)
else:
- print(f"DayIndex: Synchronization error. Restart server. {self}")
+ print(f"DayIndex: Synchronization error in logbook entries. Restart server or do full reset. {self}")
index = 0
if index not in range(0, mx):
- print(f"DayIndex: More than {mx-1} LogbookEntry items on one day '{index}' {self}")
- index = 0
+ print(f"DayIndex: More than {mx-1} LogbookEntry items on one day '{index}' {self}, restarting colour sequence.")
+ index = index % mx
return index
diff --git a/core/models/survex.py b/core/models/survex.py
index 7b69b64..37e8eb5 100644
--- a/core/models/survex.py
+++ b/core/models/survex.py
@@ -228,15 +228,17 @@ class SurvexBlock(models.Model):
def DayIndex(self):
"""This is used to set different colours for the different trips on
the calendar view of the expedition"""
+ # print(f"SurvexBlock DayIndex {self.name} '{self.date}' {len(list(SurvexBlock.objects.filter(date=self.date)))} on this date")
mx = 10
- try:
- index = list(SurvexBlock.objects.filter(date=self.date)).index(self)
- except:
- print(f"DayIndex: BAD BAD BAD SurvexBlock items on one day '{index}' {self}")
+ todays = list(SurvexBlock.objects.filter(date=self.date))
+ if self in todays:
+ index = todays.index(self)
+ else:
+ print(f"DayIndex: Synchronization error in survex blocks. Restart server or do full reset. {self}")
index = 0
if index not in range(0, mx):
- print(f"DayIndex: More than {mx-1} SurvexBlock items on one day '{index}' {self}")
- index = 0
+ print(f"DayIndex: More than {mx-1} SurvexBlock items on one day '{index}' {self}, restarting colour sequence.")
+ index = index % mx
# return list(self.survexblock_set.all()).index(self)
return index
diff --git a/core/models/wallets.py b/core/models/wallets.py
index 6d217c6..29ca9e2 100644
--- a/core/models/wallets.py
+++ b/core/models/wallets.py
@@ -15,6 +15,42 @@ from django.urls import reverse
YEAR_RANGE = (1975, 2050)
+def make_valid_date(date):
+ """Take whatever garbage some fool has typed in and try to make it into a valid ISO-format date
+ """
+ datestr = date.replace(".", "-")
+ try:
+ samedate = datetime.date.fromisoformat(datestr)
+ except ValueError:
+ # Could be in std euro format e.g. 14/07/2023
+ match = re.search(r'(\d{1,2})/(\d{1,2})/(\d{2,4})', datestr)
+ if match:
+ d = int(match.group(1))
+ m = int(match.group(2))
+ y = int(match.group(3))
+ if y<2000:
+ y = y + 2000
+ try:
+ samedate = datetime.date(y, m, d)
+ print(f"- - Warning, not in ISO format. '{datestr=}' but we coped: {samedate.isoformat()} ")
+ return samedate
+ except:
+ print(f"! - Fail, tried to decompose date in dd/mm/yyyy format but failed: {datestr=} ")
+ return None
+ # probably a single digit day number. HACKUS MAXIMUS.
+ datestr = datestr[:-1] + "0" + datestr[-1]
+ # datestr = f"{datestr:02d}"
+ print(f"! - ValueError, trying.. {datestr=} ")
+ try:
+ samedate = datetime.date.fromisoformat(datestr)
+ except:
+ try:
+ samedate = datetime.date.fromisoformat(datestr[:10])
+ except:
+ print(f"! - ValueError, FAILED {datestr=} ")
+ samedate = None
+ return samedate
+
class Wallet(models.Model):
"""We do not keep the JSON values in the database, we query them afresh each time,
but we will change this when we need to do a Django query on e.g. personame
@@ -33,7 +69,9 @@ class Wallet(models.Model):
def get_json(self):
"""Read the JSON file for the wallet and do stuff
- Do it every time it is queried, to be sure the result is fresh"""
+ Do it every time it is queried, to be sure the result is fresh
+
+ import DataIssue locally to prevent import cycle problem"""
# jsonfile = Path(self.fpath, 'contents.json')
# Get from git repo instead
@@ -42,7 +80,7 @@ class Wallet(models.Model):
fp = Path(self.fpath)
wname = fp.name
wyear = fp.parent.name
- wurl = f"/walletedit/{self.walletname}" # .replace('#', ':')
+ wurl = f"/walletedit/{self.walletname}".replace('#', ':')
if len(wyear) != 4 or len(wname) !=6:
# no contents.json for old-style wallets
@@ -52,7 +90,10 @@ class Wallet(models.Model):
jsonfile = Path(settings.DRAWINGS_DATA, "walletjson") / wyear / wname / "contents.json"
if not Path(jsonfile).is_file():
- print(f'{jsonfile} is not a file {wyear=} {wname=} ')
+ message = f"! {jsonfile} is not a file {wyear=} {wname=} "
+ from troggle.core.models.troggle import DataIssue
+ print(message)
+ DataIssue.objects.update_or_create(parser="wallets", message=message, url=wurl)
return None
else:
with open(jsonfile) as json_f:
@@ -60,33 +101,20 @@ class Wallet(models.Model):
waldata = json.load(json_f)
except:
message = f"! {str(self.walletname)} Failed to load {jsonfile} JSON file"
- # print(message)
- raise
+ print(message)
+ DataIssue.objects.update_or_create(parser="wallets", message=message, url=wurl)
+ return None
+
if waldata["date"]:
- datestr = waldata["date"].replace(".", "-")
- try:
- thisdate = datetime.date.fromisoformat(datestr)
- except ValueError:
- # probably a single digit day number. HACKUS MAXIMUS.
- # clearly we need to fix this when we first import date strings..
- datestr = datestr[:-1] + "0" + datestr[-1]
- print(f" - {datestr=} ")
- try:
- thisdate = datetime.date.fromisoformat(datestr)
- self.walletdate = thisdate
- self.save()
- try:
- waldata["date"] = thisdate.isoformat()
- except:
- message = f"! {str(self.walletname)} Date formatting failure {thisdate}. Failed to load from {jsonfile} JSON file"
- from troggle.core.models.troggle import DataIssue
-
- DataIssue.objects.update_or_create(parser="scans", message=message, url=wurl)
- except:
- message = f"! {str(self.walletname)} Date format not ISO {datestr}. Failed to load from {jsonfile} JSON file"
- from troggle.core.models.troggle import DataIssue
-
- DataIssue.objects.update_or_create(parser="scans", message=message, url=wurl)
+ thisdate = make_valid_date(waldata["date"])
+ if thisdate:
+ self.walletdate = thisdate
+ self.save()
+ waldata["date"] = thisdate.isoformat()
+ else:
+ message = f"! {str(self.walletname)} Date format not ISO {waldata['date']}. Failed to load from {jsonfile} JSON file"
+ from troggle.core.models.troggle import DataIssue
+ DataIssue.objects.update_or_create(parser="wallets", message=message, url=wurl)
return waldata
def year(self):
diff --git a/core/views/wallets_edit.py b/core/views/wallets_edit.py
index 5bf0032..9273fed 100644
--- a/core/views/wallets_edit.py
+++ b/core/views/wallets_edit.py
@@ -18,7 +18,7 @@ from troggle.core.models.caves import Cave
from troggle.core.models.logbooks import LogbookEntry # , PersonLogEntry
from troggle.core.models.survex import SurvexBlock, SurvexFile, SurvexPersonRole
from troggle.core.models.troggle import DataIssue, Expedition
-from troggle.core.models.wallets import Wallet, YEAR_RANGE
+from troggle.core.models.wallets import Wallet, YEAR_RANGE, make_valid_date
from troggle.core.views.auth import login_required_if_public
from troggle.core.views.caves import getCave
@@ -32,7 +32,7 @@ from troggle.parsers.scans import contentsjson
"""
todo = """
-- Nasty bug in navingating to 'previous wallet' when we have a 2-year gap in expos
+- Nasty bug in navigating to 'previous wallet' when we have a 2-year gap in expos
The xxxx#00 wallet is not getting edited correctly. Something is off by one somewhere..
- Register uploaded filenames in the Django db without needing to wait for a reset & bulk file import
@@ -237,8 +237,11 @@ def get_complaints(complaints, waldata, svxfiles, files, wallet, wurl):
i = i.replace("/", "-")
caveobject = getCave(i) # only the last one gets recorded.. ouch.
else:
- caveid = caveid
- caveobject = getCave(caveid)
+ caveid = caveid # ?urk? why?
+ try:
+ caveobject = getCave(caveid) # may fail if garbage value ,e.g. space, in wallet data
+ except:
+ caveobject = None
print(f'getCave for id "{waldata["cave"]}" {caveobject}')
# if not caveobject.url == waldata["description url"]:
# complaints.append(f'The URL of cave description \"{waldata["description url"]}\" does not match the one on record for this cave which is: "{caveobject.url}". If the wallet is not for a cave, put a useful URL here.')
@@ -493,25 +496,7 @@ def walletedit(request, path=None):
or thing == "[]"
or thing is None)
- def make_valid_date(date):
- datestr = date.replace(".", "-")
- try:
- samedate = datetime.date.fromisoformat(datestr)
- except ValueError:
- # probably a single digit day number. HACKUS MAXIMUS.
- # clearly we need to fix this when we first import date strings..
- datestr = datestr[:-1] + "0" + datestr[-1]
- # datestr = f"{datestr:02d}"
- print(f"! - ValueError, trying.. {datestr=} ")
- try:
- samedate = datetime.date.fromisoformat(datestr)
- except:
- try:
- samedate = datetime.date.fromisoformat(datestr[:10])
- except:
- print(f"! - ValueError, FAILED {datestr=} ")
- samedate = None
- return samedate
+
def scan_survexblocks(svxfile):
"""Scans for *team people attached to all the survex blocks in this svxfile