implementation start for importhub

This commit is contained in:
Laura Klünder 2023-12-24 03:38:47 +01:00
parent 7f42ef9775
commit dbdfcf3c7f

View file

@ -1,6 +1,30 @@
from uuid import UUID
import requests import requests
from django.conf import settings from django.conf import settings
from django.core.management.base import BaseCommand 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): class Command(BaseCommand):
@ -11,4 +35,127 @@ class Command(BaseCommand):
headers={"Authorization": "Token "+settings.HUB_API_SECRET}) headers={"Authorization": "Token "+settings.HUB_API_SECRET})
r.raise_for_status() r.raise_for_status()
from pprint import pprint 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()) pprint(r.json())