Populate blank wallet fields with survex data

This commit is contained in:
Philip Sargent 2022-07-29 20:55:19 +03:00
parent bc3da1182b
commit 724234949f
3 changed files with 69 additions and 10 deletions

View File

@ -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)

View File

@ -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 %}
# <a href="{{personrole.personexpedition.get_absolute_url}}">{{personrole.personname}}</a>
# {% 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):

View File

@ -12,7 +12,7 @@ traced to produce Tunnel or Therion drawings and eventually the final complete c
<p>This lists all the files in a wallet, some of which may not be for this specific cave.
<table width=95%>
<tr><th>Wallet</th><th>Wallet Date</th><th>Wallet Name</th><th>People</th><th>Scans</th><th>Survex blocks</th><th>Survex dates</th><th>Drawings using these scans</th></tr>
<tr><th>Wallet</th><th>Wallet Date</th><th>Wallet Name</th><th>People</th><th>Cave</th><th>Scans</th><th>Survex blocks</th><th>Drawings using these scans</th></tr>
{% for wallet in manywallets|dictsort:"walletname" %}
<tr>
<td style="padding:2px"><a href="{{wallet.get_absolute_url}}">{{wallet.walletname}}</a></td>
@ -20,6 +20,7 @@ traced to produce Tunnel or Therion drawings and eventually the final complete c
<td style="padding:2px">{{wallet.date}}</td>
<td style="padding:2px">{{wallet.name}}</td>
<td style="padding:2px">{{wallet.people}}</td>
<td style="padding:2px">{{wallet.cave}}</td>
<td align="right" style="padding:2px">{{wallet.singlescan_set.all|length}}</td>
<td style="padding:2px">
@ -27,11 +28,7 @@ traced to produce Tunnel or Therion drawings and eventually the final complete c
<a href="{% url "svx" survexblock.survexfile.path %}">{{survexblock}}</a>
{% endfor %}
</td>
<td style="padding:2px">
{% for survexblock in wallet.survexblock_set.all %}
{{survexblock.date}}&nbsp;&nbsp;
{% endfor %}
</td>
<td style="padding:2px">
{% for drawing in wallet.drawingfile_set.all %}
<a href="{% url "dwgfilesingle" drawing.dwgpath %}">{{drawing.dwgpath}}</a><br>