diff options
Diffstat (limited to 'parsers/caves.py')
-rw-r--r-- | parsers/caves.py | 102 |
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: |