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

Blrubfile field

This commit is contained in:
2025-07-21 21:03:56 +02:00
parent 9a3651ed8b
commit 833aeaeeba
4 changed files with 52 additions and 50 deletions

View File

@@ -100,7 +100,7 @@ class Person(TroggleModel):
default=False, default=False,
) )
is_guest = models.BooleanField(default=False) # This is per-Person, not per-PersonExpedition 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) blurbfile = models.CharField(max_length=100, blank=True, null=True)
blurb = models.TextField(blank=True, null=True) blurb = models.TextField(blank=True, null=True)
orderref = models.CharField(max_length=200, blank=True) # for alphabetic orderref = models.CharField(max_length=200, blank=True) # for alphabetic

View File

@@ -163,7 +163,7 @@ def folk_export(request):
newfile = settings.EXPOWEB / 'folk' / 'new_folk.csv' newfile = settings.EXPOWEB / 'folk' / 'new_folk.csv'
with open(newfile, 'w') as f: 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: for y in yearlist:
try: try:
expo[y] = Expedition.objects.get(year=y) expo[y] = Expedition.objects.get(year=y)
@@ -184,9 +184,11 @@ def folk_export(request):
f.write(",1") f.write(",1")
else: else:
f.write(",") f.write(",")
if person.mug_shot: if person.mugshot:
f.write(f",{person.mug_shot.replace("/folk/","")}") f.write(f",{person.mugshot.replace("/folk/","")}")
elif person.blurbfile: else:
f.write(",")
if person.blurbfile:
f.write(f",{person.blurbfile.replace("/folk/","")}") f.write(f",{person.blurbfile.replace("/folk/","")}")
else: else:
f.write(",") f.write(",")

View File

@@ -24,50 +24,44 @@ todo = """
""" """
def parse_blurb(personline, header): def parse_blurb(personline, header):
"""create mugshot Photo instance """Read the mugshot and blurbfile strings and checks that
Would be better if all this was done before the Person object was created in the db, then it would not the correspond to real files.
need re-saving (which is slow)"""
Fixes the format of <img> tags inside a blurbfile
and loads the resulting blurb into the database"""
person = {} person = {}
ms_filename = personline[header["Mugshot"]]
ms_path = Path(settings.EXPOWEB, "folk", ms_filename)
if ms_filename: for folk_field in ["Mugshot", "Blurbfile"]:
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.startswith("i/"): ms_filename = personline[header[folk_field]]
# if person just has an image, add it. It has format 'i/adama2018.jpg' ms_path = settings.EXPOWEB / "folk" / ms_filename
person["mug_shot"] = str(Path("/folk", ms_filename))
person["blurb"] = None
elif ms_filename.startswith("l/"): if ms_filename:
# it has the format 'l/ollybetts.htm' the file may contain <img src="../i/mymug.jpg"> images if not ms_path.is_file():
person["blurbfile"] = str(Path("/folk", ms_filename)) message = f"! INVALID {folk_field} field '{ms_filename}' for {personline[header[folk_field]]}"
with open(ms_path, "r") as blurbfile: print(message)
blrb = blurbfile.read() DataIssue.objects.create(parser="people", message=message, url=f"/person/{personline[header["Name"]]}")
pblurb = re.search(r"<body>.*<hr", blrb, re.DOTALL) return
if pblurb:
person["mug_shot"] = None
fragment = re.search("<body>(.*)<hr", blrb, re.DOTALL).group(1)
fragment = fragment.replace('src="../i/', 'src="/folk/i/')
fragment = fragment.replace("src='../i/", "src='/folk/i/")
fragment = re.sub(r"<h.*>[^<]*</h.>", "", 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 person[folk_field.lower()] = str(Path("/folk", ms_filename))
else:
message = f"! Unrecognised type of file at mug_shot field '{ms_filename}' for {person.fullname}" if (folk_field == "Blurbfile") and ms_filename:
print(message) # it has the format 'l/ollybetts.htm' the file may contain <img src="../i/mymug.jpg"> images
DataIssue.objects.create(parser="people", message=message, url="/folk/") print(f"{personline[header["Name"]]}\n-- {folk_field} -- {ms_path}")
with open(ms_path, "r") as blurbfile:
blrb = blurbfile.read()
pblurb = re.search(r"<body>.*<hr", blrb, re.DOTALL)
if pblurb:
fragment = re.search("<body>(.*)<hr", blrb, re.DOTALL).group(1)
fragment = fragment.replace('src="../i/', 'src="/folk/i/')
fragment = fragment.replace("src='../i/", "src='/folk/i/")
fragment = re.sub(r"<h.*>[^<]*</h.>", "", 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 return person
@@ -121,6 +115,8 @@ def load_people_expos():
Person.objects.all().delete() Person.objects.all().delete()
PersonExpedition.objects.all().delete() PersonExpedition.objects.all().delete()
years_begin = 6
splitnick_pattern = re.compile(r"^([\w&;\s\-]+)(?:\(([^)]*)\))?") splitnick_pattern = re.compile(r"^([\w&;\s\-]+)(?:\(([^)]*)\))?")
displayname_pattern = re.compile(r"^([^(]*)(\(([^)]*)\))?") # removes nickname in brackets displayname_pattern = re.compile(r"^([^(]*)(\(([^)]*)\))?") # removes nickname in brackets
rawlastname_pattern = re.compile(r"^([\w&;\s]+)(?:\(([^)]*)\))?") rawlastname_pattern = re.compile(r"^([\w&;\s]+)(?:\(([^)]*)\))?")
@@ -131,12 +127,14 @@ def load_people_expos():
headers = next(personreader) headers = next(personreader)
header = dict(list(zip(headers, list(range(len(headers)))))) header = dict(list(zip(headers, list(range(len(headers))))))
years = headers[5:] years = headers[years_begin:]
Expedition.objects.all().delete()
expos = {} expos = {}
nexpos = Expedition.objects.count() nexpos = Expedition.objects.count()
if nexpos <= 0: if nexpos <= 0:
print(" - Creating expeditions") print(" - Creating expeditions")
for year in years: for year in years:
iy = int(year)
year = year.strip() year = year.strip()
coUniqueAttribs = {"year": year} coUniqueAttribs = {"year": year}
otherAttribs = {"name": f"CUCC expo {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 else: # re-running a folk import without a complete reset
print(" - Cacheing expeditions") print(" - Cacheing expeditions")
for year in years: for year in years:
iy = int(year)
year = year.strip() year = year.strip()
e = Expedition.objects.get(year=year) e = Expedition.objects.get(year=year)
expos[year] = e expos[year] = e
@@ -211,7 +210,7 @@ def load_people_expos():
p_list.append(Person(**attribs, **blurb_fields)) p_list.append(Person(**attribs, **blurb_fields))
# make person expedition # 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)] expedition = expos[str(year)]
if attended in ("1", "-1"): if attended in ("1", "-1"):
@@ -231,6 +230,7 @@ def load_people_expos():
ensure_users_are_persons() ensure_users_are_persons()
most_recent = Expedition.objects.all().first() most_recent = Expedition.objects.all().first()
print(most_recent)
check_new_signups(most_recent) check_new_signups(most_recent)
# pr.disable() # pr.disable()
# with open("folk_reader.prof", "w") as f: # with open("folk_reader.prof", "w") as f:

View File

@@ -54,13 +54,13 @@ an "<b>S</b>" for a survey trip. The colours of the "<b>T</b>" and "<b>S</b>" a
<td> <td>
<a href="{{ personexpoday.personexpedition.get_absolute_url }}">{{personexpoday.personexpedition.person.fullname|safe}}</a></td> <a href="{{ personexpoday.personexpedition.get_absolute_url }}">{{personexpoday.personexpedition.person.fullname|safe}}</a></td>
{% if personexpoday.personexpedition.person.mug_shot %} {% if personexpoday.personexpedition.person.mugshot %}
<!-- Such a godawful kludge I'm almost proud of it --> <!-- Such a godawful kludge I'm almost proud of it -->
<td align=right><popup><a href="{{personexpoday.personexpedition.person.mug_shot}}">&#128515;</a><img style="width:150px; <td align=right><popup><a href="{{personexpoday.personexpedition.person.mugshot}}">&#128515;</a><img style="width:150px;
{% with c=forloop.counter %} {% with c=forloop.counter %}
top:{{500|add:c|add:c|add:c|add:c|add:c|add:c|add:c|add:c|add:c|add:c|add:c|add:c|add:c|add:c|add:c|add:c|add:c|add:c|add:c|add:c|add:c}}px" top:{{500|add:c|add:c|add:c|add:c|add:c|add:c|add:c|add:c|add:c|add:c|add:c|add:c|add:c|add:c|add:c|add:c|add:c|add:c|add:c|add:c|add:c}}px"
{% endwith %} {% endwith %}
href="{{personexpoday.personexpedition.person.mug_shot}}" src="{{personexpoday.personexpedition.person.mug_shot}}"></popup></td> href="{{personexpoday.personexpedition.person.mugshot}}" src="{{personexpoday.personexpedition.person.mugshot}}"></popup></td>
{% else %} {% else %}
{% if personexpoday.personexpedition.person.blurb %} {% if personexpoday.personexpedition.person.blurb %}