summaryrefslogtreecommitdiffstats
path: root/core
diff options
context:
space:
mode:
Diffstat (limited to 'core')
-rw-r--r--core/admin.py4
-rw-r--r--core/models/caves.py44
-rw-r--r--core/views/caves.py8
-rw-r--r--core/views/prospect.py12
-rw-r--r--core/views/survex.py21
5 files changed, 29 insertions, 60 deletions
diff --git a/core/admin.py b/core/admin.py
index 43aa744..880d163 100644
--- a/core/admin.py
+++ b/core/admin.py
@@ -2,7 +2,7 @@ from django.contrib import admin
from django.core import serializers
from django.http import HttpResponse
-from troggle.core.models.caves import Area, Cave, CaveAndEntrance, Entrance
+from troggle.core.models.caves import Cave, CaveAndEntrance, Entrance
from troggle.core.models.logbooks import QM, LogbookEntry, PersonLogEntry, CaveSlug
from troggle.core.models.survex import (
DrawingFile,
@@ -135,7 +135,7 @@ class WalletAdmin(TroggleModelAdmin):
admin.site.register(Cave, CaveAdmin)
-admin.site.register(Area)
+#admin.site.register(Area)
admin.site.register(CaveAndEntrance)
admin.site.register(Entrance, EntranceAdmin)
admin.site.register(CaveSlug)
diff --git a/core/models/caves.py b/core/models/caves.py
index 3821387..0ede2b1 100644
--- a/core/models/caves.py
+++ b/core/models/caves.py
@@ -32,33 +32,15 @@ todo = """
- Can we rewrite things to eliminate the CaveSlug and objects? Surely
foreign keys work fine ?!
-- Why do we have CaveAndEntrance objects ? Surely entranceletter belong son the Entrance object?
+- Why do we have CaveAndEntrance objects ? Surely entranceletter belongs on the Entrance object?
- move the aliases list from the code and put into an editable file
- Restore constraint: unique_together = (("area", "kataster_number"), ("area", "unofficial_number"))
+ or replace by a unique 'slug' field, better.
"""
-class Area(TroggleModel):
- short_name = models.CharField(max_length=100)
- name = models.CharField(max_length=200, blank=True, null=True)
- description = models.TextField(blank=True, null=True)
- super = models.ForeignKey("Area", blank=True, null=True, on_delete=models.SET_NULL)
-
- def __str__(self):
- if self.super:
- return str(self.super) + " - " + str(self.short_name)
- else:
- return str(self.short_name)
-
- def kat_area(self):
- if self.short_name in ["1623", "1626", "1624", "1627"]:
- return self.short_name
- elif self.super:
- return self.super.kat_area()
-
-
class CaveAndEntrance(models.Model):
"""This class is ONLY used to create a FormSet for editing the cave and all its
entrances in one form.
@@ -82,7 +64,8 @@ class CaveAndEntrance(models.Model):
class Cave(TroggleModel):
# too much here perhaps,
- area = models.ManyToManyField(Area, blank=False)
+ areacode = models.CharField(max_length=4, blank=True, null=True) # could use models.IntegerChoices
+ subarea = models.CharField(max_length=10, blank=True, null=True) # 9, 8c etc.
depth = models.CharField(max_length=100, blank=True, null=True)
description_file = models.CharField(max_length=200, blank=True, null=True)
entrances = models.ManyToManyField("Entrance", through="CaveAndEntrance")
@@ -97,7 +80,7 @@ class Cave(TroggleModel):
notes = models.TextField(blank=True, null=True)
official_name = models.CharField(max_length=160)
references = models.TextField(blank=True, null=True)
- survex_file = models.CharField(max_length=100, blank=True, null=True) # should be a foreign key
+ survex_file = models.CharField(max_length=100, blank=True, null=True) # should be a foreign key?
survey = models.TextField(blank=True, null=True)
underground_centre_line = models.TextField(blank=True, null=True)
underground_description = models.TextField(blank=True, null=True)
@@ -192,12 +175,7 @@ class Cave(TroggleModel):
return qms # a QuerySet
def kat_area(self):
- try:
- for a in self.area.all():
- if a.kat_area():
- return a.kat_area()
- except:
- return ""
+ return self.areacode
def entrances(self):
return CaveAndEntrance.objects.filter(cave=self)
@@ -258,15 +236,7 @@ class Cave(TroggleModel):
return (filepath, content, "utf8")
def getArea(self):
- areas = self.area.all()
- lowestareas = list(areas)
- for area in areas:
- if area.super in areas:
- try:
- lowestareas.remove(area.super)
- except:
- pass
- return lowestareas[0]
+ return self.areacode
class Entrance(TroggleModel):
MARKING_CHOICES = (
diff --git a/core/views/caves.py b/core/views/caves.py
index a002a0e..250ae0e 100644
--- a/core/views/caves.py
+++ b/core/views/caves.py
@@ -124,10 +124,10 @@ def getnotablecaves():
def caveindex(request):
- #Cave.objects.all()
- caves1623 = list(Cave.objects.filter(area__short_name="1623"))
- caves1626 = list(Cave.objects.filter(area__short_name="1626"))
- caves1627 = list(Cave.objects.filter(area__short_name="1627"))
+
+ caves1623 = list(Cave.objects.filter(areacode="1623"))
+ caves1626 = list(Cave.objects.filter(areacode="1626"))
+ caves1627 = list(Cave.objects.filter(areacode="1627"))
caves1623.sort(key=caveKey)
caves1626.sort(key=caveKey)
caves1627.sort(key=caveKey)
diff --git a/core/views/prospect.py b/core/views/prospect.py
index a538ab6..1eb82cd 100644
--- a/core/views/prospect.py
+++ b/core/views/prospect.py
@@ -4,7 +4,7 @@ from django.http import HttpResponse
from django.shortcuts import render
import troggle.settings as settings
-from troggle.core.models.caves import Area, Cave, Entrance
+from troggle.core.models.caves import Cave, Entrance
from troggle.core.views.caves import caveKey
# from pathlib import Path
@@ -68,11 +68,11 @@ def prospecting(request):
return render(request, "errors/disabled.html", {"message": message})
areas = []
- for key, name in AREANAMES:
- a = Area.objects.get(short_name=key) # assumes unique
- caves = list(a.cave_set.all())
- caves.sort(key=caveKey)
- areas.append((name, a, caves))
+ caves = Cave.objects.all()
+
+ for c in caves:
+ if c.subarea in AREANAMES:
+ areas.append((AREANAMES[c.subarea], subarea, c))
return render(request, "prospecting.html", {"areas": areas})
diff --git a/core/views/survex.py b/core/views/survex.py
index a69c5d3..b00aed0 100644
--- a/core/views/survex.py
+++ b/core/views/survex.py
@@ -574,15 +574,15 @@ def survexcaveslist(request):
subdircaves = []
fnumlist = []
- for area in ["1623", "1626", "1624", "1627"]:
- cavesdir = get_survexareapath(area)
- arealist = sorted([(area, -int(re.match(r"\d*", f).group(0) or "0"), f) for f in os.listdir(cavesdir)])
+ for areacode in ["1623", "1626", "1624", "1627"]:
+ cavesdir = get_survexareapath(areacode)
+ arealist = sorted([(areacode, -int(re.match(r"\d*", f).group(0) or "0"), f) for f in os.listdir(cavesdir)])
fnumlist += arealist
# print(fnumlist)
# go through the list and identify the contents of each cave directory
- for area, num, cavedir in fnumlist:
+ for areacode, num, cavedir in fnumlist:
# these have sub dirs /cucc/ /arge/ /old/ but that is no reason to hide them in this webpage
# so these are now treated the same as 142 and 113 which also have a /cucc/ sub dir
@@ -593,18 +593,17 @@ def survexcaveslist(request):
# which usually but not always true. e.g. caves-1623/78/allkaese.svx not caves-1623/78/78.svx
# which is why we now also pass through the cavedir
- # Still fails for loutitohoehle etc even though this is set correctly when the pending cave is created
- cavesdir = get_survexareapath(area)
+ cavesdir = get_survexareapath(areacode)
gcavedir = os.path.join(cavesdir, cavedir)
if os.path.isdir(gcavedir) and cavedir[0] != ".":
subdirs, subsvx = identifycavedircontents(gcavedir)
check_cave_registered(
- area, cavedir
+ areacode, cavedir
) # should do this only once per database load or it will be slow
survdirobj = []
for lsubsvx in subsvx:
- survdirobj.append(("caves-" + area + "/" + cavedir + "/" + lsubsvx, lsubsvx))
+ survdirobj.append(("caves-" + areacode + "/" + cavedir + "/" + lsubsvx, lsubsvx))
# caves with subdirectories
if subdirs:
@@ -614,7 +613,7 @@ def survexcaveslist(request):
# assert not dsubdirs # handle case of empty sub directory
lsurvdirobj = []
for lsubsvx in dsubsvx:
- lsurvdirobj.append(("caves-" + area + "/" + cavedir + "/" + subdir + "/" + lsubsvx, lsubsvx))
+ lsurvdirobj.append(("caves-" + areacode + "/" + cavedir + "/" + subdir + "/" + lsubsvx, lsubsvx))
if len(dsubsvx) >= 1:
subsurvdirs.append(
(subdir, lsurvdirobj[0], lsurvdirobj[0:])
@@ -683,7 +682,7 @@ def survexcavesingle(request, cave_shortname):
else:
return render(request, "errors/svxcaves404.html", {"settings": settings, "cave": cave_shortname})
-def check_cave_registered(area, survex_cave):
+def check_cave_registered(areacode, survex_cave):
"""Checks whether a cave has been properly registered when it is found in the Loser repo
This should really be called by databaseReset not here in a view
Currently Caves are only registered if they are listed in :expoweb: settings.CAVEDESCRIPTIONS
@@ -699,7 +698,7 @@ def check_cave_registered(area, survex_cave):
except MultipleObjectsReturned:
caves = Cave.objects.filter(kataster_number=survex_cave)
for c in caves:
- if str(c) == area + "-" + survex_cave:
+ if str(c) == areacode + "-" + survex_cave:
return str(c) # just get the first that matches
return None # many returned but none in correct area