From e0ac09d5ecc783902a341123fcdcf9e4112aec5d Mon Sep 17 00:00:00 2001 From: Philip Sargent Date: Wed, 12 Oct 2022 23:12:55 +0300 Subject: [PATCH] add 'lastvisit' field to entrances, for the date --- core/forms.py | 1 + core/models/caves.py | 1 + parsers/caves.py | 104 ++++++++++++++++-------------- templates/cave_entrances.html | 3 + templates/dataformat/entrance.xml | 1 + templates/entrance.html | 4 ++ 6 files changed, 65 insertions(+), 49 deletions(-) diff --git a/core/forms.py b/core/forms.py index 6c83a47..2dd9549 100644 --- a/core/forms.py +++ b/core/forms.py @@ -76,6 +76,7 @@ class EntranceForm(ModelForm): attrs={"height":"80%", "rows":20, 'placeholder': "Enter page content (using HTML)"})) location_description = forms.CharField(required = False, widget=HTMLarea( attrs={"height":"80%", "rows":20, 'placeholder': "Enter page content (using HTML)"})) + lastvisit = forms.CharField(required=False, widget=forms.TextInput(attrs={'size': '10'}), label="Date of last visit") approach = forms.CharField(required = False, widget=HTMLarea( attrs={"height":"80%", "rows":20, 'placeholder': "Enter page content (using HTML)"})) underground_description = forms.CharField(required = False, widget=HTMLarea( diff --git a/core/models/caves.py b/core/models/caves.py index 016f92e..972d766 100644 --- a/core/models/caves.py +++ b/core/models/caves.py @@ -274,6 +274,7 @@ class Entrance(TroggleModel): explorers = models.TextField(blank=True,null=True) map_description = models.TextField(blank=True,null=True) location_description = models.TextField(blank=True,null=True) + lastvisit = models.TextField(blank=True,null=True) approach = models.TextField(blank=True,null=True) underground_description = models.TextField(blank=True,null=True) photo = models.TextField(blank=True,null=True) diff --git a/parsers/caves.py b/parsers/caves.py index 6ddbea7..478eb71 100644 --- a/parsers/caves.py +++ b/parsers/caves.py @@ -222,6 +222,7 @@ def readentrance(filename): explorers = getXML(entrancecontents, "explorers", maxItems = 1, context = context) map_description = getXML(entrancecontents, "map_description", maxItems = 1, context = context) location_description = getXML(entrancecontents, "location_description", maxItems = 1, context = context) + lastvisit = getXML(entrancecontents, "last visit date", maxItems = 1, minItems = 0, context = context) approach = getXML(entrancecontents, "approach", maxItems = 1, context = context) underground_description = getXML(entrancecontents, "underground_description", maxItems = 1, context = context) photo = getXML(entrancecontents, "photo", maxItems = 1, context = context) @@ -238,59 +239,61 @@ def readentrance(filename): other_description = getXML(entrancecontents, "other_description", maxItems = 1, context = context) bearings = getXML(entrancecontents, "bearings", maxItems = 1, context = context) url = getXML(entrancecontents, "url", maxItems = 1, context = context) - if len(non_public) == 1 and len(slugs) >= 1 and len(name) >= 1 and len(entrance_description) == 1 and len(explorers) == 1 and len(map_description) == 1 and len(location_description) == 1 and len(approach) == 1 and len(underground_description) == 1 and len(marking) == 1 and len(marking_comment) == 1 and len(findability) == 1 and len(findability_description) == 1 and len(alt) == 1 and len(northing) == 1 and len(easting) == 1 and len(tag_station) == 1 and len(exact_station) == 1 and len(other_station) == 1 and len(other_description) == 1 and len(bearings) == 1 and len(url) == 1: - e, state = Entrance.objects.update_or_create(name = name[0], - non_public = {"True": True, "False": False, "true": True, "false": False,}[non_public[0]], - entrance_description = entrance_description[0], - explorers = explorers[0], - map_description = map_description[0], - location_description = location_description[0], - approach = approach[0], - underground_description = underground_description[0], - photo = photo[0], - marking = marking[0], - marking_comment = marking_comment[0], - findability = findability[0], - findability_description = findability_description[0], - alt = alt[0], - northing = northing[0], - easting = easting[0], - tag_station = tag_station[0], - exact_station = exact_station[0], - other_station = other_station[0], - other_description = other_description[0], - bearings = bearings[0], - url = url[0], - filename = filename, - cached_primary_slug = slugs[0]) - primary = True - for slug in slugs: - #print("entrance slug:{} filename:{}".format(slug, filename)) - try: - cs = EntranceSlug.objects.update_or_create(entrance = e, + #if len(non_public) == 1 and len(slugs) >= 1 and len(name) >= 1 and len(entrance_description) == 1 and len(explorers) == 1 and len(map_description) == 1 and len(location_description) == 1 and len(lastvisit) == 1 and len(approach) == 1 and len(underground_description) == 1 and len(marking) == 1 and len(marking_comment) == 1 and len(findability) == 1 and len(findability_description) == 1 and len(alt) == 1 and len(northing) == 1 and len(easting) == 1 and len(tag_station) == 1 and len(exact_station) == 1 and len(other_station) == 1 and len(other_description) == 1 and len(bearings) == 1 and len(url) == 1: + e, state = Entrance.objects.update_or_create(name = name[0], + non_public = {"True": True, "False": False, "true": True, "false": False,}[non_public[0]], + entrance_description = entrance_description[0], + explorers = explorers[0], + map_description = map_description[0], + location_description = location_description[0], + lastvisit = lastvisit[0], + approach = approach[0], + underground_description = underground_description[0], + photo = photo[0], + marking = marking[0], + marking_comment = marking_comment[0], + findability = findability[0], + findability_description = findability_description[0], + alt = alt[0], + northing = northing[0], + easting = easting[0], + tag_station = tag_station[0], + exact_station = exact_station[0], + other_station = other_station[0], + other_description = other_description[0], + bearings = bearings[0], + url = url[0], + filename = filename, + cached_primary_slug = slugs[0]) + primary = True + for slug in slugs: + #print("entrance slug:{} filename:{}".format(slug, filename)) + try: + cs = EntranceSlug.objects.update_or_create(entrance = e, + slug = slug, + primary = primary) + except: + # need to cope with duplicates + message = f" ! FAILED to get precisely one ENTRANCE when updating using: cave_entrance/{filename}" + DataIssue.objects.create(parser='caves', message=message, url=f'/cave/{slug}/edit/') + kents = EntranceSlug.objects.all().filter(entrance = e, slug = slug, primary = primary) - except: - # need to cope with duplicates - message = f" ! FAILED to get precisely one ENTRANCE when updating using: cave_entrance/{filename}" + for k in kents: + message = " ! - DUPLICATE in db. entrance:"+ str(k.entrance) + ", slug:" + str(k.slug()) DataIssue.objects.create(parser='caves', message=message, url=f'/cave/{slug}/edit/') - kents = EntranceSlug.objects.all().filter(entrance = e, - slug = slug, - primary = primary) - for k in kents: - message = " ! - DUPLICATE in db. entrance:"+ str(k.entrance) + ", slug:" + str(k.slug()) - DataIssue.objects.create(parser='caves', message=message, url=f'/cave/{slug}/edit/') - print(message) - for k in kents: - if k.slug() != None: - print(" ! - OVERWRITING this one: slug:"+ str(k.slug())) - k.notes = "DUPLICATE entrance found on import. Please fix\n" + k.notes - c = k + print(message) + for k in kents: + if k.slug() != None: + print(" ! - OVERWRITING this one: slug:"+ str(k.slug())) + k.notes = "DUPLICATE entrance found on import. Please fix\n" + k.notes + c = k primary = False - else: # more than one item in long list - message = f' ! {slug:12} ABORT loading this entrance. in "{filename}"' - DataIssue.objects.create(parser='caves', message=message, url=f'/cave/{slug}/edit/') - print(message) + # else: # more than one item in long list. But this is not an error, and the max and min have been checked by getXML + # slug = Path(filename).stem + # message = f' ! ABORT loading this entrance. in "{filename}"' + # DataIssue.objects.create(parser='caves', message=message, url=f'/cave/{slug}/edit/') + # print(message) def readcave(filename): '''Assumes any area it hasn't seen before is a subarea of 1623 @@ -458,6 +461,9 @@ def getXML(text, itemname, minItems = 1, maxItems = None, printwarnings = True, "max": maxItems} + " in file " + context DataIssue.objects.create(parser='caves', message=message) print(message) + if minItems == 0: + if not items: + items = [ "" ] return items def readcaves(): diff --git a/templates/cave_entrances.html b/templates/cave_entrances.html index e3a571f..ed02e68 100644 --- a/templates/cave_entrances.html +++ b/templates/cave_entrances.html @@ -24,6 +24,9 @@ {% if ent.entrance.location_description %}
Location
{{ ent.entrance.location_description|safe }}
{% endif %} + {% if ent.entrance.lastvisit %} +
Location
{{ ent.entrance.lastvisit|safe }}
+ {% endif %} {% if ent.entrance.approach %}
Approach
{{ ent.entrance.approach|safe }}
{% endif %} diff --git a/templates/dataformat/entrance.xml b/templates/dataformat/entrance.xml index 1ed4f37..86c023d 100644 --- a/templates/dataformat/entrance.xml +++ b/templates/dataformat/entrance.xml @@ -22,6 +22,7 @@ {{ entrance.explorers|default_if_none:""|safe }} {{ entrance.map_description|default_if_none:""|safe }} {{ entrance.location_description|default_if_none:""|safe }} +{{ entrance.lastvisit|default_if_none:""|safe }} {{ entrance.approach|default_if_none:""|safe }} {{ entrance.underground_description|default_if_none:""|safe }} {{ entrance.photo|default_if_none:""|safe }} diff --git a/templates/entrance.html b/templates/entrance.html index dcd2970..52ec589 100644 --- a/templates/entrance.html +++ b/templates/entrance.html @@ -45,6 +45,10 @@

Location Description

{{ entrance.location_description|safe }} {% endif %} +{% if entrance.lastvisit %} +

Last Visit Date

+ {{ entrance.llastvisit|safe }} +{% endif %} {% if entrance.approach %}

Approach

{{ entrance.approach|safe }}