summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--core/models/caves.py12
-rw-r--r--core/views/survex.py74
-rw-r--r--templates/errors/svxcaves404.html (renamed from templates/errors/svxcavesingle404.html)0
-rw-r--r--templates/svxcaves.html (renamed from templates/svxcavesingle.html)18
-rw-r--r--templates/svxcaveseveral.html101
-rw-r--r--urls.py6
6 files changed, 51 insertions, 160 deletions
diff --git a/core/models/caves.py b/core/models/caves.py
index d272744..e8cfeea 100644
--- a/core/models/caves.py
+++ b/core/models/caves.py
@@ -490,10 +490,9 @@ def GetCaveLookup():
Used when parsing wallets contents.json file too in views/uploads.py
- Does NOT detect duplicates! Needs fixing.
- Needs to be a proper funciton that raises an exception if there is a duplicate.
+ Needs to be a proper function that raises an exception if there is a duplicate.
OR we could set it to return None if there are duplicates, and require the caller to
- fall back on doing the actual database query it wants rather thna using this cache shortcut
+ fall back on doing the actual database query it wants rather than using this cache shortcut
"""
duplicates = {}
@@ -506,10 +505,7 @@ def GetCaveLookup():
else:
if cave == Gcavelookup[id]:
pass # same id, same cave
- else: # same id but different cave
- # message = f" - Warning: ignoring alias id '{id:3}'. Caves '{Gcavelookup[id]}' and '{cave}'. "
- # print(message)
- # DataIssue.objects.create(parser="aliases", message=message)
+ else: # same id but different cave, e.g. 122 => 1623-122 and 1626-122
duplicates[id] = 1
global Gcavelookup
@@ -689,7 +685,7 @@ def GetCaveLookup():
Gcavelookup[i[0]] = Gcavelookup[i[1]]
else:
message = f" * Coding or cave existence mistake, cave for id '{i[1]}' does not exist. Expecting to set alias '{i[0]}' to it"
- # print(message)
+ print(message)
DataIssue.objects.create(parser="aliases", message=message)
addmore = {}
diff --git a/core/views/survex.py b/core/views/survex.py
index bd9df25..3ecd523 100644
--- a/core/views/survex.py
+++ b/core/views/survex.py
@@ -17,7 +17,7 @@ from django.views.decorators.csrf import ensure_csrf_cookie
import troggle.settings as settings
from troggle.core.models.logbooks import LogbookEntry
-from troggle.core.models.caves import Cave
+from troggle.core.models.caves import Cave, GetCaveLookup
from troggle.core.models.survex import SurvexFile, SurvexBlock, SurvexDirectory
from troggle.core.models.wallets import Wallet
from troggle.core.utils import only_commit
@@ -670,43 +670,41 @@ def survexdir(request):
# print(f, f.cave)
return render(request, "survexdir.html", {"survexdirs": sds, "survexfiles": survexfiles})
-
-def survexcavesingle(request, survex_cave):
+def get_directories(cave):
+ sds = []
+ sfs = cave.survexfile_set.all()
+ for sf in sfs:
+ sds.append(sf.survexdirectory)
+ return list(set(sds))
+
+
+
+def survexcavesingle(request, cave_shortname):
"""parsing all the survex files of a single cave and showing that it's consistent and can find all
- the files and people. Should explicitly fix the kataster number thing.
- kataster numbers are not unique across areas. This used to be a db constraint but we need to manage
- this ourselves as we don't want the parser aborting with an error message.
-
- Should use getCave() from models_caves
+ the files and people.
"""
- sc = survex_cave
- try:
- cave = Cave.objects.get(kataster_number=sc) # This may not be unique.
- return render(request, "svxcavesingle.html", {"settings": settings, "cave": cave})
-
- except ObjectDoesNotExist:
- # can get here if the survex file is in a directory labelled with unofficial number not kataster number.
- # maybe - and _ mixed up, or CUCC-2017- instead of 2017-CUCC-, or CUCC2015DL01 . Let's not get carried away..
-
- # or it might be an exact search for a specific survefile but just missing the '.svx.
- if (SVXPATH / Path(survex_cave + ".svx")).is_file():
- return svx(request, survex_cave)
-
- for unoff in [sc, sc.replace("-", "_"), sc.replace("_", "-"), sc.replace("-", ""), sc.replace("_", "")]:
- try:
- cave = Cave.objects.get(unofficial_number=unoff) # return on first one we find
- return render(request, "svxcavesingle.html", {"settings": settings, "cave": cave})
- except ObjectDoesNotExist:
- continue # next attempt in for loop
- return render(request, "errors/svxcavesingle404.html", {"settings": settings, "cave": sc})
-
- except MultipleObjectsReturned:
- caves = Cave.objects.filter(kataster_number=survex_cave)
- return render(request, "svxcaveseveral.html", {"settings": settings, "caves": caves})
-
- except:
- return render(request, "errors/svxcavesingle404.html", {"settings": settings, "cave": sc})
-
+
+ Gcavelookup = GetCaveLookup()
+ if cave_shortname in Gcavelookup:
+ cave = Gcavelookup[cave_shortname]
+ # print(f"survexcavesingle {cave_shortname=} => {cave=}")
+ cave.sds = get_directories(cave)
+ return render(request, "svxcaves.html", {"settings": settings, "caves": [cave]})
+ else:
+ # not a cave or an ambiguous short name, e.g. "122"
+
+ # if (SVXPATH / Path(cave_shortname + ".svx")).is_file():
+ # return svx(request, cave_shortname)
+
+ caves = Cave.objects.filter(kataster_number=cave_shortname)
+ if len(caves) > 0:
+ # print(f"many {cave_shortname=} => {caves=}")
+ for cave in caves:
+ cave.sds = get_directories(cave)
+ # print(f"many {cave=} => {cave.sds=}")
+ return render(request, "svxcaves.html", {"settings": settings, "caves": caves})
+ else:
+ return render(request, "errors/svxcaves404.html", {"settings": settings, "cave": cave_shortname})
def check_cave_registered(area, survex_cave):
"""Checks whether a cave has been properly registered when it is found in the Loser repo
@@ -714,8 +712,8 @@ def check_cave_registered(area, survex_cave):
Currently Caves are only registered if they are listed in :expoweb: settings.CAVEDESCRIPTIONS
so we need to add in any more here.
- This function runs but does not seem to be used?!
- A serious bodge anyway.
+ This function is used in survexcaveslist(request)
+ A serious bodge.
"""
try:
cave = Cave.objects.get(kataster_number=survex_cave)
diff --git a/templates/errors/svxcavesingle404.html b/templates/errors/svxcaves404.html
index dc5404f..dc5404f 100644
--- a/templates/errors/svxcavesingle404.html
+++ b/templates/errors/svxcaves404.html
diff --git a/templates/svxcavesingle.html b/templates/svxcaves.html
index ea992b9..0eed31d 100644
--- a/templates/svxcavesingle.html
+++ b/templates/svxcaves.html
@@ -3,21 +3,18 @@
{% block title %}List of survex files{% endblock %}
{% block content %}
+{% for cave in caves %}
{% autoescape off %}
<h1>Surveys for <a href="/{{cave.url}}">{{cave.official_name}}</a> - id:{{cave}}</h1>
{% endautoescape %}
-<!-- the only thing passed into this template is the object identifier for a cave.
-All the processing to extract the survex subdriectories and survex files is done in this template
-CHANGE THAT and do the processing in python were it is easier to see what is going on and where
-we don't need the SUrvexDirectory objects at all-->
<p>Cave description: <a href="/{{cave.url}}">{{cave.url}}</a>
<p>Wallets: <a href="/cave/scans/{{cave|safe}}">{{cave|safe}}</a>
</p>
<p>
-{% for survexdirectory in cave.survexdirectory_set.all %} <!-- redo to use cave.survexfile_set.all() each of which has a .survexdirectory-->
- <a href="#T_{{survexdirectory.primarysurvexfile.path}}">{{survexdirectory.path}}</a>
+{% for survexdirectory in cave.sds %} <!-- redo to use cave.survexfile_set.all() each of which has a .survexdirectory-->
+ <a href="#T_{{survexdirectory.primarysurvexfile.path}}">{{survexdirectory.path}}</a> &nbsp;
{% empty %}
<p>If you were expecting to see a list of survex files here and a summary table of who did what and when, perhaps
because you followed a link from <a href="/survexfile/caves/">the master caves' survex list</a> page which showed that such survex files clearly existed, and yet there is nothing here but a blank; then this will be because <br>
@@ -42,7 +39,7 @@ to go to a form to correct the online data.
Instructions for filling in this form are in this part
<a href="/handbook/survey/caveentry.html"> of the survey handbook</a>.
</p>
-{% for survexdirectory in cave.survexdirectory_set.all %}
+{% for survexdirectory in cave.sds %}
<h3 id="T_{{survexdirectory.primarysurvexfile.path}}">{{survexdirectory.path}}</h3>
<table>
<tr><th>Survex file</th><th>Block</th><th>Date</th><th>Explorers</th><th>length</th><th>Titles</th><th>Scans</th></tr>
@@ -98,8 +95,9 @@ to go to a form to correct the online data.
{% endif %}
</td>
</tr>
- {% endfor %}
- {% endfor %}
+ {% endfor %} <!-- survexblock -->
+ {% endfor %} <!-- survexfile -->
</table>
-{% endfor %}
+{% endfor %} <!-- survexdirectory -->
+{% endfor %} <!-- caves -->
{% endblock %}
diff --git a/templates/svxcaveseveral.html b/templates/svxcaveseveral.html
deleted file mode 100644
index de45337..0000000
--- a/templates/svxcaveseveral.html
+++ /dev/null
@@ -1,101 +0,0 @@
-<!-- svxcaveseveral.html - this text visible because this template has been included -->
-{% extends "base.html" %}
-{% block title %}List of survex files{% endblock %}
-{% block content %}
- <!-- the only thing passed into this template is a list of object identifiers for caves.
- All the processing to extract the survex subdriectories and survex files is done in this template -->
-{% for cave in caves %}
-
- {% autoescape off %}
- <h1>Surveys for <a href="/{{cave.url}}">{{cave.official_name}}</a> - identifier:{{cave}}</h1>
- {% endautoescape %}
-
- <p>Cave description: <a href="/{{cave.url}}">{{cave.url}}</a>
- </p>
- <p>
- {% for survexdirectory in cave.survexdirectory_set.all %}
- This cave has a linked survexdirectory: <a href="#T_{{survexdirectory.primarysurvexfile.path}}">{{survexdirectory.path}}</a> in the database. See the table below.
- {% empty %}
- <p>If you were expecting to see a list of survex files here and a summary table of who did what and when, perhaps
- because you followed a link from <a href="/survexfile/caves/">the master caves' survex list</a> page which showed that such survex files clearly existed, and yet there is nothing here but a blank; then this will be because the survex (.svx) files have been stored on the server in the
- <a href="/handbook/computing/repos.html"><var>:loser:</var></a> repository
- but whoever was
- responsible has not yet created the appropriate entries in the XML file in the
- <a href="/handbook/computing/repos.html"><var>:expoweb:</var></a> repository.
- It is the XML file which registers the cave description and ties together
- the survex files with everything else.
- <p>The process for registering a new cave is documented in
- <a href="/handbook/survey/caveentry.html">this part of the survey handbook</a>.
- {% endfor %}
- </p>
-
- <p>If you can see a filename here: [&nbsp;<a href="/survexfile/{{cave.survex_file}}">{{cave.survex_file}}</a> &nbsp;]
- which does <em>not</em> match any in the list below <em>including the directories beginning with </em><strong>caves-162X/</strong></em>
- not just the filename</em>, then (if logged on) you can
- <strong>click here <var><a href="/{{cave.slug}}_cave_edit/">/{{cave.slug}}_cave_edit</a></var></strong>
- to go to a form to correct the online data.
- Instructions for filling in this form are in this part
- <a href="/handbook/survey/caveentry.html"> of the survey handbook</a>.
- </p>
- {% for survexdirectory in cave.survexdirectory_set.all %}
- <h3 id="T_{{survexdirectory.primarysurvexfile.path}}">{{survexdirectory.path}}</h3>
- <table>
- <tr><th>Survex file</th><th>Block</th><th>Date</th><th>Explorers</th><th>length</th><th>Titles</th><th>Scans</th></tr>
- {% for survexfile in survexdirectory.survexfile_set.all %}
- <tr>
- {% if survexfile.exists %}
- <td rowspan="{{survexfile.survexblock_set.all|length|add:"1"}}">
- {% else %}
- <td class="survexnewfile" rowspan="{{survexfile.survexblock_set.all|length|add:"1"}}">
- {% endif %}
-
- {% if survexfile == survexdirectory.primarysurvexfile %}
- <a href="{% url "svx" survexfile.path %}"><b>{% url "svx" survexfile.path %}</b></a>
- {% else %}
- <a href="{% url "svx" survexfile.path %}"><i><small>{% url "svx" survexfile.path %}</small></i></a><!-- would like to extract only the last bit. Some javascript useful ?-->
- {% endif %}
- </td>
- </tr>
- {% for survexblock in survexfile.survexblock_set.all %}
- <tr>
- <!-- Block -->
- <td style="width:10 em"><a href="{% url "svx" survexfile.path %}">{{survexblock.name}}</a></td>
-
- <!-- Date -->
- <td style="white-space:nowrap">
- {% if survexblock.expedition %}
- <a href="{{survexblock.expedition.get_absolute_url}}">{{survexblock.date|date:"D d M Y"}}</a>
- {% else %}
- <!--{{survexblock.date}}-->
- {% endif %}
- </td>
- <!-- Explorers -->
- <td>
- {% for personrole in survexblock.survexpersonrole_set.all %}
- {% if personrole.personexpedition %}
- <a href="{{personrole.personexpedition.get_absolute_url}}">{{personrole.personname}}</a>
- {% else %}
- {{personrole.personname}}
- {% endif %}
- {% endfor %}
- </td>
- <!-- length -->
- <td style="padding-right: 3px; text-align:right">{{survexblock.legslength|stringformat:".1f"}}</td>
-
- <!-- Titles -->
- <td style="padding-left: 3px;">
- {{survexblock.title}}
- </td>
- <!-- Scans -->
- <td>
- {% if survexblock.scanswallet %}
- <b><a href="{{survexblock.scanswallet.get_absolute_url}}">{{survexblock.scanswallet.walletname}}</a></b>
- {% endif %}
- </td>
- </tr>
- {% endfor %}
- {% endfor %}
- </table><p>
- {% endfor %}
-{% endfor %}
-{% endblock %}
diff --git a/urls.py b/urls.py
index 513a1eb..499c612 100644
--- a/urls.py
+++ b/urls.py
@@ -184,8 +184,8 @@ trogglepatterns = [
# The survexfile pages
path('survexdir', survex.survexdir, name="survexdir"),
- path('survexfile', survex.survexcavesingle, {'survex_cave': ''}, name="survexcavessingle"),
- path('survexfile/', survex.survexcavesingle, {'survex_cave': ''}, name="survexcavessingle"),
+ path('survexfile', survex.survexcavesingle, {'cave_shortname': ''}, name="survexcavessingle"),
+ path('survexfile/', survex.survexcavesingle, {'cave_shortname': ''}, name="survexcavessingle"),
path('survexfile/caves', survex.survexcaveslist, name="survexcaveslist"),
path('survexfile/caves/', survex.survexcaveslist, name="survexcaveslist"), # auto slash not working
@@ -193,7 +193,7 @@ trogglepatterns = [
path('survexfile/<path:survex_file>.3d', survex.threed, name="threed"),
path('survexfile/<path:survex_file>.log', survex.svxlog, name="svxlog"),
path('survexfile/<path:survex_file>.err', survex.err, name="err"),
- path('survexfile/<path:survex_cave>', survex.survexcavesingle, name="survexcavessingle"),
+ path('survexfile/<path:cave_shortname>', survex.survexcavesingle, name="survexcavessingle"),
path('survexfilewild', statistics.svxfilewild, name="svxfilewild"),
path('survexfilewild/', statistics.svxfilewild, name="svxfilewild"),