From b791ec8c35c588a84234e455e561a3c5dae94e9d Mon Sep 17 00:00:00 2001 From: SamuelmdLow Date: Thu, 12 Sep 2024 07:31:19 +0000 Subject: [PATCH] Events calendar update: Don't request location every wp api event like an idiot, update character set for more text fields, update styling for better readability --- ...event_address_alter_event_host_and_more.py | 28 +++++++++++++++ events/models.py | 31 ++++++++++++---- .../src/js/components/Events/calendar.jsx | 1 + .../src/styles/components/events/_base.scss | 35 +++++++++++++++---- 4 files changed, 82 insertions(+), 13 deletions(-) create mode 100644 events/migrations/0005_alter_event_address_alter_event_host_and_more.py diff --git a/events/migrations/0005_alter_event_address_alter_event_host_and_more.py b/events/migrations/0005_alter_event_address_alter_event_host_and_more.py new file mode 100644 index 000000000..4f4d5652c --- /dev/null +++ b/events/migrations/0005_alter_event_address_alter_event_host_and_more.py @@ -0,0 +1,28 @@ +# Generated by Django 4.2 on 2024-09-12 06:30 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('events', '0004_event_hash'), + ] + + operations = [ + migrations.AlterField( + model_name='event', + name='address', + field=models.CharField(blank=True, db_collation='utf8mb4_general_ci', max_length=255, null=True), + ), + migrations.AlterField( + model_name='event', + name='host', + field=models.CharField(blank=True, db_collation='utf8mb4_general_ci', max_length=255, null=True), + ), + migrations.AlterField( + model_name='event', + name='location', + field=models.CharField(blank=True, db_collation='utf8mb4_general_ci', max_length=255, null=True), + ), + ] diff --git a/events/models.py b/events/models.py index 179881748..f0b59038d 100644 --- a/events/models.py +++ b/events/models.py @@ -115,6 +115,17 @@ async def ical_create_event(self, ical_component, name, instructions): async def read_wp_events_api(self, name, api, categorize): try: #print("Requesting " + name) + locations = {} + async with aiohttp.ClientSession(headers={'User-Agent': "The Ubyssey https://ubyssey.ca/"}) as session: + async with session.get(api + 'event-venues/?per_page=100') as response: + result = json.loads(await response.text()) + for l in result: + locations[l['id']] = { + 'name': l['name'], + 'address': l['address'], + 'city': l['city'], + 'state': l['state'], + } async with aiohttp.ClientSession(headers={'User-Agent': "The Ubyssey https://ubyssey.ca/"}) as session: async with session.get(api + "events/?event_end_after=" + (timezone.now()-timedelta(days=7)).strftime("%Y-%m-%d") + "T00:00:00&page=1&per_page=20") as response: @@ -123,7 +134,7 @@ async def read_wp_events_api(self, name, api, categorize): tasks = [] for i in result: - tasks.append(asyncio.create_task(self.wp_events_api_create_event(i, api, name, categorize))) + tasks.append(asyncio.create_task(self.wp_events_api_create_event(i, api, name, categorize, locations))) await asyncio.gather(*tasks) @@ -131,7 +142,7 @@ async def read_wp_events_api(self, name, api, categorize): except: print("Failed requesting to " + name) - async def wp_events_api_create_event(self, event_json, api, host, categorize): + async def wp_events_api_create_event(self, event_json, api, host, categorize, locations): if not await self.filter(event_url=event_json['link'], start_time=datetime.fromisoformat(event_json['start']).astimezone(timezone.get_current_timezone())).aexists(): event = await self.acreate( title=event_json['title'], @@ -154,11 +165,14 @@ async def wp_events_api_create_event(self, event_json, api, host, categorize): event.end_time = datetime.fromisoformat(event_json['end']).astimezone(timezone.get_current_timezone()) if len(event_json['event-venues']) > 0: - async with aiohttp.ClientSession(headers={'User-Agent': "The Ubyssey https://ubyssey.ca/"}) as session: - async with session.get(api + 'event-venues/' + str(event_json['event-venues'][0])) as response: - venue = json.loads(await response.text()) - event.location=str(venue['name'].encode('utf-8'), 'UTF-8') - event.address=str((venue['address'] + ", " + venue['city'] + ", " + venue['state']).encode('utf-8'), 'UTF-8') + if event_json['event-venues'][0] in locations: + venue = locations[event_json['event-venues'][0]] + else: + async with aiohttp.ClientSession(headers={'User-Agent': "The Ubyssey https://ubyssey.ca/"}) as session: + async with session.get(api + 'event-venues/' + str(event_json['event-venues'][0])) as response: + venue = json.loads(await response.text()) + event.location=str(venue['name'].encode('utf-8'), 'UTF-8') + event.address=str((venue['address'] + ", " + venue['city'] + ", " + venue['state']).encode('utf-8'), 'UTF-8') else: event.location='' event.address='' @@ -767,16 +781,19 @@ class Event(models.Model): max_length=255, blank=True, null=True, + db_collation = "utf8mb4_general_ci", ) address = models.CharField( max_length=255, blank=True, null=True, + db_collation = "utf8mb4_general_ci", ) host = models.CharField( max_length=255, blank=True, null=True, + db_collation = "utf8mb4_general_ci", ) email = models.CharField( max_length=255, diff --git a/ubyssey/static_src/src/js/components/Events/calendar.jsx b/ubyssey/static_src/src/js/components/Events/calendar.jsx index e9484513b..b19a98af6 100644 --- a/ubyssey/static_src/src/js/components/Events/calendar.jsx +++ b/ubyssey/static_src/src/js/components/Events/calendar.jsx @@ -327,6 +327,7 @@ function EventsCalendar({events}) { hosts.push(event.host); } } + hosts.sort(); return hosts; } diff --git a/ubyssey/static_src/src/styles/components/events/_base.scss b/ubyssey/static_src/src/styles/components/events/_base.scss index 093c4bd4c..eca604168 100644 --- a/ubyssey/static_src/src/styles/components/events/_base.scss +++ b/ubyssey/static_src/src/styles/components/events/_base.scss @@ -159,9 +159,17 @@ h2.events-calendar--month { div.day{ min-height: 4em; - padding: 1em; + padding: 1em 0.5em; font-size: 12px; + &:first-child { + padding-left: 1em; + } + + &:last-child { + padding-right: 1em; + } + li { border: 2px solid transparent; font-family: noto-sans; @@ -203,14 +211,9 @@ div.day{ margin: 0.3em 0; padding-inline: 0.25em; border-radius: 0.5em; - height: 1.5em; max-width: 400px; background-color: var(--highlight); - - white-space: nowrap; - overflow: hidden; - text-overflow: ellipsis; line-height: 1.5em; b { text-transform: lowercase; @@ -220,6 +223,14 @@ div.day{ } @media($bp-larger-than-phablet) { + + div.day li { + height: 1.5em; + white-space: nowrap; + overflow: hidden; + text-overflow: ellipsis; + } + .events-calendar--row:first-child div.day:first-of-type { border-radius: 0.5em 0 0 0; } @@ -265,6 +276,14 @@ button.events-calendar--number { white-space: initial !important; overflow: unset !important; height: auto !important; + a { + overflow: hidden; + text-overflow: ellipsis; + display: -webkit-box; + line-clamp: 5; + -webkit-line-clamp: 5; + -webkit-box-orient: vertical; + } } } @@ -386,6 +405,7 @@ header.events{ width: 100%; height: 0; position: fixed; + font-size: 0.9em; dialog { padding: 1em; display: block; @@ -429,6 +449,9 @@ header.events{ padding: 1.5em; li { margin-right: 2em; + b { + display: block; + } } } .events-calendar--rows .events-calendar--row:first-child .events-calendar--month {