Commit 9f91f2a6 authored by Marco Schmiedel's avatar Marco Schmiedel

fix

parent 38ae6ecf
{
"cells": [
{
"cell_type": "code",
"execution_count": 22,
"id": "531d8b07-8f2f-4ef6-b92a-d4bf3364e166",
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"{\n",
" \"base\": {\n",
" \"id\": 133,\n",
" \"provider\": \"Freenet | Cellway\",\n",
" \"providercode\": \"3877325\",\n",
" \"name\": \"Allnet Flat 20 GB Telekom (Okt 2024)\",\n",
" \"alias\": null,\n",
" \"network\": 1,\n",
" \"flyerurl\": \"https://freenetflyer.s3.amazonaws.com/flyers/3877325_flyer.pdf\",\n",
" \"piburl\": \"https://freenetflyer.s3.amazonaws.com/pibs/3877325_pib.pdf\",\n",
" \"created\": \"2025-04-22T11:43:59\",\n",
" \"updated\": \"2025-04-22T12:26:46\",\n",
" \"data_volume_gb\": 20,\n",
" \"network_operator\": \"Telekom\",\n",
" \"inclusive_sms_flat\": false,\n",
" \"network_technology\": \"5G\",\n",
" \"is_data_only_tariff\": false,\n",
" \"data_upload_max_mbps\": 10,\n",
" \"marketing_start_date\": \"2024-10-01\",\n",
" \"data_download_max_mbps\": 50,\n",
" \"inclusive_internet_flat\": true,\n",
" \"inclusive_telephony_flat\": true,\n",
" \"data_billing_increment_kb\": 1,\n",
" \"inclusive_volte_wlan_call\": true,\n",
" \"data_upload_throttled_kbps\": 64,\n",
" \"contract_min_duration_months\": 24,\n",
" \"data_download_throttled_kbps\": 64,\n",
" \"sms_price_per_unit_eur_netto\": 0.1597,\n",
" \"sms_price_per_unit_eur_brutto\": 0.19,\n",
" \"pricing_connection_fee_eur_netto\": 33.605,\n",
" \"pricing_connection_fee_eur_brutto\": 39.99,\n",
" \"pricing_monthly_initial_eur_netto\": 25.2017,\n",
" \"pricing_monthly_initial_eur_brutto\": 29.99,\n",
" \"telephony_billing_increment_seconds\": \"60/60\",\n",
" \"telephony_price_per_minute_eur_netto\": 0,\n",
" \"telephony_price_per_minute_eur_brutto\": 0,\n",
" \"pricing_monthly_after_period_eur_netto\": 25.2017,\n",
" \"pricing_monthly_after_period_eur_brutto\": 29.99,\n",
" \"contract_cancellation_notice_period_months\": 1,\n",
" \"ai_identified_name\": \"Allnet Flat 20 GB\"\n",
" },\n",
" \"deals\": [\n",
" {\n",
" \"id\": 281,\n",
" \"provisiongroup\": 1,\n",
" \"providercode\": \"\",\n",
" \"name\": \"\",\n",
" \"alias\": null,\n",
" \"price\": 25.20168,\n",
" \"starts\": \"2025-04-22T11:43:59\",\n",
" \"stops\": null,\n",
" \"provision1\": 0.0,\n",
" \"provision2\": 0.0,\n",
" \"provision3\": 0.0,\n",
" \"provision4\": 0.0,\n",
" \"created\": \"2025-04-22T11:43:59\",\n",
" \"updated\": \"2025-04-22T11:43:59\"\n",
" },\n",
" {\n",
" \"id\": 282,\n",
" \"provisiongroup\": 1,\n",
" \"providercode\": \"A3908081\",\n",
" \"name\": \"170 EUR Sonderbonus\",\n",
" \"alias\": null,\n",
" \"price\": 25.20168,\n",
" \"starts\": \"2025-04-22T11:43:59\",\n",
" \"stops\": null,\n",
" \"provision1\": 0.0,\n",
" \"provision2\": 0.0,\n",
" \"provision3\": 0.0,\n",
" \"provision4\": 0.0,\n",
" \"created\": \"2025-04-22T11:43:59\",\n",
" \"updated\": \"2025-04-22T11:43:59\"\n",
" },\n",
" {\n",
" \"id\": 283,\n",
" \"provisiongroup\": 1,\n",
" \"providercode\": \"A3908084\",\n",
" \"name\": \"24 x 10 EUR Rabatt auf MGP, 0 EUR Vergütungsverzicht, 0 EUR Sonderbonus\",\n",
" \"alias\": null,\n",
" \"price\": 25.20168,\n",
" \"starts\": \"2025-04-22T11:43:59\",\n",
" \"stops\": null,\n",
" \"provision1\": 0.0,\n",
" \"provision2\": 0.0,\n",
" \"provision3\": 0.0,\n",
" \"provision4\": 0.0,\n",
" \"created\": \"2025-04-22T11:43:59\",\n",
" \"updated\": \"2025-04-22T11:43:59\"\n",
" }\n",
" ],\n",
" \"options\": [\n",
" {\n",
" \"providercode\": \"G209\",\n",
" \"items\": [\n",
" {\n",
" \"id\": 4629,\n",
" \"provisiongroup\": 1,\n",
" \"providercode\": \"O15695\",\n",
" \"name\": \"Sperren | Sperre anonyme Anrufe - auf Kundenwunsch\",\n",
" \"alias\": null,\n",
" \"price\": 0.0,\n",
" \"starts\": \"2025-04-22T11:43:59\",\n",
" \"stops\": null,\n",
" \"provision1\": 0.0,\n",
" \"provision2\": 0.0,\n",
" \"provision3\": 0.0,\n",
" \"provision4\": 0.0,\n",
" \"created\": \"2025-04-22T11:43:59\",\n",
" \"updated\": \"2025-04-22T11:43:59\"\n",
" }\n",
" ]\n",
" },\n",
" {\n",
" \"providercode\": \"G218\",\n",
" \"items\": [\n",
" {\n",
" \"id\": 4630,\n",
" \"provisiongroup\": 1,\n",
" \"providercode\": \"O18978\",\n",
" \"name\": \"Mobile Sicherheit | freenet Handy Helfer 24 Monate (DLS24M0TB0G0499)\",\n",
" \"alias\": null,\n",
" \"price\": 4.19328,\n",
" \"starts\": \"2025-04-22T11:43:59\",\n",
" \"stops\": null,\n",
" \"provision1\": 0.0,\n",
" \"provision2\": 0.0,\n",
" \"provision3\": 0.0,\n",
" \"provision4\": 0.0,\n",
" \"created\": \"2025-04-22T11:43:59\",\n",
" \"updated\": \"2025-04-22T11:43:59\"\n",
" }\n",
" ]\n",
" },\n",
" {\n",
" \"providercode\": \"G236\",\n",
" \"items\": [\n",
" {\n",
" \"id\": 4631,\n",
" \"provisiongroup\": 1,\n",
" \"providercode\": \"O17691\",\n",
" \"name\": \"freenet Cloud (Cloud) | Digitales Service Paket 100 GB (DLS24M0TB0G0299)\",\n",
" \"alias\": null,\n",
" \"price\": 2.51261,\n",
" \"starts\": \"2025-04-22T11:43:59\",\n",
" \"stops\": null,\n",
" \"provision1\": 0.0,\n",
" \"provision2\": 0.0,\n",
" \"provision3\": 0.0,\n",
" \"provision4\": 0.0,\n",
" \"created\": \"2025-04-22T11:43:59\",\n",
" \"updated\": \"2025-04-22T11:43:59\"\n",
" },\n",
" {\n",
" \"id\": 4633,\n",
" \"provisiongroup\": 1,\n",
" \"providercode\": \"O18610\",\n",
" \"name\": \"freenet Cloud (Cloud) | Kundenservice Paket 100 GB (DLS24M0TB0G0199)\",\n",
" \"alias\": null,\n",
" \"price\": 1.67227,\n",
" \"starts\": \"2025-04-22T11:43:59\",\n",
" \"stops\": null,\n",
" \"provision1\": 0.0,\n",
" \"provision2\": 0.0,\n",
" \"provision3\": 0.0,\n",
" \"provision4\": 0.0,\n",
" \"created\": \"2025-04-22T11:43:59\",\n",
" \"updated\": \"2025-04-22T11:43:59\"\n",
" }\n",
" ]\n",
" },\n",
" {\n",
" \"providercode\": \"G60\",\n",
" \"items\": [\n",
" {\n",
" \"id\": 4634,\n",
" \"provisiongroup\": 1,\n",
" \"providercode\": \"O1943\",\n",
" \"name\": \"T-Mobile@home / EUR 4,95 monatlich | Hausnummer\",\n",
" \"alias\": null,\n",
" \"price\": 0.0,\n",
" \"starts\": \"2025-04-22T11:43:59\",\n",
" \"stops\": null,\n",
" \"provision1\": 0.0,\n",
" \"provision2\": 0.0,\n",
" \"provision3\": 0.0,\n",
" \"provision4\": 0.0,\n",
" \"created\": \"2025-04-22T11:43:59\",\n",
" \"updated\": \"2025-04-22T11:43:59\"\n",
" },\n",
" {\n",
" \"id\": 4639,\n",
" \"provisiongroup\": 1,\n",
" \"providercode\": \"O1929\",\n",
" \"name\": \"T-Mobile@home / EUR 4,95 monatlich | Stadt\",\n",
" \"alias\": null,\n",
" \"price\": 0.0,\n",
" \"starts\": \"2025-04-22T11:43:59\",\n",
" \"stops\": null,\n",
" \"provision1\": 0.0,\n",
" \"provision2\": 0.0,\n",
" \"provision3\": 0.0,\n",
" \"provision4\": 0.0,\n",
" \"created\": \"2025-04-22T11:43:59\",\n",
" \"updated\": \"2025-04-22T11:43:59\"\n",
" },\n",
" {\n",
" \"id\": 4666,\n",
" \"provisiongroup\": 1,\n",
" \"providercode\": \"O1941\",\n",
" \"name\": \"T-Mobile@home / EUR 4,95 monatlich | Strasse\",\n",
" \"alias\": null,\n",
" \"price\": 0.0,\n",
" \"starts\": \"2025-04-22T11:43:59\",\n",
" \"stops\": null,\n",
" \"provision1\": 0.0,\n",
" \"provision2\": 0.0,\n",
" \"provision3\": 0.0,\n",
" \"provision4\": 0.0,\n",
" \"created\": \"2025-04-22T11:43:59\",\n",
" \"updated\": \"2025-04-22T11:43:59\"\n",
" },\n",
" {\n",
" \"id\": 4672,\n",
" \"provisiongroup\": 1,\n",
" \"providercode\": \"O1939\",\n",
" \"name\": \"T-Mobile@home / EUR 4,95 monatlich | PLZ\",\n",
" \"alias\": null,\n",
" \"price\": 0.0,\n",
" \"starts\": \"2025-04-22T11:43:59\",\n",
" \"stops\": null,\n",
" \"provision1\": 0.0,\n",
" \"provision2\": 0.0,\n",
" \"provision3\": 0.0,\n",
" \"provision4\": 0.0,\n",
" \"created\": \"2025-04-22T11:43:59\",\n",
" \"updated\": \"2025-04-22T11:43:59\"\n",
" }\n",
" ]\n",
" },\n",
" {\n",
" \"providercode\": \"G179\",\n",
" \"items\": [\n",
" {\n",
" \"id\": 4636,\n",
" \"provisiongroup\": 1,\n",
" \"providercode\": \"G3711799\",\n",
" \"name\": \"Vertriebspartneraktionen | Rabatt auf Monatsgrundpreis\",\n",
" \"alias\": null,\n",
" \"price\": 0.0,\n",
" \"starts\": \"2025-04-22T11:43:59\",\n",
" \"stops\": null,\n",
" \"provision1\": 0.0,\n",
" \"provision2\": 0.0,\n",
" \"provision3\": 0.0,\n",
" \"provision4\": 0.0,\n",
" \"created\": \"2025-04-22T11:43:59\",\n",
" \"updated\": \"2025-04-22T11:43:59\",\n",
" \"items\": [\n",
" {\n",
" \"id\": 4650,\n",
" \"provisiongroup\": 1,\n",
" \"providercode\": \"O3708583\",\n",
" \"name\": \"Rabatt auf Monatsgrundpreis | VP: 24 x 5 EUR Rabatt auf Monatsgrundpreis\",\n",
" \"alias\": null,\n",
" \"price\": 0.0,\n",
" \"starts\": \"2025-04-22T11:43:59\",\n",
" \"stops\": null,\n",
" \"provision1\": 0.0,\n",
" \"provision2\": 0.0,\n",
" \"provision3\": 0.0,\n",
" \"provision4\": 0.0,\n",
" \"created\": \"2025-04-22T11:43:59\",\n",
" \"updated\": \"2025-04-22T11:43:59\"\n",
" },\n",
" {\n",
" \"id\": 4651,\n",
" \"provisiongroup\": 1,\n",
" \"providercode\": \"O3708586\",\n",
" \"name\": \"Rabatt auf Monatsgrundpreis | VP: 24 x 2 EUR Rabatt auf Monatsgrundpreis\",\n",
" \"alias\": null,\n",
" \"price\": 0.0,\n",
" \"starts\": \"2025-04-22T11:43:59\",\n",
" \"stops\": null,\n",
" \"provision1\": 0.0,\n",
" \"provision2\": 0.0,\n",
" \"provision3\": 0.0,\n",
" \"provision4\": 0.0,\n",
" \"created\": \"2025-04-22T11:43:59\",\n",
" \"updated\": \"2025-04-22T11:43:59\"\n",
" },\n",
" {\n",
" \"id\": 4673,\n",
" \"provisiongroup\": 1,\n",
" \"providercode\": \"O3708580\",\n",
" \"name\": \"Rabatt auf Monatsgrundpreis | VP: 24 x 7 EUR Rabatt auf Monatsgrundpreis\",\n",
" \"alias\": null,\n",
" \"price\": 0.0,\n",
" \"starts\": \"2025-04-22T11:43:59\",\n",
" \"stops\": null,\n",
" \"provision1\": 0.0,\n",
" \"provision2\": 0.0,\n",
" \"provision3\": 0.0,\n",
" \"provision4\": 0.0,\n",
" \"created\": \"2025-04-22T11:43:59\",\n",
" \"updated\": \"2025-04-22T11:43:59\"\n",
" },\n",
" {\n",
" \"id\": 4674,\n",
" \"provisiongroup\": 1,\n",
" \"providercode\": \"O3708577\",\n",
" \"name\": \"Rabatt auf Monatsgrundpreis | VP: 24 x 10 EUR Rabatt auf Monatsgrundpreis\",\n",
" \"alias\": null,\n",
" \"price\": 0.0,\n",
" \"starts\": \"2025-04-22T11:43:59\",\n",
" \"stops\": null,\n",
" \"provision1\": 0.0,\n",
" \"provision2\": 0.0,\n",
" \"provision3\": 0.0,\n",
" \"provision4\": 0.0,\n",
" \"created\": \"2025-04-22T11:43:59\",\n",
" \"updated\": \"2025-04-22T11:43:59\"\n",
" }\n",
" ]\n",
" },\n",
" {\n",
" \"id\": 4643,\n",
" \"provisiongroup\": 1,\n",
" \"providercode\": \"G3559799\",\n",
" \"name\": \"Vertriebspartneraktionen | Cashback Fachhandel\",\n",
" \"alias\": null,\n",
" \"price\": 0.0,\n",
" \"starts\": \"2025-04-22T11:43:59\",\n",
" \"stops\": null,\n",
" \"provision1\": 0.0,\n",
" \"provision2\": 0.0,\n",
" \"provision3\": 0.0,\n",
" \"provision4\": 0.0,\n",
" \"created\": \"2025-04-22T11:43:59\",\n",
" \"updated\": \"2025-04-22T11:43:59\",\n",
" \"items\": [\n",
" {\n",
" \"id\": 4640,\n",
" \"provisiongroup\": 1,\n",
" \"providercode\": \"O3501311\",\n",
" \"name\": \"Cashback Fachhandel | VP: 60 Euro Cashback\",\n",
" \"alias\": null,\n",
" \"price\": 0.0,\n",
" \"starts\": \"2025-04-22T11:43:59\",\n",
" \"stops\": null,\n",
" \"provision1\": 0.0,\n",
" \"provision2\": 0.0,\n",
" \"provision3\": 0.0,\n",
" \"provision4\": 0.0,\n",
" \"created\": \"2025-04-22T11:43:59\",\n",
" \"updated\": \"2025-04-22T11:43:59\"\n",
" },\n",
" {\n",
" \"id\": 4654,\n",
" \"provisiongroup\": 1,\n",
" \"providercode\": \"O3501305\",\n",
" \"name\": \"Cashback Fachhandel | VP: 120 Euro Cashback\",\n",
" \"alias\": null,\n",
" \"price\": 0.0,\n",
" \"starts\": \"2025-04-22T11:43:59\",\n",
" \"stops\": null,\n",
" \"provision1\": 0.0,\n",
" \"provision2\": 0.0,\n",
" \"provision3\": 0.0,\n",
" \"provision4\": 0.0,\n",
" \"created\": \"2025-04-22T11:43:59\",\n",
" \"updated\": \"2025-04-22T11:43:59\"\n",
" },\n",
" {\n",
" \"id\": 4677,\n",
" \"provisiongroup\": 1,\n",
" \"providercode\": \"O3501314\",\n",
" \"name\": \"Cashback Fachhandel | VP: 50 Euro Cashback\",\n",
" \"alias\": null,\n",
" \"price\": 0.0,\n",
" \"starts\": \"2025-04-22T11:43:59\",\n",
" \"stops\": null,\n",
" \"provision1\": 0.0,\n",
" \"provision2\": 0.0,\n",
" \"provision3\": 0.0,\n",
" \"provision4\": 0.0,\n",
" \"created\": \"2025-04-22T11:43:59\",\n",
" \"updated\": \"2025-04-22T11:43:59\"\n",
" },\n",
" {\n",
" \"id\": 4678,\n",
" \"provisiongroup\": 1,\n",
" \"providercode\": \"O3501308\",\n",
" \"name\": \"Cashback Fachhandel | VP: 100 Euro Cashback\",\n",
" \"alias\": null,\n",
" \"price\": 0.0,\n",
" \"starts\": \"2025-04-22T11:43:59\",\n",
" \"stops\": null,\n",
" \"provision1\": 0.0,\n",
" \"provision2\": 0.0,\n",
" \"provision3\": 0.0,\n",
" \"provision4\": 0.0,\n",
" \"created\": \"2025-04-22T11:43:59\",\n",
" \"updated\": \"2025-04-22T11:43:59\"\n",
" }\n",
" ]\n",
" },\n",
" {\n",
" \"id\": 4644,\n",
" \"provisiongroup\": 1,\n",
" \"providercode\": \"G3181655\",\n",
" \"name\": \"Vertriebspartneraktionen | Anschlusspreis-Rabatt:\",\n",
" \"alias\": null,\n",
" \"price\": 0.0,\n",
" \"starts\": \"2025-04-22T11:43:59\",\n",
" \"stops\": null,\n",
" \"provision1\": 0.0,\n",
" \"provision2\": 0.0,\n",
" \"provision3\": 0.0,\n",
" \"provision4\": 0.0,\n",
" \"created\": \"2025-04-22T11:43:59\",\n",
" \"updated\": \"2025-04-22T11:43:59\",\n",
" \"items\": [\n",
" {\n",
" \"id\": 4635,\n",
" \"provisiongroup\": 1,\n",
" \"providercode\": \"O3150922\",\n",
" \"name\": \"Anschlusspreis-Rabatt: | VP: Anschlusspreis-Rabatt 19,99 EUR\",\n",
" \"alias\": null,\n",
" \"price\": 0.0,\n",
" \"starts\": \"2025-04-22T11:43:59\",\n",
" \"stops\": null,\n",
" \"provision1\": 0.0,\n",
" \"provision2\": 0.0,\n",
" \"provision3\": 0.0,\n",
" \"provision4\": 0.0,\n",
" \"created\": \"2025-04-22T11:43:59\",\n",
" \"updated\": \"2025-04-22T11:43:59\"\n",
" },\n",
" {\n",
" \"id\": 4658,\n",
" \"provisiongroup\": 1,\n",
" \"providercode\": \"O3150921\",\n",
" \"name\": \"Anschlusspreis-Rabatt: | VP: Anschlusspreisbefreiung\",\n",
" \"alias\": null,\n",
" \"price\": 0.0,\n",
" \"starts\": \"2025-04-22T11:43:59\",\n",
" \"stops\": null,\n",
" \"provision1\": 0.0,\n",
" \"provision2\": 0.0,\n",
" \"provision3\": 0.0,\n",
" \"provision4\": 0.0,\n",
" \"created\": \"2025-04-22T11:43:59\",\n",
" \"updated\": \"2025-04-22T11:43:59\"\n",
" }\n",
" ]\n",
" },\n",
" {\n",
" \"id\": 4655,\n",
" \"provisiongroup\": 1,\n",
" \"providercode\": \"G95\",\n",
" \"name\": \"Vertriebspartneraktionen | keine Händleraktion\",\n",
" \"alias\": null,\n",
" \"price\": 0.0,\n",
" \"starts\": \"2025-04-22T11:43:59\",\n",
" \"stops\": null,\n",
" \"provision1\": 0.0,\n",
" \"provision2\": 0.0,\n",
" \"provision3\": 0.0,\n",
" \"provision4\": 0.0,\n",
" \"created\": \"2025-04-22T11:43:59\",\n",
" \"updated\": \"2025-04-22T11:43:59\"\n",
" },\n",
" {\n",
" \"id\": 4656,\n",
" \"provisiongroup\": 1,\n",
" \"providercode\": \"G3120771\",\n",
" \"name\": \"Vertriebspartneraktionen | Aktionsguthaben VP\",\n",
" \"alias\": null,\n",
" \"price\": 0.0,\n",
" \"starts\": \"2025-04-22T11:43:59\",\n",
" \"stops\": null,\n",
" \"provision1\": 0.0,\n",
" \"provision2\": 0.0,\n",
" \"provision3\": 0.0,\n",
" \"provision4\": 0.0,\n",
" \"created\": \"2025-04-22T11:43:59\",\n",
" \"updated\": \"2025-04-22T11:43:59\",\n",
" \"items\": [\n",
" {\n",
" \"id\": 4627,\n",
" \"provisiongroup\": 1,\n",
" \"providercode\": \"O3132980\",\n",
" \"name\": \"Aktionsguthaben VP | 192 EUR Aktionsguthaben VP (12 Monate gültig)\",\n",
" \"alias\": null,\n",
" \"price\": 0.0,\n",
" \"starts\": \"2025-04-22T11:43:59\",\n",
" \"stops\": null,\n",
" \"provision1\": 0.0,\n",
" \"provision2\": 0.0,\n",
" \"provision3\": 0.0,\n",
" \"provision4\": 0.0,\n",
" \"created\": \"2025-04-22T11:43:59\",\n",
" \"updated\": \"2025-04-22T11:43:59\"\n",
" },\n",
" {\n",
" \"id\": 4632,\n",
" \"provisiongroup\": 1,\n",
" \"providercode\": \"O3120759\",\n",
" \"name\": \"Aktionsguthaben VP | 240 EUR Aktionsguthaben VP (12 Monate gültig)\",\n",
" \"alias\": null,\n",
" \"price\": 0.0,\n",
" \"starts\": \"2025-04-22T11:43:59\",\n",
" \"stops\": null,\n",
" \"provision1\": 0.0,\n",
" \"provision2\": 0.0,\n",
" \"provision3\": 0.0,\n",
" \"provision4\": 0.0,\n",
" \"created\": \"2025-04-22T11:43:59\",\n",
" \"updated\": \"2025-04-22T11:43:59\"\n",
" },\n",
" {\n",
" \"id\": 4638,\n",
" \"provisiongroup\": 1,\n",
" \"providercode\": \"O3132977\",\n",
" \"name\": \"Aktionsguthaben VP | 168 EUR Aktionsguthaben VP (12 Monate gültig)\",\n",
" \"alias\": null,\n",
" \"price\": 0.0,\n",
" \"starts\": \"2025-04-22T11:43:59\",\n",
" \"stops\": null,\n",
" \"provision1\": 0.0,\n",
" \"provision2\": 0.0,\n",
" \"provision3\": 0.0,\n",
" \"provision4\": 0.0,\n",
" \"created\": \"2025-04-22T11:43:59\",\n",
" \"updated\": \"2025-04-22T11:43:59\"\n",
" },\n",
" {\n",
" \"id\": 4641,\n",
" \"provisiongroup\": 1,\n",
" \"providercode\": \"O3120748\",\n",
" \"name\": \"Aktionsguthaben VP | 72 EUR Aktionsguthaben VP (12 Monate gültig)\",\n",
" \"alias\": null,\n",
" \"price\": 0.0,\n",
" \"starts\": \"2025-04-22T11:43:59\",\n",
" \"stops\": null,\n",
" \"provision1\": 0.0,\n",
" \"provision2\": 0.0,\n",
" \"provision3\": 0.0,\n",
" \"provision4\": 0.0,\n",
" \"created\": \"2025-04-22T11:43:59\",\n",
" \"updated\": \"2025-04-22T11:43:59\"\n",
" },\n",
" {\n",
" \"id\": 4646,\n",
" \"provisiongroup\": 1,\n",
" \"providercode\": \"O3120756\",\n",
" \"name\": \"Aktionsguthaben VP | 120 EUR Aktionsguthaben VP (12 Monate gültig)\",\n",
" \"alias\": null,\n",
" \"price\": 0.0,\n",
" \"starts\": \"2025-04-22T11:43:59\",\n",
" \"stops\": null,\n",
" \"provision1\": 0.0,\n",
" \"provision2\": 0.0,\n",
" \"provision3\": 0.0,\n",
" \"provision4\": 0.0,\n",
" \"created\": \"2025-04-22T11:43:59\",\n",
" \"updated\": \"2025-04-22T11:43:59\"\n",
" },\n",
" {\n",
" \"id\": 4652,\n",
" \"provisiongroup\": 1,\n",
" \"providercode\": \"O3120740\",\n",
" \"name\": \"Aktionsguthaben VP | 24 EUR Aktionsguthaben VP (12 Monate gültig)\",\n",
" \"alias\": null,\n",
" \"price\": 0.0,\n",
" \"starts\": \"2025-04-22T11:43:59\",\n",
" \"stops\": null,\n",
" \"provision1\": 0.0,\n",
" \"provision2\": 0.0,\n",
" \"provision3\": 0.0,\n",
" \"provision4\": 0.0,\n",
" \"created\": \"2025-04-22T11:43:59\",\n",
" \"updated\": \"2025-04-22T11:43:59\"\n",
" },\n",
" {\n",
" \"id\": 4653,\n",
" \"provisiongroup\": 1,\n",
" \"providercode\": \"O3120743\",\n",
" \"name\": \"Aktionsguthaben VP | 48 EUR Aktionsguthaben VP (12 Monate gültig)\",\n",
" \"alias\": null,\n",
" \"price\": 0.0,\n",
" \"starts\": \"2025-04-22T11:43:59\",\n",
" \"stops\": null,\n",
" \"provision1\": 0.0,\n",
" \"provision2\": 0.0,\n",
" \"provision3\": 0.0,\n",
" \"provision4\": 0.0,\n",
" \"created\": \"2025-04-22T11:43:59\",\n",
" \"updated\": \"2025-04-22T11:43:59\"\n",
" },\n",
" {\n",
" \"id\": 4660,\n",
" \"provisiongroup\": 1,\n",
" \"providercode\": \"O3132971\",\n",
" \"name\": \"Aktionsguthaben VP | 60 EUR Aktionsguthaben VP (12 Monate gültig)\",\n",
" \"alias\": null,\n",
" \"price\": 0.0,\n",
" \"starts\": \"2025-04-22T11:43:59\",\n",
" \"stops\": null,\n",
" \"provision1\": 0.0,\n",
" \"provision2\": 0.0,\n",
" \"provision3\": 0.0,\n",
" \"provision4\": 0.0,\n",
" \"created\": \"2025-04-22T11:43:59\",\n",
" \"updated\": \"2025-04-22T11:43:59\"\n",
" },\n",
" {\n",
" \"id\": 4662,\n",
" \"provisiongroup\": 1,\n",
" \"providercode\": \"O3132974\",\n",
" \"name\": \"Aktionsguthaben VP | 144 EUR Aktionsguthaben VP (12 Monate gültig)\",\n",
" \"alias\": null,\n",
" \"price\": 0.0,\n",
" \"starts\": \"2025-04-22T11:43:59\",\n",
" \"stops\": null,\n",
" \"provision1\": 0.0,\n",
" \"provision2\": 0.0,\n",
" \"provision3\": 0.0,\n",
" \"provision4\": 0.0,\n",
" \"created\": \"2025-04-22T11:43:59\",\n",
" \"updated\": \"2025-04-22T11:43:59\"\n",
" },\n",
" {\n",
" \"id\": 4665,\n",
" \"provisiongroup\": 1,\n",
" \"providercode\": \"O3132983\",\n",
" \"name\": \"Aktionsguthaben VP | 216 EUR Aktionsguthaben VP (12 Monate gültig)\",\n",
" \"alias\": null,\n",
" \"price\": 0.0,\n",
" \"starts\": \"2025-04-22T11:43:59\",\n",
" \"stops\": null,\n",
" \"provision1\": 0.0,\n",
" \"provision2\": 0.0,\n",
" \"provision3\": 0.0,\n",
" \"provision4\": 0.0,\n",
" \"created\": \"2025-04-22T11:43:59\",\n",
" \"updated\": \"2025-04-22T11:43:59\"\n",
" },\n",
" {\n",
" \"id\": 4676,\n",
" \"provisiongroup\": 1,\n",
" \"providercode\": \"O3120753\",\n",
" \"name\": \"Aktionsguthaben VP | 96 EUR Aktionsguthaben VP (12 Monate gültig)\",\n",
" \"alias\": null,\n",
" \"price\": 0.0,\n",
" \"starts\": \"2025-04-22T11:43:59\",\n",
" \"stops\": null,\n",
" \"provision1\": 0.0,\n",
" \"provision2\": 0.0,\n",
" \"provision3\": 0.0,\n",
" \"provision4\": 0.0,\n",
" \"created\": \"2025-04-22T11:43:59\",\n",
" \"updated\": \"2025-04-22T11:43:59\"\n",
" }\n",
" ]\n",
" }\n",
" ]\n",
" },\n",
" {\n",
" \"providercode\": \"G4\",\n",
" \"items\": [\n",
" {\n",
" \"id\": 4637,\n",
" \"provisiongroup\": 1,\n",
" \"providercode\": \"G18\",\n",
" \"name\": \"Einzelverbindungsnachweis | Kein EVN\",\n",
" \"alias\": null,\n",
" \"price\": 0.0,\n",
" \"starts\": \"2025-04-22T11:43:59\",\n",
" \"stops\": null,\n",
" \"provision1\": 0.0,\n",
" \"provision2\": 0.0,\n",
" \"provision3\": 0.0,\n",
" \"provision4\": 0.0,\n",
" \"created\": \"2025-04-22T11:43:59\",\n",
" \"updated\": \"2025-04-22T11:43:59\"\n",
" },\n",
" {\n",
" \"id\": 4669,\n",
" \"provisiongroup\": 1,\n",
" \"providercode\": \"G20\",\n",
" \"name\": \"Einzelverbindungsnachweis | Komfort EVN 1,99 EUR\",\n",
" \"alias\": null,\n",
" \"price\": 0.0,\n",
" \"starts\": \"2025-04-22T11:43:59\",\n",
" \"stops\": null,\n",
" \"provision1\": 0.0,\n",
" \"provision2\": 0.0,\n",
" \"provision3\": 0.0,\n",
" \"provision4\": 0.0,\n",
" \"created\": \"2025-04-22T11:43:59\",\n",
" \"updated\": \"2025-04-22T11:43:59\",\n",
" \"items\": [\n",
" {\n",
" \"id\": 4663,\n",
" \"provisiongroup\": 1,\n",
" \"providercode\": \"O1176\",\n",
" \"name\": \"Komfort EVN 1,99 EUR | EVN vollständig\",\n",
" \"alias\": null,\n",
" \"price\": 0.0,\n",
" \"starts\": \"2025-04-22T11:43:59\",\n",
" \"stops\": null,\n",
" \"provision1\": 0.0,\n",
" \"provision2\": 0.0,\n",
" \"provision3\": 0.0,\n",
" \"provision4\": 0.0,\n",
" \"created\": \"2025-04-22T11:43:59\",\n",
" \"updated\": \"2025-04-22T11:43:59\"\n",
" }\n",
" ]\n",
" },\n",
" {\n",
" \"id\": 4679,\n",
" \"provisiongroup\": 1,\n",
" \"providercode\": \"G19\",\n",
" \"name\": \"Einzelverbindungsnachweis | Standard EVN\",\n",
" \"alias\": null,\n",
" \"price\": 0.0,\n",
" \"starts\": \"2025-04-22T11:43:59\",\n",
" \"stops\": null,\n",
" \"provision1\": 0.0,\n",
" \"provision2\": 0.0,\n",
" \"provision3\": 0.0,\n",
" \"provision4\": 0.0,\n",
" \"created\": \"2025-04-22T11:43:59\",\n",
" \"updated\": \"2025-04-22T11:43:59\",\n",
" \"items\": [\n",
" {\n",
" \"id\": 4628,\n",
" \"provisiongroup\": 1,\n",
" \"providercode\": \"O1173\",\n",
" \"name\": \"Standard EVN | EVN gekürzt\",\n",
" \"alias\": null,\n",
" \"price\": 0.0,\n",
" \"starts\": \"2025-04-22T11:43:59\",\n",
" \"stops\": null,\n",
" \"provision1\": 0.0,\n",
" \"provision2\": 0.0,\n",
" \"provision3\": 0.0,\n",
" \"provision4\": 0.0,\n",
" \"created\": \"2025-04-22T11:43:59\",\n",
" \"updated\": \"2025-04-22T11:43:59\"\n",
" }\n",
" ]\n",
" }\n",
" ]\n",
" },\n",
" {\n",
" \"providercode\": \"G111\",\n",
" \"items\": [\n",
" {\n",
" \"id\": 4642,\n",
" \"provisiongroup\": 1,\n",
" \"providercode\": \"O2489\",\n",
" \"name\": \"MultiSIM | T-Mobile MultiSIM 2\",\n",
" \"alias\": null,\n",
" \"price\": 4.15966,\n",
" \"starts\": \"2025-04-22T11:43:59\",\n",
" \"stops\": null,\n",
" \"provision1\": 0.0,\n",
" \"provision2\": 0.0,\n",
" \"provision3\": 0.0,\n",
" \"provision4\": 0.0,\n",
" \"created\": \"2025-04-22T11:43:59\",\n",
" \"updated\": \"2025-04-22T11:43:59\"\n",
" },\n",
" {\n",
" \"id\": 4664,\n",
" \"provisiongroup\": 1,\n",
" \"providercode\": \"O2488\",\n",
" \"name\": \"MultiSIM | T-Mobile MultiSIM 1\",\n",
" \"alias\": null,\n",
" \"price\": 4.15966,\n",
" \"starts\": \"2025-04-22T11:43:59\",\n",
" \"stops\": null,\n",
" \"provision1\": 0.0,\n",
" \"provision2\": 0.0,\n",
" \"provision3\": 0.0,\n",
" \"provision4\": 0.0,\n",
" \"created\": \"2025-04-22T11:43:59\",\n",
" \"updated\": \"2025-04-22T11:43:59\"\n",
" }\n",
" ]\n",
" },\n",
" {\n",
" \"providercode\": \"G343\",\n",
" \"items\": [\n",
" {\n",
" \"id\": 4645,\n",
" \"provisiongroup\": 1,\n",
" \"providercode\": \"O3729\",\n",
" \"name\": \"Datenroaming Spending Cap | Data Roaming mit Kostenschutz (max. 59,50 €)\",\n",
" \"alias\": null,\n",
" \"price\": 0.0,\n",
" \"starts\": \"2025-04-22T11:43:59\",\n",
" \"stops\": null,\n",
" \"provision1\": 0.0,\n",
" \"provision2\": 0.0,\n",
" \"provision3\": 0.0,\n",
" \"provision4\": 0.0,\n",
" \"created\": \"2025-04-22T11:43:59\",\n",
" \"updated\": \"2025-04-22T11:43:59\"\n",
" }\n",
" ]\n",
" },\n",
" {\n",
" \"providercode\": \"G231\",\n",
" \"items\": [\n",
" {\n",
" \"id\": 4647,\n",
" \"provisiongroup\": 1,\n",
" \"providercode\": \"O16457\",\n",
" \"name\": \"Speedupgrades | Upgrade 10 GB 3 Monat\",\n",
" \"alias\": null,\n",
" \"price\": 14.27731,\n",
" \"starts\": \"2025-04-22T11:43:59\",\n",
" \"stops\": null,\n",
" \"provision1\": 0.0,\n",
" \"provision2\": 0.0,\n",
" \"provision3\": 0.0,\n",
" \"provision4\": 0.0,\n",
" \"created\": \"2025-04-22T11:43:59\",\n",
" \"updated\": \"2025-04-22T11:43:59\"\n",
" },\n",
" {\n",
" \"id\": 4648,\n",
" \"provisiongroup\": 1,\n",
" \"providercode\": \"O16412\",\n",
" \"name\": \"Speedupgrades | Upgrade 2 GB 1 Monat\",\n",
" \"alias\": null,\n",
" \"price\": 5.87395,\n",
" \"starts\": \"2025-04-22T11:43:59\",\n",
" \"stops\": null,\n",
" \"provision1\": 0.0,\n",
" \"provision2\": 0.0,\n",
" \"provision3\": 0.0,\n",
" \"provision4\": 0.0,\n",
" \"created\": \"2025-04-22T11:43:59\",\n",
" \"updated\": \"2025-04-22T11:43:59\"\n",
" },\n",
" {\n",
" \"id\": 4657,\n",
" \"provisiongroup\": 1,\n",
" \"providercode\": \"O16411\",\n",
" \"name\": \"Speedupgrades | Upgrade 5 GB 1 Monat\",\n",
" \"alias\": null,\n",
" \"price\": 10.07563,\n",
" \"starts\": \"2025-04-22T11:43:59\",\n",
" \"stops\": null,\n",
" \"provision1\": 0.0,\n",
" \"provision2\": 0.0,\n",
" \"provision3\": 0.0,\n",
" \"provision4\": 0.0,\n",
" \"created\": \"2025-04-22T11:43:59\",\n",
" \"updated\": \"2025-04-22T11:43:59\"\n",
" },\n",
" {\n",
" \"id\": 4659,\n",
" \"provisiongroup\": 1,\n",
" \"providercode\": \"O16459\",\n",
" \"name\": \"Speedupgrades | Upgrade 2 GB 3 Monat\",\n",
" \"alias\": null,\n",
" \"price\": 5.87395,\n",
" \"starts\": \"2025-04-22T11:43:59\",\n",
" \"stops\": null,\n",
" \"provision1\": 0.0,\n",
" \"provision2\": 0.0,\n",
" \"provision3\": 0.0,\n",
" \"provision4\": 0.0,\n",
" \"created\": \"2025-04-22T11:43:59\",\n",
" \"updated\": \"2025-04-22T11:43:59\"\n",
" },\n",
" {\n",
" \"id\": 4670,\n",
" \"provisiongroup\": 1,\n",
" \"providercode\": \"O16410\",\n",
" \"name\": \"Speedupgrades | Upgrade 10 GB 1 Monat\",\n",
" \"alias\": null,\n",
" \"price\": 14.27731,\n",
" \"starts\": \"2025-04-22T11:43:59\",\n",
" \"stops\": null,\n",
" \"provision1\": 0.0,\n",
" \"provision2\": 0.0,\n",
" \"provision3\": 0.0,\n",
" \"provision4\": 0.0,\n",
" \"created\": \"2025-04-22T11:43:59\",\n",
" \"updated\": \"2025-04-22T11:43:59\"\n",
" },\n",
" {\n",
" \"id\": 4671,\n",
" \"provisiongroup\": 1,\n",
" \"providercode\": \"O16458\",\n",
" \"name\": \"Speedupgrades | Upgrade 5 GB 3 Monat\",\n",
" \"alias\": null,\n",
" \"price\": 10.07563,\n",
" \"starts\": \"2025-04-22T11:43:59\",\n",
" \"stops\": null,\n",
" \"provision1\": 0.0,\n",
" \"provision2\": 0.0,\n",
" \"provision3\": 0.0,\n",
" \"provision4\": 0.0,\n",
" \"created\": \"2025-04-22T11:43:59\",\n",
" \"updated\": \"2025-04-22T11:43:59\"\n",
" }\n",
" ]\n",
" },\n",
" {\n",
" \"providercode\": \"G396\",\n",
" \"items\": [\n",
" {\n",
" \"id\": 4649,\n",
" \"provisiongroup\": 1,\n",
" \"providercode\": \"O13744\",\n",
" \"name\": \"Weltweite Hotspot Flat | freenet Hotspot Flat 24 Monate (DLS24M0TB0G0200)\",\n",
" \"alias\": null,\n",
" \"price\": 1.68067,\n",
" \"starts\": \"2025-04-22T11:43:59\",\n",
" \"stops\": null,\n",
" \"provision1\": 0.0,\n",
" \"provision2\": 0.0,\n",
" \"provision3\": 0.0,\n",
" \"provision4\": 0.0,\n",
" \"created\": \"2025-04-22T11:43:59\",\n",
" \"updated\": \"2025-04-22T11:43:59\"\n",
" }\n",
" ]\n",
" },\n",
" {\n",
" \"providercode\": \"G207\",\n",
" \"items\": [\n",
" {\n",
" \"id\": 4661,\n",
" \"provisiongroup\": 1,\n",
" \"providercode\": \"O129\",\n",
" \"name\": \"Mobilbox | Mailbox Frei\",\n",
" \"alias\": null,\n",
" \"price\": 0.0,\n",
" \"starts\": \"2025-04-22T11:43:59\",\n",
" \"stops\": null,\n",
" \"provision1\": 0.0,\n",
" \"provision2\": 0.0,\n",
" \"provision3\": 0.0,\n",
" \"provision4\": 0.0,\n",
" \"created\": \"2025-04-22T11:43:59\",\n",
" \"updated\": \"2025-04-22T11:43:59\"\n",
" },\n",
" {\n",
" \"id\": 4668,\n",
" \"provisiongroup\": 1,\n",
" \"providercode\": \"O3704\",\n",
" \"name\": \"Mobilbox | Visual Voicemail\",\n",
" \"alias\": null,\n",
" \"price\": 0.0,\n",
" \"starts\": \"2025-04-22T11:43:59\",\n",
" \"stops\": null,\n",
" \"provision1\": 0.0,\n",
" \"provision2\": 0.0,\n",
" \"provision3\": 0.0,\n",
" \"provision4\": 0.0,\n",
" \"created\": \"2025-04-22T11:43:59\",\n",
" \"updated\": \"2025-04-22T11:43:59\"\n",
" },\n",
" {\n",
" \"id\": 4675,\n",
" \"provisiongroup\": 1,\n",
" \"providercode\": \"O9314\",\n",
" \"name\": \"Mobilbox | Mobilbox Pro\",\n",
" \"alias\": null,\n",
" \"price\": 0.0,\n",
" \"starts\": \"2025-04-22T11:43:59\",\n",
" \"stops\": null,\n",
" \"provision1\": 0.0,\n",
" \"provision2\": 0.0,\n",
" \"provision3\": 0.0,\n",
" \"provision4\": 0.0,\n",
" \"created\": \"2025-04-22T11:43:59\",\n",
" \"updated\": \"2025-04-22T11:43:59\"\n",
" }\n",
" ]\n",
" },\n",
" {\n",
" \"providercode\": \"G328\",\n",
" \"items\": [\n",
" {\n",
" \"id\": 4667,\n",
" \"provisiongroup\": 1,\n",
" \"providercode\": \"O10164\",\n",
" \"name\": \"SMS-Optionen | SMS Allnet Flat\",\n",
" \"alias\": null,\n",
" \"price\": 4.19328,\n",
" \"starts\": \"2025-04-22T11:43:59\",\n",
" \"stops\": null,\n",
" \"provision1\": 0.0,\n",
" \"provision2\": 0.0,\n",
" \"provision3\": 0.0,\n",
" \"provision4\": 0.0,\n",
" \"created\": \"2025-04-22T11:43:59\",\n",
" \"updated\": \"2025-04-22T11:43:59\"\n",
" }\n",
" ]\n",
" }\n",
" ]\n",
"}\n"
]
}
],
"source": [
"import sys; sys.path.append(\"..\")\n",
"import json\n",
"from manager.MysqlManager import MysqlManager\n",
"from models.base_base import BaseBase\n",
"import models.deal_deal\n",
"import models.option_opti\n",
"import models.provisiongroup_pgro\n",
"from models.deal_deal import DealDeal\n",
"from models.option_opti import OptionOpti\n",
"\n",
"# In dieser Variablen wird eine Datenbank-Session erstellt, mit der auf die MySQL-Datenbank zugegriffen wird.\n",
"dbSession = MysqlManager().getSession()\n",
"\n",
"# In dieser Abzweigung wird nach einem Datensatz in der Tabelle BaseBase gesucht, dessen ID dem Wert 133 entspricht.\n",
"baseRecord = dbSession.query(BaseBase).filter_by(id_base=133).one_or_none()\n",
"\n",
"# In dieser Abzweigung wird geprüft, ob kein passender Datensatz gefunden wurde.\n",
"if baseRecord is None:\n",
" print(json.dumps({}))\n",
"else:\n",
"\n",
" # In dieser Variablen werden alle zugehörigen Deals zu baseRecord abgefragt.\n",
" dealRecords = dbSession.query(DealDeal).filter_by(base_deal=baseRecord.id_base).all()\n",
"\n",
" # In dieser Liste werden die aufbereiteten Deal-Daten abgelegt.\n",
" deals = []\n",
"\n",
" # In dieser Schleife wird jeder gefundene Deal in ein Dictionary überführt und in deals eingefügt.\n",
" for dealItem in dealRecords:\n",
"\n",
" # In diesem Dictionary werden alle relevanten Felder eines Deals übertragen.\n",
" deals.append({\n",
" \"id\": dealItem.id_deal,\n",
" \"provisiongroup\": dealItem.provisiongroup_deal,\n",
" \"providercode\": dealItem.providercode_deal,\n",
" \"name\": dealItem.name_deal,\n",
" \"alias\": dealItem.alias_deal,\n",
" \"price\": float(dealItem.price_deal),\n",
" \"starts\": dealItem.starts_deal.isoformat() if dealItem.starts_deal else None,\n",
" \"stops\": dealItem.stops_deal.isoformat() if dealItem.stops_deal else None,\n",
" \"provision1\": float(dealItem.provision1_deal),\n",
" \"provision2\": float(dealItem.provision2_deal),\n",
" \"provision3\": float(dealItem.provision3_deal),\n",
" \"provision4\": float(dealItem.provision4_deal),\n",
" \"created\": dealItem.created_deal.isoformat() if dealItem.created_deal else None,\n",
" \"updated\": dealItem.updated_deal.isoformat() if dealItem.updated_deal else None,\n",
" })\n",
"\n",
" # In dieser Variablen werden die vorhandenen Options-Datensätze zu baseRecord abgefragt.\n",
" optiRecords = dbSession.query(OptionOpti).filter_by(base_opti=baseRecord.id_base).all()\n",
"\n",
" # In diesem Dictionary wird eine Zuordnung von providercode_opti zu einer Tuple-Struktur für den Options-Knoten angelegt.\n",
" optionNodes = {}\n",
"\n",
" # In dieser Schleife wird jeder Options-Datensatz in ein entsprechendes Knotenformat überführt.\n",
" for optionItem in optiRecords:\n",
"\n",
" # In diesem Knoten werden alle relevanten Felder einer Option abgelegt und ein leeres items-Array vorab erstellt.\n",
" optionNodes[optionItem.providercode_opti] = ({\n",
" \"id\": optionItem.id_opti,\n",
" \"provisiongroup\": optionItem.provisiongroup_opti,\n",
" \"providercode\": optionItem.providercode_opti,\n",
" \"name\": optionItem.name_opti,\n",
" \"alias\": optionItem.alias_opti,\n",
" \"price\": float(optionItem.price_opti),\n",
" \"starts\": optionItem.starts_opti.isoformat() if optionItem.starts_opti else None,\n",
" \"stops\": optionItem.stops_opti.isoformat() if optionItem.stops_opti else None,\n",
" \"provision1\": float(optionItem.provision1_opti),\n",
" \"provision2\": float(optionItem.provision2_opti),\n",
" \"provision3\": float(optionItem.provision3_opti),\n",
" \"provision4\": float(optionItem.provision4_opti),\n",
" \"created\": optionItem.created_opti.isoformat() if optionItem.created_opti else None,\n",
" \"updated\": optionItem.updated_opti.isoformat() if optionItem.updated_opti else None,\n",
" \"items\": []\n",
" }, optionItem.providercategory_opti)\n",
"\n",
" # In diesem Dictionary werden die Hauptknoten gespeichert, falls kein übergeordneter Knoten existiert.\n",
" rootNodes = {}\n",
"\n",
" # In dieser Schleife wird anhand der Parent-Information (providercategory_opti) entschieden, ob eine Option untergeordnet oder ein Hauptknoten ist.\n",
" for code, (optionNode, parentCode) in optionNodes.items():\n",
"\n",
" # In dieser Abzweigung wird geprüft, ob parentCode selbst ein existierender Knoten ist.\n",
" if parentCode in optionNodes:\n",
"\n",
" # Hier wird die aktuelle Option als Kindknoten an den übergeordneten Knoten angehängt.\n",
" optionNodes[parentCode][0][\"items\"].append(optionNode)\n",
" else:\n",
"\n",
" # Hier wird der Knoten als Hauptknoten vermerkt, falls kein passender Parent vorhanden ist.\n",
" rootNodes.setdefault(parentCode, []).append(optionNode)\n",
"\n",
" # In dieser Schleife wird geprüft, ob das items-Array von Knoten leer ist, um es gegebenenfalls zu entfernen.\n",
" for optionNode, _ in optionNodes.values():\n",
" if not optionNode.get(\"items\"):\n",
" optionNode.pop(\"items\", None)\n",
"\n",
" # In dieser Liste werden alle Hauptknoten mit ihren untergeordneten Einträgen gesammelt und nach providercode gruppiert.\n",
" options = []\n",
" for parentCode, items in rootNodes.items():\n",
" options.append({\n",
" \"providercode\": parentCode,\n",
" \"items\": items\n",
" })\n",
"\n",
" # In diesem Dictionary werden die Felder von baseRecord zusammengefasst, ohne details_base.\n",
" baseData = {\n",
" \"id\": baseRecord.id_base,\n",
" \"provider\": baseRecord.provider_base,\n",
" \"providercode\": baseRecord.providercode_base,\n",
" \"name\": baseRecord.name_base,\n",
" \"alias\": baseRecord.alias_base,\n",
" \"network\": baseRecord.network_base,\n",
" \"flyerurl\": baseRecord.flyerurl_base,\n",
" \"piburl\": baseRecord.piburl_base,\n",
" \"created\": baseRecord.created_base.isoformat() if baseRecord.created_base else None,\n",
" \"updated\": baseRecord.updated_base.isoformat() if baseRecord.updated_base else None,\n",
" }\n",
"\n",
" # In dieser Variablen werden die details_base in ein lokales Dictionary kopiert oder als leeres Dictionary gesetzt.\n",
" detailsData = baseRecord.details_base.copy() if baseRecord.details_base else {}\n",
"\n",
" # In dieser Variablen wird ein eventuell vorhandener tariff_name entnommen und als ai_identified_name gespeichert.\n",
" aiIdentifiedName = detailsData.pop(\"tariff_name\", None)\n",
"\n",
" # In dieser Variablen werden die verbleibenden Details in baseData gemergt.\n",
" mergedBaseAndDetails = {**baseData, **detailsData}\n",
"\n",
" # In dieser Abzweigung wird das umbenannte Feld ai_identified_name hinzugefügt.\n",
" mergedBaseAndDetails[\"ai_identified_name\"] = aiIdentifiedName\n",
"\n",
" # In diesem Dictionary werden die finalen Daten für base, deals und options zusammengefasst.\n",
" outputData = {\n",
" \"base\": mergedBaseAndDetails,\n",
" \"deals\": deals,\n",
" \"options\": options\n",
" }\n",
"\n",
" # In dieser Anweisung wird das resultierende Dictionary als JSON ausgegeben.\n",
" print(json.dumps(outputData, ensure_ascii=False, indent=2))\n",
"\n",
"# In dieser Anweisung wird die Datenbank-Session geschlossen.\n",
"dbSession.close()\n"
]
},
{
"cell_type": "code",
"execution_count": null,
"id": "4d796b32-df5d-4ba5-a062-4d96b12db2b3",
"metadata": {},
"outputs": [],
"source": []
}
],
"metadata": {
"kernelspec": {
"display_name": "Python 3 (ipykernel)",
"language": "python",
"name": "python3"
},
"language_info": {
"codemirror_mode": {
"name": "ipython",
"version": 3
},
"file_extension": ".py",
"mimetype": "text/x-python",
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython3",
"version": "3.10.9"
}
},
"nbformat": 4,
"nbformat_minor": 5
}
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment