forked from expo/troggle
Detects missing svx and description files
This commit is contained in:
@@ -1,9 +1,11 @@
|
|||||||
import os
|
import os
|
||||||
import re
|
import re
|
||||||
|
from pathlib import Path
|
||||||
|
|
||||||
from django.conf import settings
|
from django.conf import settings
|
||||||
from django.db import transaction
|
from django.db import transaction
|
||||||
|
|
||||||
|
from troggle.settings import SURVEX_DATA, EXPOWEB
|
||||||
from troggle.core.models.troggle import DataIssue
|
from troggle.core.models.troggle import DataIssue
|
||||||
from troggle.core.models.caves import Area, Cave, Entrance, CaveSlug, EntranceSlug, CaveAndEntrance
|
from troggle.core.models.caves import Area, Cave, Entrance, CaveSlug, EntranceSlug, CaveAndEntrance
|
||||||
'''Reads all the cave description data by parsing the xml files (stored as e.g. :EXPOWEB:/cave-data/1623-161.html )
|
'''Reads all the cave description data by parsing the xml files (stored as e.g. :EXPOWEB:/cave-data/1623-161.html )
|
||||||
@@ -33,7 +35,7 @@ def readcaves():
|
|||||||
|
|
||||||
|
|
||||||
area_1623 = Area.objects.update_or_create(short_name = "1623", parent = None)
|
area_1623 = Area.objects.update_or_create(short_name = "1623", parent = None)
|
||||||
# This seems to retrun a tuple, not a single object! i.e. (<Area: 1623>, True)
|
# This seems to return a tuple, not a single object! i.e. (<Area: 1623>, True)
|
||||||
#print(f' ! - READ CAVES: {area_1623}')
|
#print(f' ! - READ CAVES: {area_1623}')
|
||||||
|
|
||||||
area_1626 = Area.objects.update_or_create(short_name = "1626", parent = None)
|
area_1626 = Area.objects.update_or_create(short_name = "1626", parent = None)
|
||||||
@@ -106,7 +108,11 @@ def readentrance(filename):
|
|||||||
context = "in file %s" % filename
|
context = "in file %s" % filename
|
||||||
#print("Reading file ENTRANCE {} / {}".format(settings.ENTRANCEDESCRIPTIONS, filename))
|
#print("Reading file ENTRANCE {} / {}".format(settings.ENTRANCEDESCRIPTIONS, filename))
|
||||||
entrancecontentslist = getXML(contents, "entrance", maxItems = 1, context = context)
|
entrancecontentslist = getXML(contents, "entrance", maxItems = 1, context = context)
|
||||||
if len(entrancecontentslist) == 1:
|
if len(entrancecontentslist) != 1:
|
||||||
|
message = f'! BAD ENTRANCE at "{filename}"'
|
||||||
|
DataIssue.objects.create(parser='caves', message=message)
|
||||||
|
print(message)
|
||||||
|
else:
|
||||||
entrancecontents = entrancecontentslist[0]
|
entrancecontents = entrancecontentslist[0]
|
||||||
non_public = getXML(entrancecontents, "non_public", maxItems = 1, context = context)
|
non_public = getXML(entrancecontents, "non_public", maxItems = 1, context = context)
|
||||||
name = getXML(entrancecontents, "name", maxItems = 1, context = context)
|
name = getXML(entrancecontents, "name", maxItems = 1, context = context)
|
||||||
@@ -192,7 +198,11 @@ def readcave(filename):
|
|||||||
contents = f.read()
|
contents = f.read()
|
||||||
context = " in file %s" % filename
|
context = " in file %s" % filename
|
||||||
cavecontentslist = getXML(contents, "cave", maxItems = 1, context = context)
|
cavecontentslist = getXML(contents, "cave", maxItems = 1, context = context)
|
||||||
if len(cavecontentslist) == 1:
|
if len(cavecontentslist) != 1:
|
||||||
|
message = f'! BAD CAVE at "{filename}"'
|
||||||
|
DataIssue.objects.create(parser='caves', message=message)
|
||||||
|
print(message)
|
||||||
|
else:
|
||||||
cavecontents = cavecontentslist[0]
|
cavecontents = cavecontentslist[0]
|
||||||
non_public = getXML(cavecontents, "non_public", maxItems = 1, context = context)
|
non_public = getXML(cavecontents, "non_public", maxItems = 1, context = context)
|
||||||
slugs = getXML(cavecontents, "caveslug", maxItems = 1, context = context)
|
slugs = getXML(cavecontents, "caveslug", maxItems = 1, context = context)
|
||||||
@@ -281,20 +291,31 @@ def readcave(filename):
|
|||||||
primary = False
|
primary = False
|
||||||
|
|
||||||
for entrance in entrances:
|
for entrance in entrances:
|
||||||
slug = getXML(entrance, "entranceslug", maxItems = 1, context = context)[0]
|
eslug = getXML(entrance, "entranceslug", maxItems = 1, context = context)[0]
|
||||||
letter = getXML(entrance, "letter", maxItems = 1, context = context)[0]
|
letter = getXML(entrance, "letter", maxItems = 1, context = context)[0]
|
||||||
try:
|
try:
|
||||||
if slug in entrances_xslug:
|
if eslug in entrances_xslug:
|
||||||
entrance = entrances_xslug[slug]
|
entrance = entrances_xslug[eslug]
|
||||||
else:
|
else:
|
||||||
entrance = Entrance.objects.get(entranceslug__slug = slug)
|
entrance = Entrance.objects.get(entranceslug__slug = eslug)
|
||||||
entrances_xslug[slug] = entrance
|
entrances_xslug[eslug] = entrance
|
||||||
ce = CaveAndEntrance.objects.update_or_create(cave = c, entrance_letter = letter, entrance = entrance)
|
ce = CaveAndEntrance.objects.update_or_create(cave = c, entrance_letter = letter, entrance = entrance)
|
||||||
except:
|
except:
|
||||||
message = " ! Entrance setting failure, slug: %s letter: %s" % (slug, letter)
|
message = f' ! Entrance setting failure, slug:"{slug}" letter:"{letter}" cave:"{c}" filename:"{filename}"'
|
||||||
DataIssue.objects.create(parser='caves', message=message)
|
DataIssue.objects.create(parser='caves', message=message)
|
||||||
print(message)
|
print(message)
|
||||||
|
|
||||||
|
if survex_file[0]:
|
||||||
|
if not (Path(SURVEX_DATA) / survex_file[0]).is_file():
|
||||||
|
message = f' ! survex filename does not exist :LOSER:"{survex_file[0]}" in "{filename}"'
|
||||||
|
DataIssue.objects.create(parser='caves', message=message, url=f'/cave/{slug}/edit/')
|
||||||
|
print(message)
|
||||||
|
|
||||||
|
if description_file[0]:
|
||||||
|
if not (Path(EXPOWEB) / description_file[0]).is_file():
|
||||||
|
message = f' ! description filename does not exist :{EXPOWEB}:"{description_file[0]}" in "{filename}"'
|
||||||
|
DataIssue.objects.create(parser='caves', message=message, url=f'/cave/{slug}/edit/')
|
||||||
|
print(message)
|
||||||
|
|
||||||
def getXML(text, itemname, minItems = 1, maxItems = None, printwarnings = True, context = ""):
|
def getXML(text, itemname, minItems = 1, maxItems = None, printwarnings = True, context = ""):
|
||||||
items = re.findall("<%(itemname)s>(.*?)</%(itemname)s>" % {"itemname": itemname}, text, re.S)
|
items = re.findall("<%(itemname)s>(.*?)</%(itemname)s>" % {"itemname": itemname}, text, re.S)
|
||||||
@@ -306,7 +327,7 @@ def getXML(text, itemname, minItems = 1, maxItems = None, printwarnings = True,
|
|||||||
print(message)
|
print(message)
|
||||||
|
|
||||||
if maxItems is not None and len(items) > maxItems and printwarnings:
|
if maxItems is not None and len(items) > maxItems and printwarnings:
|
||||||
message = " ! %(count)i %(itemname)s found, no more than %(max)i expected" % {"count": len(items),
|
message = " ! %(count)i %(itemname)s found, no more than %(max)i expected in this XML unit " % {"count": len(items),
|
||||||
"itemname": itemname,
|
"itemname": itemname,
|
||||||
"max": maxItems} + context
|
"max": maxItems} + context
|
||||||
DataIssue.objects.create(parser='caves', message=message)
|
DataIssue.objects.create(parser='caves', message=message)
|
||||||
|
|||||||
Reference in New Issue
Block a user