From 833aeaeebaa6600ee9dcf0a288f5437126e65f66 Mon Sep 17 00:00:00 2001 From: Philip Sargent Date: Mon, 21 Jul 2025 21:03:56 +0200 Subject: [PATCH] Blrubfile field --- core/models/troggle.py | 2 +- core/views/other.py | 10 +++-- parsers/people.py | 84 +++++++++++++++++++-------------------- templates/expedition.html | 6 +-- 4 files changed, 52 insertions(+), 50 deletions(-) diff --git a/core/models/troggle.py b/core/models/troggle.py index a9103bb..7e02a8c 100644 --- a/core/models/troggle.py +++ b/core/models/troggle.py @@ -100,7 +100,7 @@ class Person(TroggleModel): default=False, ) is_guest = models.BooleanField(default=False) # This is per-Person, not per-PersonExpedition - mug_shot = models.CharField(max_length=100, blank=True, null=True) + mugshot = models.CharField(max_length=100, blank=True, null=True) blurbfile = models.CharField(max_length=100, blank=True, null=True) blurb = models.TextField(blank=True, null=True) orderref = models.CharField(max_length=200, blank=True) # for alphabetic diff --git a/core/views/other.py b/core/views/other.py index a11ef97..862d278 100644 --- a/core/views/other.py +++ b/core/views/other.py @@ -163,7 +163,7 @@ def folk_export(request): newfile = settings.EXPOWEB / 'folk' / 'new_folk.csv' with open(newfile, 'w') as f: - f.write("Name,Lastname,Guest,VfHO member,Mugshot") + f.write("Name,Lastname,Guest,VfHO member,Mugshot,Blurbfile") for y in yearlist: try: expo[y] = Expedition.objects.get(year=y) @@ -184,9 +184,11 @@ def folk_export(request): f.write(",1") else: f.write(",") - if person.mug_shot: - f.write(f",{person.mug_shot.replace("/folk/","")}") - elif person.blurbfile: + if person.mugshot: + f.write(f",{person.mugshot.replace("/folk/","")}") + else: + f.write(",") + if person.blurbfile: f.write(f",{person.blurbfile.replace("/folk/","")}") else: f.write(",") diff --git a/parsers/people.py b/parsers/people.py index e838237..1006c27 100644 --- a/parsers/people.py +++ b/parsers/people.py @@ -24,50 +24,44 @@ todo = """ """ def parse_blurb(personline, header): - """create mugshot Photo instance - Would be better if all this was done before the Person object was created in the db, then it would not - need re-saving (which is slow)""" + """Read the mugshot and blurbfile strings and checks that + the correspond to real files. + + Fixes the format of tags inside a blurbfile + and loads the resulting blurb into the database""" person = {} - ms_filename = personline[header["Mugshot"]] - ms_path = Path(settings.EXPOWEB, "folk", ms_filename) + + for folk_field in ["Mugshot", "Blurbfile"]: + + ms_filename = personline[header[folk_field]] + ms_path = settings.EXPOWEB / "folk" / ms_filename - if ms_filename: - if not ms_path.is_file(): - message = f"! INVALID mug_shot field '{ms_filename}' for {personline[header["Mugshot"]]}" - print(message) - DataIssue.objects.create(parser="people", message=message, url=f"/person/{personline[header["fullname"]]}") - return + if ms_filename: + if not ms_path.is_file(): + message = f"! INVALID {folk_field} field '{ms_filename}' for {personline[header[folk_field]]}" + print(message) + DataIssue.objects.create(parser="people", message=message, url=f"/person/{personline[header["Name"]]}") + return - if ms_filename.startswith("i/"): - # if person just has an image, add it. It has format 'i/adama2018.jpg' - person["mug_shot"] = str(Path("/folk", ms_filename)) - person["blurb"] = None - elif ms_filename.startswith("l/"): - # it has the format 'l/ollybetts.htm' the file may contain images - person["blurbfile"] = str(Path("/folk", ms_filename)) - with open(ms_path, "r") as blurbfile: - blrb = blurbfile.read() - pblurb = re.search(r".*(.*)[^<]*", "", fragment) - # replace src="../i/ with src="/folk/i - person["blurb"] = fragment - else: - message = f"! Blurb parse error in {ms_filename}" - print(message) - DataIssue.objects.create(parser="people", message=message, url="/folk/") - - elif ms_filename == "": - pass - else: - message = f"! Unrecognised type of file at mug_shot field '{ms_filename}' for {person.fullname}" - print(message) - DataIssue.objects.create(parser="people", message=message, url="/folk/") + person[folk_field.lower()] = str(Path("/folk", ms_filename)) + + if (folk_field == "Blurbfile") and ms_filename: + # it has the format 'l/ollybetts.htm' the file may contain images + print(f"{personline[header["Name"]]}\n-- {folk_field} -- {ms_path}") + with open(ms_path, "r") as blurbfile: + blrb = blurbfile.read() + pblurb = re.search(r".*(.*)[^<]*", "", fragment) + person["blurb"] = fragment + else: + message = f"! Blurb parse error in {ms_filename}" + print(message) + DataIssue.objects.create(parser="people", message=message, url=f"/person/{personline[header["Name"]]}") return person @@ -121,6 +115,8 @@ def load_people_expos(): Person.objects.all().delete() PersonExpedition.objects.all().delete() + years_begin = 6 + splitnick_pattern = re.compile(r"^([\w&;\s\-]+)(?:\(([^)]*)\))?") displayname_pattern = re.compile(r"^([^(]*)(\(([^)]*)\))?") # removes nickname in brackets rawlastname_pattern = re.compile(r"^([\w&;\s]+)(?:\(([^)]*)\))?") @@ -131,12 +127,14 @@ def load_people_expos(): headers = next(personreader) header = dict(list(zip(headers, list(range(len(headers)))))) - years = headers[5:] + years = headers[years_begin:] + Expedition.objects.all().delete() expos = {} nexpos = Expedition.objects.count() if nexpos <= 0: print(" - Creating expeditions") for year in years: + iy = int(year) year = year.strip() coUniqueAttribs = {"year": year} otherAttribs = {"name": f"CUCC expo {year}"} @@ -145,6 +143,7 @@ def load_people_expos(): else: # re-running a folk import without a complete reset print(" - Cacheing expeditions") for year in years: + iy = int(year) year = year.strip() e = Expedition.objects.get(year=year) expos[year] = e @@ -211,7 +210,7 @@ def load_people_expos(): p_list.append(Person(**attribs, **blurb_fields)) # make person expedition - for year, attended in list(zip(headers, personline))[5:]: + for year, attended in list(zip(headers, personline))[years_begin:]: expedition = expos[str(year)] if attended in ("1", "-1"): @@ -231,6 +230,7 @@ def load_people_expos(): ensure_users_are_persons() most_recent = Expedition.objects.all().first() + print(most_recent) check_new_signups(most_recent) # pr.disable() # with open("folk_reader.prof", "w") as f: diff --git a/templates/expedition.html b/templates/expedition.html index e268de8..9e48850 100644 --- a/templates/expedition.html +++ b/templates/expedition.html @@ -54,13 +54,13 @@ an "S" for a survey trip. The colours of the "T" and "S" a {{personexpoday.personexpedition.person.fullname|safe}} -{% if personexpoday.personexpedition.person.mug_shot %} +{% if personexpoday.personexpedition.person.mugshot %} - 😃😃 + href="{{personexpoday.personexpedition.person.mugshot}}" src="{{personexpoday.personexpedition.person.mugshot}}"> {% else %} {% if personexpoday.personexpedition.person.blurb %}