mirror of
https://expo.survex.com/repositories/troggle/.git
synced 2025-12-17 15:07:12 +00:00
Blrubfile field
This commit is contained in:
@@ -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
|
||||
|
||||
@@ -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(",")
|
||||
|
||||
@@ -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"]]}"
|
||||
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["fullname"]]}")
|
||||
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/"):
|
||||
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
|
||||
person["blurbfile"] = str(Path("/folk", ms_filename))
|
||||
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:
|
||||
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/")
|
||||
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:
|
||||
|
||||
@@ -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}}">😃</a><img style="width:150px;
|
||||
<td align=right><popup><a href="{{personexpoday.personexpedition.person.mugshot}}">😃</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 %}
|
||||
|
||||
Reference in New Issue
Block a user