Add unique URI to Searchable that won't change if the event name changes
This commit is contained in:
parent
4debf8e255
commit
e0df6b3f5b
5 changed files with 82 additions and 3 deletions
18
events/migrations/0014_add_searchable_uri.py
Normal file
18
events/migrations/0014_add_searchable_uri.py
Normal file
|
@ -0,0 +1,18 @@
|
||||||
|
# Generated by Django 2.0 on 2018-03-07 17:37
|
||||||
|
|
||||||
|
from django.db import migrations, models
|
||||||
|
import pytz
|
||||||
|
|
||||||
|
class Migration(migrations.Migration):
|
||||||
|
|
||||||
|
dependencies = [
|
||||||
|
('events', '0013_auto_20180304_1649'),
|
||||||
|
]
|
||||||
|
|
||||||
|
operations = [
|
||||||
|
migrations.AddField(
|
||||||
|
model_name='searchable',
|
||||||
|
name='event_uri',
|
||||||
|
field=models.CharField(max_length=256, null=True, serialize=False),
|
||||||
|
),
|
||||||
|
]
|
26
events/migrations/0015_populate_searchable_uri.py
Normal file
26
events/migrations/0015_populate_searchable_uri.py
Normal file
|
@ -0,0 +1,26 @@
|
||||||
|
# Generated by Django 2.0 on 2018-03-11 06:32
|
||||||
|
|
||||||
|
from django.db import migrations
|
||||||
|
import hashlib
|
||||||
|
|
||||||
|
def gen_event_uris(apps, schema_editor):
|
||||||
|
Event = MyModel = apps.get_model('events', 'Event')
|
||||||
|
Searchable = MyModel = apps.get_model('events', 'Searchable')
|
||||||
|
for searchable in Searchable.objects.all():
|
||||||
|
md5 = hashlib.md5()
|
||||||
|
federation_url = searchable.event_url.split('/')
|
||||||
|
federation_node = '/'.join(federation_url[:3])
|
||||||
|
federation_id = '/'.join(federation_url[:5])
|
||||||
|
md5.update(bytes(federation_id, 'utf8'))
|
||||||
|
searchable.event_uri = federation_node + '/' + md5.hexdigest()
|
||||||
|
searchable.save()
|
||||||
|
|
||||||
|
class Migration(migrations.Migration):
|
||||||
|
|
||||||
|
dependencies = [
|
||||||
|
('events', '0014_add_searchable_uri'),
|
||||||
|
]
|
||||||
|
|
||||||
|
operations = [
|
||||||
|
migrations.RunPython(gen_event_uris, reverse_code=migrations.RunPython.noop)
|
||||||
|
]
|
23
events/migrations/0016_make_searchable_uri_unique.py
Normal file
23
events/migrations/0016_make_searchable_uri_unique.py
Normal file
|
@ -0,0 +1,23 @@
|
||||||
|
# Generated by Django 2.0 on 2018-03-11 06:33
|
||||||
|
|
||||||
|
from django.db import migrations, models
|
||||||
|
|
||||||
|
|
||||||
|
class Migration(migrations.Migration):
|
||||||
|
|
||||||
|
dependencies = [
|
||||||
|
('events', '0015_populate_searchable_uri'),
|
||||||
|
]
|
||||||
|
|
||||||
|
operations = [
|
||||||
|
migrations.AlterField(
|
||||||
|
model_name='searchable',
|
||||||
|
name='event_uri',
|
||||||
|
field=models.CharField(max_length=256, primary_key=True, serialize=False),
|
||||||
|
),
|
||||||
|
migrations.AlterField(
|
||||||
|
model_name='searchable',
|
||||||
|
name='event_url',
|
||||||
|
field=models.URLField(),
|
||||||
|
),
|
||||||
|
]
|
|
@ -14,6 +14,7 @@ import re
|
||||||
import pytz
|
import pytz
|
||||||
import datetime
|
import datetime
|
||||||
import unicodedata
|
import unicodedata
|
||||||
|
import hashlib
|
||||||
|
|
||||||
SLUG_OK = '-_~'
|
SLUG_OK = '-_~'
|
||||||
|
|
||||||
|
@ -92,14 +93,24 @@ def update_event_searchable(event):
|
||||||
site = Site.objects.get(id=1)
|
site = Site.objects.get(id=1)
|
||||||
event_url = "https://%s%s" % (site.domain, event.get_absolute_url())
|
event_url = "https://%s%s" % (site.domain, event.get_absolute_url())
|
||||||
origin_url = "https://%s%s" % (site.domain, reverse('searchables'))
|
origin_url = "https://%s%s" % (site.domain, reverse('searchables'))
|
||||||
|
|
||||||
|
md5 = hashlib.md5()
|
||||||
|
federation_url = event_url.split('/')
|
||||||
|
federation_node = '/'.join(federation_url[:3])
|
||||||
|
federation_id = '/'.join(federation_url[:5])
|
||||||
|
md5.update(bytes(federation_id, 'utf8'))
|
||||||
|
event_uri = federation_node + '/' + md5.hexdigest()
|
||||||
|
|
||||||
try:
|
try:
|
||||||
searchable = Searchable.objects.get(event_url=event_url)
|
searchable = Searchable.objects.get(event_uri=event_uri)
|
||||||
except:
|
except:
|
||||||
searchable = Searchable(event_url)
|
searchable = Searchable(event_uri)
|
||||||
searchable.origin_node = origin_url
|
searchable.origin_node = origin_url
|
||||||
searchable.federation_node = origin_url
|
searchable.federation_node = origin_url
|
||||||
searchable.federation_time = datetime.datetime.now()
|
searchable.federation_time = datetime.datetime.now()
|
||||||
|
|
||||||
|
searchable.event_url = event_url
|
||||||
|
|
||||||
if event.team.category:
|
if event.team.category:
|
||||||
searchable.img_url = event.team.category.img_url
|
searchable.img_url = event.team.category.img_url
|
||||||
else:
|
else:
|
||||||
|
|
|
@ -6,7 +6,8 @@ import datetime
|
||||||
|
|
||||||
# Provides a searchable index of events that may belong to this site or a federated site
|
# Provides a searchable index of events that may belong to this site or a federated site
|
||||||
class Searchable(models.Model):
|
class Searchable(models.Model):
|
||||||
event_url = models.URLField(primary_key=True, null=False, blank=False)
|
event_uri = models.CharField(primary_key=True, max_length=256, null=False, blank=False)
|
||||||
|
event_url = models.URLField(null=False, blank=False)
|
||||||
event_title = models.CharField(max_length=256, null=False, blank=False)
|
event_title = models.CharField(max_length=256, null=False, blank=False)
|
||||||
img_url = models.URLField(null=False, blank=False)
|
img_url = models.URLField(null=False, blank=False)
|
||||||
location_name = models.CharField(max_length=256, null=False, blank=False)
|
location_name = models.CharField(max_length=256, null=False, blank=False)
|
||||||
|
|
Loading…
Reference in a new issue