2
0
mirror of https://expo.survex.com/repositories/troggle/.git synced 2025-12-18 18:17:21 +00:00

stumbled on bug when no entries in logbook, fixed.

This commit is contained in:
2025-01-15 20:21:49 +00:00
parent f3bd9024cf
commit c5b08ce80f
2 changed files with 47 additions and 32 deletions

View File

@@ -57,14 +57,16 @@ class LogbookEntry(TroggleModel):
<div class="trippeople">{% for personlogentry in logbook_entry.personlogentry_set.all %}{% if personlogentry.is_logbook_entry_author %}<u>{% if personlogentry.nickname_used %}{{personlogentry.nickname_used|safe}}{% else %}{{personlogentry.personexpedition.person|safe}}{% endif %}</u>,{% endif %}{% endfor %}{% for personlogentry in logbook_entry.personlogentry_set.all %}{% if personlogentry.is_logbook_entry_author %}{% else %}{% if personlogentry.nickname_used %}{{personlogentry.nickname_used|safe}}{% else %}{{personlogentry.personexpedition.person|safe}}{% endif %},{% endif %}{% endfor %}{% if logbook_entry.other_people %}, {{logbook_entry.other_people}}{% endif %}</div> <div class="trippeople">{% for personlogentry in logbook_entry.personlogentry_set.all %}{% if personlogentry.is_logbook_entry_author %}<u>{% if personlogentry.nickname_used %}{{personlogentry.nickname_used|safe}}{% else %}{{personlogentry.personexpedition.person|safe}}{% endif %}</u>,{% endif %}{% endfor %}{% for personlogentry in logbook_entry.personlogentry_set.all %}{% if personlogentry.is_logbook_entry_author %}{% else %}{% if personlogentry.nickname_used %}{{personlogentry.nickname_used|safe}}{% else %}{{personlogentry.personexpedition.person|safe}}{% endif %},{% endif %}{% endfor %}{% if logbook_entry.other_people %}, {{logbook_entry.other_people}}{% endif %}</div>
''' '''
author = ( if author := (
PersonLogEntry.objects.filter(logbook_entry=self, is_logbook_entry_author=True) PersonLogEntry.objects.filter(logbook_entry=self, is_logbook_entry_author=True)
.first() .first()
) ):
if author.nickname_used: if author.nickname_used:
expoer = author.nickname_used expoer = author.nickname_used
else:
expoer = author.personexpedition.person.name()
else: else:
expoer = author.personexpedition.person.name() expoer = "nobody"
names = f"<u>{expoer}</u>" names = f"<u>{expoer}</u>"
participants = ( participants = (
@@ -119,7 +121,7 @@ def writelogbook(year, filename):
t = loader.get_template("logbook2005style.html") t = loader.get_template("logbook2005style.html")
logbookfile = t.render({"logbook_entries": logbook_entries}) logbookfile = t.render({"logbook_entries": logbook_entries})
except: except:
print(" ! Very Bad Error RENDERING template " + template) print(" ! Very Bad Error RENDERING template ", t)
raise raise
# print(" - template rendered") # print(" - template rendered")
try: try:

View File

@@ -58,6 +58,11 @@ LOGBOOK_PARSER_SETTINGS = {
LOGBOOKS_DIR = "years" # subfolder of settings.EXPOWEB LOGBOOKS_DIR = "years" # subfolder of settings.EXPOWEB
ENTRIES = { ENTRIES = {
"2029": 0,
"2028": 0,
"2027": 0,
"2026": 0,
"2025": 0,
"2024": 125, "2024": 125,
"2023": 131, "2023": 131,
"2022": 94, "2022": 94,
@@ -379,8 +384,10 @@ def parser_html(year, expedition, txt, seq=""):
dupl = {} dupl = {}
# extract front material and stash for later use when rebuilding from list of entries # extract front material and stash for later use when rebuilding from list of entries
headmatch = re.match(r"(?i)(?s).*<body[^>]*>(.*?)<hr.*", txt) if headmatch := re.match(r"(?i)(?s).*<body[^>]*>(.*?)<hr.*", txt): # WALRUS OPERATOR
headpara = headmatch.groups()[0].strip() headpara = headmatch.groups()[0].strip()
else:
headpara = ""
if len(headpara) > 0: if len(headpara) > 0:
frontpath = Path(settings.EXPOWEB, LOGBOOKS_DIR, year, "frontmatter.html") frontpath = Path(settings.EXPOWEB, LOGBOOKS_DIR, year, "frontmatter.html")
@@ -390,8 +397,10 @@ def parser_html(year, expedition, txt, seq=""):
front.write(headpara + "\n") front.write(headpara + "\n")
# extract END material and stash for later use when rebuilding from list of entries # extract END material and stash for later use when rebuilding from list of entries
endmatch = re.match(r"(?i)(?s).*<hr\s*/>([\s\S]*?)(?=</body)", txt) if endmatch := re.match(r"(?i)(?s).*<hr\s*/>([\s\S]*?)(?=</body)", txt): # WALRUS OPERATOR
endpara = endmatch.groups()[0].strip() endpara = endmatch.groups()[0].strip()
else:
endpara = ""
if len(endpara) > 0: if len(endpara) > 0:
print(f"\n - {year} endpara:\n'{endpara}'") print(f"\n - {year} endpara:\n'{endpara}'")
@@ -399,7 +408,10 @@ def parser_html(year, expedition, txt, seq=""):
with open(endpath, "w") as end: with open(endpath, "w") as end:
end.write(endpara + "\n") end.write(endpara + "\n")
tripparas = re.findall(r"<hr\s*/>([\s\S]*?)(?=<hr)", txt) if tripparas := re.findall(r"<hr\s*/>([\s\S]*?)(?=<hr)", txt): # WALRUS OPERATOR
pass
else:
return None
logbook_entry_count = 0 logbook_entry_count = 0
for trippara in tripparas: for trippara in tripparas:
logbook_entry_count += 1 logbook_entry_count += 1
@@ -656,11 +668,12 @@ def parse_logbook_for_expedition(expedition, blog=False):
logentries = parser(year, expedition, txt, sq) # this launches the right parser logentries = parser(year, expedition, txt, sq) # this launches the right parser
# -------------------- # --------------------
if len(logentries) == expect: if logentries:
# print(f"OK {year} {len(logentries):5d} is {expect}\n") if len(logentries) == expect:
pass # print(f"OK {year} {len(logentries):5d} is {expect}\n")
else: pass
print(f"Mismatch in number of log entries: {year} {len(logentries):5d} is not {expect}\n") else:
print(f"Mismatch in number of log entries: {year} {len(logentries):5d} is not {expect}\n")
return logentries return logentries
@@ -674,23 +687,23 @@ def LoadLogbook(year):
clean_logbook_for_expedition(expo) clean_logbook_for_expedition(expo)
logentries = [] logentries = []
logentries = parse_logbook_for_expedition(expo) # this actually loads the logbook for one expo if logentries := parse_logbook_for_expedition(expo): # this actually loads the logbook for one expo # WALRUS
print(f" - Loaded logbook. {len(logentries)} entries." ) print(f" - Loaded logbook. {len(logentries)} entries." )
if year in BLOG_PARSER_SETTINGS: if year in BLOG_PARSER_SETTINGS:
print(f" - Loading blog.." ) print(f" - Loading blog.." )
logentries += parse_logbook_for_expedition(expo, blog=True) # this loads the blog logbook logentries += parse_logbook_for_expedition(expo, blog=True) # this loads the blog logbook
else:
print(
f" - Not a year with extant blog entries to import: '{year}' not in BLOG_PARSER_SETTINGS {BLOG_PARSER_SETTINGS}"
)
for entrytuple in logentries:
date, place, tripcave, triptitle, text, trippersons, author, guests, expedition, tu, tid = entrytuple
if expo == expedition: # unneeded check, we zeroed it before filling it
# print(f" -- {triptitle}")
store_entry_into_database(date, place, tripcave, triptitle, text, trippersons, author, guests, expedition, tu, tid)
else: else:
print(f" ! unexpected log entry labelled as '{expedition}' {tid}" ) print(
expo.save() # to save logbook name property f" - Not a year with extant blog entries to import: '{year}' not in BLOG_PARSER_SETTINGS {BLOG_PARSER_SETTINGS}"
)
for entrytuple in logentries:
date, place, tripcave, triptitle, text, trippersons, author, guests, expedition, tu, tid = entrytuple
if expo == expedition: # unneeded check, we zeroed it before filling it
# print(f" -- {triptitle}")
store_entry_into_database(date, place, tripcave, triptitle, text, trippersons, author, guests, expedition, tu, tid)
else:
print(f" ! unexpected log entry labelled as '{expedition}' {tid}" )
expo.save() # to save logbook name property
def LoadLogbooks(): def LoadLogbooks():
"""This is the master function for parsing all logbooks into the Troggle database. """This is the master function for parsing all logbooks into the Troggle database.