2
0
mirror of https://expo.survex.com/repositories/troggle/.git synced 2025-12-17 08:27:15 +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,
)
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

View File

@@ -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(",")

View File

@@ -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 <img> 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 <img src="../i/mymug.jpg"> images
person["blurbfile"] = str(Path("/folk", ms_filename))
with open(ms_path, "r") as blurbfile:
blrb = blurbfile.read()
pblurb = re.search(r"<body>.*<hr", blrb, re.DOTALL)
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
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 <img src="../i/mymug.jpg"> 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"<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
@@ -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:

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>
<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 -->
<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 %}
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 %}
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 %}
{% if personexpoday.personexpedition.person.blurb %}