summaryrefslogtreecommitdiffstats
path: root/parsers/caves.py
diff options
context:
space:
mode:
Diffstat (limited to 'parsers/caves.py')
-rw-r--r--parsers/caves.py102
1 files changed, 78 insertions, 24 deletions
diff --git a/parsers/caves.py b/parsers/caves.py
index 4a14725..f12cd84 100644
--- a/parsers/caves.py
+++ b/parsers/caves.py
@@ -82,8 +82,79 @@ def set_dummy_entrance(id, slug, cave, msg="DUMMY"):
DataIssue.objects.create(parser="caves", message=message, url=f"{cave.url}")
print(message)
-def create_new_cave():
- pass
+def make_areas():
+ print(" - Creating Areas 1623, 1624, 1627 and 1626")
+ # This crashes on the server with MariaDB even though a null parent is explicitly allowed.
+ area_1623 = Area.objects.create(short_name="1623", super=None)
+ area_1623.save()
+ area_1624 = Area.objects.create(short_name="1624", super=None)
+ area_1624.save()
+ area_1626 = Area.objects.create(short_name="1626", super=None)
+ area_1626.save()
+ area_1627 = Area.objects.create(short_name="1627", super=None)
+ area_1627.save()
+
+def get_area(areanum):
+ """Given the number as a string, return the area object
+ """
+ a = Area.objects.all()
+ if len(a) == 0:
+ make_areas()
+
+ area = Area.objects.get(short_name="1623") # default
+
+ if areanum == "1623":
+ area = Area.objects.get(short_name="1623")
+ if areanum == "1624":
+ area = Area.objects.get(short_name="1624")
+ if areanum == "1626":
+ area = Area.objects.get(short_name="1626")
+ if areanum == "1627":
+ area = Area.objects.get(short_name="1627")
+ return area
+
+def create_new_cave(svxpath):
+ """This is called only when a new survex file is edited online which has a path on the
+ :loser: repo which is not recognised as a known cave.
+ """
+ # e.g. svxpath = "caves-1623/666/antig"
+ print(f"Create new cave at {svxpath}")
+ #
+ survex_file = svxpath + ".svx"
+ parts = svxpath.split("/")
+ a = parts[0][-4:]
+ caveid = parts[1]
+ print(f"parts {parts}, {a}, {caveid}")
+ # double check
+ if a[0:3] == "162":
+ areanum = a[0:4]
+ url = f"{areanum}/{a[5:]}" # Note we are not appending the .htm as we are modern folks now.
+ else:
+ areanum = "1623"
+ url = f"1623/{k}"
+
+ k = f"{areanum}-{caveid}"
+ area = get_area(areanum)
+
+ caves = Cave.objects.filter(unofficial_number=caveid)
+ if caves:
+ message = f" ! Already exists, caveid:{k} in area {areanum} {caves}"
+ DataIssue.objects.create(parser="caves", message=message)
+ print(message)
+ return caves[0]
+
+ try:
+ cave = do_pending_cave(k, url, area)
+ except:
+ message = f" ! Error. Cannot create pending cave and entrance, pending-id:{k} in area {areanum}"
+ DataIssue.objects.create(parser="caves", message=message)
+ print(message)
+ raise
+
+ # we know what the survex file is, we don't need to use the guess
+ cave.survex_file=survex_file
+ cave.save()
+ return cave
def do_pending_cave(k, url, area):
"""
@@ -194,7 +265,7 @@ def do_pending_cave(k, url, area):
try: # Now create a cave slug ID
CaveSlug.objects.update_or_create(cave=cave, slug=slug, primary=False)
except:
- message = f" ! {k:11s} PENDING cave SLUG create failure"
+ message = f" ! {k:11s} PENDING CaveSLUG {slug} create failure"
DataIssue.objects.create(parser="caves", message=message)
print(message)
else:
@@ -214,7 +285,7 @@ def do_pending_cave(k, url, area):
message = f" ! {k:11s} PENDING entrance + cave UNION create failure '{cave}' [{ent}]"
DataIssue.objects.create(parser="caves", message=message)
print(message)
-
+ return cave
def readentrance(filename):
"""Reads an enrance description from the .html file
@@ -562,18 +633,9 @@ def readcaves():
DataIssue.objects.filter(parser="caves ok").delete()
DataIssue.objects.filter(parser="entrances").delete()
- print(" - Creating Areas 1623, 1624, 1627 and 1626")
- # This crashes on the server with MariaDB even though a null parent is explicitly allowed.
- area_1623 = Area.objects.create(short_name="1623", super=None)
- area_1623.save()
- area_1624 = Area.objects.create(short_name="1624", super=None)
- area_1624.save()
- area_1626 = Area.objects.create(short_name="1626", super=None)
- area_1626.save()
- area_1627 = Area.objects.create(short_name="1627", super=None)
- area_1627.save()
-
with transaction.atomic():
+ area = get_area("1623")
+
print(" - settings.CAVEDESCRIPTIONS: ", CAVEDESCRIPTIONS)
print(" - Reading Entrances from entrance descriptions xml files")
for filename in next(os.walk(ENTRANCEDESCRIPTIONS))[2]: # Should be a better way of getting a list of files
@@ -605,15 +667,7 @@ def readcaves():
areanum = "1623"
url = f"1623/{k}"
- area = area_1623
- if areanum == "1623":
- area = area_1623
- if areanum == "1624":
- area = area_1624
- if areanum == "1626":
- area = area_1626
- if areanum == "1627":
- area = area_1627
+ area = get_area(areanum)
try:
do_pending_cave(k, url, area)
except: