mirror of
https://expo.survex.com/repositories/troggle/.git
synced 2024-11-21 23:01:52 +00:00
Remove CaveSLug as a Class. Now each Cave has only one slug for sure.
This commit is contained in:
parent
a4783d2332
commit
24c5ba9711
@ -72,7 +72,7 @@ class SimpleTest(SimpleTestCase):
|
|||||||
from django.utils.timezone import get_current_timezone, make_aware
|
from django.utils.timezone import get_current_timezone, make_aware
|
||||||
|
|
||||||
from parsers.people import GetPersonExpeditionNameLookup
|
from parsers.people import GetPersonExpeditionNameLookup
|
||||||
from troggle.core.models.logbooks import CaveSlug, QM, LogbookEntry, PersonLogEntry
|
from troggle.core.models.logbooks import QM, LogbookEntry, PersonLogEntry
|
||||||
from troggle.core.models.troggle import DataIssue, Expedition
|
from troggle.core.models.troggle import DataIssue, Expedition
|
||||||
|
|
||||||
def test_import_core_views_caves(self):
|
def test_import_core_views_caves(self):
|
||||||
|
@ -3,7 +3,7 @@ from django.core import serializers
|
|||||||
from django.http import HttpResponse
|
from django.http import HttpResponse
|
||||||
|
|
||||||
from troggle.core.models.caves import 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.logbooks import QM, LogbookEntry, PersonLogEntry
|
||||||
from troggle.core.models.survex import (
|
from troggle.core.models.survex import (
|
||||||
DrawingFile,
|
DrawingFile,
|
||||||
SingleScan,
|
SingleScan,
|
||||||
@ -138,7 +138,6 @@ admin.site.register(Cave, CaveAdmin)
|
|||||||
#admin.site.register(Area)
|
#admin.site.register(Area)
|
||||||
admin.site.register(CaveAndEntrance)
|
admin.site.register(CaveAndEntrance)
|
||||||
admin.site.register(Entrance, EntranceAdmin)
|
admin.site.register(Entrance, EntranceAdmin)
|
||||||
admin.site.register(CaveSlug)
|
|
||||||
admin.site.register(SurvexBlock, SurvexBlockAdmin)
|
admin.site.register(SurvexBlock, SurvexBlockAdmin)
|
||||||
admin.site.register(DrawingFile, DrawingFileAdmin)
|
admin.site.register(DrawingFile, DrawingFileAdmin)
|
||||||
admin.site.register(Expedition)
|
admin.site.register(Expedition)
|
||||||
|
@ -58,9 +58,7 @@ class CaveAndEntrance(models.Model):
|
|||||||
|
|
||||||
def __str__(self):
|
def __str__(self):
|
||||||
return str(self.cave) + str(self.entranceletter)
|
return str(self.cave) + str(self.entranceletter)
|
||||||
|
|
||||||
# class CaveSlug(models.Model):
|
|
||||||
# moved to models/logbooks.py to avoid cyclic import problem. No I don't know why either.
|
|
||||||
|
|
||||||
def get_cave_leniently(caveid):
|
def get_cave_leniently(caveid):
|
||||||
try:
|
try:
|
||||||
|
@ -10,34 +10,19 @@ from django.template import loader
|
|||||||
import settings
|
import settings
|
||||||
from troggle.core.models.troggle import Expedition, TroggleModel
|
from troggle.core.models.troggle import Expedition, TroggleModel
|
||||||
|
|
||||||
|
|
||||||
"""The model declarations LogBookEntry, PersonLogEntry, QM
|
"""The model declarations LogBookEntry, PersonLogEntry, QM
|
||||||
"""
|
"""
|
||||||
|
|
||||||
todo = """
|
todo = """
|
||||||
- Can we rewrite things to eliminate the CaveSlug and objects? No
|
|
||||||
Surely foreign keys work fine ?! No
|
|
||||||
|
|
||||||
Foreign keys do not allow for there being multiple ways to refer to a cave, eg 1623-1999-03 aka 1623-204
|
Foreign keys do not allow for there being multiple ways to refer to a cave, eg 1623-1999-03 aka 1623-204
|
||||||
Having slugs allows for much more loose coupling to caves, which removes alot of the need to reset the database, which interupts work flow.
|
Having slugs allows for much more loose coupling to caves, which removes alot of the need to reset the database, which interupts work flow.
|
||||||
It also means we do not have to be creating temporary cave objects in the database, where we do not have the underlying file in cave_data.
|
It also means we do not have to be creating temporary cave objects in the database, where we do not have the underlying file in cave_data.
|
||||||
|
|
||||||
To Do move Cave Slug back to troggle.core.models
|
|
||||||
|
|
||||||
"""
|
"""
|
||||||
|
|
||||||
|
|
||||||
class CaveSlug(models.Model):
|
|
||||||
"""Moved here to avoid nasty cyclic import error
|
|
||||||
CASCADE means that if the Cave is deleted, this is too
|
|
||||||
"""
|
|
||||||
|
|
||||||
cave = models.ForeignKey("Cave", on_delete=models.CASCADE)
|
|
||||||
slug = models.SlugField(max_length=50, unique=True)
|
|
||||||
primary = models.BooleanField(default=False)
|
|
||||||
|
|
||||||
def __str__(self):
|
|
||||||
return f"{self.slug}: {self.cave}"
|
|
||||||
|
|
||||||
|
|
||||||
class LogbookEntry(TroggleModel):
|
class LogbookEntry(TroggleModel):
|
||||||
"""Single parsed entry from Logbook
|
"""Single parsed entry from Logbook
|
||||||
@ -48,7 +33,7 @@ class LogbookEntry(TroggleModel):
|
|||||||
)
|
)
|
||||||
expedition = models.ForeignKey(Expedition, blank=True, null=True, on_delete=models.CASCADE)
|
expedition = models.ForeignKey(Expedition, blank=True, null=True, on_delete=models.CASCADE)
|
||||||
title = models.CharField(max_length=200)
|
title = models.CharField(max_length=200)
|
||||||
cave_slug = models.SlugField(max_length=50, blank=True, null=True)
|
cave = models.ForeignKey("Cave", blank=True, null=True, on_delete=models.SET_NULL)
|
||||||
place = models.CharField(
|
place = models.CharField(
|
||||||
max_length=100, blank=True, null=True, help_text="Only use this if you haven't chosen a cave"
|
max_length=100, blank=True, null=True, help_text="Only use this if you haven't chosen a cave"
|
||||||
)
|
)
|
||||||
@ -62,10 +47,6 @@ class LogbookEntry(TroggleModel):
|
|||||||
# several PersonLogEntrys point in to this object
|
# several PersonLogEntrys point in to this object
|
||||||
ordering = ("-date",)
|
ordering = ("-date",)
|
||||||
|
|
||||||
def cave(self): # Why didn't he just make this a foreign key to Cave ?
|
|
||||||
c = CaveSlug.objects.get(slug=self.cave_slug, primary=True).cave
|
|
||||||
return c
|
|
||||||
|
|
||||||
def isLogbookEntry(self): # Function used in templates
|
def isLogbookEntry(self): # Function used in templates
|
||||||
return True
|
return True
|
||||||
|
|
||||||
|
@ -16,7 +16,7 @@ from django.urls import NoReverseMatch, reverse
|
|||||||
import troggle.settings as settings
|
import troggle.settings as settings
|
||||||
from troggle.core.forms import CaveAndEntranceFormSet, CaveForm, EntranceForm, EntranceLetterForm
|
from troggle.core.forms import CaveAndEntranceFormSet, CaveForm, EntranceForm, EntranceLetterForm
|
||||||
from troggle.core.models.caves import Cave, CaveAndEntrance, Entrance, GetCaveLookup, get_cave_leniently
|
from troggle.core.models.caves import Cave, CaveAndEntrance, Entrance, GetCaveLookup, get_cave_leniently
|
||||||
from troggle.core.models.logbooks import CaveSlug, QM
|
from troggle.core.models.logbooks import QM
|
||||||
from troggle.core.models.wallets import Wallet
|
from troggle.core.models.wallets import Wallet
|
||||||
from troggle.core.utils import write_and_commit
|
from troggle.core.utils import write_and_commit
|
||||||
from troggle.core.utils import current_expo
|
from troggle.core.utils import current_expo
|
||||||
@ -51,9 +51,9 @@ todo = """
|
|||||||
# """
|
# """
|
||||||
# return redirect("/caves")
|
# return redirect("/caves")
|
||||||
|
|
||||||
|
|
||||||
def get_cave_from_slug(caveslug):
|
def get_cave_from_slug(caveslug):
|
||||||
"""This is the old way of doing it, usingt eh CaveSlug intermediate object which does
|
"""Needs refactoring
|
||||||
the many:many relationship between slugs and caves - whcih we don't do (and never did in practice)
|
|
||||||
"""
|
"""
|
||||||
caves = []
|
caves = []
|
||||||
|
|
||||||
@ -74,10 +74,14 @@ def get_cave_from_slug(caveslug):
|
|||||||
|
|
||||||
if len(caves) > 1:
|
if len(caves) > 1:
|
||||||
print(f"get_cave_from_slug(): {caveslug} More than 1 \n{caves}")
|
print(f"get_cave_from_slug(): {caveslug} More than 1 \n{caves}")
|
||||||
|
return None
|
||||||
if len(caves) <1:
|
if len(caves) <1:
|
||||||
print(f"get_cave_from_slug(): {caveslug} Nowt found..")
|
print(f"get_cave_from_slug(): {caveslug} Nowt found..")
|
||||||
|
return None
|
||||||
cave = caves[0]
|
cave = caves[0]
|
||||||
print(f"get_cave_from_slug(): {caveslug} FOUND {cave}")
|
print(f"get_cave_from_slug(): {caveslug} FOUND {cave}")
|
||||||
|
return cave
|
||||||
|
|
||||||
|
|
||||||
try:
|
try:
|
||||||
cave_zero = Cave.objects.get(caveslug__slug=caveslug)
|
cave_zero = Cave.objects.get(caveslug__slug=caveslug)
|
||||||
|
@ -69,7 +69,7 @@ def store_edited_entry_into_database(date, place, title, text, others, author, t
|
|||||||
year = slug[0:4]
|
year = slug[0:4]
|
||||||
expedition = Expedition.objects.get(year=year)
|
expedition = Expedition.objects.get(year=year)
|
||||||
cave = GetCaveLookup().get(place.lower())
|
cave = GetCaveLookup().get(place.lower())
|
||||||
# print(f"{place} {cave=}")
|
# print(f"store_edited_entry_into_database(): {place=} {cave=}")
|
||||||
|
|
||||||
if LogbookEntry.objects.filter(slug=slug).exists():
|
if LogbookEntry.objects.filter(slug=slug).exists():
|
||||||
# oops.
|
# oops.
|
||||||
@ -82,7 +82,7 @@ def store_edited_entry_into_database(date, place, title, text, others, author, t
|
|||||||
"text": text,
|
"text": text,
|
||||||
"expedition": expedition,
|
"expedition": expedition,
|
||||||
"time_underground": tu,
|
"time_underground": tu,
|
||||||
"cave_slug": str(cave),
|
"cave": cave,
|
||||||
"title": f"{place} - {title}",
|
"title": f"{place} - {title}",
|
||||||
# "other_people": others
|
# "other_people": others
|
||||||
}
|
}
|
||||||
|
@ -9,7 +9,6 @@ from django.conf import settings
|
|||||||
from django.db import transaction
|
from django.db import transaction
|
||||||
|
|
||||||
from troggle.core.models.caves import Cave, CaveAndEntrance, Entrance, GetCaveLookup
|
from troggle.core.models.caves import Cave, CaveAndEntrance, Entrance, GetCaveLookup
|
||||||
from troggle.core.models.logbooks import CaveSlug
|
|
||||||
from troggle.core.models.survex import SurvexStation
|
from troggle.core.models.survex import SurvexStation
|
||||||
from troggle.core.models.troggle import DataIssue
|
from troggle.core.models.troggle import DataIssue
|
||||||
from troggle.settings import CAVEDESCRIPTIONS, ENTRANCEDESCRIPTIONS, EXPOWEB, SURVEX_DATA
|
from troggle.settings import CAVEDESCRIPTIONS, ENTRANCEDESCRIPTIONS, EXPOWEB, SURVEX_DATA
|
||||||
@ -235,12 +234,6 @@ def do_ARGE_cave(slug, caveid, areacode, svxid):
|
|||||||
|
|
||||||
cave.save()
|
cave.save()
|
||||||
|
|
||||||
try: # Now create a cave slug ID
|
|
||||||
CaveSlug.objects.update_or_create(cave=cave, slug=slug, primary=False)
|
|
||||||
except:
|
|
||||||
message = f" ! {slug:11s} ARGE CaveSLUG create failure {caveid=} {url=} {areacode=} {svxid=}"
|
|
||||||
DataIssue.objects.create(parser="caves", message=message)
|
|
||||||
print(message)
|
|
||||||
else:
|
else:
|
||||||
message = f" ! {slug:11s} ARGE cave create failure {caveid=} {url=} {areacode=} {svxid=}"
|
message = f" ! {slug:11s} ARGE cave create failure {caveid=} {url=} {areacode=} {svxid=}"
|
||||||
DataIssue.objects.create(parser="caves", message=message)
|
DataIssue.objects.create(parser="caves", message=message)
|
||||||
@ -368,12 +361,6 @@ def do_pending_cave(slug, caveid, url, areacode, msg=None):
|
|||||||
DataIssue.objects.create(parser="caves", message=message, url=url)
|
DataIssue.objects.create(parser="caves", message=message, url=url)
|
||||||
print(message)
|
print(message)
|
||||||
|
|
||||||
try: # Now create a cave slug ID
|
|
||||||
CaveSlug.objects.update_or_create(cave=cave, slug=slug, primary=False)
|
|
||||||
except:
|
|
||||||
message = f" ! {slug:11s} PENDING CaveSLUG {slug} create failure - {msg}"
|
|
||||||
DataIssue.objects.create(parser="caves", message=message)
|
|
||||||
print(message)
|
|
||||||
else:
|
else:
|
||||||
message = f" ! {slug:11s} PENDING cave create failure - {msg}"
|
message = f" ! {slug:11s} PENDING cave create failure - {msg}"
|
||||||
DataIssue.objects.create(parser="caves", message=message)
|
DataIssue.objects.create(parser="caves", message=message)
|
||||||
@ -609,7 +596,7 @@ def make_cave(slug):
|
|||||||
|
|
||||||
except:
|
except:
|
||||||
print(f" ! FAILED to get only one CAVE in db when updating using: {filename} or not found.")
|
print(f" ! FAILED to get only one CAVE in db when updating using: {filename} or not found.")
|
||||||
kaves = Cave.objects.all().filter(filename=filename) # replace with slug when CaveSlug tidied up
|
kaves = Cave.objects.all().filter(filename=filename) # assumes filename unique, eeugh.
|
||||||
for k in kaves:
|
for k in kaves:
|
||||||
message = " ! - DUPLICATES in db. kataster:" + str(k.kataster_number) + ", slug:" + str(k.slug())
|
message = " ! - DUPLICATES in db. kataster:" + str(k.kataster_number) + ", slug:" + str(k.slug())
|
||||||
DataIssue.objects.create(parser="caves", message=message, url=context)
|
DataIssue.objects.create(parser="caves", message=message, url=context)
|
||||||
@ -723,22 +710,7 @@ def read_cave(filename, mvf=None, cave=None):
|
|||||||
Pending destruction of this whole concept and Class CaveSlug
|
Pending destruction of this whole concept and Class CaveSlug
|
||||||
What is Class CaveSlug for?
|
What is Class CaveSlug for?
|
||||||
"""
|
"""
|
||||||
#return
|
return
|
||||||
primary = True # this sets the first thing we find to be primary=True and all the others =False
|
|
||||||
for slug in slugs:
|
|
||||||
if slug in caves_xslug:
|
|
||||||
cs = caves_xslug[slug]
|
|
||||||
else:
|
|
||||||
try:
|
|
||||||
cs = CaveSlug.objects.update_or_create(cave=cave, slug=slug, primary=primary)
|
|
||||||
caves_xslug[slug] = cs
|
|
||||||
except Exception as ex:
|
|
||||||
#raise
|
|
||||||
# This fails to do an update! It just crashes.. to be fixed
|
|
||||||
message = f" ! CaveSlug update/create failure : {slug}, skipping cave_data file {slug} with exception\nException: {ex.__class__}"
|
|
||||||
DataIssue.objects.create(parser="caves", message=message, url=context)
|
|
||||||
print(message)
|
|
||||||
primary = False
|
|
||||||
|
|
||||||
def check_directory(areacode, caveid, url, cave):
|
def check_directory(areacode, caveid, url, cave):
|
||||||
dir = Path(settings.EXPOWEB, areacode, caveid)
|
dir = Path(settings.EXPOWEB, areacode, caveid)
|
||||||
|
@ -269,7 +269,7 @@ def store_entry_into_database(date, place, tripcave, title, text, trippersons, a
|
|||||||
"text": text,
|
"text": text,
|
||||||
"expedition": expedition,
|
"expedition": expedition,
|
||||||
"time_underground": logtime_underground,
|
"time_underground": logtime_underground,
|
||||||
"cave_slug": str(tripcave),
|
"cave": tripcave,
|
||||||
}
|
}
|
||||||
coUniqueAttribs = {"slug": tid, "date": date, "title": title}
|
coUniqueAttribs = {"slug": tid, "date": date, "title": title}
|
||||||
if LogbookEntry.objects.filter(slug=tid).exists():
|
if LogbookEntry.objects.filter(slug=tid).exists():
|
||||||
|
Loading…
Reference in New Issue
Block a user