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,
|
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
|
||||||
|
|||||||
@@ -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(",")
|
||||||
|
|||||||
@@ -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)
|
for folk_field in ["Mugshot", "Blurbfile"]:
|
||||||
|
|
||||||
|
ms_filename = personline[header[folk_field]]
|
||||||
|
ms_path = settings.EXPOWEB / "folk" / ms_filename
|
||||||
|
|
||||||
if ms_filename:
|
if ms_filename:
|
||||||
if not ms_path.is_file():
|
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)
|
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
|
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))
|
||||||
# it has the format 'l/ollybetts.htm' the file may contain <img src="../i/mymug.jpg"> images
|
|
||||||
person["blurbfile"] = str(Path("/folk", ms_filename))
|
if (folk_field == "Blurbfile") and ms_filename:
|
||||||
with open(ms_path, "r") as blurbfile:
|
# it has the format 'l/ollybetts.htm' the file may contain <img src="../i/mymug.jpg"> images
|
||||||
blrb = blurbfile.read()
|
print(f"{personline[header["Name"]]}\n-- {folk_field} -- {ms_path}")
|
||||||
pblurb = re.search(r"<body>.*<hr", blrb, re.DOTALL)
|
with open(ms_path, "r") as blurbfile:
|
||||||
if pblurb:
|
blrb = blurbfile.read()
|
||||||
person["mug_shot"] = None
|
pblurb = re.search(r"<body>.*<hr", blrb, re.DOTALL)
|
||||||
fragment = re.search("<body>(.*)<hr", blrb, re.DOTALL).group(1)
|
if pblurb:
|
||||||
fragment = fragment.replace('src="../i/', 'src="/folk/i/')
|
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)
|
fragment = fragment.replace("src='../i/", "src='/folk/i/")
|
||||||
# replace src="../i/ with src="/folk/i
|
fragment = re.sub(r"<h.*>[^<]*</h.>", "", fragment)
|
||||||
person["blurb"] = fragment
|
person["blurb"] = fragment
|
||||||
else:
|
else:
|
||||||
message = f"! Blurb parse error in {ms_filename}"
|
message = f"! Blurb parse error in {ms_filename}"
|
||||||
print(message)
|
print(message)
|
||||||
DataIssue.objects.create(parser="people", message=message, url="/folk/")
|
DataIssue.objects.create(parser="people", message=message, url=f"/person/{personline[header["Name"]]}")
|
||||||
|
|
||||||
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/")
|
|
||||||
|
|
||||||
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:
|
||||||
|
|||||||
@@ -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}}">😃</a><img style="width:150px;
|
<td align=right><popup><a href="{{personexpoday.personexpedition.person.mugshot}}">😃</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 %}
|
||||||
|
|||||||
Reference in New Issue
Block a user