From dbdfcf3c7f31507f12c5b6c1a24d4e0df3e2aace Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Laura=20Kl=C3=BCnder?= Date: Sun, 24 Dec 2023 03:38:47 +0100 Subject: [PATCH] implementation start for importhub --- .../mapdata/management/commands/importhub.py | 147 ++++++++++++++++++ 1 file changed, 147 insertions(+) diff --git a/src/c3nav/mapdata/management/commands/importhub.py b/src/c3nav/mapdata/management/commands/importhub.py index 71634c83..77b1a651 100644 --- a/src/c3nav/mapdata/management/commands/importhub.py +++ b/src/c3nav/mapdata/management/commands/importhub.py @@ -1,6 +1,30 @@ +from uuid import UUID + import requests from django.conf import settings from django.core.management.base import BaseCommand +from pydantic import Field, BaseModel +from pydantic import PositiveInt + +from c3nav.api.utils import NonEmptyStr + + +class HubImportItem(BaseModel): + """ + Something imported from the hub + """ + type: NonEmptyStr + id: UUID + slug: NonEmptyStr = Field(pattern=r'^[-a-zA-Z0-9_]+$') + name: NonEmptyStr | dict[NonEmptyStr, NonEmptyStr] + is_official: bool + description: dict[NonEmptyStr, NonEmptyStr | None] + public_url: NonEmptyStr = Field(pattern=r'^https://') + parent_id: UUID | None + children: list[NonEmptyStr] | None + floor: PositiveInt + location: tuple[float, float] + polygons: tuple[list[tuple[float, float]]] | None class Command(BaseCommand): @@ -11,4 +35,127 @@ class Command(BaseCommand): headers={"Authorization": "Token "+settings.HUB_API_SECRET}) r.raise_for_status() from pprint import pprint + + data = [ + { + "type": "assembly", + "id": "037c0b9c-6283-42e4-9c43-24e072e8718e", + "slug": "fnord", + "name": "Fnord Example Habitat", + "is_official": False, + "description": { + "de": "Beispiel Habitat", + "en": "Example Cluster" + }, + "public_url": "https://hub.example.net/assembly/fnord/", + "parent_id": None, + "children": ["child"], + "floor": 2, + "location": [ + 13.301537039641516, + 53.03217295491487 + ], + "polygons": [ + [ + [ + 13.307995798949293, + 53.03178583543769 + ], + [ + 13.30780267990096, + 53.030276036273506 + ], + [ + 13.310034277800554, + 53.03009537300366 + ], + [ + 13.310205939178047, + 53.0315793702961 + ], + [ + 13.307995798949293, + 53.03178583543769 + ] + ] + ] + }, + { + "type": "assembly", + "id": "085657cc-9b46-4a71-853c-70e10a371e57", + "slug": "kika", + "name": "Kinderkanal", + "is_official": True, + "description": { + "de": "Danke für deinen Betrag.", + "en": "Thanks for your support." + }, + "public_url": "https://hub.example.net/assembly/kika/", + "parent_id": None, + "children": None, + "floor": 62, + "location": [ + 13.300807478789807, + 53.032327801732634 + ], + "polygons": None + }, + { + "type": "assembly", + "id": "fa1f2c57-fd54-47e6-add4-e483654b6741", + "slug": "child", + "name": "Assembly des Habitats #23", + "is_official": False, + "description": { + "de": None, + "en": "Sometimes, an example is all you get." + }, + "public_url": "https://hub.example.net/assembly/child/", + "parent_id": "037c0b9c-6283-42e4-9c43-24e072e8718e", + "children": None, + "floor": 2, + "location": [ + 12.997614446551779, + 53.040472311905404 + ], + "polygons": [ + [ + [ + 13.308124544982434, + 53.03139871248601 + ], + [ + 13.308231833342973, + 53.03173421924521 + ], + [ + 13.309240343932686, + 53.03166969891683 + ], + [ + 13.309197428588305, + 53.031218053919105 + ], + [ + 13.308146002654183, + 53.03123095812731 + ], + [ + 13.308124544982434, + 53.03139871248601 + ] + ] + ] + } + ] + + items: list[HubImportItem] = [HubImportItem.model_validate(item) for item in data] + items_by_id = {item.id: item for item in items} + + for item in items: + hub_types = [ + item.type, + "%s:%s" % (item.type, f"parent:{items_by_id[item.parent_id].slug}" if item.parent_id else "no-parent") + ] + print(hub_types) pprint(r.json()) \ No newline at end of file