Skip to content
Snippets Groups Projects
Commit 56bd6768 authored by Tomi Valentová's avatar Tomi Valentová
Browse files

add OctopusPerson model

parent 96209edf
No related branches found
No related tags found
2 merge requests!1097Release,!1095Add basic Octopus people sync
Pipeline #19276 passed
# Generated by Django 5.0.7 on 2024-07-29 20:18
import django.db.models.deletion
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('shared', '0005_auto_20240513_0955'),
('wagtailimages', '0026_delete_uploadedimage'),
]
operations = [
migrations.CreateModel(
name='OctopusPerson',
fields=[
('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('email', models.EmailField(max_length=254, verbose_name='Veřejný email')),
('phone', models.CharField(verbose_name='Telefonní číslo')),
('facebook_url', models.CharField(blank=True, null=True, verbose_name='Facebook URL')),
('flickr_url', models.CharField(blank=True, null=True, verbose_name='Flickr URL')),
('instagram_url', models.CharField(blank=True, null=True, verbose_name='Instagram URL')),
('mastodon_url', models.CharField(blank=True, null=True, verbose_name='Mastodon URL')),
('twitter_url', models.CharField(blank=True, null=True, verbose_name='Twitter URL')),
('tiktok_url', models.CharField(blank=True, null=True, verbose_name='TikTok URL')),
('web_url', models.CharField(blank=True, null=True, verbose_name='Web URL')),
('youtube_url', models.CharField(blank=True, null=True, verbose_name='YouTube URL')),
('more_info_url', models.URLField(blank=True, null=True, verbose_name='URL profilu v Chobotnici')),
('profile_type', models.CharField(choices=[('political', 'Politický'), ('pirate', 'Pirátský')], max_length=9, verbose_name='Typ medailonku')),
('short_text', models.TextField(blank=True, null=True, verbose_name='Krátký popis')),
('long_text', models.TextField(blank=True, null=True, verbose_name='Dlouhý popis')),
('degree_before', models.CharField(max_length=64, verbose_name='Titul (před)')),
('degree_after', models.CharField(max_length=64, verbose_name='Titul (za)')),
('display_name', models.CharField(max_length=128, verbose_name='Zobrazované jméno')),
('photo', models.ForeignKey(on_delete=django.db.models.deletion.PROTECT, to='wagtailimages.image', verbose_name='Profilový obrázek')),
],
),
]
# Generated by Django 5.0.7 on 2024-07-29 20:35
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('shared', '0006_octopusperson'),
]
operations = [
migrations.AddField(
model_name='octopusperson',
name='octopus_id',
field=models.CharField(default=None, max_length=32, verbose_name='ID v chobotnici'),
preserve_default=False,
),
]
# Generated by Django 5.0.7 on 2024-07-29 21:14
import django.db.models.deletion
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('shared', '0007_octopusperson_octopus_id'),
('wagtailimages', '0026_delete_uploadedimage'),
]
operations = [
migrations.AlterField(
model_name='octopusperson',
name='degree_after',
field=models.CharField(blank=True, max_length=64, null=True, verbose_name='Titul (za)'),
),
migrations.AlterField(
model_name='octopusperson',
name='degree_before',
field=models.CharField(blank=True, max_length=64, null=True, verbose_name='Titul (před)'),
),
migrations.AlterField(
model_name='octopusperson',
name='display_name',
field=models.CharField(blank=True, max_length=128, null=True, verbose_name='Zobrazované jméno'),
),
migrations.AlterField(
model_name='octopusperson',
name='email',
field=models.EmailField(blank=True, max_length=254, null=True, verbose_name='Veřejný email'),
),
migrations.AlterField(
model_name='octopusperson',
name='phone',
field=models.CharField(blank=True, null=True, verbose_name='Telefonní číslo'),
),
migrations.AlterField(
model_name='octopusperson',
name='photo',
field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.PROTECT, to='wagtailimages.image', verbose_name='Profilový obrázek'),
),
]
......@@ -2085,3 +2085,122 @@ class PdfPageMixin(models.Model):
# --- END Whole page mixins ---
# --- BEGIN Django-only models ---
class OctopusPerson(models.Model):
octopus_id = models.CharField(
"ID v chobotnici",
max_length=32
)
email = models.EmailField(
"Veřejný email",
blank=True,
null=True,
)
phone = models.CharField(
"Telefonní číslo",
blank=True,
null=True,
)
facebook_url = models.CharField(
"Facebook URL",
blank=True,
null=True,
)
flickr_url = models.CharField(
"Flickr URL",
blank=True,
null=True,
)
instagram_url = models.CharField(
"Instagram URL",
blank=True,
null=True,
)
mastodon_url = models.CharField(
"Mastodon URL",
blank=True,
null=True,
)
twitter_url = models.CharField(
"Twitter URL",
blank=True,
null=True,
)
tiktok_url = models.CharField(
"TikTok URL",
blank=True,
null=True,
)
web_url = models.CharField(
"Web URL",
blank=True,
null=True,
)
youtube_url = models.CharField(
"YouTube URL",
blank=True,
null=True,
)
more_info_url = models.URLField(
"URL profilu v Chobotnici",
blank=True,
null=True,
)
class ProfileTypes(models.TextChoices):
POLITICAL = "political", "Politický"
PIRATE = "pirate", "Pirátský"
profile_type = models.CharField(
"Typ medailonku",
max_length=9,
choices=ProfileTypes.choices,
)
photo = models.ForeignKey(
"wagtailimages.Image",
on_delete=models.PROTECT,
verbose_name="Profilový obrázek",
blank=True,
null=True,
)
short_text = models.TextField(
"Krátký popis",
blank=True,
null=True,
)
long_text = models.TextField(
"Dlouhý popis",
blank=True,
null=True,
)
degree_before = models.CharField(
"Titul (před)",
max_length=64,
blank=True,
null=True,
)
degree_after = models.CharField(
"Titul (za)",
max_length=64,
blank=True,
null=True,
)
display_name = models.CharField(
"Zobrazované jméno",
max_length=128,
blank=True,
null=True,
)
# --- END Django-only models ---
\ No newline at end of file
from gql import gql, Client
from gql.transport.aiohttp import AIOHTTPTransport
from django.conf import settings
from shared.models import OctopusPerson
import os
......@@ -93,7 +94,6 @@ class PeopleGroupImporter:
degreeAfterName
degreeBeforeName
displayName
profilePhoto
}}
}}
}}
......@@ -113,6 +113,7 @@ class PeopleGroupImporter:
def perform_import(self):
try:
people_ids = self.get_people_ids_from_group()
people_profiles = {}
......@@ -132,6 +133,43 @@ class PeopleGroupImporter:
if person_id not in people_profiles:
people_profiles[person_id] = None
print(people_profiles)
for person_id, profile in people_profiles.items():
person = OctopusPerson.objects.filter(octopus_id=person_id).first()
if person is None:
person = OctopusPerson(
octopus_id=person_id,
email=profile["email"],
phone=profile["phone"],
facebook_url=profile["facebookUrl"],
flickr_url=profile["flickrUrl"],
instagram_url=profile["instagramUrl"],
mastodon_url=profile["mastodonUrl"],
twitter_url=profile["twitterUrl"],
tiktok_url=profile["tiktokUrl"],
web_url=profile["webUrl"],
youtube_url=profile["youtubeUrl"],
more_info_url=profile["url"],
# TODO: Assume this is valid for the time being
profile_type=profile["kind"],
# TODO
photo=None,
short_text=profile["textShort"],
long_text=profile["textLong"],
degree_before=profile["person"]["degreeBeforeName"],
degree_after=profile["person"]["degreeAfterName"],
display_name=profile["person"]["displayName"],
)
person.save()
print(person)
finally:
if os.path.exists(self.lock_file_name):
os.remove(self.lock_file_name)
\ No newline at end of file
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment