2
0
mirror of https://expo.survex.com/repositories/troggle/.git synced 2024-11-22 07:11:52 +00:00

slightly cleaning up slug/areacode/unofficial_number mess

This commit is contained in:
Philip Sargent 2023-09-26 01:10:50 +03:00
parent f10db6d73d
commit d4cf76da40
5 changed files with 57 additions and 41 deletions

View File

@ -113,8 +113,9 @@ class Cave(TroggleModel):
else:
return self.unofficial_number
def reference(self): # tidy this up, no longer used?
return f"{self.areacode}-{self.number()}"
# def reference(self): # tidy this up, no longer used?
# REMOVE because of confusion with cave.references which is different
# return f"{self.areacode}-{self.number()}"
def get_absolute_url(self):
if self.kataster_number:

View File

@ -374,7 +374,9 @@ def edit_cave(request, path="", slug=None):
cave.save()
form.save_m2m()
if slug is None:
cs = CaveSlug(cave=cave, slug=cave.reference(), primary=True)
# it is not visible on the form so it always will be None
slug = f"{cave.areacode}-{cave.number()}"
cs = CaveSlug(cave=cave, slug=slug, primary=True)
cs.save()
#ceinsts = ceFormSet.save(commit=False)
#for ceinst in ceinsts:

View File

@ -104,7 +104,7 @@ def is_cave(wallet, id):
print(f" - Wallet {wallet} Failed to find cave object from id <{id}>")
if id.lower() != "unknown" and id != "":
print(f" - adding <{id}> to pendingcaves.txt list")
add_cave_to_pending_list(id, f"Wallet {wallet} - Could not find id <{id}>")
add_cave_to_pending_list(id, wallet, f"Wallet {wallet} - Could not find id <{id}>")
return False
def fillblankothers(w):

View File

@ -102,6 +102,11 @@ def set_dummy_entrance(id, slug, cave, msg="DUMMY"):
# DataIssue.objects.create(parser="entrances", message=message, url=f"{cave.url}")
# print(message)
def add_cave_to_pending_list(id, wallet, message):
"""(id, f"Wallet {wallet} - Could not find id <{id}>")
"""
wurl = f"/walletedit/{wallet.walletname}".replace('#', ':')
DataIssue.objects.create(parser="wallets", message=message, url=wurl)
def create_new_cave(svxpath, svxid=None, msg=None):
"""This is called only when a new survex file is edited online which has a path on the
@ -252,7 +257,7 @@ def do_pending_cave(slug, caveid, url, areacode, msg=None):
Convoluted. Needs rewriting.
Pointless if this cave is being created because we found a survex file...
On problem is that the Cave name may have different capitalisation from the survex filename,
One problem is that the Cave name may have different capitalisation from the survex filename,
e.g. 2018-NTU-02 has a survex file 2018-ntu-02.svx
"""
if k[0:3] == "162":
@ -268,7 +273,7 @@ def do_pending_cave(slug, caveid, url, areacode, msg=None):
if Path(settings.SURVEX_DATA, survex_file).is_file():
return survex_file
# This should find the file even if the capitalisation is different, or if the directory name is totaly different
# This should find the file even if the capitalisation is different, or if the directory name is totally different
survex_file = ""
d = Path(settings.SURVEX_DATA, f"caves-{areacode}/{id}")
if d.is_dir():
@ -539,7 +544,6 @@ def read_entrance(filename, ent=None):
def read_cave(filename, cave=None):
"""Reads an entrance description from the .html file
Convoluted. Sorry. Needs rewriting
Assumes any area it hasn't seen before is a subarea of 1623
If not called as part of initial import, then the global lists will not be correct
but this is OK, a search will find them in the db.
@ -644,6 +648,20 @@ def read_cave(filename, cave=None):
print(message)
primary = False
def check_slug(areacode, kataster_number, unofficial_number):
if kataster_number:
if slug == f"{areacode}-{kataster_number}":
return
message = f" ! Cave Slug incorrect (kataster): '{slug}' != '{areacode}-{kataster_number}' in file {filename}"
else:
if slug == f"{areacode}-{unofficial_number}":
return
message = f" ! Cave Slug incorrect (unofficial): '{slug}' != '{areacode}-{unofficial_number}' in file {filename}"
if slug.lower() == f"{areacode}-{unofficial_number.lower()}":
message = f" ! Cave Slug capitalisation incorrect (unofficial): {slug} != {areacode}-{unofficial_number} in file {filename}"
DataIssue.objects.create(parser="caves", message=message, url=f"{cave.url}_cave_edit/")
print(message)
global entrances_xslug
global caves_xslug
global areas_xslug
@ -652,7 +670,7 @@ def read_cave(filename, cave=None):
# Note: these are HTML files in the EXPOWEB repo, not from the loser repo.
fn = settings.CAVEDESCRIPTIONS / filename
context = f"/cave_data/{filename}_edit"
context = f"/cave_data/{filename}_edit" # the expo html editor, not the specialist cave data editor. oops.
# print(f" - Reading Cave from cave descriptions file {fn}")
if not fn.exists():
@ -678,7 +696,6 @@ def read_cave(filename, cave=None):
DataIssue.objects.create(parser="caves", message=message, url=context)
print(message)
slug = slugs[0]
context = url=f"/{slug[0:4]}/{slug}_cave_edit/"
non_public = getXMLmax1("non_public")
official_name = getXMLmax1("official_name")
@ -700,8 +717,11 @@ def read_cave(filename, cave=None):
description_file = getXMLmax1("description_file")
url = getXMLmax1("url")
contextguess = f"/{slug[0:4]}/{slug}_cave_edit/" # guess as we havent read areacode yet
manual_edit = True
if not cave:
# we are parsing using databaseReset.py not an online edit
manual_edit = False
try:
cave, state = Cave.objects.update_or_create(filename=filename) # replace with slug when CaveSlug tidied up
@ -710,7 +730,7 @@ def read_cave(filename, cave=None):
kaves = Cave.objects.all().filter(filename=filename) # replace with slug when CaveSlug tidied up
for k in kaves:
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=contextguess)
print(message)
for k in kaves:
if k.slug() is not None:
@ -721,6 +741,17 @@ def read_cave(filename, cave=None):
# From here on the code applies to both edited and newly-imported caves (mostly!)
do_caveslugstuff() # needs cave!=None
areas = getXML(cavecontents, "area", context=contextguess) # can be multiple <area> tags
for area_slug in areas:
if area_slug in AREACODES: # ignore sub areas which are in another <area> tag
cave.areacode = area_slug
else:
cave.subarea = area_slug
if not cave.areacode:
if slug[0:4] in AREACODES:
cave.areacode = slug[0:4]
context = f"/{cave.areacode}/{slug}_cave_edit/"
cave.non_public=boolify(non_public)
cave.official_name=official_name[0]
@ -742,15 +773,7 @@ def read_cave(filename, cave=None):
cave.description_file=description_file[0]
cave.url=url[0]
areas = getXML(cavecontents, "area", context=context) # can be multiple <area> tags
for area_slug in areas:
if area_slug in AREACODES: # ignore sub areas which are in another <area> tag
cave.areacode = area_slug
else:
cave.subarea = area_slug
if not cave.areacode:
if slug[0:4] in AREACODES:
cave.areacode = slug[0:4]
check_slug(cave.areacode,cave.kataster_number, cave.unofficial_number)
entrances = getXML(cavecontents, "entrance", context=context)
do_entrances()
@ -769,6 +792,7 @@ def read_cave(filename, cave=None):
DataIssue.objects.create(parser="caves", message=message, url=f"/{slug[0:4]}/{slug}_cave_edit/")
print(message)
if description_file[0]: # if not an empty string
message = f' - {slug:12} Note (not an error): complex description filename "{description_file[0]}" inside "cave_data/{filename}"'
DataIssue.objects.create(parser="caves ok", message=message, url=f"/{slug}_cave_edit/")
@ -778,23 +802,9 @@ def read_cave(filename, cave=None):
message = f' ! {slug:12} description filename "{EXPOWEB}/{description_file[0]}" does not refer to a real file'
DataIssue.objects.create(parser="caves", message=message, url=f"/{slug}_cave_edit/")
print(message)
cave.save()
return cave
def add_cave_to_pending_list(id, msg=None):
message = f"On dev machine, adding to PENDING. - {msg}"
print(message)
fpending = Path(CAVEDESCRIPTIONS, "pendingcaves.txt")
try:
if settings.DBSWITCH == "sqlite": # dev machine only
if fpending.is_file():
with open(fpending, "a") as pend:
pend.write(f"{id}\n")
# now need to do the git commit thing if running on server.
except:
pass
def readcaves():
"""Called from databaseReset mass importer.
Reads the xml-format HTML 'cave' files in the EXPOWEB repo, the survex files from the loser repo.
@ -863,7 +873,7 @@ def readcaves():
if k[0:3] == "162":
areacode = k[0:4]
number = k[5:]
url = f"{areacode}/{k[5:]}.html" # Note we are appending the .htm to allow for offline websites
url = f"{areacode}/{k[5:]}.html" # Note we are appending the .html to allow for offline websites
else:
areacode = "1623"
number = k

View File

@ -53,7 +53,11 @@
<br />({{ cave.unofficial_number|safe }})
{% endif %}
{% else %}
<br />{{ cave_id|safe }}
{% if cave.unofficial_number %}
{{ cave.unofficial_number|safe }}
{% else %}
{{ cave_id|safe }}
{% endif %}
{% endif %}
</th>
<th id="name">
@ -204,7 +208,6 @@
<br>
Download .3d file <a href="{% url "cave3d" cave %}">{% url "cave3d" cave %}</a>
<br>
cave reference '{{cave.reference}}'<br>
cave survex path '{{ cave.areacode }}/{% if cave.kataster_number %}{{cave.kataster_number}}{% else %}{{cave.unofficial_number}}{% endif %}/'
<div id='scene'></div>
{% endif %}