From 724234949f1770645b0f8c34221ae16b0615daf3 Mon Sep 17 00:00:00 2001 From: Philip Sargent Date: Fri, 29 Jul 2022 20:55:19 +0300 Subject: [PATCH] Populate blank wallet fields with survex data --- core/models/survex.py | 7 ++++- core/views/scans.py | 63 ++++++++++++++++++++++++++++++++++++-- templates/cavewallets.html | 9 ++---- 3 files changed, 69 insertions(+), 10 deletions(-) diff --git a/core/models/survex.py b/core/models/survex.py index d8a5fb5..79a645e 100644 --- a/core/models/survex.py +++ b/core/models/survex.py @@ -191,6 +191,7 @@ class Wallet(models.Model): return waldata + # Yes this is horribly, horribly inefficient, esp. for a page that have date, people and cave in it def date(self): jsondata = self.get_json() return jsondata["date"] @@ -199,12 +200,16 @@ class Wallet(models.Model): jsondata = self.get_json() return jsondata["people"] + def cave(self): + jsondata = self.get_json() + return jsondata["cave"] + def name(self): jsondata = self.get_json() return jsondata["name"] def __str__(self): - return str(self.walletname) + " (Wallet)" + return "[" + str(self.walletname) + " (Wallet)]" class SingleScan(models.Model): ffile = models.CharField(max_length=200) diff --git a/core/views/scans.py b/core/views/scans.py index 7d933c7..fda3d6d 100644 --- a/core/views/scans.py +++ b/core/views/scans.py @@ -1,5 +1,6 @@ import os, stat import re +import datetime from pathlib import Path from urllib.parse import urljoin, unquote as urlunquote from urllib.request import urlopen @@ -8,7 +9,7 @@ from django.conf import settings from django.shortcuts import render from django.http import HttpResponse -from troggle.core.models.survex import Wallet, SingleScan +from troggle.core.models.survex import Wallet, SingleScan, SurvexBlock from troggle.core.models.caves import GetCaveLookup from troggle.core.views.expo import getmimetype #import parsers.surveys @@ -21,9 +22,43 @@ need to check if inavlid query string is invalid, or produces multiple replies and render a user-friendly error page. ''' +def populatewallet(w): + '''Copy survex data here just for display, not permanently + ''' + # {% for personrole in wallet.survexblock.survexpersonrole_set.all %} + # {% if personrole.personexpedition %} + # {{personrole.personname}} + # {% else %} + # {{personrole.personname}} + # {% endif %} + # {% endfor %} + + survexpeople = [] + blocks = SurvexBlock.objects.filter(scanswallet = w) + for b in blocks: + for personrole in b.survexpersonrole_set.all(): + survexpeople.append(personrole.personname) + w.people = list(set(survexpeople)) # remove duplicates + +def datewallet(w, earliest): + blocks = SurvexBlock.objects.filter(scanswallet = w) + for b in blocks: + if b.date < earliest: + earliest = b.date + w.date = earliest + +def caveifywallet(w): + print('*') + blocks = SurvexBlock.objects.filter(scanswallet = w) + for b in blocks: + # NB b.cave is not populated by parser. Use b.survexfile.cave instead, or we could parse b.survexpath + if b.survexfile.cave: + w.cave = b.survexfile.cave # just gets the last one, randomly + print(w.cave) + def walletslistyear(request, year): - '''Page which displays a list of all the wallets in a specific year + '''Page which displays a list of all the wallets in a specific year - TO BE WRITTEN ''' if year < 1976 or year > 2050: return render(request, 'errors/generic.html', {'message': 'Year out of range. Must be between 1976 and 2050'}) @@ -35,16 +70,38 @@ def walletslistyear(request, year): def cavewallets(request, caveid): '''Returns all the wallets for just one cave ''' + Gcavelookup = GetCaveLookup() if caveid in Gcavelookup: cave = Gcavelookup[caveid] else: return render(request,'errors/badslug.html', {'badslug': caveid}) + earliest = datetime.datetime.now().date() + # remove duplication. SOrting is done in the template wallets = set(Wallet.objects.filter(survexblock__survexfile__cave=cave)) # NB a filtered set manywallets = list(wallets) - + + + for w in manywallets: + wp = w.people() + if not wp: # an -empty list + populatewallet(w) + else: + if len(wp) == 1: + nobody = wp[0].lower() + if nobody == 'unknown' or nobody == 'nobody' or nobody == ' ': + populatewallet(w) + + if not w.date(): + datewallet(w, earliest) + + c = w.cave() + + if not c: + caveifywallet(w) + return render(request, 'cavewallets.html', { 'manywallets':manywallets, 'settings': settings, 'cave': cave}) def oldwallet(request, path): diff --git a/templates/cavewallets.html b/templates/cavewallets.html index 49a36e3..51e5d76 100644 --- a/templates/cavewallets.html +++ b/templates/cavewallets.html @@ -12,7 +12,7 @@ traced to produce Tunnel or Therion drawings and eventually the final complete c

This lists all the files in a wallet, some of which may not be for this specific cave. - + {% for wallet in manywallets|dictsort:"walletname" %} @@ -20,6 +20,7 @@ traced to produce Tunnel or Therion drawings and eventually the final complete c + - +
WalletWallet DateWallet NamePeopleScansSurvex blocksSurvex datesDrawings using these scans
WalletWallet DateWallet NamePeopleCaveScansSurvex blocksDrawings using these scans
{{wallet.walletname}}{{wallet.date}} {{wallet.name}} {{wallet.people}}{{wallet.cave}} {{wallet.singlescan_set.all|length}} @@ -27,11 +28,7 @@ traced to produce Tunnel or Therion drawings and eventually the final complete c {{survexblock}} {% endfor %} - {% for survexblock in wallet.survexblock_set.all %} - {{survexblock.date}}   - {% endfor %} - {% for drawing in wallet.drawingfile_set.all %} {{drawing.dwgpath}}