From 2b12f26e4f56264a463b177666ab2ef7342cd516 Mon Sep 17 00:00:00 2001 From: ArduinoBot Date: Wed, 24 Jul 2024 13:06:54 +0000 Subject: [PATCH] Regenerate client from commit 5a8f8ed of spec repo --- .apigentools-info | 4 +- .openapi-generator/FILES | 50 +- README.md | 42 +- docs/apis/tags/DashboardsV2Api.md | 4 + docs/apis/tags/NetworkCredentialsV1Api.md | 247 ++++++++ docs/apis/tags/SeriesV2Api.md | 406 +++++++++++++ docs/apis/tags/TemplatesApi.md | 236 ++++++++ docs/apis/tags/ThingsV2Api.md | 36 +- docs/models/ArduinoCredentialsv1.md | 20 + docs/models/ArduinoCredentialsv1Collection.md | 16 + docs/models/ArduinoDashboardv2.md | 1 + docs/models/ArduinoDashboardv2template.md | 2 + docs/models/ArduinoDevicev2.md | 2 +- docs/models/ArduinoDevicev2templatedevice.md | 18 + docs/models/ArduinoSeriesBatchSampled.md | 32 + docs/models/ArduinoSeriesSampledResponse.md | 55 ++ docs/models/ArduinoTemplate.md | 43 ++ docs/models/ArduinoTemplateproperty.md | 1 + docs/models/ArduinoThing.md | 1 + docs/models/ArduinoThingresult.md | 19 + docs/models/ArduinoThingresultCollection.md | 16 + docs/models/ArduinoThingtemplate.md | 5 +- docs/models/ArduinoWidgetv2.md | 2 +- .../models/BatchQuerySampledRequestMediaV1.md | 19 + .../BatchQuerySampledRequestsMediaV1.md | 30 + docs/models/CreateDevicesV2Payload.md | 2 +- docs/models/Dashboardv2.md | 1 + docs/models/Devicev2.md | 2 +- docs/models/Template.md | 32 + docs/models/ThingCreate.md | 1 + docs/models/ThingUpdate.md | 1 + img/selection_1.png | Bin 0 -> 93617 bytes img/selection_2.png | Bin 0 -> 75926 bytes img/selection_3.png | Bin 0 -> 105944 bytes iot_api_client/__init__.py | 2 +- iot_api_client/apis/path_to_api.py | 12 + .../apis/paths/v1_network_credentials_type.py | 7 + ...v1_network_credentials_type_connections.py | 7 + iot_api_client/apis/paths/v1_templates.py | 7 + .../paths/v2_series_batch_query_sampling.py | 7 + iot_api_client/apis/tag_to_api.py | 6 + iot_api_client/apis/tags/__init__.py | 2 + .../apis/tags/network_credentials_v1_api.py | 25 + iot_api_client/apis/tags/series_v2_api.py | 2 + iot_api_client/apis/tags/templates_api.py | 23 + iot_api_client/configuration.py | 2 +- iot_api_client/model/arduino_credentialsv1.py | 121 ++++ .../model/arduino_credentialsv1.pyi | 121 ++++ .../model/arduino_credentialsv1_collection.py | 58 ++ .../arduino_credentialsv1_collection.pyi | 58 ++ iot_api_client/model/arduino_dashboardv2.py | 22 +- iot_api_client/model/arduino_dashboardv2.pyi | 19 +- .../model/arduino_dashboardv2template.py | 24 +- .../model/arduino_dashboardv2template.pyi | 24 +- iot_api_client/model/arduino_devicev2.py | 10 + iot_api_client/model/arduino_devicev2.pyi | 8 + .../model/arduino_devicev2templatedevice.py | 90 +++ .../model/arduino_devicev2templatedevice.pyi | 90 +++ .../model/arduino_series_batch_sampled.py | 124 ++++ .../model/arduino_series_batch_sampled.pyi | 124 ++++ .../model/arduino_series_sampled_response.py | 245 ++++++++ .../model/arduino_series_sampled_response.pyi | 245 ++++++++ iot_api_client/model/arduino_template.py | 154 +++++ iot_api_client/model/arduino_template.pyi | 154 +++++ .../model/arduino_templateproperty.py | 14 +- .../model/arduino_templateproperty.pyi | 14 +- iot_api_client/model/arduino_thing.py | 39 +- iot_api_client/model/arduino_thing.pyi | 31 +- iot_api_client/model/arduino_thingresult.py | 107 ++++ iot_api_client/model/arduino_thingresult.pyi | 107 ++++ .../model/arduino_thingresult_collection.py | 58 ++ .../model/arduino_thingresult_collection.pyi | 58 ++ iot_api_client/model/arduino_thingtemplate.py | 54 +- .../model/arduino_thingtemplate.pyi | 54 +- iot_api_client/model/arduino_widgetv2.py | 17 +- iot_api_client/model/arduino_widgetv2.pyi | 11 +- .../batch_query_sampled_request_media_v1.py | 130 +++++ .../batch_query_sampled_request_media_v1.pyi | 126 ++++ .../batch_query_sampled_requests_media_v1.py | 122 ++++ .../batch_query_sampled_requests_media_v1.pyi | 122 ++++ .../model/create_devices_v2_payload.py | 10 + .../model/create_devices_v2_payload.pyi | 8 + iot_api_client/model/dashboardv2.py | 22 +- iot_api_client/model/dashboardv2.pyi | 19 +- iot_api_client/model/devicev2.py | 10 + iot_api_client/model/devicev2.pyi | 8 + iot_api_client/model/template.py | 154 +++++ iot_api_client/model/template.pyi | 148 +++++ iot_api_client/model/thing_clone.py | 2 +- iot_api_client/model/thing_create.py | 41 +- iot_api_client/model/thing_create.pyi | 31 +- iot_api_client/model/thing_update.py | 41 +- iot_api_client/model/thing_update.pyi | 31 +- iot_api_client/models/__init__.py | 11 + iot_api_client/paths/__init__.py | 4 + .../v1_network_credentials_type/__init__.py | 7 + .../paths/v1_network_credentials_type/get.py | 518 +++++++++++++++++ .../paths/v1_network_credentials_type/get.pyi | 476 +++++++++++++++ .../__init__.py | 7 + .../get.py | 381 ++++++++++++ .../get.pyi | 352 +++++++++++ iot_api_client/paths/v1_templates/__init__.py | 7 + iot_api_client/paths/v1_templates/put.py | 545 ++++++++++++++++++ iot_api_client/paths/v1_templates/put.pyi | 535 +++++++++++++++++ .../paths/v2_series_batch_query/post.py | 54 ++ .../paths/v2_series_batch_query/post.pyi | 54 ++ .../paths/v2_series_batch_query_raw/post.py | 54 ++ .../paths/v2_series_batch_query_raw/post.pyi | 54 ++ .../post.py | 54 ++ .../post.pyi | 54 ++ .../__init__.py | 7 + .../v2_series_batch_query_sampling/post.py | 538 +++++++++++++++++ .../v2_series_batch_query_sampling/post.pyi | 525 +++++++++++++++++ .../paths/v2_series_historic_data/post.py | 54 ++ .../paths/v2_series_historic_data/post.pyi | 54 ++ .../paths/v2_things_id_template/get.py | 24 + .../paths/v2_things_id_template/get.pyi | 23 + .../test_models/test_arduino_credentialsv1.py | 25 + .../test_arduino_credentialsv1_collection.py | 25 + .../test_arduino_devicev2templatedevice.py | 25 + .../test_arduino_series_batch_sampled.py | 25 + .../test_arduino_series_sampled_response.py | 25 + test/test_models/test_arduino_template.py | 25 + test/test_models/test_arduino_thingresult.py | 25 + .../test_arduino_thingresult_collection.py | 25 + ...st_batch_query_sampled_request_media_v1.py | 25 + ...t_batch_query_sampled_requests_media_v1.py | 25 + test/test_models/test_template.py | 25 + .../__init__.py | 0 .../test_get.py | 41 ++ .../__init__.py | 0 .../test_get.py | 40 ++ test/test_paths/test_v1_templates/__init__.py | 0 test/test_paths/test_v1_templates/test_put.py | 47 ++ .../__init__.py | 0 .../test_post.py | 47 ++ 136 files changed, 9441 insertions(+), 129 deletions(-) create mode 100644 docs/apis/tags/NetworkCredentialsV1Api.md create mode 100644 docs/apis/tags/TemplatesApi.md create mode 100644 docs/models/ArduinoCredentialsv1.md create mode 100644 docs/models/ArduinoCredentialsv1Collection.md create mode 100644 docs/models/ArduinoDevicev2templatedevice.md create mode 100644 docs/models/ArduinoSeriesBatchSampled.md create mode 100644 docs/models/ArduinoSeriesSampledResponse.md create mode 100644 docs/models/ArduinoTemplate.md create mode 100644 docs/models/ArduinoThingresult.md create mode 100644 docs/models/ArduinoThingresultCollection.md create mode 100644 docs/models/BatchQuerySampledRequestMediaV1.md create mode 100644 docs/models/BatchQuerySampledRequestsMediaV1.md create mode 100644 docs/models/Template.md create mode 100644 img/selection_1.png create mode 100644 img/selection_2.png create mode 100644 img/selection_3.png create mode 100644 iot_api_client/apis/paths/v1_network_credentials_type.py create mode 100644 iot_api_client/apis/paths/v1_network_credentials_type_connections.py create mode 100644 iot_api_client/apis/paths/v1_templates.py create mode 100644 iot_api_client/apis/paths/v2_series_batch_query_sampling.py create mode 100644 iot_api_client/apis/tags/network_credentials_v1_api.py create mode 100644 iot_api_client/apis/tags/templates_api.py create mode 100644 iot_api_client/model/arduino_credentialsv1.py create mode 100644 iot_api_client/model/arduino_credentialsv1.pyi create mode 100644 iot_api_client/model/arduino_credentialsv1_collection.py create mode 100644 iot_api_client/model/arduino_credentialsv1_collection.pyi create mode 100644 iot_api_client/model/arduino_devicev2templatedevice.py create mode 100644 iot_api_client/model/arduino_devicev2templatedevice.pyi create mode 100644 iot_api_client/model/arduino_series_batch_sampled.py create mode 100644 iot_api_client/model/arduino_series_batch_sampled.pyi create mode 100644 iot_api_client/model/arduino_series_sampled_response.py create mode 100644 iot_api_client/model/arduino_series_sampled_response.pyi create mode 100644 iot_api_client/model/arduino_template.py create mode 100644 iot_api_client/model/arduino_template.pyi create mode 100644 iot_api_client/model/arduino_thingresult.py create mode 100644 iot_api_client/model/arduino_thingresult.pyi create mode 100644 iot_api_client/model/arduino_thingresult_collection.py create mode 100644 iot_api_client/model/arduino_thingresult_collection.pyi create mode 100644 iot_api_client/model/batch_query_sampled_request_media_v1.py create mode 100644 iot_api_client/model/batch_query_sampled_request_media_v1.pyi create mode 100644 iot_api_client/model/batch_query_sampled_requests_media_v1.py create mode 100644 iot_api_client/model/batch_query_sampled_requests_media_v1.pyi create mode 100644 iot_api_client/model/template.py create mode 100644 iot_api_client/model/template.pyi create mode 100644 iot_api_client/paths/v1_network_credentials_type/__init__.py create mode 100644 iot_api_client/paths/v1_network_credentials_type/get.py create mode 100644 iot_api_client/paths/v1_network_credentials_type/get.pyi create mode 100644 iot_api_client/paths/v1_network_credentials_type_connections/__init__.py create mode 100644 iot_api_client/paths/v1_network_credentials_type_connections/get.py create mode 100644 iot_api_client/paths/v1_network_credentials_type_connections/get.pyi create mode 100644 iot_api_client/paths/v1_templates/__init__.py create mode 100644 iot_api_client/paths/v1_templates/put.py create mode 100644 iot_api_client/paths/v1_templates/put.pyi create mode 100644 iot_api_client/paths/v2_series_batch_query_sampling/__init__.py create mode 100644 iot_api_client/paths/v2_series_batch_query_sampling/post.py create mode 100644 iot_api_client/paths/v2_series_batch_query_sampling/post.pyi create mode 100644 test/test_models/test_arduino_credentialsv1.py create mode 100644 test/test_models/test_arduino_credentialsv1_collection.py create mode 100644 test/test_models/test_arduino_devicev2templatedevice.py create mode 100644 test/test_models/test_arduino_series_batch_sampled.py create mode 100644 test/test_models/test_arduino_series_sampled_response.py create mode 100644 test/test_models/test_arduino_template.py create mode 100644 test/test_models/test_arduino_thingresult.py create mode 100644 test/test_models/test_arduino_thingresult_collection.py create mode 100644 test/test_models/test_batch_query_sampled_request_media_v1.py create mode 100644 test/test_models/test_batch_query_sampled_requests_media_v1.py create mode 100644 test/test_models/test_template.py create mode 100644 test/test_paths/test_v1_network_credentials_type/__init__.py create mode 100644 test/test_paths/test_v1_network_credentials_type/test_get.py create mode 100644 test/test_paths/test_v1_network_credentials_type_connections/__init__.py create mode 100644 test/test_paths/test_v1_network_credentials_type_connections/test_get.py create mode 100644 test/test_paths/test_v1_templates/__init__.py create mode 100644 test/test_paths/test_v1_templates/test_put.py create mode 100644 test/test_paths/test_v2_series_batch_query_sampling/__init__.py create mode 100644 test/test_paths/test_v2_series_batch_query_sampling/test_post.py diff --git a/.apigentools-info b/.apigentools-info index c8229c1..82a6ca5 100644 --- a/.apigentools-info +++ b/.apigentools-info @@ -4,8 +4,8 @@ "spec_versions": { "v2": { "apigentools_version": "1.1.0", - "regenerated": "2024-04-16 08:18:53.737636", - "spec_repo_commit": "28842c9" + "regenerated": "2024-07-24 13:06:50.699634", + "spec_repo_commit": "5a8f8ed" } } } \ No newline at end of file diff --git a/.openapi-generator/FILES b/.openapi-generator/FILES index 900aa0c..ce2fde5 100644 --- a/.openapi-generator/FILES +++ b/.openapi-generator/FILES @@ -10,11 +10,15 @@ docs/apis/tags/DevicesV2PassApi.md docs/apis/tags/DevicesV2TagsApi.md docs/apis/tags/LoraDevicesV1Api.md docs/apis/tags/LoraFreqPlanV1Api.md +docs/apis/tags/NetworkCredentialsV1Api.md docs/apis/tags/PropertiesV2Api.md docs/apis/tags/SeriesV2Api.md +docs/apis/tags/TemplatesApi.md docs/apis/tags/ThingsV2Api.md docs/apis/tags/ThingsV2TagsApi.md docs/models/ArduinoCompressedv2.md +docs/models/ArduinoCredentialsv1.md +docs/models/ArduinoCredentialsv1Collection.md docs/models/ArduinoDashboardowner.md docs/models/ArduinoDashboardshare.md docs/models/ArduinoDashboardshareCollection.md @@ -39,6 +43,7 @@ docs/models/ArduinoDevicev2properties.md docs/models/ArduinoDevicev2propertyvalue.md docs/models/ArduinoDevicev2propertyvalueCollection.md docs/models/ArduinoDevicev2propertyvalues.md +docs/models/ArduinoDevicev2templatedevice.md docs/models/ArduinoLinkedvariable.md docs/models/ArduinoLinkedvariableCollection.md docs/models/ArduinoLoradevicev1.md @@ -47,18 +52,23 @@ docs/models/ArduinoLorafreqplanv1.md docs/models/ArduinoProperty.md docs/models/ArduinoPropertyCollection.md docs/models/ArduinoSeriesBatch.md +docs/models/ArduinoSeriesBatchSampled.md docs/models/ArduinoSeriesRawBatch.md docs/models/ArduinoSeriesRawBatchLastvalue.md docs/models/ArduinoSeriesRawLastValueResponse.md docs/models/ArduinoSeriesRawResponse.md docs/models/ArduinoSeriesResponse.md +docs/models/ArduinoSeriesSampledResponse.md docs/models/ArduinoTags.md +docs/models/ArduinoTemplate.md docs/models/ArduinoTemplateproperty.md docs/models/ArduinoTemplatepropertyCollection.md docs/models/ArduinoTemplatevariable.md docs/models/ArduinoTemplatevariableCollection.md docs/models/ArduinoThing.md docs/models/ArduinoThingCollection.md +docs/models/ArduinoThingresult.md +docs/models/ArduinoThingresultCollection.md docs/models/ArduinoThingtemplate.md docs/models/ArduinoTimeseriesmedia.md docs/models/ArduinoTimezone.md @@ -74,6 +84,8 @@ docs/models/BatchQueryRawRequestsMediaV1.md docs/models/BatchQueryRawResponseSeriesMediaV1.md docs/models/BatchQueryRequestMediaV1.md docs/models/BatchQueryRequestsMediaV1.md +docs/models/BatchQuerySampledRequestMediaV1.md +docs/models/BatchQuerySampledRequestsMediaV1.md docs/models/CheckDevicesV2PassPayload.md docs/models/Clone.md docs/models/CreateDevicesV2CertsPayload.md @@ -95,6 +107,7 @@ docs/models/PropertiesValues.md docs/models/PropertyValue.md docs/models/Sharerequest.md docs/models/Tag.md +docs/models/Template.md docs/models/ThingClone.md docs/models/ThingCreate.md docs/models/ThingSketch.md @@ -115,8 +128,10 @@ iot_api_client/apis/tags/devices_v2_pass_api.py iot_api_client/apis/tags/devices_v2_tags_api.py iot_api_client/apis/tags/lora_devices_v1_api.py iot_api_client/apis/tags/lora_freq_plan_v1_api.py +iot_api_client/apis/tags/network_credentials_v1_api.py iot_api_client/apis/tags/properties_v2_api.py iot_api_client/apis/tags/series_v2_api.py +iot_api_client/apis/tags/templates_api.py iot_api_client/apis/tags/things_v2_api.py iot_api_client/apis/tags/things_v2_tags_api.py iot_api_client/configuration.py @@ -124,6 +139,10 @@ iot_api_client/exceptions.py iot_api_client/model/__init__.py iot_api_client/model/arduino_compressedv2.py iot_api_client/model/arduino_compressedv2.pyi +iot_api_client/model/arduino_credentialsv1.py +iot_api_client/model/arduino_credentialsv1.pyi +iot_api_client/model/arduino_credentialsv1_collection.py +iot_api_client/model/arduino_credentialsv1_collection.pyi iot_api_client/model/arduino_dashboardowner.py iot_api_client/model/arduino_dashboardowner.pyi iot_api_client/model/arduino_dashboardshare.py @@ -172,6 +191,8 @@ iot_api_client/model/arduino_devicev2propertyvalue_collection.py iot_api_client/model/arduino_devicev2propertyvalue_collection.pyi iot_api_client/model/arduino_devicev2propertyvalues.py iot_api_client/model/arduino_devicev2propertyvalues.pyi +iot_api_client/model/arduino_devicev2templatedevice.py +iot_api_client/model/arduino_devicev2templatedevice.pyi iot_api_client/model/arduino_linkedvariable.py iot_api_client/model/arduino_linkedvariable.pyi iot_api_client/model/arduino_linkedvariable_collection.py @@ -188,6 +209,8 @@ iot_api_client/model/arduino_property_collection.py iot_api_client/model/arduino_property_collection.pyi iot_api_client/model/arduino_series_batch.py iot_api_client/model/arduino_series_batch.pyi +iot_api_client/model/arduino_series_batch_sampled.py +iot_api_client/model/arduino_series_batch_sampled.pyi iot_api_client/model/arduino_series_raw_batch.py iot_api_client/model/arduino_series_raw_batch.pyi iot_api_client/model/arduino_series_raw_batch_lastvalue.py @@ -198,8 +221,12 @@ iot_api_client/model/arduino_series_raw_response.py iot_api_client/model/arduino_series_raw_response.pyi iot_api_client/model/arduino_series_response.py iot_api_client/model/arduino_series_response.pyi +iot_api_client/model/arduino_series_sampled_response.py +iot_api_client/model/arduino_series_sampled_response.pyi iot_api_client/model/arduino_tags.py iot_api_client/model/arduino_tags.pyi +iot_api_client/model/arduino_template.py +iot_api_client/model/arduino_template.pyi iot_api_client/model/arduino_templateproperty.py iot_api_client/model/arduino_templateproperty.pyi iot_api_client/model/arduino_templateproperty_collection.py @@ -212,6 +239,10 @@ iot_api_client/model/arduino_thing.py iot_api_client/model/arduino_thing.pyi iot_api_client/model/arduino_thing_collection.py iot_api_client/model/arduino_thing_collection.pyi +iot_api_client/model/arduino_thingresult.py +iot_api_client/model/arduino_thingresult.pyi +iot_api_client/model/arduino_thingresult_collection.py +iot_api_client/model/arduino_thingresult_collection.pyi iot_api_client/model/arduino_thingtemplate.py iot_api_client/model/arduino_thingtemplate.pyi iot_api_client/model/arduino_timeseriesmedia.py @@ -242,6 +273,10 @@ iot_api_client/model/batch_query_request_media_v1.py iot_api_client/model/batch_query_request_media_v1.pyi iot_api_client/model/batch_query_requests_media_v1.py iot_api_client/model/batch_query_requests_media_v1.pyi +iot_api_client/model/batch_query_sampled_request_media_v1.py +iot_api_client/model/batch_query_sampled_request_media_v1.pyi +iot_api_client/model/batch_query_sampled_requests_media_v1.py +iot_api_client/model/batch_query_sampled_requests_media_v1.pyi iot_api_client/model/check_devices_v2_pass_payload.py iot_api_client/model/check_devices_v2_pass_payload.pyi iot_api_client/model/clone.py @@ -284,6 +319,8 @@ iot_api_client/model/sharerequest.py iot_api_client/model/sharerequest.pyi iot_api_client/model/tag.py iot_api_client/model/tag.pyi +iot_api_client/model/template.py +iot_api_client/model/template.pyi iot_api_client/model/thing_clone.py iot_api_client/model/thing_clone.pyi iot_api_client/model/thing_create.py @@ -309,6 +346,15 @@ setup.py test-requirements.txt test/__init__.py test/test_models/__init__.py -test/test_models/test_arduino_devicev2_otaupload.py -test/test_models/test_devicev2_otaurlpyalod.py +test/test_models/test_arduino_credentialsv1.py +test/test_models/test_arduino_credentialsv1_collection.py +test/test_models/test_arduino_devicev2templatedevice.py +test/test_models/test_arduino_series_batch_sampled.py +test/test_models/test_arduino_series_sampled_response.py +test/test_models/test_arduino_template.py +test/test_models/test_arduino_thingresult.py +test/test_models/test_arduino_thingresult_collection.py +test/test_models/test_batch_query_sampled_request_media_v1.py +test/test_models/test_batch_query_sampled_requests_media_v1.py +test/test_models/test_template.py tox.ini diff --git a/README.md b/README.md index afe94b8..9e43a84 100644 --- a/README.md +++ b/README.md @@ -34,31 +34,12 @@ oauth_client = BackendApplicationClient(client_id=YOUR_CLIENT_ID) token_url = "https://api2.arduino.cc/iot/v1/clients/token" oauth = OAuth2Session(client=oauth_client) -token = oauth.fetch_token( - token_url=token_url, - client_id=YOUR_CLIENT_ID, - client_secret=YOUR_CLIENT_SECRET, - include_client_id=True, - audience="https://api2.arduino.cc/iot" -) - -print(token.get("access_token")) -``` - -In case of organization access, you can add organization identifier specifying required header: - - -```python - -org_id="" - token = oauth.fetch_token( token_url=token_url, client_id=YOUR_CLIENT_ID, client_secret=YOUR_CLIENT_SECRET, include_client_id=True, audience="https://api2.arduino.cc/iot", - headers={"X-Organization":org_id} ) print(token.get("access_token")) @@ -70,7 +51,6 @@ Once you get a token, you can create an instance of the iot-api client: import iot_api_client as iot from iot_api_client.rest import ApiException from iot_api_client.configuration import Configuration -import iot_api_client.apis.tags.devices_v2_api as deviceApi # configure and instance the API client client_config = Configuration(host="https://api2.arduino.cc/iot") @@ -78,37 +58,29 @@ client_config.access_token = YOUR_ACCESS_TOKEN client = iot.ApiClient(client_config) # as an example, interact with the devices API -devices_api = deviceApi.DevicesV2Api(client) +devices_api = iot.DevicesV2Api(client) try: - devices = devices_api.devices_v2_list() - if devices.response.status==200: - for device in devices.body: - print("Device ("+device["id"]+"): "+device["name"]) + resp = devices_api.devices_v2_list() + print(resp) except ApiException as e: print("Got an exception: {}".format(e)) ``` -In case of organization access, you can specify organization identifier in this way: - -```python -client = iot.ApiClient(client_config,header_name="X-Organization",header_value=org_id) -``` - For a working example, see [the example folder](https://github.com/arduino/iot-client-py/tree/master/example/main.py) in this repo. ## How to get Arduino IoT Cloud Client Credentials -You can generate Arduino IoT Cloud Client Credentials in `API Keys` section in the [IoT Cloud](https://app.arduino.cc/api-keys): +You can generate Arduino IoT Cloud Client Credentials in the `ARDUINO API` section in the [IoT Cloud things section](https://create.arduino.cc/iot/things): ### Step 1 -![IoT Cloud](img/api_step1.png) +![IoT Cloud Site](https://github.com/arduino/iot-client-js/blob/master/img/selection_1.png?raw=true) ### Step 2 -![IoT Cloud](img/api_step2.png) +![IoT Cloud Site](https://github.com/arduino/iot-client-js/blob/master/img/selection_2.png?raw=true) ### Step 3 -![IoT Cloud](img/api_step3.png) +![IoT Cloud Site](https://github.com/arduino/iot-client-js/blob/master/img/selection_3.png?raw=true) \ No newline at end of file diff --git a/docs/apis/tags/DashboardsV2Api.md b/docs/apis/tags/DashboardsV2Api.md index e5d8377..edb8322 100644 --- a/docs/apis/tags/DashboardsV2Api.md +++ b/docs/apis/tags/DashboardsV2Api.md @@ -306,6 +306,7 @@ with iot_api_client.ApiClient(configuration) as api_client: header_params = { } body = Dashboardv2( + cover_image="cover_image_example", name="0", widgets=[ Widget( @@ -342,6 +343,7 @@ with iot_api_client.ApiClient(configuration) as api_client: 'X-Organization': "X-Organization_example", } body = Dashboardv2( + cover_image="cover_image_example", name="0", widgets=[ Widget( @@ -2448,6 +2450,7 @@ with iot_api_client.ApiClient(configuration) as api_client: header_params = { } body = Dashboardv2( + cover_image="cover_image_example", name="0", widgets=[ Widget( @@ -2488,6 +2491,7 @@ with iot_api_client.ApiClient(configuration) as api_client: 'X-Organization': "X-Organization_example", } body = Dashboardv2( + cover_image="cover_image_example", name="0", widgets=[ Widget( diff --git a/docs/apis/tags/NetworkCredentialsV1Api.md b/docs/apis/tags/NetworkCredentialsV1Api.md new file mode 100644 index 0000000..b241be8 --- /dev/null +++ b/docs/apis/tags/NetworkCredentialsV1Api.md @@ -0,0 +1,247 @@ + +# iot_api_client.apis.tags.network_credentials_v1_api.NetworkCredentialsV1Api + +All URIs are relative to *https://api2.arduino.cc/iot* + +Method | HTTP request | Description +------------- | ------------- | ------------- +[**network_credentials_v1_show**](#network_credentials_v1_show) | **get** /v1/network_credentials/{type} | show network_credentials_v1 +[**network_credentials_v1_show_by_device**](#network_credentials_v1_show_by_device) | **get** /v1/network_credentials/{type}/connections | showByDevice network_credentials_v1 + +# **network_credentials_v1_show** + +> ArduinoCredentialsv1Collection network_credentials_v1_show(type) + +show network_credentials_v1 + +Show required network credentials depending on device type + +### Example + +```python +import iot_api_client +from iot_api_client.apis.tags import network_credentials_v1_api +from iot_api_client.model.arduino_credentialsv1_collection import ArduinoCredentialsv1Collection +from pprint import pprint +# Defining the host is optional and defaults to https://api2.arduino.cc/iot +# See configuration.py for a list of all supported configuration parameters. +configuration = iot_api_client.Configuration( + host = "https://api2.arduino.cc/iot" +) + +# Enter a context with an instance of the API client +with iot_api_client.ApiClient(configuration) as api_client: + # Create an instance of the API class + api_instance = network_credentials_v1_api.NetworkCredentialsV1Api(api_client) + + # example passing only required values which don't have defaults set + path_params = { + 'type': "mkrwifi1010", + } + query_params = { + } + try: + # show network_credentials_v1 + api_response = api_instance.network_credentials_v1_show( + path_params=path_params, + query_params=query_params, + ) + pprint(api_response) + except iot_api_client.ApiException as e: + print("Exception when calling NetworkCredentialsV1Api->network_credentials_v1_show: %s\n" % e) + + # example passing only optional values + path_params = { + 'type': "mkrwifi1010", + } + query_params = { + 'connection': "wifi", + } + try: + # show network_credentials_v1 + api_response = api_instance.network_credentials_v1_show( + path_params=path_params, + query_params=query_params, + ) + pprint(api_response) + except iot_api_client.ApiException as e: + print("Exception when calling NetworkCredentialsV1Api->network_credentials_v1_show: %s\n" % e) +``` +### Parameters + +Name | Type | Description | Notes +------------- | ------------- | ------------- | ------------- +query_params | RequestQueryParams | | +path_params | RequestPathParams | | +accept_content_types | typing.Tuple[str] | default is ('application/vnd.arduino.credentialsv1+json; type=collection', ) | Tells the server the content type(s) that are accepted by the client +stream | bool | default is False | if True then the response.content will be streamed and loaded from a file like object. When downloading a file, set this to True to force the code to deserialize the content to a FileSchema file +timeout | typing.Optional[typing.Union[int, typing.Tuple]] | default is None | the timeout used by the rest client +skip_deserialization | bool | default is False | when True, headers and body will be unset and an instance of api_client.ApiResponseWithoutDeserialization will be returned + +### query_params +#### RequestQueryParams + +Name | Type | Description | Notes +------------- | ------------- | ------------- | ------------- +connection | ConnectionSchema | | optional + + +# ConnectionSchema + +## Model Type Info +Input Type | Accessed Type | Description | Notes +------------ | ------------- | ------------- | ------------- +str, | str, | | must be one of ["wifi", "eth", "wifiandsecret", "gsm", "nb", "lora", "catm1", "cellular", ] + +### path_params +#### RequestPathParams + +Name | Type | Description | Notes +------------- | ------------- | ------------- | ------------- +type | TypeSchema | | + +# TypeSchema + +## Model Type Info +Input Type | Accessed Type | Description | Notes +------------ | ------------- | ------------- | ------------- +str, | str, | | must be one of ["mkrwifi1010", "mkr1000", "nano_33_iot", "mkrgsm1400", "mkrwan1310", "mkrwan1300", "mkrnb1500", "lora-device", "login_and_secretkey_wifi", "envie_m7", "nanorp2040connect", "nicla_vision", "opta", "giga", "portenta_c33", "unor4wifi", "nano_nora", ] + +### Return Types, Responses + +Code | Class | Description +------------- | ------------- | ------------- +n/a | api_client.ApiResponseWithoutDeserialization | When skip_deserialization is True this response is returned +200 | [ApiResponseFor200](#network_credentials_v1_show.ApiResponseFor200) | OK +401 | [ApiResponseFor401](#network_credentials_v1_show.ApiResponseFor401) | Unauthorized +404 | [ApiResponseFor404](#network_credentials_v1_show.ApiResponseFor404) | Not Found + +#### network_credentials_v1_show.ApiResponseFor200 +Name | Type | Description | Notes +------------- | ------------- | ------------- | ------------- +response | urllib3.HTTPResponse | Raw response | +body | typing.Union[SchemaFor200ResponseBodyApplicationVndArduinoCredentialsv1jsonTypecollection, ] | | +headers | Unset | headers were not defined | + +# SchemaFor200ResponseBodyApplicationVndArduinoCredentialsv1jsonTypecollection +Type | Description | Notes +------------- | ------------- | ------------- +[**ArduinoCredentialsv1Collection**](../../models/ArduinoCredentialsv1Collection.md) | | + + +#### network_credentials_v1_show.ApiResponseFor401 +Name | Type | Description | Notes +------------- | ------------- | ------------- | ------------- +response | urllib3.HTTPResponse | Raw response | +body | Unset | body was not defined | +headers | Unset | headers were not defined | + +#### network_credentials_v1_show.ApiResponseFor404 +Name | Type | Description | Notes +------------- | ------------- | ------------- | ------------- +response | urllib3.HTTPResponse | Raw response | +body | Unset | body was not defined | +headers | Unset | headers were not defined | + +### Authorization + +No authorization required + +[[Back to top]](#__pageTop) [[Back to API list]](../../../README.md#documentation-for-api-endpoints) [[Back to Model list]](../../../README.md#documentation-for-models) [[Back to README]](../../../README.md) + +# **network_credentials_v1_show_by_device** + +> network_credentials_v1_show_by_device(type) + +showByDevice network_credentials_v1 + +Show available connection types depending on device type + +### Example + +```python +import iot_api_client +from iot_api_client.apis.tags import network_credentials_v1_api +from pprint import pprint +# Defining the host is optional and defaults to https://api2.arduino.cc/iot +# See configuration.py for a list of all supported configuration parameters. +configuration = iot_api_client.Configuration( + host = "https://api2.arduino.cc/iot" +) + +# Enter a context with an instance of the API client +with iot_api_client.ApiClient(configuration) as api_client: + # Create an instance of the API class + api_instance = network_credentials_v1_api.NetworkCredentialsV1Api(api_client) + + # example passing only required values which don't have defaults set + path_params = { + 'type': "mkrwifi1010", + } + try: + # showByDevice network_credentials_v1 + api_response = api_instance.network_credentials_v1_show_by_device( + path_params=path_params, + ) + except iot_api_client.ApiException as e: + print("Exception when calling NetworkCredentialsV1Api->network_credentials_v1_show_by_device: %s\n" % e) +``` +### Parameters + +Name | Type | Description | Notes +------------- | ------------- | ------------- | ------------- +path_params | RequestPathParams | | +stream | bool | default is False | if True then the response.content will be streamed and loaded from a file like object. When downloading a file, set this to True to force the code to deserialize the content to a FileSchema file +timeout | typing.Optional[typing.Union[int, typing.Tuple]] | default is None | the timeout used by the rest client +skip_deserialization | bool | default is False | when True, headers and body will be unset and an instance of api_client.ApiResponseWithoutDeserialization will be returned + +### path_params +#### RequestPathParams + +Name | Type | Description | Notes +------------- | ------------- | ------------- | ------------- +type | TypeSchema | | + +# TypeSchema + +## Model Type Info +Input Type | Accessed Type | Description | Notes +------------ | ------------- | ------------- | ------------- +str, | str, | | must be one of ["mkrwifi1010", "mkr1000", "nano_33_iot", "mkrgsm1400", "mkrwan1310", "mkrwan1300", "mkrnb1500", "lora-device", "login_and_secretkey_wifi", "envie_m7", "nanorp2040connect", "nicla_vision", "opta", "giga", "portenta_c33", "unor4wifi", "nano_nora", ] + +### Return Types, Responses + +Code | Class | Description +------------- | ------------- | ------------- +n/a | api_client.ApiResponseWithoutDeserialization | When skip_deserialization is True this response is returned +200 | [ApiResponseFor200](#network_credentials_v1_show_by_device.ApiResponseFor200) | OK +401 | [ApiResponseFor401](#network_credentials_v1_show_by_device.ApiResponseFor401) | Unauthorized +404 | [ApiResponseFor404](#network_credentials_v1_show_by_device.ApiResponseFor404) | Not Found + +#### network_credentials_v1_show_by_device.ApiResponseFor200 +Name | Type | Description | Notes +------------- | ------------- | ------------- | ------------- +response | urllib3.HTTPResponse | Raw response | +body | Unset | body was not defined | +headers | Unset | headers were not defined | + +#### network_credentials_v1_show_by_device.ApiResponseFor401 +Name | Type | Description | Notes +------------- | ------------- | ------------- | ------------- +response | urllib3.HTTPResponse | Raw response | +body | Unset | body was not defined | +headers | Unset | headers were not defined | + +#### network_credentials_v1_show_by_device.ApiResponseFor404 +Name | Type | Description | Notes +------------- | ------------- | ------------- | ------------- +response | urllib3.HTTPResponse | Raw response | +body | Unset | body was not defined | +headers | Unset | headers were not defined | + +### Authorization + +No authorization required + +[[Back to top]](#__pageTop) [[Back to API list]](../../../README.md#documentation-for-api-endpoints) [[Back to Model list]](../../../README.md#documentation-for-models) [[Back to README]](../../../README.md) + diff --git a/docs/apis/tags/SeriesV2Api.md b/docs/apis/tags/SeriesV2Api.md index d6924f3..a0836a0 100644 --- a/docs/apis/tags/SeriesV2Api.md +++ b/docs/apis/tags/SeriesV2Api.md @@ -8,6 +8,7 @@ Method | HTTP request | Description [**series_v2_batch_query**](#series_v2_batch_query) | **post** /v2/series/batch_query | batch_query series_v2 [**series_v2_batch_query_raw**](#series_v2_batch_query_raw) | **post** /v2/series/batch_query_raw | batch_query_raw series_v2 [**series_v2_batch_query_raw_last_value**](#series_v2_batch_query_raw_last_value) | **post** /v2/series/batch_query_raw/lastvalue | batch_query_raw_last_value series_v2 +[**series_v2_batch_query_sampling**](#series_v2_batch_query_sampling) | **post** /v2/series/batch_query_sampling | batch_query_sampling series_v2 [**series_v2_historic_data**](#series_v2_historic_data) | **post** /v2/series/historic_data | historic_data series_v2 # **series_v2_batch_query** @@ -50,6 +51,8 @@ with iot_api_client.ApiClient(configuration) as api_client: api_instance = series_v2_api.SeriesV2Api(api_client) # example passing only required values which don't have defaults set + header_params = { + } body = BatchQueryRequestsMediaV1( requests=[ BatchQueryRequestMediaV1( @@ -66,6 +69,34 @@ with iot_api_client.ApiClient(configuration) as api_client: try: # batch_query series_v2 api_response = api_instance.series_v2_batch_query( + header_params=header_params, + body=body, + ) + pprint(api_response) + except iot_api_client.ApiException as e: + print("Exception when calling SeriesV2Api->series_v2_batch_query: %s\n" % e) + + # example passing only optional values + header_params = { + 'X-Organization': "X-Organization_example", + } + body = BatchQueryRequestsMediaV1( + requests=[ + BatchQueryRequestMediaV1( + aggregation="AVG", + _from="1970-01-01T00:00:00.00Z", + interval=1, + q="q_example", + series_limit=1, + to="1970-01-01T00:00:00.00Z", + ) + ], + resp_version=1, + ) + try: + # batch_query series_v2 + api_response = api_instance.series_v2_batch_query( + header_params=header_params, body=body, ) pprint(api_response) @@ -77,6 +108,7 @@ with iot_api_client.ApiClient(configuration) as api_client: Name | Type | Description | Notes ------------- | ------------- | ------------- | ------------- body | typing.Union[SchemaForRequestBodyApplicationJson, SchemaForRequestBodyApplicationXWwwFormUrlencoded] | required | +header_params | RequestHeaderParams | | content_type | str | optional, default is 'application/json' | Selects the schema and serialization of the request body accept_content_types | typing.Tuple[str] | default is ('application/vnd.arduino.series.batch+json', 'application/vnd.goa.error+json', ) | Tells the server the content type(s) that are accepted by the client stream | bool | default is False | if True then the response.content will be streamed and loaded from a file like object. When downloading a file, set this to True to force the code to deserialize the content to a FileSchema file @@ -97,6 +129,20 @@ Type | Description | Notes [**BatchQueryRequestsMediaV1**](../../models/BatchQueryRequestsMediaV1.md) | | +### header_params +#### RequestHeaderParams + +Name | Type | Description | Notes +------------- | ------------- | ------------- | ------------- +X-Organization | XOrganizationSchema | | optional + +# XOrganizationSchema + +## Model Type Info +Input Type | Accessed Type | Description | Notes +------------ | ------------- | ------------- | ------------- +str, | str, | | + ### Return Types, Responses Code | Class | Description @@ -245,6 +291,8 @@ with iot_api_client.ApiClient(configuration) as api_client: api_instance = series_v2_api.SeriesV2Api(api_client) # example passing only required values which don't have defaults set + header_params = { + } body = BatchQueryRawRequestsMediaV1( requests=[ BatchQueryRawRequestMediaV1( @@ -260,6 +308,33 @@ with iot_api_client.ApiClient(configuration) as api_client: try: # batch_query_raw series_v2 api_response = api_instance.series_v2_batch_query_raw( + header_params=header_params, + body=body, + ) + pprint(api_response) + except iot_api_client.ApiException as e: + print("Exception when calling SeriesV2Api->series_v2_batch_query_raw: %s\n" % e) + + # example passing only optional values + header_params = { + 'X-Organization': "X-Organization_example", + } + body = BatchQueryRawRequestsMediaV1( + requests=[ + BatchQueryRawRequestMediaV1( + _from="1970-01-01T00:00:00.00Z", + q="q_example", + series_limit=1, + sort="DESC", + to="1970-01-01T00:00:00.00Z", + ) + ], + resp_version=1, + ) + try: + # batch_query_raw series_v2 + api_response = api_instance.series_v2_batch_query_raw( + header_params=header_params, body=body, ) pprint(api_response) @@ -271,6 +346,7 @@ with iot_api_client.ApiClient(configuration) as api_client: Name | Type | Description | Notes ------------- | ------------- | ------------- | ------------- body | typing.Union[SchemaForRequestBodyApplicationJson, SchemaForRequestBodyApplicationXWwwFormUrlencoded] | required | +header_params | RequestHeaderParams | | content_type | str | optional, default is 'application/json' | Selects the schema and serialization of the request body accept_content_types | typing.Tuple[str] | default is ('application/vnd.arduino.series.raw.batch+json', 'application/vnd.goa.error+json', ) | Tells the server the content type(s) that are accepted by the client stream | bool | default is False | if True then the response.content will be streamed and loaded from a file like object. When downloading a file, set this to True to force the code to deserialize the content to a FileSchema file @@ -291,6 +367,20 @@ Type | Description | Notes [**BatchQueryRawRequestsMediaV1**](../../models/BatchQueryRawRequestsMediaV1.md) | | +### header_params +#### RequestHeaderParams + +Name | Type | Description | Notes +------------- | ------------- | ------------- | ------------- +X-Organization | XOrganizationSchema | | optional + +# XOrganizationSchema + +## Model Type Info +Input Type | Accessed Type | Description | Notes +------------ | ------------- | ------------- | ------------- +str, | str, | | + ### Return Types, Responses Code | Class | Description @@ -439,6 +529,30 @@ with iot_api_client.ApiClient(configuration) as api_client: api_instance = series_v2_api.SeriesV2Api(api_client) # example passing only required values which don't have defaults set + header_params = { + } + body = BatchLastValueRequestsMediaV1( + requests=[ + BatchQueryRawLastValueRequestMediaV1( + property_id="property_id_example", + thing_id="thing_id_example", + ) + ], + ) + try: + # batch_query_raw_last_value series_v2 + api_response = api_instance.series_v2_batch_query_raw_last_value( + header_params=header_params, + body=body, + ) + pprint(api_response) + except iot_api_client.ApiException as e: + print("Exception when calling SeriesV2Api->series_v2_batch_query_raw_last_value: %s\n" % e) + + # example passing only optional values + header_params = { + 'X-Organization': "X-Organization_example", + } body = BatchLastValueRequestsMediaV1( requests=[ BatchQueryRawLastValueRequestMediaV1( @@ -450,6 +564,7 @@ with iot_api_client.ApiClient(configuration) as api_client: try: # batch_query_raw_last_value series_v2 api_response = api_instance.series_v2_batch_query_raw_last_value( + header_params=header_params, body=body, ) pprint(api_response) @@ -461,6 +576,7 @@ with iot_api_client.ApiClient(configuration) as api_client: Name | Type | Description | Notes ------------- | ------------- | ------------- | ------------- body | typing.Union[SchemaForRequestBodyApplicationJson, SchemaForRequestBodyApplicationXWwwFormUrlencoded] | required | +header_params | RequestHeaderParams | | content_type | str | optional, default is 'application/json' | Selects the schema and serialization of the request body accept_content_types | typing.Tuple[str] | default is ('application/vnd.arduino.series.raw.batch.lastvalue+json', 'application/vnd.goa.error+json', ) | Tells the server the content type(s) that are accepted by the client stream | bool | default is False | if True then the response.content will be streamed and loaded from a file like object. When downloading a file, set this to True to force the code to deserialize the content to a FileSchema file @@ -481,6 +597,20 @@ Type | Description | Notes [**BatchLastValueRequestsMediaV1**](../../models/BatchLastValueRequestsMediaV1.md) | | +### header_params +#### RequestHeaderParams + +Name | Type | Description | Notes +------------- | ------------- | ------------- | ------------- +X-Organization | XOrganizationSchema | | optional + +# XOrganizationSchema + +## Model Type Info +Input Type | Accessed Type | Description | Notes +------------ | ------------- | ------------- | ------------- +str, | str, | | + ### Return Types, Responses Code | Class | Description @@ -563,6 +693,244 @@ Type | Description | Notes [**Error**](../../models/Error.md) | | +### Authorization + +[oauth2](../../../README.md#oauth2) + +[[Back to top]](#__pageTop) [[Back to API list]](../../../README.md#documentation-for-api-endpoints) [[Back to Model list]](../../../README.md#documentation-for-models) [[Back to README]](../../../README.md) + +# **series_v2_batch_query_sampling** + +> ArduinoSeriesBatchSampled series_v2_batch_query_sampling(batch_query_sampled_requests_media_v1) + +batch_query_sampling series_v2 + +Returns a batch of time-series sampled samples. To be used for types that does not support mathematic aggregation. Types supported: strings, complex types. + +### Example + +* OAuth Authentication (oauth2): +```python +import iot_api_client +from iot_api_client.apis.tags import series_v2_api +from iot_api_client.model.batch_query_sampled_requests_media_v1 import BatchQuerySampledRequestsMediaV1 +from iot_api_client.model.error import Error +from iot_api_client.model.arduino_series_batch_sampled import ArduinoSeriesBatchSampled +from pprint import pprint +# Defining the host is optional and defaults to https://api2.arduino.cc/iot +# See configuration.py for a list of all supported configuration parameters. +configuration = iot_api_client.Configuration( + host = "https://api2.arduino.cc/iot" +) + +# The client must configure the authentication and authorization parameters +# in accordance with the API server security policy. +# Examples for each auth method are provided below, use the example that +# satisfies your auth use case. + +# Configure OAuth2 access token for authorization: oauth2 +configuration = iot_api_client.Configuration( + host = "https://api2.arduino.cc/iot", + access_token = 'YOUR_ACCESS_TOKEN' +) +# Enter a context with an instance of the API client +with iot_api_client.ApiClient(configuration) as api_client: + # Create an instance of the API class + api_instance = series_v2_api.SeriesV2Api(api_client) + + # example passing only required values which don't have defaults set + header_params = { + } + body = BatchQuerySampledRequestsMediaV1( + requests=[ + BatchQuerySampledRequestMediaV1( + _from="1970-01-01T00:00:00.00Z", + interval=300, + q="q_example", + series_limit=1, + to="1970-01-01T00:00:00.00Z", + ) + ], + resp_version=1, + ) + try: + # batch_query_sampling series_v2 + api_response = api_instance.series_v2_batch_query_sampling( + header_params=header_params, + body=body, + ) + pprint(api_response) + except iot_api_client.ApiException as e: + print("Exception when calling SeriesV2Api->series_v2_batch_query_sampling: %s\n" % e) + + # example passing only optional values + header_params = { + 'X-Organization': "X-Organization_example", + } + body = BatchQuerySampledRequestsMediaV1( + requests=[ + BatchQuerySampledRequestMediaV1( + _from="1970-01-01T00:00:00.00Z", + interval=300, + q="q_example", + series_limit=1, + to="1970-01-01T00:00:00.00Z", + ) + ], + resp_version=1, + ) + try: + # batch_query_sampling series_v2 + api_response = api_instance.series_v2_batch_query_sampling( + header_params=header_params, + body=body, + ) + pprint(api_response) + except iot_api_client.ApiException as e: + print("Exception when calling SeriesV2Api->series_v2_batch_query_sampling: %s\n" % e) +``` +### Parameters + +Name | Type | Description | Notes +------------- | ------------- | ------------- | ------------- +body | typing.Union[SchemaForRequestBodyApplicationJson, SchemaForRequestBodyApplicationXWwwFormUrlencoded] | required | +header_params | RequestHeaderParams | | +content_type | str | optional, default is 'application/json' | Selects the schema and serialization of the request body +accept_content_types | typing.Tuple[str] | default is ('application/vnd.arduino.series.batch.sampled+json', 'application/vnd.goa.error+json', ) | Tells the server the content type(s) that are accepted by the client +stream | bool | default is False | if True then the response.content will be streamed and loaded from a file like object. When downloading a file, set this to True to force the code to deserialize the content to a FileSchema file +timeout | typing.Optional[typing.Union[int, typing.Tuple]] | default is None | the timeout used by the rest client +skip_deserialization | bool | default is False | when True, headers and body will be unset and an instance of api_client.ApiResponseWithoutDeserialization will be returned + +### body + +# SchemaForRequestBodyApplicationJson +Type | Description | Notes +------------- | ------------- | ------------- +[**BatchQuerySampledRequestsMediaV1**](../../models/BatchQuerySampledRequestsMediaV1.md) | | + + +# SchemaForRequestBodyApplicationXWwwFormUrlencoded +Type | Description | Notes +------------- | ------------- | ------------- +[**BatchQuerySampledRequestsMediaV1**](../../models/BatchQuerySampledRequestsMediaV1.md) | | + + +### header_params +#### RequestHeaderParams + +Name | Type | Description | Notes +------------- | ------------- | ------------- | ------------- +X-Organization | XOrganizationSchema | | optional + +# XOrganizationSchema + +## Model Type Info +Input Type | Accessed Type | Description | Notes +------------ | ------------- | ------------- | ------------- +str, | str, | | + +### Return Types, Responses + +Code | Class | Description +------------- | ------------- | ------------- +n/a | api_client.ApiResponseWithoutDeserialization | When skip_deserialization is True this response is returned +200 | [ApiResponseFor200](#series_v2_batch_query_sampling.ApiResponseFor200) | OK +400 | [ApiResponseFor400](#series_v2_batch_query_sampling.ApiResponseFor400) | Bad Request +401 | [ApiResponseFor401](#series_v2_batch_query_sampling.ApiResponseFor401) | Unauthorized +404 | [ApiResponseFor404](#series_v2_batch_query_sampling.ApiResponseFor404) | Not Found +501 | [ApiResponseFor501](#series_v2_batch_query_sampling.ApiResponseFor501) | Not Implemented +503 | [ApiResponseFor503](#series_v2_batch_query_sampling.ApiResponseFor503) | Service Unavailable + +#### series_v2_batch_query_sampling.ApiResponseFor200 +Name | Type | Description | Notes +------------- | ------------- | ------------- | ------------- +response | urllib3.HTTPResponse | Raw response | +body | typing.Union[SchemaFor200ResponseBodyApplicationVndArduinoSeriesBatchSampledjson, SchemaFor200ResponseBodyApplicationVndGoaErrorjson, ] | | +headers | Unset | headers were not defined | + +# SchemaFor200ResponseBodyApplicationVndArduinoSeriesBatchSampledjson +Type | Description | Notes +------------- | ------------- | ------------- +[**ArduinoSeriesBatchSampled**](../../models/ArduinoSeriesBatchSampled.md) | | + + +# SchemaFor200ResponseBodyApplicationVndGoaErrorjson +Type | Description | Notes +------------- | ------------- | ------------- +[**ArduinoSeriesBatchSampled**](../../models/ArduinoSeriesBatchSampled.md) | | + + +#### series_v2_batch_query_sampling.ApiResponseFor400 +Name | Type | Description | Notes +------------- | ------------- | ------------- | ------------- +response | urllib3.HTTPResponse | Raw response | +body | typing.Union[SchemaFor400ResponseBodyApplicationVndArduinoSeriesBatchSampledjson, SchemaFor400ResponseBodyApplicationVndGoaErrorjson, ] | | +headers | Unset | headers were not defined | + +# SchemaFor400ResponseBodyApplicationVndArduinoSeriesBatchSampledjson +Type | Description | Notes +------------- | ------------- | ------------- +[**Error**](../../models/Error.md) | | + + +# SchemaFor400ResponseBodyApplicationVndGoaErrorjson +Type | Description | Notes +------------- | ------------- | ------------- +[**Error**](../../models/Error.md) | | + + +#### series_v2_batch_query_sampling.ApiResponseFor401 +Name | Type | Description | Notes +------------- | ------------- | ------------- | ------------- +response | urllib3.HTTPResponse | Raw response | +body | typing.Union[SchemaFor401ResponseBodyApplicationVndArduinoSeriesBatchSampledjson, SchemaFor401ResponseBodyApplicationVndGoaErrorjson, ] | | +headers | Unset | headers were not defined | + +# SchemaFor401ResponseBodyApplicationVndArduinoSeriesBatchSampledjson +Type | Description | Notes +------------- | ------------- | ------------- +[**Error**](../../models/Error.md) | | + + +# SchemaFor401ResponseBodyApplicationVndGoaErrorjson +Type | Description | Notes +------------- | ------------- | ------------- +[**Error**](../../models/Error.md) | | + + +#### series_v2_batch_query_sampling.ApiResponseFor404 +Name | Type | Description | Notes +------------- | ------------- | ------------- | ------------- +response | urllib3.HTTPResponse | Raw response | +body | Unset | body was not defined | +headers | Unset | headers were not defined | + +#### series_v2_batch_query_sampling.ApiResponseFor501 +Name | Type | Description | Notes +------------- | ------------- | ------------- | ------------- +response | urllib3.HTTPResponse | Raw response | +body | Unset | body was not defined | +headers | Unset | headers were not defined | + +#### series_v2_batch_query_sampling.ApiResponseFor503 +Name | Type | Description | Notes +------------- | ------------- | ------------- | ------------- +response | urllib3.HTTPResponse | Raw response | +body | typing.Union[SchemaFor503ResponseBodyApplicationVndArduinoSeriesBatchSampledjson, SchemaFor503ResponseBodyApplicationVndGoaErrorjson, ] | | +headers | Unset | headers were not defined | + +# SchemaFor503ResponseBodyApplicationVndArduinoSeriesBatchSampledjson +Type | Description | Notes +------------- | ------------- | ------------- +[**Error**](../../models/Error.md) | | + + +# SchemaFor503ResponseBodyApplicationVndGoaErrorjson +Type | Description | Notes +------------- | ------------- | ------------- +[**Error**](../../models/Error.md) | | + + ### Authorization [oauth2](../../../README.md#oauth2) @@ -608,6 +976,28 @@ with iot_api_client.ApiClient(configuration) as api_client: api_instance = series_v2_api.SeriesV2Api(api_client) # example passing only required values which don't have defaults set + header_params = { + } + body = HistoricDataRequest( + _from="1970-01-01T00:00:00.00Z", + properties=[ + "properties_example" + ], + to="1970-01-01T00:00:00.00Z", + ) + try: + # historic_data series_v2 + api_response = api_instance.series_v2_historic_data( + header_params=header_params, + body=body, + ) + except iot_api_client.ApiException as e: + print("Exception when calling SeriesV2Api->series_v2_historic_data: %s\n" % e) + + # example passing only optional values + header_params = { + 'X-Organization': "X-Organization_example", + } body = HistoricDataRequest( _from="1970-01-01T00:00:00.00Z", properties=[ @@ -618,6 +1008,7 @@ with iot_api_client.ApiClient(configuration) as api_client: try: # historic_data series_v2 api_response = api_instance.series_v2_historic_data( + header_params=header_params, body=body, ) except iot_api_client.ApiException as e: @@ -628,6 +1019,7 @@ with iot_api_client.ApiClient(configuration) as api_client: Name | Type | Description | Notes ------------- | ------------- | ------------- | ------------- body | typing.Union[SchemaForRequestBodyApplicationJson, SchemaForRequestBodyApplicationXWwwFormUrlencoded] | required | +header_params | RequestHeaderParams | | content_type | str | optional, default is 'application/json' | Selects the schema and serialization of the request body accept_content_types | typing.Tuple[str] | default is ('application/vnd.goa.error+json', ) | Tells the server the content type(s) that are accepted by the client stream | bool | default is False | if True then the response.content will be streamed and loaded from a file like object. When downloading a file, set this to True to force the code to deserialize the content to a FileSchema file @@ -648,6 +1040,20 @@ Type | Description | Notes [**HistoricDataRequest**](../../models/HistoricDataRequest.md) | | +### header_params +#### RequestHeaderParams + +Name | Type | Description | Notes +------------- | ------------- | ------------- | ------------- +X-Organization | XOrganizationSchema | | optional + +# XOrganizationSchema + +## Model Type Info +Input Type | Accessed Type | Description | Notes +------------ | ------------- | ------------- | ------------- +str, | str, | | + ### Return Types, Responses Code | Class | Description diff --git a/docs/apis/tags/TemplatesApi.md b/docs/apis/tags/TemplatesApi.md new file mode 100644 index 0000000..1319f69 --- /dev/null +++ b/docs/apis/tags/TemplatesApi.md @@ -0,0 +1,236 @@ + +# iot_api_client.apis.tags.templates_api.TemplatesApi + +All URIs are relative to *https://api2.arduino.cc/iot* + +Method | HTTP request | Description +------------- | ------------- | ------------- +[**templates_apply**](#templates_apply) | **put** /v1/templates | apply templates + +# **templates_apply** + +> ArduinoTemplate templates_apply(template) + +apply templates + +Apply an existing cloud template and generate all the needed resources + +### Example + +```python +import iot_api_client +from iot_api_client.apis.tags import templates_api +from iot_api_client.model.error import Error +from iot_api_client.model.arduino_template import ArduinoTemplate +from iot_api_client.model.template import Template +from pprint import pprint +# Defining the host is optional and defaults to https://api2.arduino.cc/iot +# See configuration.py for a list of all supported configuration parameters. +configuration = iot_api_client.Configuration( + host = "https://api2.arduino.cc/iot" +) + +# Enter a context with an instance of the API client +with iot_api_client.ApiClient(configuration) as api_client: + # Create an instance of the API class + api_instance = templates_api.TemplatesApi(api_client) + + # example passing only required values which don't have defaults set + header_params = { + } + body = Template( + custom_template_id="custom_template_id_example", + prefix_name=".", + template_name="remote-controlled-lights", + things_options=dict(), + ) + try: + # apply templates + api_response = api_instance.templates_apply( + header_params=header_params, + body=body, + ) + pprint(api_response) + except iot_api_client.ApiException as e: + print("Exception when calling TemplatesApi->templates_apply: %s\n" % e) + + # example passing only optional values + header_params = { + 'X-Organization': "X-Organization_example", + } + body = Template( + custom_template_id="custom_template_id_example", + prefix_name=".", + template_name="remote-controlled-lights", + things_options=dict(), + ) + try: + # apply templates + api_response = api_instance.templates_apply( + header_params=header_params, + body=body, + ) + pprint(api_response) + except iot_api_client.ApiException as e: + print("Exception when calling TemplatesApi->templates_apply: %s\n" % e) +``` +### Parameters + +Name | Type | Description | Notes +------------- | ------------- | ------------- | ------------- +body | typing.Union[SchemaForRequestBodyApplicationJson, SchemaForRequestBodyApplicationXWwwFormUrlencoded] | required | +header_params | RequestHeaderParams | | +content_type | str | optional, default is 'application/json' | Selects the schema and serialization of the request body +accept_content_types | typing.Tuple[str] | default is ('application/vnd.arduino.template+json', 'application/vnd.goa.error+json', ) | Tells the server the content type(s) that are accepted by the client +stream | bool | default is False | if True then the response.content will be streamed and loaded from a file like object. When downloading a file, set this to True to force the code to deserialize the content to a FileSchema file +timeout | typing.Optional[typing.Union[int, typing.Tuple]] | default is None | the timeout used by the rest client +skip_deserialization | bool | default is False | when True, headers and body will be unset and an instance of api_client.ApiResponseWithoutDeserialization will be returned + +### body + +# SchemaForRequestBodyApplicationJson +Type | Description | Notes +------------- | ------------- | ------------- +[**Template**](../../models/Template.md) | | + + +# SchemaForRequestBodyApplicationXWwwFormUrlencoded +Type | Description | Notes +------------- | ------------- | ------------- +[**Template**](../../models/Template.md) | | + + +### header_params +#### RequestHeaderParams + +Name | Type | Description | Notes +------------- | ------------- | ------------- | ------------- +X-Organization | XOrganizationSchema | | optional + +# XOrganizationSchema + +## Model Type Info +Input Type | Accessed Type | Description | Notes +------------ | ------------- | ------------- | ------------- +str, | str, | | + +### Return Types, Responses + +Code | Class | Description +------------- | ------------- | ------------- +n/a | api_client.ApiResponseWithoutDeserialization | When skip_deserialization is True this response is returned +200 | [ApiResponseFor200](#templates_apply.ApiResponseFor200) | OK +400 | [ApiResponseFor400](#templates_apply.ApiResponseFor400) | Bad Request +401 | [ApiResponseFor401](#templates_apply.ApiResponseFor401) | Unauthorized +404 | [ApiResponseFor404](#templates_apply.ApiResponseFor404) | Not Found +409 | [ApiResponseFor409](#templates_apply.ApiResponseFor409) | Conflict +500 | [ApiResponseFor500](#templates_apply.ApiResponseFor500) | Internal Server Error + +#### templates_apply.ApiResponseFor200 +Name | Type | Description | Notes +------------- | ------------- | ------------- | ------------- +response | urllib3.HTTPResponse | Raw response | +body | typing.Union[SchemaFor200ResponseBodyApplicationVndArduinoTemplatejson, SchemaFor200ResponseBodyApplicationVndGoaErrorjson, ] | | +headers | Unset | headers were not defined | + +# SchemaFor200ResponseBodyApplicationVndArduinoTemplatejson +Type | Description | Notes +------------- | ------------- | ------------- +[**ArduinoTemplate**](../../models/ArduinoTemplate.md) | | + + +# SchemaFor200ResponseBodyApplicationVndGoaErrorjson +Type | Description | Notes +------------- | ------------- | ------------- +[**ArduinoTemplate**](../../models/ArduinoTemplate.md) | | + + +#### templates_apply.ApiResponseFor400 +Name | Type | Description | Notes +------------- | ------------- | ------------- | ------------- +response | urllib3.HTTPResponse | Raw response | +body | typing.Union[SchemaFor400ResponseBodyApplicationVndArduinoTemplatejson, SchemaFor400ResponseBodyApplicationVndGoaErrorjson, ] | | +headers | Unset | headers were not defined | + +# SchemaFor400ResponseBodyApplicationVndArduinoTemplatejson +Type | Description | Notes +------------- | ------------- | ------------- +[**Error**](../../models/Error.md) | | + + +# SchemaFor400ResponseBodyApplicationVndGoaErrorjson +Type | Description | Notes +------------- | ------------- | ------------- +[**Error**](../../models/Error.md) | | + + +#### templates_apply.ApiResponseFor401 +Name | Type | Description | Notes +------------- | ------------- | ------------- | ------------- +response | urllib3.HTTPResponse | Raw response | +body | Unset | body was not defined | +headers | Unset | headers were not defined | + +#### templates_apply.ApiResponseFor404 +Name | Type | Description | Notes +------------- | ------------- | ------------- | ------------- +response | urllib3.HTTPResponse | Raw response | +body | typing.Union[SchemaFor404ResponseBodyApplicationVndArduinoTemplatejson, SchemaFor404ResponseBodyApplicationVndGoaErrorjson, ] | | +headers | Unset | headers were not defined | + +# SchemaFor404ResponseBodyApplicationVndArduinoTemplatejson +Type | Description | Notes +------------- | ------------- | ------------- +[**Error**](../../models/Error.md) | | + + +# SchemaFor404ResponseBodyApplicationVndGoaErrorjson +Type | Description | Notes +------------- | ------------- | ------------- +[**Error**](../../models/Error.md) | | + + +#### templates_apply.ApiResponseFor409 +Name | Type | Description | Notes +------------- | ------------- | ------------- | ------------- +response | urllib3.HTTPResponse | Raw response | +body | typing.Union[SchemaFor409ResponseBodyApplicationVndArduinoTemplatejson, SchemaFor409ResponseBodyApplicationVndGoaErrorjson, ] | | +headers | Unset | headers were not defined | + +# SchemaFor409ResponseBodyApplicationVndArduinoTemplatejson +Type | Description | Notes +------------- | ------------- | ------------- +[**Error**](../../models/Error.md) | | + + +# SchemaFor409ResponseBodyApplicationVndGoaErrorjson +Type | Description | Notes +------------- | ------------- | ------------- +[**Error**](../../models/Error.md) | | + + +#### templates_apply.ApiResponseFor500 +Name | Type | Description | Notes +------------- | ------------- | ------------- | ------------- +response | urllib3.HTTPResponse | Raw response | +body | typing.Union[SchemaFor500ResponseBodyApplicationVndArduinoTemplatejson, SchemaFor500ResponseBodyApplicationVndGoaErrorjson, ] | | +headers | Unset | headers were not defined | + +# SchemaFor500ResponseBodyApplicationVndArduinoTemplatejson +Type | Description | Notes +------------- | ------------- | ------------- +[**Error**](../../models/Error.md) | | + + +# SchemaFor500ResponseBodyApplicationVndGoaErrorjson +Type | Description | Notes +------------- | ------------- | ------------- +[**Error**](../../models/Error.md) | | + + +### Authorization + +No authorization required + +[[Back to top]](#__pageTop) [[Back to API list]](../../../README.md#documentation-for-api-endpoints) [[Back to Model list]](../../../README.md#documentation-for-models) [[Back to README]](../../../README.md) + diff --git a/docs/apis/tags/ThingsV2Api.md b/docs/apis/tags/ThingsV2Api.md index 013e591..0ec13e2 100644 --- a/docs/apis/tags/ThingsV2Api.md +++ b/docs/apis/tags/ThingsV2Api.md @@ -63,7 +63,7 @@ with iot_api_client.ApiClient(configuration) as api_client: } body = ThingClone( include_tags=True, - name="A", + name=".", ) try: # clone things_v2 @@ -85,7 +85,7 @@ with iot_api_client.ApiClient(configuration) as api_client: } body = ThingClone( include_tags=True, - name="A", + name=".", ) try: # clone things_v2 @@ -286,9 +286,10 @@ with iot_api_client.ApiClient(configuration) as api_client: header_params = { } body = ThingCreate( + assistant="ALEXA", device_id="device_id_example", id="id_example", - name="A", + name=".", properties=[ ModelProperty( max_value=3.14, @@ -332,9 +333,10 @@ with iot_api_client.ApiClient(configuration) as api_client: 'X-Organization': "X-Organization_example", } body = ThingCreate( + assistant="ALEXA", device_id="device_id_example", id="id_example", - name="A", + name=".", properties=[ ModelProperty( max_value=3.14, @@ -1734,6 +1736,7 @@ Code | Class | Description ------------- | ------------- | ------------- n/a | api_client.ApiResponseWithoutDeserialization | When skip_deserialization is True this response is returned 200 | [ApiResponseFor200](#things_v2_template.ApiResponseFor200) | OK +400 | [ApiResponseFor400](#things_v2_template.ApiResponseFor400) | Bad Request 401 | [ApiResponseFor401](#things_v2_template.ApiResponseFor401) | Unauthorized 404 | [ApiResponseFor404](#things_v2_template.ApiResponseFor404) | Not Found 500 | [ApiResponseFor500](#things_v2_template.ApiResponseFor500) | Internal Server Error @@ -1757,6 +1760,25 @@ Type | Description | Notes [**ArduinoThingtemplate**](../../models/ArduinoThingtemplate.md) | | +#### things_v2_template.ApiResponseFor400 +Name | Type | Description | Notes +------------- | ------------- | ------------- | ------------- +response | urllib3.HTTPResponse | Raw response | +body | typing.Union[SchemaFor400ResponseBodyApplicationVndArduinoThingtemplatejson, SchemaFor400ResponseBodyApplicationVndGoaErrorjson, ] | | +headers | Unset | headers were not defined | + +# SchemaFor400ResponseBodyApplicationVndArduinoThingtemplatejson +Type | Description | Notes +------------- | ------------- | ------------- +[**Error**](../../models/Error.md) | | + + +# SchemaFor400ResponseBodyApplicationVndGoaErrorjson +Type | Description | Notes +------------- | ------------- | ------------- +[**Error**](../../models/Error.md) | | + + #### things_v2_template.ApiResponseFor401 Name | Type | Description | Notes ------------- | ------------- | ------------- | ------------- @@ -1844,9 +1866,10 @@ with iot_api_client.ApiClient(configuration) as api_client: header_params = { } body = ThingUpdate( + assistant="ALEXA", device_id="device_id_example", id="id_example", - name="A", + name=".", properties=[ ModelProperty( max_value=3.14, @@ -1888,9 +1911,10 @@ with iot_api_client.ApiClient(configuration) as api_client: 'X-Organization': "X-Organization_example", } body = ThingUpdate( + assistant="ALEXA", device_id="device_id_example", id="id_example", - name="A", + name=".", properties=[ ModelProperty( max_value=3.14, diff --git a/docs/models/ArduinoCredentialsv1.md b/docs/models/ArduinoCredentialsv1.md new file mode 100644 index 0000000..671abc6 --- /dev/null +++ b/docs/models/ArduinoCredentialsv1.md @@ -0,0 +1,20 @@ +# iot_api_client.model.arduino_credentialsv1.ArduinoCredentialsv1 + +ArduinoCredentialsv1 media type (default view) + +## Model Type Info +Input Type | Accessed Type | Description | Notes +------------ | ------------- | ------------- | ------------- +dict, frozendict.frozendict, | frozendict.frozendict, | ArduinoCredentialsv1 media type (default view) | + +### Dictionary Keys +Key | Input Type | Accessed Type | Description | Notes +------------ | ------------- | ------------- | ------------- | ------------- +**friendly_name** | str, | str, | Friendly name | +**secret_name** | str, | str, | The secret parameter name | +**sensitive** | bool, | BoolClass, | Tell if the field is sensitive | +**required** | bool, | BoolClass, | Tell if the parameter is required or not | +**any_string_name** | dict, frozendict.frozendict, str, date, datetime, int, float, bool, decimal.Decimal, None, list, tuple, bytes, io.FileIO, io.BufferedReader | frozendict.frozendict, str, BoolClass, decimal.Decimal, NoneClass, tuple, bytes, FileIO | any string name can be used but the value must be the correct type | [optional] + +[[Back to Model list]](../../README.md#documentation-for-models) [[Back to API list]](../../README.md#documentation-for-api-endpoints) [[Back to README]](../../README.md) + diff --git a/docs/models/ArduinoCredentialsv1Collection.md b/docs/models/ArduinoCredentialsv1Collection.md new file mode 100644 index 0000000..d8df444 --- /dev/null +++ b/docs/models/ArduinoCredentialsv1Collection.md @@ -0,0 +1,16 @@ +# iot_api_client.model.arduino_credentialsv1_collection.ArduinoCredentialsv1Collection + +ArduinoCredentialsv1Collection is the media type for an array of ArduinoCredentialsv1 (default view) + +## Model Type Info +Input Type | Accessed Type | Description | Notes +------------ | ------------- | ------------- | ------------- +list, tuple, | tuple, | ArduinoCredentialsv1Collection is the media type for an array of ArduinoCredentialsv1 (default view) | + +### Tuple Items +Class Name | Input Type | Accessed Type | Description | Notes +------------- | ------------- | ------------- | ------------- | ------------- +[**ArduinoCredentialsv1**](ArduinoCredentialsv1.md) | [**ArduinoCredentialsv1**](ArduinoCredentialsv1.md) | [**ArduinoCredentialsv1**](ArduinoCredentialsv1.md) | | + +[[Back to Model list]](../../README.md#documentation-for-models) [[Back to API list]](../../README.md#documentation-for-api-endpoints) [[Back to README]](../../README.md) + diff --git a/docs/models/ArduinoDashboardv2.md b/docs/models/ArduinoDashboardv2.md index 63de151..9691aaa 100644 --- a/docs/models/ArduinoDashboardv2.md +++ b/docs/models/ArduinoDashboardv2.md @@ -13,6 +13,7 @@ Key | Input Type | Accessed Type | Description | Notes **updated_at** | str, datetime, | str, | Last update date | value must conform to RFC-3339 date-time **name** | str, | str, | The friendly name of the dashboard | **id** | str, uuid.UUID, | str, | The friendly name of the dashboard | value must be a uuid +**cover_image** | str, | str, | The cover image of the dashboard | [optional] **created_by** | [**ArduinoDashboardowner**](ArduinoDashboardowner.md) | [**ArduinoDashboardowner**](ArduinoDashboardowner.md) | | [optional] **organization_id** | str, uuid.UUID, | str, | Id of the organization the dashboard belongs to | [optional] value must be a uuid **shared_by** | [**ArduinoDashboardshare**](ArduinoDashboardshare.md) | [**ArduinoDashboardshare**](ArduinoDashboardshare.md) | | [optional] diff --git a/docs/models/ArduinoDashboardv2template.md b/docs/models/ArduinoDashboardv2template.md index d22c783..52bb606 100644 --- a/docs/models/ArduinoDashboardv2template.md +++ b/docs/models/ArduinoDashboardv2template.md @@ -11,6 +11,8 @@ dict, frozendict.frozendict, | frozendict.frozendict, | ArduinoDashboardv2temp Key | Input Type | Accessed Type | Description | Notes ------------ | ------------- | ------------- | ------------- | ------------- **name** | str, | str, | The friendly name of the dashboard | +**cover_image** | str, | str, | The cover image of the dashboard | [optional] +**id** | str, | str, | The friendly ID of the dashboard | [optional] **widgets** | [**ArduinoWidgetv2templateCollection**](ArduinoWidgetv2templateCollection.md) | [**ArduinoWidgetv2templateCollection**](ArduinoWidgetv2templateCollection.md) | | [optional] **any_string_name** | dict, frozendict.frozendict, str, date, datetime, int, float, bool, decimal.Decimal, None, list, tuple, bytes, io.FileIO, io.BufferedReader | frozendict.frozendict, str, BoolClass, decimal.Decimal, NoneClass, tuple, bytes, FileIO | any string name can be used but the value must be the correct type | [optional] diff --git a/docs/models/ArduinoDevicev2.md b/docs/models/ArduinoDevicev2.md index 69ac49c..f8f77b7 100644 --- a/docs/models/ArduinoDevicev2.md +++ b/docs/models/ArduinoDevicev2.md @@ -17,7 +17,7 @@ Key | Input Type | Accessed Type | Description | Notes **id** | str, uuid.UUID, | str, | The arn of the device | value must be a uuid **label** | str, | str, | The label of the device | **type** | str, | str, | The type of the device | -**connection_type** | str, | str, | The type of the connections selected by the user when multiple connections are available | [optional] must be one of ["wifi", "eth", "wifiandsecret", "gsm", "nb", "lora", ] +**connection_type** | str, | str, | The type of the connections selected by the user when multiple connections are available | [optional] must be one of ["wifi", "eth", "wifiandsecret", "gsm", "nb", "lora", "catm1", "cellular", ] **created_at** | str, datetime, | str, | Creation date of the device | [optional] value must conform to RFC-3339 date-time **device_status** | str, | str, | The connection status of the device | [optional] must be one of ["ONLINE", "OFFLINE", "UNKNOWN", ] **events** | [**ArduinoDevicev2SimplePropertiesCollection**](ArduinoDevicev2SimplePropertiesCollection.md) | [**ArduinoDevicev2SimplePropertiesCollection**](ArduinoDevicev2SimplePropertiesCollection.md) | | [optional] diff --git a/docs/models/ArduinoDevicev2templatedevice.md b/docs/models/ArduinoDevicev2templatedevice.md new file mode 100644 index 0000000..fa56021 --- /dev/null +++ b/docs/models/ArduinoDevicev2templatedevice.md @@ -0,0 +1,18 @@ +# iot_api_client.model.arduino_devicev2templatedevice.ArduinoDevicev2templatedevice + +ArduinoDevicev2templatedevice media type (default view) + +## Model Type Info +Input Type | Accessed Type | Description | Notes +------------ | ------------- | ------------- | ------------- +dict, frozendict.frozendict, | frozendict.frozendict, | ArduinoDevicev2templatedevice media type (default view) | + +### Dictionary Keys +Key | Input Type | Accessed Type | Description | Notes +------------ | ------------- | ------------- | ------------- | ------------- +**fqbn** | str, | str, | The device fqbn | [optional] +**name** | str, | str, | The device type name | [optional] +**any_string_name** | dict, frozendict.frozendict, str, date, datetime, int, float, bool, decimal.Decimal, None, list, tuple, bytes, io.FileIO, io.BufferedReader | frozendict.frozendict, str, BoolClass, decimal.Decimal, NoneClass, tuple, bytes, FileIO | any string name can be used but the value must be the correct type | [optional] + +[[Back to Model list]](../../README.md#documentation-for-models) [[Back to API list]](../../README.md#documentation-for-api-endpoints) [[Back to README]](../../README.md) + diff --git a/docs/models/ArduinoSeriesBatchSampled.md b/docs/models/ArduinoSeriesBatchSampled.md new file mode 100644 index 0000000..1fccd5b --- /dev/null +++ b/docs/models/ArduinoSeriesBatchSampled.md @@ -0,0 +1,32 @@ +# iot_api_client.model.arduino_series_batch_sampled.ArduinoSeriesBatchSampled + +ArduinoSeriesBatchSampled media type (default view) + +## Model Type Info +Input Type | Accessed Type | Description | Notes +------------ | ------------- | ------------- | ------------- +dict, frozendict.frozendict, | frozendict.frozendict, | ArduinoSeriesBatchSampled media type (default view) | + +### Dictionary Keys +Key | Input Type | Accessed Type | Description | Notes +------------ | ------------- | ------------- | ------------- | ------------- +**resp_version** | decimal.Decimal, int, | decimal.Decimal, | Response version | value must be a 64 bit integer +**[responses](#responses)** | list, tuple, | tuple, | Responses of the request | +**any_string_name** | dict, frozendict.frozendict, str, date, datetime, int, float, bool, decimal.Decimal, None, list, tuple, bytes, io.FileIO, io.BufferedReader | frozendict.frozendict, str, BoolClass, decimal.Decimal, NoneClass, tuple, bytes, FileIO | any string name can be used but the value must be the correct type | [optional] + +# responses + +Responses of the request + +## Model Type Info +Input Type | Accessed Type | Description | Notes +------------ | ------------- | ------------- | ------------- +list, tuple, | tuple, | Responses of the request | + +### Tuple Items +Class Name | Input Type | Accessed Type | Description | Notes +------------- | ------------- | ------------- | ------------- | ------------- +[**ArduinoSeriesSampledResponse**](ArduinoSeriesSampledResponse.md) | [**ArduinoSeriesSampledResponse**](ArduinoSeriesSampledResponse.md) | [**ArduinoSeriesSampledResponse**](ArduinoSeriesSampledResponse.md) | | + +[[Back to Model list]](../../README.md#documentation-for-models) [[Back to API list]](../../README.md#documentation-for-api-endpoints) [[Back to README]](../../README.md) + diff --git a/docs/models/ArduinoSeriesSampledResponse.md b/docs/models/ArduinoSeriesSampledResponse.md new file mode 100644 index 0000000..3354629 --- /dev/null +++ b/docs/models/ArduinoSeriesSampledResponse.md @@ -0,0 +1,55 @@ +# iot_api_client.model.arduino_series_sampled_response.ArduinoSeriesSampledResponse + +ArduinoSeriesSampledResponse media type (default view) + +## Model Type Info +Input Type | Accessed Type | Description | Notes +------------ | ------------- | ------------- | ------------- +dict, frozendict.frozendict, | frozendict.frozendict, | ArduinoSeriesSampledResponse media type (default view) | + +### Dictionary Keys +Key | Input Type | Accessed Type | Description | Notes +------------ | ------------- | ------------- | ------------- | ------------- +**count_values** | decimal.Decimal, int, | decimal.Decimal, | Total number of values in the array 'values' | value must be a 64 bit integer +**resp_version** | decimal.Decimal, int, | decimal.Decimal, | Response version | value must be a 64 bit integer +**[times](#times)** | list, tuple, | tuple, | Timestamp in RFC3339 | +**from_date** | str, datetime, | str, | From date | value must conform to RFC-3339 date-time +**to_date** | str, datetime, | str, | To date | value must conform to RFC-3339 date-time +**query** | str, | str, | Query of for the data | +**[values](#values)** | list, tuple, | tuple, | Values in Float | +**interval** | decimal.Decimal, int, | decimal.Decimal, | Resolution in seconds | value must be a 64 bit integer +**status** | str, | str, | Status of the response | +**message** | str, | str, | If the response is different than 'ok' | [optional] if omitted the server will use the default value of "" +**series_limit** | decimal.Decimal, int, | decimal.Decimal, | Maximum number of values returned after data aggregation, if any | [optional] value must be a 64 bit integer +**any_string_name** | dict, frozendict.frozendict, str, date, datetime, int, float, bool, decimal.Decimal, None, list, tuple, bytes, io.FileIO, io.BufferedReader | frozendict.frozendict, str, BoolClass, decimal.Decimal, NoneClass, tuple, bytes, FileIO | any string name can be used but the value must be the correct type | [optional] + +# times + +Timestamp in RFC3339 + +## Model Type Info +Input Type | Accessed Type | Description | Notes +------------ | ------------- | ------------- | ------------- +list, tuple, | tuple, | Timestamp in RFC3339 | + +### Tuple Items +Class Name | Input Type | Accessed Type | Description | Notes +------------- | ------------- | ------------- | ------------- | ------------- +items | str, datetime, | str, | | value must conform to RFC-3339 date-time + +# values + +Values in Float + +## Model Type Info +Input Type | Accessed Type | Description | Notes +------------ | ------------- | ------------- | ------------- +list, tuple, | tuple, | Values in Float | + +### Tuple Items +Class Name | Input Type | Accessed Type | Description | Notes +------------- | ------------- | ------------- | ------------- | ------------- +items | dict, frozendict.frozendict, str, date, datetime, uuid.UUID, int, float, decimal.Decimal, bool, None, list, tuple, bytes, io.FileIO, io.BufferedReader, | frozendict.frozendict, str, decimal.Decimal, BoolClass, NoneClass, tuple, bytes, FileIO | | + +[[Back to Model list]](../../README.md#documentation-for-models) [[Back to API list]](../../README.md#documentation-for-api-endpoints) [[Back to README]](../../README.md) + diff --git a/docs/models/ArduinoTemplate.md b/docs/models/ArduinoTemplate.md new file mode 100644 index 0000000..1f22212 --- /dev/null +++ b/docs/models/ArduinoTemplate.md @@ -0,0 +1,43 @@ +# iot_api_client.model.arduino_template.ArduinoTemplate + +ArduinoTemplate media type (default view) + +## Model Type Info +Input Type | Accessed Type | Description | Notes +------------ | ------------- | ------------- | ------------- +dict, frozendict.frozendict, | frozendict.frozendict, | ArduinoTemplate media type (default view) | + +### Dictionary Keys +Key | Input Type | Accessed Type | Description | Notes +------------ | ------------- | ------------- | ------------- | ------------- +**things** | [**ArduinoThingresultCollection**](ArduinoThingresultCollection.md) | [**ArduinoThingresultCollection**](ArduinoThingresultCollection.md) | | +**[dashboards](#dashboards)** | list, tuple, | tuple, | | [optional] +**[triggers](#triggers)** | list, tuple, | tuple, | | [optional] +**any_string_name** | dict, frozendict.frozendict, str, date, datetime, int, float, bool, decimal.Decimal, None, list, tuple, bytes, io.FileIO, io.BufferedReader | frozendict.frozendict, str, BoolClass, decimal.Decimal, NoneClass, tuple, bytes, FileIO | any string name can be used but the value must be the correct type | [optional] + +# dashboards + +## Model Type Info +Input Type | Accessed Type | Description | Notes +------------ | ------------- | ------------- | ------------- +list, tuple, | tuple, | | + +### Tuple Items +Class Name | Input Type | Accessed Type | Description | Notes +------------- | ------------- | ------------- | ------------- | ------------- +items | str, uuid.UUID, | str, | | value must be a uuid + +# triggers + +## Model Type Info +Input Type | Accessed Type | Description | Notes +------------ | ------------- | ------------- | ------------- +list, tuple, | tuple, | | + +### Tuple Items +Class Name | Input Type | Accessed Type | Description | Notes +------------- | ------------- | ------------- | ------------- | ------------- +items | str, uuid.UUID, | str, | | value must be a uuid + +[[Back to Model list]](../../README.md#documentation-for-models) [[Back to API list]](../../README.md#documentation-for-api-endpoints) [[Back to README]](../../README.md) + diff --git a/docs/models/ArduinoTemplateproperty.md b/docs/models/ArduinoTemplateproperty.md index 86c42cc..d4ba36c 100644 --- a/docs/models/ArduinoTemplateproperty.md +++ b/docs/models/ArduinoTemplateproperty.md @@ -14,6 +14,7 @@ Key | Input Type | Accessed Type | Description | Notes **name** | str, | str, | The friendly name of the property | **permission** | str, | str, | The permission of the property | **type** | str, | str, | The type of the property | +**id** | str, | str, | The friendly id of the property | [optional] **update_parameter** | decimal.Decimal, int, float, | decimal.Decimal, | The update frequency in seconds, or the amount of the property has to change in order to trigger an update | [optional] value must be a 64 bit float **variable_name** | str, | str, | The sketch variable name of the property | [optional] **any_string_name** | dict, frozendict.frozendict, str, date, datetime, int, float, bool, decimal.Decimal, None, list, tuple, bytes, io.FileIO, io.BufferedReader | frozendict.frozendict, str, BoolClass, decimal.Decimal, NoneClass, tuple, bytes, FileIO | any string name can be used but the value must be the correct type | [optional] diff --git a/docs/models/ArduinoThing.md b/docs/models/ArduinoThing.md index fc6fc11..e539c02 100644 --- a/docs/models/ArduinoThing.md +++ b/docs/models/ArduinoThing.md @@ -15,6 +15,7 @@ Key | Input Type | Accessed Type | Description | Notes **name** | str, | str, | The friendly name of the thing | **href** | str, | str, | The api reference of this thing | **id** | str, uuid.UUID, | str, | The id of the thing | value must be a uuid +**assistant** | str, | str, | The kind of voice assistant the thing is connected to, it can be ALEXA | GOOGLE | NONE | [optional] must be one of ["ALEXA", "GOOGLE", "NONE", ] **created_at** | str, datetime, | str, | Creation date of the thing | [optional] value must conform to RFC-3339 date-time **deleted_at** | str, datetime, | str, | Delete date of the thing | [optional] value must conform to RFC-3339 date-time **device_fqbn** | str, | str, | The fqbn of the attached device, if any | [optional] diff --git a/docs/models/ArduinoThingresult.md b/docs/models/ArduinoThingresult.md new file mode 100644 index 0000000..d3c0150 --- /dev/null +++ b/docs/models/ArduinoThingresult.md @@ -0,0 +1,19 @@ +# iot_api_client.model.arduino_thingresult.ArduinoThingresult + +ArduinoThingresult media type (default view) + +## Model Type Info +Input Type | Accessed Type | Description | Notes +------------ | ------------- | ------------- | ------------- +dict, frozendict.frozendict, | frozendict.frozendict, | ArduinoThingresult media type (default view) | + +### Dictionary Keys +Key | Input Type | Accessed Type | Description | Notes +------------ | ------------- | ------------- | ------------- | ------------- +**sketch_id** | str, uuid.UUID, | str, | UUID of the created Sketch | value must be a uuid +**id** | str, uuid.UUID, | str, | UUID of the created Thing | value must be a uuid +**device_id** | str, uuid.UUID, | str, | UUID of the attached device | [optional] value must be a uuid +**any_string_name** | dict, frozendict.frozendict, str, date, datetime, int, float, bool, decimal.Decimal, None, list, tuple, bytes, io.FileIO, io.BufferedReader | frozendict.frozendict, str, BoolClass, decimal.Decimal, NoneClass, tuple, bytes, FileIO | any string name can be used but the value must be the correct type | [optional] + +[[Back to Model list]](../../README.md#documentation-for-models) [[Back to API list]](../../README.md#documentation-for-api-endpoints) [[Back to README]](../../README.md) + diff --git a/docs/models/ArduinoThingresultCollection.md b/docs/models/ArduinoThingresultCollection.md new file mode 100644 index 0000000..bdeedc9 --- /dev/null +++ b/docs/models/ArduinoThingresultCollection.md @@ -0,0 +1,16 @@ +# iot_api_client.model.arduino_thingresult_collection.ArduinoThingresultCollection + +ArduinoThingresultCollection is the media type for an array of ArduinoThingresult (default view) + +## Model Type Info +Input Type | Accessed Type | Description | Notes +------------ | ------------- | ------------- | ------------- +list, tuple, | tuple, | ArduinoThingresultCollection is the media type for an array of ArduinoThingresult (default view) | + +### Tuple Items +Class Name | Input Type | Accessed Type | Description | Notes +------------- | ------------- | ------------- | ------------- | ------------- +[**ArduinoThingresult**](ArduinoThingresult.md) | [**ArduinoThingresult**](ArduinoThingresult.md) | [**ArduinoThingresult**](ArduinoThingresult.md) | | + +[[Back to Model list]](../../README.md#documentation-for-models) [[Back to API list]](../../README.md#documentation-for-api-endpoints) [[Back to README]](../../README.md) + diff --git a/docs/models/ArduinoThingtemplate.md b/docs/models/ArduinoThingtemplate.md index dbc5183..c49daa6 100644 --- a/docs/models/ArduinoThingtemplate.md +++ b/docs/models/ArduinoThingtemplate.md @@ -12,9 +12,12 @@ Key | Input Type | Accessed Type | Description | Notes ------------ | ------------- | ------------- | ------------- | ------------- **timezone** | str, | str, | Time zone of the thing | **name** | str, | str, | The friendly name of the thing | +**device_metadata** | [**ArduinoDevicev2templatedevice**](ArduinoDevicev2templatedevice.md) | [**ArduinoDevicev2templatedevice**](ArduinoDevicev2templatedevice.md) | | [optional] +**id** | str, | str, | The friendly id of the thing | [optional] **organization_id** | str, uuid.UUID, | str, | Id of the organization the thing belongs to | [optional] value must be a uuid -**properties** | [**ArduinoTemplatepropertyCollection**](ArduinoTemplatepropertyCollection.md) | [**ArduinoTemplatepropertyCollection**](ArduinoTemplatepropertyCollection.md) | | [optional] +**sketch_template** | str, | str, | The ID of the template's sketch | [optional] **[tags](#tags)** | list, tuple, | tuple, | Tags of the thing | [optional] +**variables** | [**ArduinoTemplatepropertyCollection**](ArduinoTemplatepropertyCollection.md) | [**ArduinoTemplatepropertyCollection**](ArduinoTemplatepropertyCollection.md) | | [optional] **webhook_uri** | str, | str, | Webhook uri | [optional] **any_string_name** | dict, frozendict.frozendict, str, date, datetime, int, float, bool, decimal.Decimal, None, list, tuple, bytes, io.FileIO, io.BufferedReader | frozendict.frozendict, str, BoolClass, decimal.Decimal, NoneClass, tuple, bytes, FileIO | any string name can be used but the value must be the correct type | [optional] diff --git a/docs/models/ArduinoWidgetv2.md b/docs/models/ArduinoWidgetv2.md index 97af3fd..98215d2 100644 --- a/docs/models/ArduinoWidgetv2.md +++ b/docs/models/ArduinoWidgetv2.md @@ -15,7 +15,7 @@ Key | Input Type | Accessed Type | Description | Notes **x** | decimal.Decimal, int, | decimal.Decimal, | Widget x position for desktop | value must be a 64 bit integer **y** | decimal.Decimal, int, | decimal.Decimal, | Widget y position for desktop | value must be a 64 bit integer **id** | str, uuid.UUID, | str, | The UUID of the widget, set by client | value must be a uuid -**type** | str, | str, | The type of the widget | must be one of ["slider, gauge", ] +**type** | str, | str, | The type of the widget | **height** | decimal.Decimal, int, | decimal.Decimal, | Widget current height for desktop | value must be a 64 bit integer **has_permission_incompatibility** | bool, | BoolClass, | True if the linked variables permissions are incompatible with the widget | [optional] **has_type_incompatibility** | bool, | BoolClass, | True if the linked variables types are incompatible with the widget | [optional] diff --git a/docs/models/BatchQuerySampledRequestMediaV1.md b/docs/models/BatchQuerySampledRequestMediaV1.md new file mode 100644 index 0000000..d3f68bf --- /dev/null +++ b/docs/models/BatchQuerySampledRequestMediaV1.md @@ -0,0 +1,19 @@ +# iot_api_client.model.batch_query_sampled_request_media_v1.BatchQuerySampledRequestMediaV1 + +## Model Type Info +Input Type | Accessed Type | Description | Notes +------------ | ------------- | ------------- | ------------- +dict, frozendict.frozendict, | frozendict.frozendict, | | + +### Dictionary Keys +Key | Input Type | Accessed Type | Description | Notes +------------ | ------------- | ------------- | ------------- | ------------- +**q** | str, | str, | Data selection query (e.g. property.2a99729d-2556-4220-a139-023348a1e6b5) | +**from** | str, datetime, | str, | From timestamp (default: now UTC - 24h) | [optional] value must conform to RFC-3339 date-time +**interval** | decimal.Decimal, int, | decimal.Decimal, | Resolution in seconds (allowed min:60, max:86400) | [optional] if omitted the server will use the default value of 300 +**series_limit** | decimal.Decimal, int, | decimal.Decimal, | Maximum number of values returned after data aggregation, if any (default: 300, limit: 1000) | [optional] value must be a 64 bit integer +**to** | str, datetime, | str, | To timestamp (default: now UTC) | [optional] value must conform to RFC-3339 date-time +**any_string_name** | dict, frozendict.frozendict, str, date, datetime, int, float, bool, decimal.Decimal, None, list, tuple, bytes, io.FileIO, io.BufferedReader | frozendict.frozendict, str, BoolClass, decimal.Decimal, NoneClass, tuple, bytes, FileIO | any string name can be used but the value must be the correct type | [optional] + +[[Back to Model list]](../../README.md#documentation-for-models) [[Back to API list]](../../README.md#documentation-for-api-endpoints) [[Back to README]](../../README.md) + diff --git a/docs/models/BatchQuerySampledRequestsMediaV1.md b/docs/models/BatchQuerySampledRequestsMediaV1.md new file mode 100644 index 0000000..4b40b1a --- /dev/null +++ b/docs/models/BatchQuerySampledRequestsMediaV1.md @@ -0,0 +1,30 @@ +# iot_api_client.model.batch_query_sampled_requests_media_v1.BatchQuerySampledRequestsMediaV1 + +## Model Type Info +Input Type | Accessed Type | Description | Notes +------------ | ------------- | ------------- | ------------- +dict, frozendict.frozendict, | frozendict.frozendict, | | + +### Dictionary Keys +Key | Input Type | Accessed Type | Description | Notes +------------ | ------------- | ------------- | ------------- | ------------- +**resp_version** | decimal.Decimal, int, | decimal.Decimal, | Response version | value must be a 64 bit integer +**[requests](#requests)** | list, tuple, | tuple, | Requests | +**any_string_name** | dict, frozendict.frozendict, str, date, datetime, int, float, bool, decimal.Decimal, None, list, tuple, bytes, io.FileIO, io.BufferedReader | frozendict.frozendict, str, BoolClass, decimal.Decimal, NoneClass, tuple, bytes, FileIO | any string name can be used but the value must be the correct type | [optional] + +# requests + +Requests + +## Model Type Info +Input Type | Accessed Type | Description | Notes +------------ | ------------- | ------------- | ------------- +list, tuple, | tuple, | Requests | + +### Tuple Items +Class Name | Input Type | Accessed Type | Description | Notes +------------- | ------------- | ------------- | ------------- | ------------- +[**BatchQuerySampledRequestMediaV1**](BatchQuerySampledRequestMediaV1.md) | [**BatchQuerySampledRequestMediaV1**](BatchQuerySampledRequestMediaV1.md) | [**BatchQuerySampledRequestMediaV1**](BatchQuerySampledRequestMediaV1.md) | | + +[[Back to Model list]](../../README.md#documentation-for-models) [[Back to API list]](../../README.md#documentation-for-api-endpoints) [[Back to README]](../../README.md) + diff --git a/docs/models/CreateDevicesV2Payload.md b/docs/models/CreateDevicesV2Payload.md index 12013df..278fd4c 100644 --- a/docs/models/CreateDevicesV2Payload.md +++ b/docs/models/CreateDevicesV2Payload.md @@ -11,7 +11,7 @@ dict, frozendict.frozendict, | frozendict.frozendict, | DeviceV2 describes a d Key | Input Type | Accessed Type | Description | Notes ------------ | ------------- | ------------- | ------------- | ------------- **type** | str, | str, | The type of the device | must be one of ["mkrwifi1010", "mkr1000", "nano_33_iot", "mkrgsm1400", "mkrwan1310", "mkrwan1300", "mkrnb1500", "lora-device", "login_and_secretkey_wifi", "envie_m7", "nanorp2040connect", "nicla_vision", "phone", "portenta_x8", "opta", "giga", "generic_device_secretkey", "portenta_c33", "unor4wifi", "nano_nora", ] -**connection_type** | str, | str, | The type of the connections selected by the user when multiple connections are available | [optional] must be one of ["wifi", "eth", "wifiandsecret", "gsm", "nb", "lora", ] +**connection_type** | str, | str, | The type of the connections selected by the user when multiple connections are available | [optional] must be one of ["wifi", "eth", "wifiandsecret", "gsm", "nb", "lora", "catm1", "cellular", ] **fqbn** | str, | str, | The fully qualified board name | [optional] **name** | str, | str, | The friendly name of the device | [optional] **serial** | str, | str, | The serial uuid of the device | [optional] diff --git a/docs/models/Dashboardv2.md b/docs/models/Dashboardv2.md index 22232d5..80ff0b4 100644 --- a/docs/models/Dashboardv2.md +++ b/docs/models/Dashboardv2.md @@ -10,6 +10,7 @@ dict, frozendict.frozendict, | frozendict.frozendict, | DashboardV2Payload des ### Dictionary Keys Key | Input Type | Accessed Type | Description | Notes ------------ | ------------- | ------------- | ------------- | ------------- +**cover_image** | str, | str, | The cover image of the dashboard | [optional] **name** | str, | str, | The friendly name of the dashboard | [optional] **[widgets](#widgets)** | list, tuple, | tuple, | Widgets attached to this dashboard | [optional] **any_string_name** | dict, frozendict.frozendict, str, date, datetime, int, float, bool, decimal.Decimal, None, list, tuple, bytes, io.FileIO, io.BufferedReader | frozendict.frozendict, str, BoolClass, decimal.Decimal, NoneClass, tuple, bytes, FileIO | any string name can be used but the value must be the correct type | [optional] diff --git a/docs/models/Devicev2.md b/docs/models/Devicev2.md index 57bd9cc..779e5d0 100644 --- a/docs/models/Devicev2.md +++ b/docs/models/Devicev2.md @@ -10,7 +10,7 @@ dict, frozendict.frozendict, | frozendict.frozendict, | DeviceV2 describes a d ### Dictionary Keys Key | Input Type | Accessed Type | Description | Notes ------------ | ------------- | ------------- | ------------- | ------------- -**connection_type** | str, | str, | The type of the connections selected by the user when multiple connections are available | [optional] must be one of ["wifi", "eth", "wifiandsecret", "gsm", "nb", "lora", ] +**connection_type** | str, | str, | The type of the connections selected by the user when multiple connections are available | [optional] must be one of ["wifi", "eth", "wifiandsecret", "gsm", "nb", "lora", "catm1", "cellular", ] **fqbn** | str, | str, | The fully qualified board name | [optional] **name** | str, | str, | The friendly name of the device | [optional] **serial** | str, | str, | The serial uuid of the device | [optional] diff --git a/docs/models/Template.md b/docs/models/Template.md new file mode 100644 index 0000000..2d10b24 --- /dev/null +++ b/docs/models/Template.md @@ -0,0 +1,32 @@ +# iot_api_client.model.template.Template + +TemplatePayload describes the needed attribute to apply a template + +## Model Type Info +Input Type | Accessed Type | Description | Notes +------------ | ------------- | ------------- | ------------- +dict, frozendict.frozendict, | frozendict.frozendict, | TemplatePayload describes the needed attribute to apply a template | + +### Dictionary Keys +Key | Input Type | Accessed Type | Description | Notes +------------ | ------------- | ------------- | ------------- | ------------- +**template_name** | str, | str, | The name of the directory on S3 bucket containing the template | +**custom_template_id** | str, | str, | The name of the directory on S3 bucket containing the user's template | [optional] +**prefix_name** | str, | str, | The prefix to apply to the names of the generated resources | [optional] +**[things_options](#things_options)** | dict, frozendict.frozendict, | frozendict.frozendict, | | [optional] +**any_string_name** | dict, frozendict.frozendict, str, date, datetime, int, float, bool, decimal.Decimal, None, list, tuple, bytes, io.FileIO, io.BufferedReader | frozendict.frozendict, str, BoolClass, decimal.Decimal, NoneClass, tuple, bytes, FileIO | any string name can be used but the value must be the correct type | [optional] + +# things_options + +## Model Type Info +Input Type | Accessed Type | Description | Notes +------------ | ------------- | ------------- | ------------- +dict, frozendict.frozendict, | frozendict.frozendict, | | + +### Dictionary Keys +Key | Input Type | Accessed Type | Description | Notes +------------ | ------------- | ------------- | ------------- | ------------- +**any_string_name** | dict, frozendict.frozendict, str, date, datetime, uuid.UUID, int, float, decimal.Decimal, bool, None, list, tuple, bytes, io.FileIO, io.BufferedReader, | frozendict.frozendict, str, decimal.Decimal, BoolClass, NoneClass, tuple, bytes, FileIO | any string name can be used but the value must be the correct type | [optional] + +[[Back to Model list]](../../README.md#documentation-for-models) [[Back to API list]](../../README.md#documentation-for-api-endpoints) [[Back to README]](../../README.md) + diff --git a/docs/models/ThingCreate.md b/docs/models/ThingCreate.md index 1ab6030..1e054ad 100644 --- a/docs/models/ThingCreate.md +++ b/docs/models/ThingCreate.md @@ -10,6 +10,7 @@ dict, frozendict.frozendict, | frozendict.frozendict, | Payload to create a ne ### Dictionary Keys Key | Input Type | Accessed Type | Description | Notes ------------ | ------------- | ------------- | ------------- | ------------- +**assistant** | str, | str, | The kind of voice assistant the thing is connected to, it can be ALEXA | GOOGLE | NONE | [optional] must be one of ["ALEXA", "GOOGLE", "NONE", ] **device_id** | str, uuid.UUID, | str, | The arn of the associated device | [optional] value must be a uuid **id** | str, uuid.UUID, | str, | The id of the thing | [optional] value must be a uuid **name** | str, | str, | The friendly name of the thing | [optional] diff --git a/docs/models/ThingUpdate.md b/docs/models/ThingUpdate.md index 85a2127..a258fcc 100644 --- a/docs/models/ThingUpdate.md +++ b/docs/models/ThingUpdate.md @@ -10,6 +10,7 @@ dict, frozendict.frozendict, | frozendict.frozendict, | Payload to update an e ### Dictionary Keys Key | Input Type | Accessed Type | Description | Notes ------------ | ------------- | ------------- | ------------- | ------------- +**assistant** | str, | str, | The kind of voice assistant the thing is connected to, it can be ALEXA | GOOGLE | NONE | [optional] must be one of ["ALEXA", "GOOGLE", "NONE", ] **device_id** | str, uuid.UUID, | str, | The arn of the associated device | [optional] value must be a uuid **id** | str, uuid.UUID, | str, | The id of the thing | [optional] value must be a uuid **name** | str, | str, | The friendly name of the thing | [optional] diff --git a/img/selection_1.png b/img/selection_1.png new file mode 100644 index 0000000000000000000000000000000000000000..edf2e80f41a0ac3f6bc0f009e70370eb9fc22eb5 GIT binary patch literal 93617 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%0D|3#rb}j$lx%+s5SW+2PZO+sVE0T1$tL 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�OdB8e|k-?62E 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

u&+PgH!by}du;4BPUp5=bd>AwZjHh#68 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 THT7G>?_03ihFVoWR@@2{mjMR1L1*v*26xvx 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Ͱwrt3@@9QIP~T9iaYV5b+F|+CI+)3yX`AVbaizr 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�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⁡Pk3a=P~1b)USvTVr7AX^w~0{ft&XM{P(q-68;> zxGWbE;1s$Jl|{N^*;_iE`O-9IPUqiK^f%n(0L2It@4zrg2E;J)v#Tyv8(*EexyQkp z=p*vSKMkygeY;pjmg8Y6v_Y0kajX6hdBO~vLx$wdwiVr?uQT*8MSNbEFTDvuCRdUo zE~3Hd8Qq_17VT;X09YdY(gCF*&}k~fo^=!w8LrCWC2qFbhxP|Q+~m!BpLf(Y1_6t^ zIq`)JGfn_+pH3CN2ZBekFVZe*n#<{gB>fG$tdxGV;uR3;Z8;l`kK-O#xMA(}RZV?!DJ^aJk8DQeC#U_cCZtvy}!#FVSgAP9P;J*g|$QD(i_JRrHK!DHA%^s-BTQhruF?L}$CWAZ%n>L?@iR_0KrqZ5QY$2j9 zoimiCBmhF-TVW;#!ScN-R}bwx@8r>2e;rn#j}BEwHT*n#rszh-D{q{Ri|y5f7X0iX z7ghuzPzlO<|By#4M5yR+@y@n{bNoV(X<U@$>|IvXs^j53JfVn~xa4vmHl=hSETrpIsk3$fB?{nQ165G+WfAzZo3~>x*Xz-x zeY+}M-ofYWs^b4f2@waj2ry>A1Y2;-beu=Ue}fo3+zGma0jNctUoA_XO0E`*jO;)U zA7RV+&Z{>+*mPs77fbt@|JgvUqCDBrmMi%H)iSu)z9j=X-QfI&oIbBf> z83W;9f;kaZ?sJqSlL3|_X_x0-=W^K7XSO^BNRFShsnZ9t>r`_Jd}Z1-mpQ0d+*5#V z8&jS-1Ef^;aCXFR+0|O+=<+H9Du$WIvutJd6GYKvR;OjO50&6gKGM?Qb%kI&j8mc` z!9NC$udpA4gSpYGq^IisF<#mX`96D!^7z&@PjZ&hh6;W@=h0+yHuNbr*JGv@ve+Ru z;hkeI@1vE~G6#~27$C?K2Y~=lX$b~8jZJiO=O~DmPR#_9KCHeH^_7?8BA21W6$h1X zizea~Lrt5r|FOnM^ZEO;e28W5g^vV<26Qts{*cf9j;UX?W)>2^=;k_cSrV{~+4u&t zUkQ0K<4@iF4d5W^DUE#o_?oRY3Q%;hBDv`3HC#)8Cz+=`Cu*6hbsvl&la|EJf1vK= zaFZ95GN6#l4F}Ptfm7>P{PJ>Y3N6@*a+#9mh+_1{9em|-+~U-m!t~HjzeF+Yat}E< z(6zE&RoWDkGFJbJ`kR#KS@ixiHHue(muP~DloKABq~5I=g9J}{P37V4d)g|aijUAL zP?b#mb$MG`4rYR-#;< z&npJ_h*tGE&1+0`P^=vktH0-;dAEBG=v9-*ST4ZkJ~bjlXy! z1AqlwZ6oX9CR6E&?^Zw4Z`NxRiwIPP7H89WyXAoyRUoR03!rVzsIW{EL!TvEo;r(h z@4|hVNAagXjm7rS5sNq7{-+oK8nZo|$u2%S$nSUyPFLsyrwuZp(blqq-tszzJHOea4Q}DNONhPzWHvtv3U^SM8Rw zN~7YyDAFF%F^QzO+*7U6ifjo)vAuG;Z*GezQFG@XM2;T>uIvh{v6+}yXmVupRG9i~ zdALWsX~3Vr&nii@Uw;>e2|M&!hce0OQ#34}%x<>4Eg5FjA+vbTm|HfMVXH}?NAU2~ ze7@wUNdKiezshVqh{IOUnS|SB9K?hU!Y3kYE`ZAVRnn=8OzVgwTy6}<7!)ZlWsYC8WlY}S3v%n z1~Eqby77CrC)lrG^Oz1H=0(po^)Rg}a=BD(5-Q_9UPE8c4b$rn4^8^I2T~n;ig(!u z1<7U%`i8LI7oUB5YKASoj8n+dE&=@;!gm&Pk-K#tn(O&~y+=Vw9{mv3=hB1d-XVLf zAUg%c2jF2U>q!sI`rQi893?wxQiU=xg)tk97LvuT`VneXxwwuG+8snB4~Z96%J0T+ z2cgd&&*&k%clE`Aj?k8DH!?Sba`;y?^&r#od%SIJ{6Uu7$z<@rzDvNaCqhuZS9M&; zL;7z1lod7#61Fle3C`!{hpY)~0-y;3J5m~;leMj#K_1jjhhzJ-SYj0uYXeYTSz5J- zflUvf!>rt!(OruPf6s;g_A&6j5h-m7R_r@viV`n6hKOth#AI&2_s1lM$r*xpBFYTU ziXzq2De?F6C^L>w0D)tx?C7F`K9z-t*F^yF7EPi8Rrau`#um+#=ECrf^Dnc8Q{F- z_Q+!w9^5zh!|KEW9l{6_>-W$OVG+Qj6GzPw=1JsN4!ud;J1}^m$Ern>R+W`iG#T=y zo~{_7JYW(f59_IN{M1x{3fDm|OlK)z#x5M=m=cTSRB|zuKG9cl2J1h zkbr~-N!H@kTU9I)iVGv}p;!Kt5$X)FZFh*Lq_dF8ywb9Yeit2PJ*D?Fwz zR=3?Bp(r3lqQHY3-{I*puVywBE?xxOO+!_ogu$I@(6bx3TIKRKqjQLczL2zgGv2 zweKN(jvUk^S#uJ}O6I1Zb8ob^dXhI{UbO3}pnXsGOH3(L+9hG-cZ-Nvu^E1a1HR)J zU0%^tUcvfJ0V#u4EV*y>!W8}6MnrD%!{yz{gWlz5B=mkt+(<5_()k9_aHjPvmXgYZ zRisp7HV(ay<8xM4y#f@zApj=@U`BuU{C4Y_8F=rWiM=s)RAny@+c*cd)#BK2eXIY; zD<&pp)9Zncj)L*V;qVO8@VppqKu9!qlj8xDU*=R;USWJ}Aitg;a%bc1i2&GL{)F{} z!+yp4Ly|^}wSyG;KO?LGo1QW4VX9^7wY8l=y1Wjez(-@cJy6-u1q*2$-8~OuJeL52 zotwWB11#U#1WxmY<>yTg^l^g&h_-M9hm0-m<$d`k7?a<~e&+Dte}Iz?hCNQi2IhW> z7=+QrcYBud}C~f>j zj{WXY0j<^6HN}c$RUNqyM;Bum`Z^IX+SmYRj6+?oLXvZrxaNBEs{(#_R|--f zD=I6Bl}?#{b|(l_A&g?`H{*cBhi=*~S|1GoB&N2$8B;rz{evaE|C-eUu*reI3}{#e zQgfxtD^3*6-hUZ}aSM?3?6n}V&(-ka{l zYoxAj1HYD`L#KyX4ZHp6-3+zV)oPZ^L^C3Qeu;r_=WKa=Zq}eBQ-upxCpX7_aerwX zARHj^B9>$}7mh?FhtsHIw|Fs8y&9h{raK$y#u{An4YSg`UTe%Okw9u(GF7eF6UJAE zxf(-@eM-3kJ88=JF+aVXLhh;OW!GOVHbE_M#y||ij@wre6!u+V)^I&{ty^Lw_(l{_f;iO)>A-95?o)qf7NP35tNd8 z_Et!ghF{iU7?R2=WsXT78V)C_2Ff>w5i0Ec!EhBuS7yz8mLh#T@{$6~Q+_U2D4?^B}5Sz0FNm6Hg@-c3vmM-AoJA)DmvQu@9ZCNfU`WDjBnb!X6Kp8+Dk0x(}fn zKaj9iY78+Kn5olk+(i9b=tiO1O3D*O-lvy#u)b}pWbBV_IlVrJeFWHCf;?&IQ0_%7SV55kmW*QJ5R3 z^-()1$1}8=Aki;3@kaM?EK-AP=v>4YK%R!M5o3JxKerD_z=A>KmsMu>;xx-fo&Q9{ ziXb7>w&#QgLJET0Tl^`j4zn~}RU#I5QS=+pthCh-}o_2rd8Pz4^ZEsqXE%wPG2ymqDnDuiB2uNj0G zBKxwU$lX=LmcJuHNyDwl5KNl`r%1-0yy-!SZpT#XCfMEL#tsg!cv5}N454S;!s%SZ z<&^(iMf_J=;r4skG0@KyLGI(1g%KDvL0AOiKPeR?U?ymAK6Pvnhu2pZmZ zR{F|gR|b~kM27JHxeED%Gs`$%T*0<)NG|+Ku5-paHv4`+b=^mR1CH$DzW={!AqYN} zmQ|*&cYe2>!!@2?&cLzFfmVPbSLVxu0WMIk374uVO%YRyG$sT*JNx|SzQ;*4;hdZj z`G1W9SkHNZegUX#1idq`2B1~qJ{SV zy=^=kSy5>mNy6TY)0=O?3oBx5S#}RO3T-hxl~tydJrt`7O5@fn|JXgyA3-7t>>#zz z_}_xwBo|A8xPR-=|Oy1iD*#;;&-v$l|L7P58m&D1q;2_dFHPvQ~zDnukF7> z7Li=Tzzz7(ZySj@e{ggy9&59(fBaWpTeeUB!u?}fv4vz$f1lQplTwnb7B>p|KPQCk A_W%F@ literal 0 HcmV?d00001 diff --git a/iot_api_client/__init__.py b/iot_api_client/__init__.py index f55c50c..ad180da 100644 --- a/iot_api_client/__init__.py +++ b/iot_api_client/__init__.py @@ -11,7 +11,7 @@ Generated by: https://openapi-generator.tech """ -__version__ = "2.0.2" +__version__ = "2.0.5" # import ApiClient from iot_api_client.api_client import ApiClient diff --git a/iot_api_client/apis/path_to_api.py b/iot_api_client/apis/path_to_api.py index 57ad34d..86b3dd8 100644 --- a/iot_api_client/apis/path_to_api.py +++ b/iot_api_client/apis/path_to_api.py @@ -3,6 +3,9 @@ from iot_api_client.paths import PathValues from iot_api_client.apis.paths.v1_lora_devices_ import V1LoraDevices from iot_api_client.apis.paths.v1_lora_freq_plans_ import V1LoraFreqPlans +from iot_api_client.apis.paths.v1_network_credentials_type import V1NetworkCredentialsType +from iot_api_client.apis.paths.v1_network_credentials_type_connections import V1NetworkCredentialsTypeConnections +from iot_api_client.apis.paths.v1_templates import V1Templates from iot_api_client.apis.paths.v2_dashboards import V2Dashboards from iot_api_client.apis.paths.v2_dashboards_id import V2DashboardsId from iot_api_client.apis.paths.v2_dashboards_id_clone import V2DashboardsIdClone @@ -27,6 +30,7 @@ from iot_api_client.apis.paths.v2_series_batch_query import V2SeriesBatchQuery from iot_api_client.apis.paths.v2_series_batch_query_raw import V2SeriesBatchQueryRaw from iot_api_client.apis.paths.v2_series_batch_query_raw_lastvalue import V2SeriesBatchQueryRawLastvalue +from iot_api_client.apis.paths.v2_series_batch_query_sampling import V2SeriesBatchQuerySampling from iot_api_client.apis.paths.v2_series_historic_data import V2SeriesHistoricData from iot_api_client.apis.paths.v2_things import V2Things from iot_api_client.apis.paths.v2_things_id import V2ThingsId @@ -46,6 +50,9 @@ { PathValues.V1_LORADEVICES_: V1LoraDevices, PathValues.V1_LORAFREQPLANS_: V1LoraFreqPlans, + PathValues.V1_NETWORK_CREDENTIALS_TYPE: V1NetworkCredentialsType, + PathValues.V1_NETWORK_CREDENTIALS_TYPE_CONNECTIONS: V1NetworkCredentialsTypeConnections, + PathValues.V1_TEMPLATES: V1Templates, PathValues.V2_DASHBOARDS: V2Dashboards, PathValues.V2_DASHBOARDS_ID: V2DashboardsId, PathValues.V2_DASHBOARDS_ID_CLONE: V2DashboardsIdClone, @@ -70,6 +77,7 @@ PathValues.V2_SERIES_BATCH_QUERY: V2SeriesBatchQuery, PathValues.V2_SERIES_BATCH_QUERY_RAW: V2SeriesBatchQueryRaw, PathValues.V2_SERIES_BATCH_QUERY_RAW_LASTVALUE: V2SeriesBatchQueryRawLastvalue, + PathValues.V2_SERIES_BATCH_QUERY_SAMPLING: V2SeriesBatchQuerySampling, PathValues.V2_SERIES_HISTORIC_DATA: V2SeriesHistoricData, PathValues.V2_THINGS: V2Things, PathValues.V2_THINGS_ID: V2ThingsId, @@ -90,6 +98,9 @@ { PathValues.V1_LORADEVICES_: V1LoraDevices, PathValues.V1_LORAFREQPLANS_: V1LoraFreqPlans, + PathValues.V1_NETWORK_CREDENTIALS_TYPE: V1NetworkCredentialsType, + PathValues.V1_NETWORK_CREDENTIALS_TYPE_CONNECTIONS: V1NetworkCredentialsTypeConnections, + PathValues.V1_TEMPLATES: V1Templates, PathValues.V2_DASHBOARDS: V2Dashboards, PathValues.V2_DASHBOARDS_ID: V2DashboardsId, PathValues.V2_DASHBOARDS_ID_CLONE: V2DashboardsIdClone, @@ -114,6 +125,7 @@ PathValues.V2_SERIES_BATCH_QUERY: V2SeriesBatchQuery, PathValues.V2_SERIES_BATCH_QUERY_RAW: V2SeriesBatchQueryRaw, PathValues.V2_SERIES_BATCH_QUERY_RAW_LASTVALUE: V2SeriesBatchQueryRawLastvalue, + PathValues.V2_SERIES_BATCH_QUERY_SAMPLING: V2SeriesBatchQuerySampling, PathValues.V2_SERIES_HISTORIC_DATA: V2SeriesHistoricData, PathValues.V2_THINGS: V2Things, PathValues.V2_THINGS_ID: V2ThingsId, diff --git a/iot_api_client/apis/paths/v1_network_credentials_type.py b/iot_api_client/apis/paths/v1_network_credentials_type.py new file mode 100644 index 0000000..ea26ca2 --- /dev/null +++ b/iot_api_client/apis/paths/v1_network_credentials_type.py @@ -0,0 +1,7 @@ +from iot_api_client.paths.v1_network_credentials_type.get import ApiForget + + +class V1NetworkCredentialsType( + ApiForget, +): + pass diff --git a/iot_api_client/apis/paths/v1_network_credentials_type_connections.py b/iot_api_client/apis/paths/v1_network_credentials_type_connections.py new file mode 100644 index 0000000..15f8fdb --- /dev/null +++ b/iot_api_client/apis/paths/v1_network_credentials_type_connections.py @@ -0,0 +1,7 @@ +from iot_api_client.paths.v1_network_credentials_type_connections.get import ApiForget + + +class V1NetworkCredentialsTypeConnections( + ApiForget, +): + pass diff --git a/iot_api_client/apis/paths/v1_templates.py b/iot_api_client/apis/paths/v1_templates.py new file mode 100644 index 0000000..faff6b0 --- /dev/null +++ b/iot_api_client/apis/paths/v1_templates.py @@ -0,0 +1,7 @@ +from iot_api_client.paths.v1_templates.put import ApiForput + + +class V1Templates( + ApiForput, +): + pass diff --git a/iot_api_client/apis/paths/v2_series_batch_query_sampling.py b/iot_api_client/apis/paths/v2_series_batch_query_sampling.py new file mode 100644 index 0000000..96888a9 --- /dev/null +++ b/iot_api_client/apis/paths/v2_series_batch_query_sampling.py @@ -0,0 +1,7 @@ +from iot_api_client.paths.v2_series_batch_query_sampling.post import ApiForpost + + +class V2SeriesBatchQuerySampling( + ApiForpost, +): + pass diff --git a/iot_api_client/apis/tag_to_api.py b/iot_api_client/apis/tag_to_api.py index e3e5e65..6cecb9d 100644 --- a/iot_api_client/apis/tag_to_api.py +++ b/iot_api_client/apis/tag_to_api.py @@ -9,8 +9,10 @@ from iot_api_client.apis.tags.devices_v2_tags_api import DevicesV2TagsApi from iot_api_client.apis.tags.lora_devices_v1_api import LoraDevicesV1Api from iot_api_client.apis.tags.lora_freq_plan_v1_api import LoraFreqPlanV1Api +from iot_api_client.apis.tags.network_credentials_v1_api import NetworkCredentialsV1Api from iot_api_client.apis.tags.properties_v2_api import PropertiesV2Api from iot_api_client.apis.tags.series_v2_api import SeriesV2Api +from iot_api_client.apis.tags.templates_api import TemplatesApi from iot_api_client.apis.tags.things_v2_api import ThingsV2Api from iot_api_client.apis.tags.things_v2_tags_api import ThingsV2TagsApi @@ -25,8 +27,10 @@ TagValues.DEVICES_V2_TAGS: DevicesV2TagsApi, TagValues.LORA_DEVICES_V1: LoraDevicesV1Api, TagValues.LORA_FREQ_PLAN_V1: LoraFreqPlanV1Api, + TagValues.NETWORK_CREDENTIALS_V1: NetworkCredentialsV1Api, TagValues.PROPERTIES_V2: PropertiesV2Api, TagValues.SERIES_V2: SeriesV2Api, + TagValues.TEMPLATES: TemplatesApi, TagValues.THINGS_V2: ThingsV2Api, TagValues.THINGS_V2_TAGS: ThingsV2TagsApi, } @@ -42,8 +46,10 @@ TagValues.DEVICES_V2_TAGS: DevicesV2TagsApi, TagValues.LORA_DEVICES_V1: LoraDevicesV1Api, TagValues.LORA_FREQ_PLAN_V1: LoraFreqPlanV1Api, + TagValues.NETWORK_CREDENTIALS_V1: NetworkCredentialsV1Api, TagValues.PROPERTIES_V2: PropertiesV2Api, TagValues.SERIES_V2: SeriesV2Api, + TagValues.TEMPLATES: TemplatesApi, TagValues.THINGS_V2: ThingsV2Api, TagValues.THINGS_V2_TAGS: ThingsV2TagsApi, } diff --git a/iot_api_client/apis/tags/__init__.py b/iot_api_client/apis/tags/__init__.py index 722fbba..c0aefa8 100644 --- a/iot_api_client/apis/tags/__init__.py +++ b/iot_api_client/apis/tags/__init__.py @@ -14,7 +14,9 @@ class TagValues(str, enum.Enum): DEVICES_V2_TAGS = "devices_v2_tags" LORA_DEVICES_V1 = "lora_devices_v1" LORA_FREQ_PLAN_V1 = "lora_freq_plan_v1" + NETWORK_CREDENTIALS_V1 = "network_credentials_v1" PROPERTIES_V2 = "properties_v2" SERIES_V2 = "series_v2" + TEMPLATES = "templates" THINGS_V2 = "things_v2" THINGS_V2_TAGS = "things_v2_tags" diff --git a/iot_api_client/apis/tags/network_credentials_v1_api.py b/iot_api_client/apis/tags/network_credentials_v1_api.py new file mode 100644 index 0000000..1625e6b --- /dev/null +++ b/iot_api_client/apis/tags/network_credentials_v1_api.py @@ -0,0 +1,25 @@ +# coding: utf-8 + +""" + Arduino IoT Cloud API + + Provides a set of endpoints to manage Arduino IoT Cloud **Devices**, **Things**, **Properties** and **Timeseries**. This API can be called just with any HTTP Client, or using one of these clients: * [Javascript NPM package](https://www.npmjs.com/package/@arduino/arduino-iot-client) * [Python PYPI Package](https://pypi.org/project/arduino-iot-client/) * [Golang Module](https://github.com/arduino/iot-client-go) # noqa: E501 + + The version of the OpenAPI document: 2.0 + Generated by: https://openapi-generator.tech +""" + +from iot_api_client.paths.v1_network_credentials_type.get import NetworkCredentialsV1Show +from iot_api_client.paths.v1_network_credentials_type_connections.get import NetworkCredentialsV1ShowByDevice + + +class NetworkCredentialsV1Api( + NetworkCredentialsV1Show, + NetworkCredentialsV1ShowByDevice, +): + """NOTE: This class is auto generated by OpenAPI Generator + Ref: https://openapi-generator.tech + + Do not edit the class manually. + """ + pass diff --git a/iot_api_client/apis/tags/series_v2_api.py b/iot_api_client/apis/tags/series_v2_api.py index d15ac8b..1d1ea6f 100644 --- a/iot_api_client/apis/tags/series_v2_api.py +++ b/iot_api_client/apis/tags/series_v2_api.py @@ -12,6 +12,7 @@ from iot_api_client.paths.v2_series_batch_query.post import SeriesV2BatchQuery from iot_api_client.paths.v2_series_batch_query_raw.post import SeriesV2BatchQueryRaw from iot_api_client.paths.v2_series_batch_query_raw_lastvalue.post import SeriesV2BatchQueryRawLastValue +from iot_api_client.paths.v2_series_batch_query_sampling.post import SeriesV2BatchQuerySampling from iot_api_client.paths.v2_series_historic_data.post import SeriesV2HistoricData @@ -19,6 +20,7 @@ class SeriesV2Api( SeriesV2BatchQuery, SeriesV2BatchQueryRaw, SeriesV2BatchQueryRawLastValue, + SeriesV2BatchQuerySampling, SeriesV2HistoricData, ): """NOTE: This class is auto generated by OpenAPI Generator diff --git a/iot_api_client/apis/tags/templates_api.py b/iot_api_client/apis/tags/templates_api.py new file mode 100644 index 0000000..6d18ea9 --- /dev/null +++ b/iot_api_client/apis/tags/templates_api.py @@ -0,0 +1,23 @@ +# coding: utf-8 + +""" + Arduino IoT Cloud API + + Provides a set of endpoints to manage Arduino IoT Cloud **Devices**, **Things**, **Properties** and **Timeseries**. This API can be called just with any HTTP Client, or using one of these clients: * [Javascript NPM package](https://www.npmjs.com/package/@arduino/arduino-iot-client) * [Python PYPI Package](https://pypi.org/project/arduino-iot-client/) * [Golang Module](https://github.com/arduino/iot-client-go) # noqa: E501 + + The version of the OpenAPI document: 2.0 + Generated by: https://openapi-generator.tech +""" + +from iot_api_client.paths.v1_templates.put import TemplatesApply + + +class TemplatesApi( + TemplatesApply, +): + """NOTE: This class is auto generated by OpenAPI Generator + Ref: https://openapi-generator.tech + + Do not edit the class manually. + """ + pass diff --git a/iot_api_client/configuration.py b/iot_api_client/configuration.py index cc21e40..5ba7317 100644 --- a/iot_api_client/configuration.py +++ b/iot_api_client/configuration.py @@ -368,7 +368,7 @@ def to_debug_report(self): "OS: {env}\n"\ "Python Version: {pyversion}\n"\ "Version of the API: 2.0\n"\ - "SDK Package Version: 2.0.2".\ + "SDK Package Version: 2.0.5".\ format(env=sys.platform, pyversion=sys.version) def get_host_settings(self): diff --git a/iot_api_client/model/arduino_credentialsv1.py b/iot_api_client/model/arduino_credentialsv1.py new file mode 100644 index 0000000..0294b6d --- /dev/null +++ b/iot_api_client/model/arduino_credentialsv1.py @@ -0,0 +1,121 @@ +# coding: utf-8 + +""" + Arduino IoT Cloud API + + Provides a set of endpoints to manage Arduino IoT Cloud **Devices**, **Things**, **Properties** and **Timeseries**. This API can be called just with any HTTP Client, or using one of these clients: * [Javascript NPM package](https://www.npmjs.com/package/@arduino/arduino-iot-client) * [Python PYPI Package](https://pypi.org/project/arduino-iot-client/) * [Golang Module](https://github.com/arduino/iot-client-go) # noqa: E501 + + The version of the OpenAPI document: 2.0 + Generated by: https://openapi-generator.tech +""" + +from datetime import date, datetime # noqa: F401 +import decimal # noqa: F401 +import functools # noqa: F401 +import io # noqa: F401 +import re # noqa: F401 +import typing # noqa: F401 +import typing_extensions # noqa: F401 +import uuid # noqa: F401 + +import frozendict # noqa: F401 + +from iot_api_client import schemas # noqa: F401 + + +class ArduinoCredentialsv1( + schemas.DictSchema +): + """NOTE: This class is auto generated by OpenAPI Generator. + Ref: https://openapi-generator.tech + + Do not edit the class manually. + + ArduinoCredentialsv1 media type (default view) + """ + + + class MetaOapg: + required = { + "friendly_name", + "secret_name", + "sensitive", + "required", + } + + class properties: + friendly_name = schemas.StrSchema + required = schemas.BoolSchema + secret_name = schemas.StrSchema + sensitive = schemas.BoolSchema + __annotations__ = { + "friendly_name": friendly_name, + "required": required, + "secret_name": secret_name, + "sensitive": sensitive, + } + + friendly_name: MetaOapg.properties.friendly_name + secret_name: MetaOapg.properties.secret_name + sensitive: MetaOapg.properties.sensitive + required: MetaOapg.properties.required + + @typing.overload + def __getitem__(self, name: typing_extensions.Literal["friendly_name"]) -> MetaOapg.properties.friendly_name: ... + + @typing.overload + def __getitem__(self, name: typing_extensions.Literal["required"]) -> MetaOapg.properties.required: ... + + @typing.overload + def __getitem__(self, name: typing_extensions.Literal["secret_name"]) -> MetaOapg.properties.secret_name: ... + + @typing.overload + def __getitem__(self, name: typing_extensions.Literal["sensitive"]) -> MetaOapg.properties.sensitive: ... + + @typing.overload + def __getitem__(self, name: str) -> schemas.UnsetAnyTypeSchema: ... + + def __getitem__(self, name: typing.Union[typing_extensions.Literal["friendly_name", "required", "secret_name", "sensitive", ], str]): + # dict_instance[name] accessor + return super().__getitem__(name) + + + @typing.overload + def get_item_oapg(self, name: typing_extensions.Literal["friendly_name"]) -> MetaOapg.properties.friendly_name: ... + + @typing.overload + def get_item_oapg(self, name: typing_extensions.Literal["required"]) -> MetaOapg.properties.required: ... + + @typing.overload + def get_item_oapg(self, name: typing_extensions.Literal["secret_name"]) -> MetaOapg.properties.secret_name: ... + + @typing.overload + def get_item_oapg(self, name: typing_extensions.Literal["sensitive"]) -> MetaOapg.properties.sensitive: ... + + @typing.overload + def get_item_oapg(self, name: str) -> typing.Union[schemas.UnsetAnyTypeSchema, schemas.Unset]: ... + + def get_item_oapg(self, name: typing.Union[typing_extensions.Literal["friendly_name", "required", "secret_name", "sensitive", ], str]): + return super().get_item_oapg(name) + + + def __new__( + cls, + *_args: typing.Union[dict, frozendict.frozendict, ], + friendly_name: typing.Union[MetaOapg.properties.friendly_name, str, ], + secret_name: typing.Union[MetaOapg.properties.secret_name, str, ], + sensitive: typing.Union[MetaOapg.properties.sensitive, bool, ], + required: typing.Union[MetaOapg.properties.required, bool, ], + _configuration: typing.Optional[schemas.Configuration] = None, + **kwargs: typing.Union[schemas.AnyTypeSchema, dict, frozendict.frozendict, str, date, datetime, uuid.UUID, int, float, decimal.Decimal, None, list, tuple, bytes], + ) -> 'ArduinoCredentialsv1': + return super().__new__( + cls, + *_args, + friendly_name=friendly_name, + secret_name=secret_name, + sensitive=sensitive, + required=required, + _configuration=_configuration, + **kwargs, + ) diff --git a/iot_api_client/model/arduino_credentialsv1.pyi b/iot_api_client/model/arduino_credentialsv1.pyi new file mode 100644 index 0000000..0294b6d --- /dev/null +++ b/iot_api_client/model/arduino_credentialsv1.pyi @@ -0,0 +1,121 @@ +# coding: utf-8 + +""" + Arduino IoT Cloud API + + Provides a set of endpoints to manage Arduino IoT Cloud **Devices**, **Things**, **Properties** and **Timeseries**. This API can be called just with any HTTP Client, or using one of these clients: * [Javascript NPM package](https://www.npmjs.com/package/@arduino/arduino-iot-client) * [Python PYPI Package](https://pypi.org/project/arduino-iot-client/) * [Golang Module](https://github.com/arduino/iot-client-go) # noqa: E501 + + The version of the OpenAPI document: 2.0 + Generated by: https://openapi-generator.tech +""" + +from datetime import date, datetime # noqa: F401 +import decimal # noqa: F401 +import functools # noqa: F401 +import io # noqa: F401 +import re # noqa: F401 +import typing # noqa: F401 +import typing_extensions # noqa: F401 +import uuid # noqa: F401 + +import frozendict # noqa: F401 + +from iot_api_client import schemas # noqa: F401 + + +class ArduinoCredentialsv1( + schemas.DictSchema +): + """NOTE: This class is auto generated by OpenAPI Generator. + Ref: https://openapi-generator.tech + + Do not edit the class manually. + + ArduinoCredentialsv1 media type (default view) + """ + + + class MetaOapg: + required = { + "friendly_name", + "secret_name", + "sensitive", + "required", + } + + class properties: + friendly_name = schemas.StrSchema + required = schemas.BoolSchema + secret_name = schemas.StrSchema + sensitive = schemas.BoolSchema + __annotations__ = { + "friendly_name": friendly_name, + "required": required, + "secret_name": secret_name, + "sensitive": sensitive, + } + + friendly_name: MetaOapg.properties.friendly_name + secret_name: MetaOapg.properties.secret_name + sensitive: MetaOapg.properties.sensitive + required: MetaOapg.properties.required + + @typing.overload + def __getitem__(self, name: typing_extensions.Literal["friendly_name"]) -> MetaOapg.properties.friendly_name: ... + + @typing.overload + def __getitem__(self, name: typing_extensions.Literal["required"]) -> MetaOapg.properties.required: ... + + @typing.overload + def __getitem__(self, name: typing_extensions.Literal["secret_name"]) -> MetaOapg.properties.secret_name: ... + + @typing.overload + def __getitem__(self, name: typing_extensions.Literal["sensitive"]) -> MetaOapg.properties.sensitive: ... + + @typing.overload + def __getitem__(self, name: str) -> schemas.UnsetAnyTypeSchema: ... + + def __getitem__(self, name: typing.Union[typing_extensions.Literal["friendly_name", "required", "secret_name", "sensitive", ], str]): + # dict_instance[name] accessor + return super().__getitem__(name) + + + @typing.overload + def get_item_oapg(self, name: typing_extensions.Literal["friendly_name"]) -> MetaOapg.properties.friendly_name: ... + + @typing.overload + def get_item_oapg(self, name: typing_extensions.Literal["required"]) -> MetaOapg.properties.required: ... + + @typing.overload + def get_item_oapg(self, name: typing_extensions.Literal["secret_name"]) -> MetaOapg.properties.secret_name: ... + + @typing.overload + def get_item_oapg(self, name: typing_extensions.Literal["sensitive"]) -> MetaOapg.properties.sensitive: ... + + @typing.overload + def get_item_oapg(self, name: str) -> typing.Union[schemas.UnsetAnyTypeSchema, schemas.Unset]: ... + + def get_item_oapg(self, name: typing.Union[typing_extensions.Literal["friendly_name", "required", "secret_name", "sensitive", ], str]): + return super().get_item_oapg(name) + + + def __new__( + cls, + *_args: typing.Union[dict, frozendict.frozendict, ], + friendly_name: typing.Union[MetaOapg.properties.friendly_name, str, ], + secret_name: typing.Union[MetaOapg.properties.secret_name, str, ], + sensitive: typing.Union[MetaOapg.properties.sensitive, bool, ], + required: typing.Union[MetaOapg.properties.required, bool, ], + _configuration: typing.Optional[schemas.Configuration] = None, + **kwargs: typing.Union[schemas.AnyTypeSchema, dict, frozendict.frozendict, str, date, datetime, uuid.UUID, int, float, decimal.Decimal, None, list, tuple, bytes], + ) -> 'ArduinoCredentialsv1': + return super().__new__( + cls, + *_args, + friendly_name=friendly_name, + secret_name=secret_name, + sensitive=sensitive, + required=required, + _configuration=_configuration, + **kwargs, + ) diff --git a/iot_api_client/model/arduino_credentialsv1_collection.py b/iot_api_client/model/arduino_credentialsv1_collection.py new file mode 100644 index 0000000..b5339d5 --- /dev/null +++ b/iot_api_client/model/arduino_credentialsv1_collection.py @@ -0,0 +1,58 @@ +# coding: utf-8 + +""" + Arduino IoT Cloud API + + Provides a set of endpoints to manage Arduino IoT Cloud **Devices**, **Things**, **Properties** and **Timeseries**. This API can be called just with any HTTP Client, or using one of these clients: * [Javascript NPM package](https://www.npmjs.com/package/@arduino/arduino-iot-client) * [Python PYPI Package](https://pypi.org/project/arduino-iot-client/) * [Golang Module](https://github.com/arduino/iot-client-go) # noqa: E501 + + The version of the OpenAPI document: 2.0 + Generated by: https://openapi-generator.tech +""" + +from datetime import date, datetime # noqa: F401 +import decimal # noqa: F401 +import functools # noqa: F401 +import io # noqa: F401 +import re # noqa: F401 +import typing # noqa: F401 +import typing_extensions # noqa: F401 +import uuid # noqa: F401 + +import frozendict # noqa: F401 + +from iot_api_client import schemas # noqa: F401 + + +class ArduinoCredentialsv1Collection( + schemas.ListSchema +): + """NOTE: This class is auto generated by OpenAPI Generator. + Ref: https://openapi-generator.tech + + Do not edit the class manually. + + ArduinoCredentialsv1Collection is the media type for an array of ArduinoCredentialsv1 (default view) + """ + + + class MetaOapg: + + @staticmethod + def items() -> typing.Type['ArduinoCredentialsv1']: + return ArduinoCredentialsv1 + + def __new__( + cls, + _arg: typing.Union[typing.Tuple['ArduinoCredentialsv1'], typing.List['ArduinoCredentialsv1']], + _configuration: typing.Optional[schemas.Configuration] = None, + ) -> 'ArduinoCredentialsv1Collection': + return super().__new__( + cls, + _arg, + _configuration=_configuration, + ) + + def __getitem__(self, i: int) -> 'ArduinoCredentialsv1': + return super().__getitem__(i) + +from iot_api_client.model.arduino_credentialsv1 import ArduinoCredentialsv1 diff --git a/iot_api_client/model/arduino_credentialsv1_collection.pyi b/iot_api_client/model/arduino_credentialsv1_collection.pyi new file mode 100644 index 0000000..b5339d5 --- /dev/null +++ b/iot_api_client/model/arduino_credentialsv1_collection.pyi @@ -0,0 +1,58 @@ +# coding: utf-8 + +""" + Arduino IoT Cloud API + + Provides a set of endpoints to manage Arduino IoT Cloud **Devices**, **Things**, **Properties** and **Timeseries**. This API can be called just with any HTTP Client, or using one of these clients: * [Javascript NPM package](https://www.npmjs.com/package/@arduino/arduino-iot-client) * [Python PYPI Package](https://pypi.org/project/arduino-iot-client/) * [Golang Module](https://github.com/arduino/iot-client-go) # noqa: E501 + + The version of the OpenAPI document: 2.0 + Generated by: https://openapi-generator.tech +""" + +from datetime import date, datetime # noqa: F401 +import decimal # noqa: F401 +import functools # noqa: F401 +import io # noqa: F401 +import re # noqa: F401 +import typing # noqa: F401 +import typing_extensions # noqa: F401 +import uuid # noqa: F401 + +import frozendict # noqa: F401 + +from iot_api_client import schemas # noqa: F401 + + +class ArduinoCredentialsv1Collection( + schemas.ListSchema +): + """NOTE: This class is auto generated by OpenAPI Generator. + Ref: https://openapi-generator.tech + + Do not edit the class manually. + + ArduinoCredentialsv1Collection is the media type for an array of ArduinoCredentialsv1 (default view) + """ + + + class MetaOapg: + + @staticmethod + def items() -> typing.Type['ArduinoCredentialsv1']: + return ArduinoCredentialsv1 + + def __new__( + cls, + _arg: typing.Union[typing.Tuple['ArduinoCredentialsv1'], typing.List['ArduinoCredentialsv1']], + _configuration: typing.Optional[schemas.Configuration] = None, + ) -> 'ArduinoCredentialsv1Collection': + return super().__new__( + cls, + _arg, + _configuration=_configuration, + ) + + def __getitem__(self, i: int) -> 'ArduinoCredentialsv1': + return super().__getitem__(i) + +from iot_api_client.model.arduino_credentialsv1 import ArduinoCredentialsv1 diff --git a/iot_api_client/model/arduino_dashboardv2.py b/iot_api_client/model/arduino_dashboardv2.py index 49555dd..1efefd5 100644 --- a/iot_api_client/model/arduino_dashboardv2.py +++ b/iot_api_client/model/arduino_dashboardv2.py @@ -46,6 +46,15 @@ class properties: id = schemas.UUIDSchema name = schemas.StrSchema updated_at = schemas.DateTimeSchema + + + class cover_image( + schemas.StrSchema + ): + + + class MetaOapg: + max_length = 1024 @staticmethod def created_by() -> typing.Type['ArduinoDashboardowner']: @@ -67,6 +76,7 @@ def widgets() -> typing.Type['ArduinoWidgetv2Collection']: "id": id, "name": name, "updated_at": updated_at, + "cover_image": cover_image, "created_by": created_by, "organization_id": organization_id, "shared_by": shared_by, @@ -87,6 +97,9 @@ def __getitem__(self, name: typing_extensions.Literal["name"]) -> MetaOapg.prope @typing.overload def __getitem__(self, name: typing_extensions.Literal["updated_at"]) -> MetaOapg.properties.updated_at: ... + @typing.overload + def __getitem__(self, name: typing_extensions.Literal["cover_image"]) -> MetaOapg.properties.cover_image: ... + @typing.overload def __getitem__(self, name: typing_extensions.Literal["created_by"]) -> 'ArduinoDashboardowner': ... @@ -105,7 +118,7 @@ def __getitem__(self, name: typing_extensions.Literal["widgets"]) -> 'ArduinoWid @typing.overload def __getitem__(self, name: str) -> schemas.UnsetAnyTypeSchema: ... - def __getitem__(self, name: typing.Union[typing_extensions.Literal["id", "name", "updated_at", "created_by", "organization_id", "shared_by", "shared_with", "widgets", ], str]): + def __getitem__(self, name: typing.Union[typing_extensions.Literal["id", "name", "updated_at", "cover_image", "created_by", "organization_id", "shared_by", "shared_with", "widgets", ], str]): # dict_instance[name] accessor return super().__getitem__(name) @@ -119,6 +132,9 @@ def get_item_oapg(self, name: typing_extensions.Literal["name"]) -> MetaOapg.pro @typing.overload def get_item_oapg(self, name: typing_extensions.Literal["updated_at"]) -> MetaOapg.properties.updated_at: ... + @typing.overload + def get_item_oapg(self, name: typing_extensions.Literal["cover_image"]) -> typing.Union[MetaOapg.properties.cover_image, schemas.Unset]: ... + @typing.overload def get_item_oapg(self, name: typing_extensions.Literal["created_by"]) -> typing.Union['ArduinoDashboardowner', schemas.Unset]: ... @@ -137,7 +153,7 @@ def get_item_oapg(self, name: typing_extensions.Literal["widgets"]) -> typing.Un @typing.overload def get_item_oapg(self, name: str) -> typing.Union[schemas.UnsetAnyTypeSchema, schemas.Unset]: ... - def get_item_oapg(self, name: typing.Union[typing_extensions.Literal["id", "name", "updated_at", "created_by", "organization_id", "shared_by", "shared_with", "widgets", ], str]): + def get_item_oapg(self, name: typing.Union[typing_extensions.Literal["id", "name", "updated_at", "cover_image", "created_by", "organization_id", "shared_by", "shared_with", "widgets", ], str]): return super().get_item_oapg(name) @@ -147,6 +163,7 @@ def __new__( updated_at: typing.Union[MetaOapg.properties.updated_at, str, datetime, ], name: typing.Union[MetaOapg.properties.name, str, ], id: typing.Union[MetaOapg.properties.id, str, uuid.UUID, ], + cover_image: typing.Union[MetaOapg.properties.cover_image, str, schemas.Unset] = schemas.unset, created_by: typing.Union['ArduinoDashboardowner', schemas.Unset] = schemas.unset, organization_id: typing.Union[MetaOapg.properties.organization_id, str, uuid.UUID, schemas.Unset] = schemas.unset, shared_by: typing.Union['ArduinoDashboardshare', schemas.Unset] = schemas.unset, @@ -161,6 +178,7 @@ def __new__( updated_at=updated_at, name=name, id=id, + cover_image=cover_image, created_by=created_by, organization_id=organization_id, shared_by=shared_by, diff --git a/iot_api_client/model/arduino_dashboardv2.pyi b/iot_api_client/model/arduino_dashboardv2.pyi index 49555dd..383b13e 100644 --- a/iot_api_client/model/arduino_dashboardv2.pyi +++ b/iot_api_client/model/arduino_dashboardv2.pyi @@ -46,6 +46,12 @@ class ArduinoDashboardv2( id = schemas.UUIDSchema name = schemas.StrSchema updated_at = schemas.DateTimeSchema + + + class cover_image( + schemas.StrSchema + ): + pass @staticmethod def created_by() -> typing.Type['ArduinoDashboardowner']: @@ -67,6 +73,7 @@ class ArduinoDashboardv2( "id": id, "name": name, "updated_at": updated_at, + "cover_image": cover_image, "created_by": created_by, "organization_id": organization_id, "shared_by": shared_by, @@ -87,6 +94,9 @@ class ArduinoDashboardv2( @typing.overload def __getitem__(self, name: typing_extensions.Literal["updated_at"]) -> MetaOapg.properties.updated_at: ... + @typing.overload + def __getitem__(self, name: typing_extensions.Literal["cover_image"]) -> MetaOapg.properties.cover_image: ... + @typing.overload def __getitem__(self, name: typing_extensions.Literal["created_by"]) -> 'ArduinoDashboardowner': ... @@ -105,7 +115,7 @@ class ArduinoDashboardv2( @typing.overload def __getitem__(self, name: str) -> schemas.UnsetAnyTypeSchema: ... - def __getitem__(self, name: typing.Union[typing_extensions.Literal["id", "name", "updated_at", "created_by", "organization_id", "shared_by", "shared_with", "widgets", ], str]): + def __getitem__(self, name: typing.Union[typing_extensions.Literal["id", "name", "updated_at", "cover_image", "created_by", "organization_id", "shared_by", "shared_with", "widgets", ], str]): # dict_instance[name] accessor return super().__getitem__(name) @@ -119,6 +129,9 @@ class ArduinoDashboardv2( @typing.overload def get_item_oapg(self, name: typing_extensions.Literal["updated_at"]) -> MetaOapg.properties.updated_at: ... + @typing.overload + def get_item_oapg(self, name: typing_extensions.Literal["cover_image"]) -> typing.Union[MetaOapg.properties.cover_image, schemas.Unset]: ... + @typing.overload def get_item_oapg(self, name: typing_extensions.Literal["created_by"]) -> typing.Union['ArduinoDashboardowner', schemas.Unset]: ... @@ -137,7 +150,7 @@ class ArduinoDashboardv2( @typing.overload def get_item_oapg(self, name: str) -> typing.Union[schemas.UnsetAnyTypeSchema, schemas.Unset]: ... - def get_item_oapg(self, name: typing.Union[typing_extensions.Literal["id", "name", "updated_at", "created_by", "organization_id", "shared_by", "shared_with", "widgets", ], str]): + def get_item_oapg(self, name: typing.Union[typing_extensions.Literal["id", "name", "updated_at", "cover_image", "created_by", "organization_id", "shared_by", "shared_with", "widgets", ], str]): return super().get_item_oapg(name) @@ -147,6 +160,7 @@ class ArduinoDashboardv2( updated_at: typing.Union[MetaOapg.properties.updated_at, str, datetime, ], name: typing.Union[MetaOapg.properties.name, str, ], id: typing.Union[MetaOapg.properties.id, str, uuid.UUID, ], + cover_image: typing.Union[MetaOapg.properties.cover_image, str, schemas.Unset] = schemas.unset, created_by: typing.Union['ArduinoDashboardowner', schemas.Unset] = schemas.unset, organization_id: typing.Union[MetaOapg.properties.organization_id, str, uuid.UUID, schemas.Unset] = schemas.unset, shared_by: typing.Union['ArduinoDashboardshare', schemas.Unset] = schemas.unset, @@ -161,6 +175,7 @@ class ArduinoDashboardv2( updated_at=updated_at, name=name, id=id, + cover_image=cover_image, created_by=created_by, organization_id=organization_id, shared_by=shared_by, diff --git a/iot_api_client/model/arduino_dashboardv2template.py b/iot_api_client/model/arduino_dashboardv2template.py index 8a475f9..46275e4 100644 --- a/iot_api_client/model/arduino_dashboardv2template.py +++ b/iot_api_client/model/arduino_dashboardv2template.py @@ -42,12 +42,16 @@ class MetaOapg: class properties: name = schemas.StrSchema + cover_image = schemas.StrSchema + id = schemas.StrSchema @staticmethod def widgets() -> typing.Type['ArduinoWidgetv2templateCollection']: return ArduinoWidgetv2templateCollection __annotations__ = { "name": name, + "cover_image": cover_image, + "id": id, "widgets": widgets, } @@ -56,13 +60,19 @@ def widgets() -> typing.Type['ArduinoWidgetv2templateCollection']: @typing.overload def __getitem__(self, name: typing_extensions.Literal["name"]) -> MetaOapg.properties.name: ... + @typing.overload + def __getitem__(self, name: typing_extensions.Literal["cover_image"]) -> MetaOapg.properties.cover_image: ... + + @typing.overload + def __getitem__(self, name: typing_extensions.Literal["id"]) -> MetaOapg.properties.id: ... + @typing.overload def __getitem__(self, name: typing_extensions.Literal["widgets"]) -> 'ArduinoWidgetv2templateCollection': ... @typing.overload def __getitem__(self, name: str) -> schemas.UnsetAnyTypeSchema: ... - def __getitem__(self, name: typing.Union[typing_extensions.Literal["name", "widgets", ], str]): + def __getitem__(self, name: typing.Union[typing_extensions.Literal["name", "cover_image", "id", "widgets", ], str]): # dict_instance[name] accessor return super().__getitem__(name) @@ -70,13 +80,19 @@ def __getitem__(self, name: typing.Union[typing_extensions.Literal["name", "widg @typing.overload def get_item_oapg(self, name: typing_extensions.Literal["name"]) -> MetaOapg.properties.name: ... + @typing.overload + def get_item_oapg(self, name: typing_extensions.Literal["cover_image"]) -> typing.Union[MetaOapg.properties.cover_image, schemas.Unset]: ... + + @typing.overload + def get_item_oapg(self, name: typing_extensions.Literal["id"]) -> typing.Union[MetaOapg.properties.id, schemas.Unset]: ... + @typing.overload def get_item_oapg(self, name: typing_extensions.Literal["widgets"]) -> typing.Union['ArduinoWidgetv2templateCollection', schemas.Unset]: ... @typing.overload def get_item_oapg(self, name: str) -> typing.Union[schemas.UnsetAnyTypeSchema, schemas.Unset]: ... - def get_item_oapg(self, name: typing.Union[typing_extensions.Literal["name", "widgets", ], str]): + def get_item_oapg(self, name: typing.Union[typing_extensions.Literal["name", "cover_image", "id", "widgets", ], str]): return super().get_item_oapg(name) @@ -84,6 +100,8 @@ def __new__( cls, *_args: typing.Union[dict, frozendict.frozendict, ], name: typing.Union[MetaOapg.properties.name, str, ], + cover_image: typing.Union[MetaOapg.properties.cover_image, str, schemas.Unset] = schemas.unset, + id: typing.Union[MetaOapg.properties.id, str, schemas.Unset] = schemas.unset, widgets: typing.Union['ArduinoWidgetv2templateCollection', schemas.Unset] = schemas.unset, _configuration: typing.Optional[schemas.Configuration] = None, **kwargs: typing.Union[schemas.AnyTypeSchema, dict, frozendict.frozendict, str, date, datetime, uuid.UUID, int, float, decimal.Decimal, None, list, tuple, bytes], @@ -92,6 +110,8 @@ def __new__( cls, *_args, name=name, + cover_image=cover_image, + id=id, widgets=widgets, _configuration=_configuration, **kwargs, diff --git a/iot_api_client/model/arduino_dashboardv2template.pyi b/iot_api_client/model/arduino_dashboardv2template.pyi index 8a475f9..46275e4 100644 --- a/iot_api_client/model/arduino_dashboardv2template.pyi +++ b/iot_api_client/model/arduino_dashboardv2template.pyi @@ -42,12 +42,16 @@ class ArduinoDashboardv2template( class properties: name = schemas.StrSchema + cover_image = schemas.StrSchema + id = schemas.StrSchema @staticmethod def widgets() -> typing.Type['ArduinoWidgetv2templateCollection']: return ArduinoWidgetv2templateCollection __annotations__ = { "name": name, + "cover_image": cover_image, + "id": id, "widgets": widgets, } @@ -56,13 +60,19 @@ class ArduinoDashboardv2template( @typing.overload def __getitem__(self, name: typing_extensions.Literal["name"]) -> MetaOapg.properties.name: ... + @typing.overload + def __getitem__(self, name: typing_extensions.Literal["cover_image"]) -> MetaOapg.properties.cover_image: ... + + @typing.overload + def __getitem__(self, name: typing_extensions.Literal["id"]) -> MetaOapg.properties.id: ... + @typing.overload def __getitem__(self, name: typing_extensions.Literal["widgets"]) -> 'ArduinoWidgetv2templateCollection': ... @typing.overload def __getitem__(self, name: str) -> schemas.UnsetAnyTypeSchema: ... - def __getitem__(self, name: typing.Union[typing_extensions.Literal["name", "widgets", ], str]): + def __getitem__(self, name: typing.Union[typing_extensions.Literal["name", "cover_image", "id", "widgets", ], str]): # dict_instance[name] accessor return super().__getitem__(name) @@ -70,13 +80,19 @@ class ArduinoDashboardv2template( @typing.overload def get_item_oapg(self, name: typing_extensions.Literal["name"]) -> MetaOapg.properties.name: ... + @typing.overload + def get_item_oapg(self, name: typing_extensions.Literal["cover_image"]) -> typing.Union[MetaOapg.properties.cover_image, schemas.Unset]: ... + + @typing.overload + def get_item_oapg(self, name: typing_extensions.Literal["id"]) -> typing.Union[MetaOapg.properties.id, schemas.Unset]: ... + @typing.overload def get_item_oapg(self, name: typing_extensions.Literal["widgets"]) -> typing.Union['ArduinoWidgetv2templateCollection', schemas.Unset]: ... @typing.overload def get_item_oapg(self, name: str) -> typing.Union[schemas.UnsetAnyTypeSchema, schemas.Unset]: ... - def get_item_oapg(self, name: typing.Union[typing_extensions.Literal["name", "widgets", ], str]): + def get_item_oapg(self, name: typing.Union[typing_extensions.Literal["name", "cover_image", "id", "widgets", ], str]): return super().get_item_oapg(name) @@ -84,6 +100,8 @@ class ArduinoDashboardv2template( cls, *_args: typing.Union[dict, frozendict.frozendict, ], name: typing.Union[MetaOapg.properties.name, str, ], + cover_image: typing.Union[MetaOapg.properties.cover_image, str, schemas.Unset] = schemas.unset, + id: typing.Union[MetaOapg.properties.id, str, schemas.Unset] = schemas.unset, widgets: typing.Union['ArduinoWidgetv2templateCollection', schemas.Unset] = schemas.unset, _configuration: typing.Optional[schemas.Configuration] = None, **kwargs: typing.Union[schemas.AnyTypeSchema, dict, frozendict.frozendict, str, date, datetime, uuid.UUID, int, float, decimal.Decimal, None, list, tuple, bytes], @@ -92,6 +110,8 @@ class ArduinoDashboardv2template( cls, *_args, name=name, + cover_image=cover_image, + id=id, widgets=widgets, _configuration=_configuration, **kwargs, diff --git a/iot_api_client/model/arduino_devicev2.py b/iot_api_client/model/arduino_devicev2.py index afcb304..cfc1746 100644 --- a/iot_api_client/model/arduino_devicev2.py +++ b/iot_api_client/model/arduino_devicev2.py @@ -70,6 +70,8 @@ class MetaOapg: "gsm": "GSM", "nb": "NB", "lora": "LORA", + "catm1": "CATM1", + "cellular": "CELLULAR", } @schemas.classproperty @@ -95,6 +97,14 @@ def NB(cls): @schemas.classproperty def LORA(cls): return cls("lora") + + @schemas.classproperty + def CATM1(cls): + return cls("catm1") + + @schemas.classproperty + def CELLULAR(cls): + return cls("cellular") created_at = schemas.DateTimeSchema diff --git a/iot_api_client/model/arduino_devicev2.pyi b/iot_api_client/model/arduino_devicev2.pyi index 3b1f983..568cbf8 100644 --- a/iot_api_client/model/arduino_devicev2.pyi +++ b/iot_api_client/model/arduino_devicev2.pyi @@ -84,6 +84,14 @@ class ArduinoDevicev2( @schemas.classproperty def LORA(cls): return cls("lora") + + @schemas.classproperty + def CATM1(cls): + return cls("catm1") + + @schemas.classproperty + def CELLULAR(cls): + return cls("cellular") created_at = schemas.DateTimeSchema diff --git a/iot_api_client/model/arduino_devicev2templatedevice.py b/iot_api_client/model/arduino_devicev2templatedevice.py new file mode 100644 index 0000000..e6a29e9 --- /dev/null +++ b/iot_api_client/model/arduino_devicev2templatedevice.py @@ -0,0 +1,90 @@ +# coding: utf-8 + +""" + Arduino IoT Cloud API + + Provides a set of endpoints to manage Arduino IoT Cloud **Devices**, **Things**, **Properties** and **Timeseries**. This API can be called just with any HTTP Client, or using one of these clients: * [Javascript NPM package](https://www.npmjs.com/package/@arduino/arduino-iot-client) * [Python PYPI Package](https://pypi.org/project/arduino-iot-client/) * [Golang Module](https://github.com/arduino/iot-client-go) # noqa: E501 + + The version of the OpenAPI document: 2.0 + Generated by: https://openapi-generator.tech +""" + +from datetime import date, datetime # noqa: F401 +import decimal # noqa: F401 +import functools # noqa: F401 +import io # noqa: F401 +import re # noqa: F401 +import typing # noqa: F401 +import typing_extensions # noqa: F401 +import uuid # noqa: F401 + +import frozendict # noqa: F401 + +from iot_api_client import schemas # noqa: F401 + + +class ArduinoDevicev2templatedevice( + schemas.DictSchema +): + """NOTE: This class is auto generated by OpenAPI Generator. + Ref: https://openapi-generator.tech + + Do not edit the class manually. + + ArduinoDevicev2templatedevice media type (default view) + """ + + + class MetaOapg: + + class properties: + fqbn = schemas.StrSchema + name = schemas.StrSchema + __annotations__ = { + "fqbn": fqbn, + "name": name, + } + + @typing.overload + def __getitem__(self, name: typing_extensions.Literal["fqbn"]) -> MetaOapg.properties.fqbn: ... + + @typing.overload + def __getitem__(self, name: typing_extensions.Literal["name"]) -> MetaOapg.properties.name: ... + + @typing.overload + def __getitem__(self, name: str) -> schemas.UnsetAnyTypeSchema: ... + + def __getitem__(self, name: typing.Union[typing_extensions.Literal["fqbn", "name", ], str]): + # dict_instance[name] accessor + return super().__getitem__(name) + + + @typing.overload + def get_item_oapg(self, name: typing_extensions.Literal["fqbn"]) -> typing.Union[MetaOapg.properties.fqbn, schemas.Unset]: ... + + @typing.overload + def get_item_oapg(self, name: typing_extensions.Literal["name"]) -> typing.Union[MetaOapg.properties.name, schemas.Unset]: ... + + @typing.overload + def get_item_oapg(self, name: str) -> typing.Union[schemas.UnsetAnyTypeSchema, schemas.Unset]: ... + + def get_item_oapg(self, name: typing.Union[typing_extensions.Literal["fqbn", "name", ], str]): + return super().get_item_oapg(name) + + + def __new__( + cls, + *_args: typing.Union[dict, frozendict.frozendict, ], + fqbn: typing.Union[MetaOapg.properties.fqbn, str, schemas.Unset] = schemas.unset, + name: typing.Union[MetaOapg.properties.name, str, schemas.Unset] = schemas.unset, + _configuration: typing.Optional[schemas.Configuration] = None, + **kwargs: typing.Union[schemas.AnyTypeSchema, dict, frozendict.frozendict, str, date, datetime, uuid.UUID, int, float, decimal.Decimal, None, list, tuple, bytes], + ) -> 'ArduinoDevicev2templatedevice': + return super().__new__( + cls, + *_args, + fqbn=fqbn, + name=name, + _configuration=_configuration, + **kwargs, + ) diff --git a/iot_api_client/model/arduino_devicev2templatedevice.pyi b/iot_api_client/model/arduino_devicev2templatedevice.pyi new file mode 100644 index 0000000..e6a29e9 --- /dev/null +++ b/iot_api_client/model/arduino_devicev2templatedevice.pyi @@ -0,0 +1,90 @@ +# coding: utf-8 + +""" + Arduino IoT Cloud API + + Provides a set of endpoints to manage Arduino IoT Cloud **Devices**, **Things**, **Properties** and **Timeseries**. This API can be called just with any HTTP Client, or using one of these clients: * [Javascript NPM package](https://www.npmjs.com/package/@arduino/arduino-iot-client) * [Python PYPI Package](https://pypi.org/project/arduino-iot-client/) * [Golang Module](https://github.com/arduino/iot-client-go) # noqa: E501 + + The version of the OpenAPI document: 2.0 + Generated by: https://openapi-generator.tech +""" + +from datetime import date, datetime # noqa: F401 +import decimal # noqa: F401 +import functools # noqa: F401 +import io # noqa: F401 +import re # noqa: F401 +import typing # noqa: F401 +import typing_extensions # noqa: F401 +import uuid # noqa: F401 + +import frozendict # noqa: F401 + +from iot_api_client import schemas # noqa: F401 + + +class ArduinoDevicev2templatedevice( + schemas.DictSchema +): + """NOTE: This class is auto generated by OpenAPI Generator. + Ref: https://openapi-generator.tech + + Do not edit the class manually. + + ArduinoDevicev2templatedevice media type (default view) + """ + + + class MetaOapg: + + class properties: + fqbn = schemas.StrSchema + name = schemas.StrSchema + __annotations__ = { + "fqbn": fqbn, + "name": name, + } + + @typing.overload + def __getitem__(self, name: typing_extensions.Literal["fqbn"]) -> MetaOapg.properties.fqbn: ... + + @typing.overload + def __getitem__(self, name: typing_extensions.Literal["name"]) -> MetaOapg.properties.name: ... + + @typing.overload + def __getitem__(self, name: str) -> schemas.UnsetAnyTypeSchema: ... + + def __getitem__(self, name: typing.Union[typing_extensions.Literal["fqbn", "name", ], str]): + # dict_instance[name] accessor + return super().__getitem__(name) + + + @typing.overload + def get_item_oapg(self, name: typing_extensions.Literal["fqbn"]) -> typing.Union[MetaOapg.properties.fqbn, schemas.Unset]: ... + + @typing.overload + def get_item_oapg(self, name: typing_extensions.Literal["name"]) -> typing.Union[MetaOapg.properties.name, schemas.Unset]: ... + + @typing.overload + def get_item_oapg(self, name: str) -> typing.Union[schemas.UnsetAnyTypeSchema, schemas.Unset]: ... + + def get_item_oapg(self, name: typing.Union[typing_extensions.Literal["fqbn", "name", ], str]): + return super().get_item_oapg(name) + + + def __new__( + cls, + *_args: typing.Union[dict, frozendict.frozendict, ], + fqbn: typing.Union[MetaOapg.properties.fqbn, str, schemas.Unset] = schemas.unset, + name: typing.Union[MetaOapg.properties.name, str, schemas.Unset] = schemas.unset, + _configuration: typing.Optional[schemas.Configuration] = None, + **kwargs: typing.Union[schemas.AnyTypeSchema, dict, frozendict.frozendict, str, date, datetime, uuid.UUID, int, float, decimal.Decimal, None, list, tuple, bytes], + ) -> 'ArduinoDevicev2templatedevice': + return super().__new__( + cls, + *_args, + fqbn=fqbn, + name=name, + _configuration=_configuration, + **kwargs, + ) diff --git a/iot_api_client/model/arduino_series_batch_sampled.py b/iot_api_client/model/arduino_series_batch_sampled.py new file mode 100644 index 0000000..bd533ed --- /dev/null +++ b/iot_api_client/model/arduino_series_batch_sampled.py @@ -0,0 +1,124 @@ +# coding: utf-8 + +""" + Arduino IoT Cloud API + + Provides a set of endpoints to manage Arduino IoT Cloud **Devices**, **Things**, **Properties** and **Timeseries**. This API can be called just with any HTTP Client, or using one of these clients: * [Javascript NPM package](https://www.npmjs.com/package/@arduino/arduino-iot-client) * [Python PYPI Package](https://pypi.org/project/arduino-iot-client/) * [Golang Module](https://github.com/arduino/iot-client-go) # noqa: E501 + + The version of the OpenAPI document: 2.0 + Generated by: https://openapi-generator.tech +""" + +from datetime import date, datetime # noqa: F401 +import decimal # noqa: F401 +import functools # noqa: F401 +import io # noqa: F401 +import re # noqa: F401 +import typing # noqa: F401 +import typing_extensions # noqa: F401 +import uuid # noqa: F401 + +import frozendict # noqa: F401 + +from iot_api_client import schemas # noqa: F401 + + +class ArduinoSeriesBatchSampled( + schemas.DictSchema +): + """NOTE: This class is auto generated by OpenAPI Generator. + Ref: https://openapi-generator.tech + + Do not edit the class manually. + + ArduinoSeriesBatchSampled media type (default view) + """ + + + class MetaOapg: + required = { + "resp_version", + "responses", + } + + class properties: + resp_version = schemas.Int64Schema + + + class responses( + schemas.ListSchema + ): + + + class MetaOapg: + + @staticmethod + def items() -> typing.Type['ArduinoSeriesSampledResponse']: + return ArduinoSeriesSampledResponse + + def __new__( + cls, + _arg: typing.Union[typing.Tuple['ArduinoSeriesSampledResponse'], typing.List['ArduinoSeriesSampledResponse']], + _configuration: typing.Optional[schemas.Configuration] = None, + ) -> 'responses': + return super().__new__( + cls, + _arg, + _configuration=_configuration, + ) + + def __getitem__(self, i: int) -> 'ArduinoSeriesSampledResponse': + return super().__getitem__(i) + __annotations__ = { + "resp_version": resp_version, + "responses": responses, + } + + resp_version: MetaOapg.properties.resp_version + responses: MetaOapg.properties.responses + + @typing.overload + def __getitem__(self, name: typing_extensions.Literal["resp_version"]) -> MetaOapg.properties.resp_version: ... + + @typing.overload + def __getitem__(self, name: typing_extensions.Literal["responses"]) -> MetaOapg.properties.responses: ... + + @typing.overload + def __getitem__(self, name: str) -> schemas.UnsetAnyTypeSchema: ... + + def __getitem__(self, name: typing.Union[typing_extensions.Literal["resp_version", "responses", ], str]): + # dict_instance[name] accessor + return super().__getitem__(name) + + + @typing.overload + def get_item_oapg(self, name: typing_extensions.Literal["resp_version"]) -> MetaOapg.properties.resp_version: ... + + @typing.overload + def get_item_oapg(self, name: typing_extensions.Literal["responses"]) -> MetaOapg.properties.responses: ... + + @typing.overload + def get_item_oapg(self, name: str) -> typing.Union[schemas.UnsetAnyTypeSchema, schemas.Unset]: ... + + def get_item_oapg(self, name: typing.Union[typing_extensions.Literal["resp_version", "responses", ], str]): + return super().get_item_oapg(name) + + + def __new__( + cls, + *_args: typing.Union[dict, frozendict.frozendict, ], + resp_version: typing.Union[MetaOapg.properties.resp_version, decimal.Decimal, int, ], + responses: typing.Union[MetaOapg.properties.responses, list, tuple, ], + _configuration: typing.Optional[schemas.Configuration] = None, + **kwargs: typing.Union[schemas.AnyTypeSchema, dict, frozendict.frozendict, str, date, datetime, uuid.UUID, int, float, decimal.Decimal, None, list, tuple, bytes], + ) -> 'ArduinoSeriesBatchSampled': + return super().__new__( + cls, + *_args, + resp_version=resp_version, + responses=responses, + _configuration=_configuration, + **kwargs, + ) + +from iot_api_client.model.arduino_series_sampled_response import ArduinoSeriesSampledResponse diff --git a/iot_api_client/model/arduino_series_batch_sampled.pyi b/iot_api_client/model/arduino_series_batch_sampled.pyi new file mode 100644 index 0000000..bd533ed --- /dev/null +++ b/iot_api_client/model/arduino_series_batch_sampled.pyi @@ -0,0 +1,124 @@ +# coding: utf-8 + +""" + Arduino IoT Cloud API + + Provides a set of endpoints to manage Arduino IoT Cloud **Devices**, **Things**, **Properties** and **Timeseries**. This API can be called just with any HTTP Client, or using one of these clients: * [Javascript NPM package](https://www.npmjs.com/package/@arduino/arduino-iot-client) * [Python PYPI Package](https://pypi.org/project/arduino-iot-client/) * [Golang Module](https://github.com/arduino/iot-client-go) # noqa: E501 + + The version of the OpenAPI document: 2.0 + Generated by: https://openapi-generator.tech +""" + +from datetime import date, datetime # noqa: F401 +import decimal # noqa: F401 +import functools # noqa: F401 +import io # noqa: F401 +import re # noqa: F401 +import typing # noqa: F401 +import typing_extensions # noqa: F401 +import uuid # noqa: F401 + +import frozendict # noqa: F401 + +from iot_api_client import schemas # noqa: F401 + + +class ArduinoSeriesBatchSampled( + schemas.DictSchema +): + """NOTE: This class is auto generated by OpenAPI Generator. + Ref: https://openapi-generator.tech + + Do not edit the class manually. + + ArduinoSeriesBatchSampled media type (default view) + """ + + + class MetaOapg: + required = { + "resp_version", + "responses", + } + + class properties: + resp_version = schemas.Int64Schema + + + class responses( + schemas.ListSchema + ): + + + class MetaOapg: + + @staticmethod + def items() -> typing.Type['ArduinoSeriesSampledResponse']: + return ArduinoSeriesSampledResponse + + def __new__( + cls, + _arg: typing.Union[typing.Tuple['ArduinoSeriesSampledResponse'], typing.List['ArduinoSeriesSampledResponse']], + _configuration: typing.Optional[schemas.Configuration] = None, + ) -> 'responses': + return super().__new__( + cls, + _arg, + _configuration=_configuration, + ) + + def __getitem__(self, i: int) -> 'ArduinoSeriesSampledResponse': + return super().__getitem__(i) + __annotations__ = { + "resp_version": resp_version, + "responses": responses, + } + + resp_version: MetaOapg.properties.resp_version + responses: MetaOapg.properties.responses + + @typing.overload + def __getitem__(self, name: typing_extensions.Literal["resp_version"]) -> MetaOapg.properties.resp_version: ... + + @typing.overload + def __getitem__(self, name: typing_extensions.Literal["responses"]) -> MetaOapg.properties.responses: ... + + @typing.overload + def __getitem__(self, name: str) -> schemas.UnsetAnyTypeSchema: ... + + def __getitem__(self, name: typing.Union[typing_extensions.Literal["resp_version", "responses", ], str]): + # dict_instance[name] accessor + return super().__getitem__(name) + + + @typing.overload + def get_item_oapg(self, name: typing_extensions.Literal["resp_version"]) -> MetaOapg.properties.resp_version: ... + + @typing.overload + def get_item_oapg(self, name: typing_extensions.Literal["responses"]) -> MetaOapg.properties.responses: ... + + @typing.overload + def get_item_oapg(self, name: str) -> typing.Union[schemas.UnsetAnyTypeSchema, schemas.Unset]: ... + + def get_item_oapg(self, name: typing.Union[typing_extensions.Literal["resp_version", "responses", ], str]): + return super().get_item_oapg(name) + + + def __new__( + cls, + *_args: typing.Union[dict, frozendict.frozendict, ], + resp_version: typing.Union[MetaOapg.properties.resp_version, decimal.Decimal, int, ], + responses: typing.Union[MetaOapg.properties.responses, list, tuple, ], + _configuration: typing.Optional[schemas.Configuration] = None, + **kwargs: typing.Union[schemas.AnyTypeSchema, dict, frozendict.frozendict, str, date, datetime, uuid.UUID, int, float, decimal.Decimal, None, list, tuple, bytes], + ) -> 'ArduinoSeriesBatchSampled': + return super().__new__( + cls, + *_args, + resp_version=resp_version, + responses=responses, + _configuration=_configuration, + **kwargs, + ) + +from iot_api_client.model.arduino_series_sampled_response import ArduinoSeriesSampledResponse diff --git a/iot_api_client/model/arduino_series_sampled_response.py b/iot_api_client/model/arduino_series_sampled_response.py new file mode 100644 index 0000000..2d60594 --- /dev/null +++ b/iot_api_client/model/arduino_series_sampled_response.py @@ -0,0 +1,245 @@ +# coding: utf-8 + +""" + Arduino IoT Cloud API + + Provides a set of endpoints to manage Arduino IoT Cloud **Devices**, **Things**, **Properties** and **Timeseries**. This API can be called just with any HTTP Client, or using one of these clients: * [Javascript NPM package](https://www.npmjs.com/package/@arduino/arduino-iot-client) * [Python PYPI Package](https://pypi.org/project/arduino-iot-client/) * [Golang Module](https://github.com/arduino/iot-client-go) # noqa: E501 + + The version of the OpenAPI document: 2.0 + Generated by: https://openapi-generator.tech +""" + +from datetime import date, datetime # noqa: F401 +import decimal # noqa: F401 +import functools # noqa: F401 +import io # noqa: F401 +import re # noqa: F401 +import typing # noqa: F401 +import typing_extensions # noqa: F401 +import uuid # noqa: F401 + +import frozendict # noqa: F401 + +from iot_api_client import schemas # noqa: F401 + + +class ArduinoSeriesSampledResponse( + schemas.DictSchema +): + """NOTE: This class is auto generated by OpenAPI Generator. + Ref: https://openapi-generator.tech + + Do not edit the class manually. + + ArduinoSeriesSampledResponse media type (default view) + """ + + + class MetaOapg: + required = { + "count_values", + "resp_version", + "times", + "from_date", + "to_date", + "query", + "values", + "interval", + "status", + } + + class properties: + count_values = schemas.Int64Schema + from_date = schemas.DateTimeSchema + interval = schemas.Int64Schema + query = schemas.StrSchema + resp_version = schemas.Int64Schema + status = schemas.StrSchema + + + class times( + schemas.ListSchema + ): + + + class MetaOapg: + items = schemas.DateTimeSchema + + def __new__( + cls, + _arg: typing.Union[typing.Tuple[typing.Union[MetaOapg.items, str, datetime, ]], typing.List[typing.Union[MetaOapg.items, str, datetime, ]]], + _configuration: typing.Optional[schemas.Configuration] = None, + ) -> 'times': + return super().__new__( + cls, + _arg, + _configuration=_configuration, + ) + + def __getitem__(self, i: int) -> MetaOapg.items: + return super().__getitem__(i) + to_date = schemas.DateTimeSchema + + + class values( + schemas.ListSchema + ): + + + class MetaOapg: + items = schemas.AnyTypeSchema + + def __new__( + cls, + _arg: typing.Union[typing.Tuple[typing.Union[MetaOapg.items, dict, frozendict.frozendict, str, date, datetime, uuid.UUID, int, float, decimal.Decimal, bool, None, list, tuple, bytes, io.FileIO, io.BufferedReader, ]], typing.List[typing.Union[MetaOapg.items, dict, frozendict.frozendict, str, date, datetime, uuid.UUID, int, float, decimal.Decimal, bool, None, list, tuple, bytes, io.FileIO, io.BufferedReader, ]]], + _configuration: typing.Optional[schemas.Configuration] = None, + ) -> 'values': + return super().__new__( + cls, + _arg, + _configuration=_configuration, + ) + + def __getitem__(self, i: int) -> MetaOapg.items: + return super().__getitem__(i) + message = schemas.StrSchema + series_limit = schemas.Int64Schema + __annotations__ = { + "count_values": count_values, + "from_date": from_date, + "interval": interval, + "query": query, + "resp_version": resp_version, + "status": status, + "times": times, + "to_date": to_date, + "values": values, + "message": message, + "series_limit": series_limit, + } + + count_values: MetaOapg.properties.count_values + resp_version: MetaOapg.properties.resp_version + times: MetaOapg.properties.times + from_date: MetaOapg.properties.from_date + to_date: MetaOapg.properties.to_date + query: MetaOapg.properties.query + values: MetaOapg.properties.values + interval: MetaOapg.properties.interval + status: MetaOapg.properties.status + + @typing.overload + def __getitem__(self, name: typing_extensions.Literal["count_values"]) -> MetaOapg.properties.count_values: ... + + @typing.overload + def __getitem__(self, name: typing_extensions.Literal["from_date"]) -> MetaOapg.properties.from_date: ... + + @typing.overload + def __getitem__(self, name: typing_extensions.Literal["interval"]) -> MetaOapg.properties.interval: ... + + @typing.overload + def __getitem__(self, name: typing_extensions.Literal["query"]) -> MetaOapg.properties.query: ... + + @typing.overload + def __getitem__(self, name: typing_extensions.Literal["resp_version"]) -> MetaOapg.properties.resp_version: ... + + @typing.overload + def __getitem__(self, name: typing_extensions.Literal["status"]) -> MetaOapg.properties.status: ... + + @typing.overload + def __getitem__(self, name: typing_extensions.Literal["times"]) -> MetaOapg.properties.times: ... + + @typing.overload + def __getitem__(self, name: typing_extensions.Literal["to_date"]) -> MetaOapg.properties.to_date: ... + + @typing.overload + def __getitem__(self, name: typing_extensions.Literal["values"]) -> MetaOapg.properties.values: ... + + @typing.overload + def __getitem__(self, name: typing_extensions.Literal["message"]) -> MetaOapg.properties.message: ... + + @typing.overload + def __getitem__(self, name: typing_extensions.Literal["series_limit"]) -> MetaOapg.properties.series_limit: ... + + @typing.overload + def __getitem__(self, name: str) -> schemas.UnsetAnyTypeSchema: ... + + def __getitem__(self, name: typing.Union[typing_extensions.Literal["count_values", "from_date", "interval", "query", "resp_version", "status", "times", "to_date", "values", "message", "series_limit", ], str]): + # dict_instance[name] accessor + return super().__getitem__(name) + + + @typing.overload + def get_item_oapg(self, name: typing_extensions.Literal["count_values"]) -> MetaOapg.properties.count_values: ... + + @typing.overload + def get_item_oapg(self, name: typing_extensions.Literal["from_date"]) -> MetaOapg.properties.from_date: ... + + @typing.overload + def get_item_oapg(self, name: typing_extensions.Literal["interval"]) -> MetaOapg.properties.interval: ... + + @typing.overload + def get_item_oapg(self, name: typing_extensions.Literal["query"]) -> MetaOapg.properties.query: ... + + @typing.overload + def get_item_oapg(self, name: typing_extensions.Literal["resp_version"]) -> MetaOapg.properties.resp_version: ... + + @typing.overload + def get_item_oapg(self, name: typing_extensions.Literal["status"]) -> MetaOapg.properties.status: ... + + @typing.overload + def get_item_oapg(self, name: typing_extensions.Literal["times"]) -> MetaOapg.properties.times: ... + + @typing.overload + def get_item_oapg(self, name: typing_extensions.Literal["to_date"]) -> MetaOapg.properties.to_date: ... + + @typing.overload + def get_item_oapg(self, name: typing_extensions.Literal["values"]) -> MetaOapg.properties.values: ... + + @typing.overload + def get_item_oapg(self, name: typing_extensions.Literal["message"]) -> typing.Union[MetaOapg.properties.message, schemas.Unset]: ... + + @typing.overload + def get_item_oapg(self, name: typing_extensions.Literal["series_limit"]) -> typing.Union[MetaOapg.properties.series_limit, schemas.Unset]: ... + + @typing.overload + def get_item_oapg(self, name: str) -> typing.Union[schemas.UnsetAnyTypeSchema, schemas.Unset]: ... + + def get_item_oapg(self, name: typing.Union[typing_extensions.Literal["count_values", "from_date", "interval", "query", "resp_version", "status", "times", "to_date", "values", "message", "series_limit", ], str]): + return super().get_item_oapg(name) + + + def __new__( + cls, + *_args: typing.Union[dict, frozendict.frozendict, ], + count_values: typing.Union[MetaOapg.properties.count_values, decimal.Decimal, int, ], + resp_version: typing.Union[MetaOapg.properties.resp_version, decimal.Decimal, int, ], + times: typing.Union[MetaOapg.properties.times, list, tuple, ], + from_date: typing.Union[MetaOapg.properties.from_date, str, datetime, ], + to_date: typing.Union[MetaOapg.properties.to_date, str, datetime, ], + query: typing.Union[MetaOapg.properties.query, str, ], + values: typing.Union[MetaOapg.properties.values, list, tuple, ], + interval: typing.Union[MetaOapg.properties.interval, decimal.Decimal, int, ], + status: typing.Union[MetaOapg.properties.status, str, ], + message: typing.Union[MetaOapg.properties.message, str, schemas.Unset] = schemas.unset, + series_limit: typing.Union[MetaOapg.properties.series_limit, decimal.Decimal, int, schemas.Unset] = schemas.unset, + _configuration: typing.Optional[schemas.Configuration] = None, + **kwargs: typing.Union[schemas.AnyTypeSchema, dict, frozendict.frozendict, str, date, datetime, uuid.UUID, int, float, decimal.Decimal, None, list, tuple, bytes], + ) -> 'ArduinoSeriesSampledResponse': + return super().__new__( + cls, + *_args, + count_values=count_values, + resp_version=resp_version, + times=times, + from_date=from_date, + to_date=to_date, + query=query, + values=values, + interval=interval, + status=status, + message=message, + series_limit=series_limit, + _configuration=_configuration, + **kwargs, + ) diff --git a/iot_api_client/model/arduino_series_sampled_response.pyi b/iot_api_client/model/arduino_series_sampled_response.pyi new file mode 100644 index 0000000..2d60594 --- /dev/null +++ b/iot_api_client/model/arduino_series_sampled_response.pyi @@ -0,0 +1,245 @@ +# coding: utf-8 + +""" + Arduino IoT Cloud API + + Provides a set of endpoints to manage Arduino IoT Cloud **Devices**, **Things**, **Properties** and **Timeseries**. This API can be called just with any HTTP Client, or using one of these clients: * [Javascript NPM package](https://www.npmjs.com/package/@arduino/arduino-iot-client) * [Python PYPI Package](https://pypi.org/project/arduino-iot-client/) * [Golang Module](https://github.com/arduino/iot-client-go) # noqa: E501 + + The version of the OpenAPI document: 2.0 + Generated by: https://openapi-generator.tech +""" + +from datetime import date, datetime # noqa: F401 +import decimal # noqa: F401 +import functools # noqa: F401 +import io # noqa: F401 +import re # noqa: F401 +import typing # noqa: F401 +import typing_extensions # noqa: F401 +import uuid # noqa: F401 + +import frozendict # noqa: F401 + +from iot_api_client import schemas # noqa: F401 + + +class ArduinoSeriesSampledResponse( + schemas.DictSchema +): + """NOTE: This class is auto generated by OpenAPI Generator. + Ref: https://openapi-generator.tech + + Do not edit the class manually. + + ArduinoSeriesSampledResponse media type (default view) + """ + + + class MetaOapg: + required = { + "count_values", + "resp_version", + "times", + "from_date", + "to_date", + "query", + "values", + "interval", + "status", + } + + class properties: + count_values = schemas.Int64Schema + from_date = schemas.DateTimeSchema + interval = schemas.Int64Schema + query = schemas.StrSchema + resp_version = schemas.Int64Schema + status = schemas.StrSchema + + + class times( + schemas.ListSchema + ): + + + class MetaOapg: + items = schemas.DateTimeSchema + + def __new__( + cls, + _arg: typing.Union[typing.Tuple[typing.Union[MetaOapg.items, str, datetime, ]], typing.List[typing.Union[MetaOapg.items, str, datetime, ]]], + _configuration: typing.Optional[schemas.Configuration] = None, + ) -> 'times': + return super().__new__( + cls, + _arg, + _configuration=_configuration, + ) + + def __getitem__(self, i: int) -> MetaOapg.items: + return super().__getitem__(i) + to_date = schemas.DateTimeSchema + + + class values( + schemas.ListSchema + ): + + + class MetaOapg: + items = schemas.AnyTypeSchema + + def __new__( + cls, + _arg: typing.Union[typing.Tuple[typing.Union[MetaOapg.items, dict, frozendict.frozendict, str, date, datetime, uuid.UUID, int, float, decimal.Decimal, bool, None, list, tuple, bytes, io.FileIO, io.BufferedReader, ]], typing.List[typing.Union[MetaOapg.items, dict, frozendict.frozendict, str, date, datetime, uuid.UUID, int, float, decimal.Decimal, bool, None, list, tuple, bytes, io.FileIO, io.BufferedReader, ]]], + _configuration: typing.Optional[schemas.Configuration] = None, + ) -> 'values': + return super().__new__( + cls, + _arg, + _configuration=_configuration, + ) + + def __getitem__(self, i: int) -> MetaOapg.items: + return super().__getitem__(i) + message = schemas.StrSchema + series_limit = schemas.Int64Schema + __annotations__ = { + "count_values": count_values, + "from_date": from_date, + "interval": interval, + "query": query, + "resp_version": resp_version, + "status": status, + "times": times, + "to_date": to_date, + "values": values, + "message": message, + "series_limit": series_limit, + } + + count_values: MetaOapg.properties.count_values + resp_version: MetaOapg.properties.resp_version + times: MetaOapg.properties.times + from_date: MetaOapg.properties.from_date + to_date: MetaOapg.properties.to_date + query: MetaOapg.properties.query + values: MetaOapg.properties.values + interval: MetaOapg.properties.interval + status: MetaOapg.properties.status + + @typing.overload + def __getitem__(self, name: typing_extensions.Literal["count_values"]) -> MetaOapg.properties.count_values: ... + + @typing.overload + def __getitem__(self, name: typing_extensions.Literal["from_date"]) -> MetaOapg.properties.from_date: ... + + @typing.overload + def __getitem__(self, name: typing_extensions.Literal["interval"]) -> MetaOapg.properties.interval: ... + + @typing.overload + def __getitem__(self, name: typing_extensions.Literal["query"]) -> MetaOapg.properties.query: ... + + @typing.overload + def __getitem__(self, name: typing_extensions.Literal["resp_version"]) -> MetaOapg.properties.resp_version: ... + + @typing.overload + def __getitem__(self, name: typing_extensions.Literal["status"]) -> MetaOapg.properties.status: ... + + @typing.overload + def __getitem__(self, name: typing_extensions.Literal["times"]) -> MetaOapg.properties.times: ... + + @typing.overload + def __getitem__(self, name: typing_extensions.Literal["to_date"]) -> MetaOapg.properties.to_date: ... + + @typing.overload + def __getitem__(self, name: typing_extensions.Literal["values"]) -> MetaOapg.properties.values: ... + + @typing.overload + def __getitem__(self, name: typing_extensions.Literal["message"]) -> MetaOapg.properties.message: ... + + @typing.overload + def __getitem__(self, name: typing_extensions.Literal["series_limit"]) -> MetaOapg.properties.series_limit: ... + + @typing.overload + def __getitem__(self, name: str) -> schemas.UnsetAnyTypeSchema: ... + + def __getitem__(self, name: typing.Union[typing_extensions.Literal["count_values", "from_date", "interval", "query", "resp_version", "status", "times", "to_date", "values", "message", "series_limit", ], str]): + # dict_instance[name] accessor + return super().__getitem__(name) + + + @typing.overload + def get_item_oapg(self, name: typing_extensions.Literal["count_values"]) -> MetaOapg.properties.count_values: ... + + @typing.overload + def get_item_oapg(self, name: typing_extensions.Literal["from_date"]) -> MetaOapg.properties.from_date: ... + + @typing.overload + def get_item_oapg(self, name: typing_extensions.Literal["interval"]) -> MetaOapg.properties.interval: ... + + @typing.overload + def get_item_oapg(self, name: typing_extensions.Literal["query"]) -> MetaOapg.properties.query: ... + + @typing.overload + def get_item_oapg(self, name: typing_extensions.Literal["resp_version"]) -> MetaOapg.properties.resp_version: ... + + @typing.overload + def get_item_oapg(self, name: typing_extensions.Literal["status"]) -> MetaOapg.properties.status: ... + + @typing.overload + def get_item_oapg(self, name: typing_extensions.Literal["times"]) -> MetaOapg.properties.times: ... + + @typing.overload + def get_item_oapg(self, name: typing_extensions.Literal["to_date"]) -> MetaOapg.properties.to_date: ... + + @typing.overload + def get_item_oapg(self, name: typing_extensions.Literal["values"]) -> MetaOapg.properties.values: ... + + @typing.overload + def get_item_oapg(self, name: typing_extensions.Literal["message"]) -> typing.Union[MetaOapg.properties.message, schemas.Unset]: ... + + @typing.overload + def get_item_oapg(self, name: typing_extensions.Literal["series_limit"]) -> typing.Union[MetaOapg.properties.series_limit, schemas.Unset]: ... + + @typing.overload + def get_item_oapg(self, name: str) -> typing.Union[schemas.UnsetAnyTypeSchema, schemas.Unset]: ... + + def get_item_oapg(self, name: typing.Union[typing_extensions.Literal["count_values", "from_date", "interval", "query", "resp_version", "status", "times", "to_date", "values", "message", "series_limit", ], str]): + return super().get_item_oapg(name) + + + def __new__( + cls, + *_args: typing.Union[dict, frozendict.frozendict, ], + count_values: typing.Union[MetaOapg.properties.count_values, decimal.Decimal, int, ], + resp_version: typing.Union[MetaOapg.properties.resp_version, decimal.Decimal, int, ], + times: typing.Union[MetaOapg.properties.times, list, tuple, ], + from_date: typing.Union[MetaOapg.properties.from_date, str, datetime, ], + to_date: typing.Union[MetaOapg.properties.to_date, str, datetime, ], + query: typing.Union[MetaOapg.properties.query, str, ], + values: typing.Union[MetaOapg.properties.values, list, tuple, ], + interval: typing.Union[MetaOapg.properties.interval, decimal.Decimal, int, ], + status: typing.Union[MetaOapg.properties.status, str, ], + message: typing.Union[MetaOapg.properties.message, str, schemas.Unset] = schemas.unset, + series_limit: typing.Union[MetaOapg.properties.series_limit, decimal.Decimal, int, schemas.Unset] = schemas.unset, + _configuration: typing.Optional[schemas.Configuration] = None, + **kwargs: typing.Union[schemas.AnyTypeSchema, dict, frozendict.frozendict, str, date, datetime, uuid.UUID, int, float, decimal.Decimal, None, list, tuple, bytes], + ) -> 'ArduinoSeriesSampledResponse': + return super().__new__( + cls, + *_args, + count_values=count_values, + resp_version=resp_version, + times=times, + from_date=from_date, + to_date=to_date, + query=query, + values=values, + interval=interval, + status=status, + message=message, + series_limit=series_limit, + _configuration=_configuration, + **kwargs, + ) diff --git a/iot_api_client/model/arduino_template.py b/iot_api_client/model/arduino_template.py new file mode 100644 index 0000000..6ff7e28 --- /dev/null +++ b/iot_api_client/model/arduino_template.py @@ -0,0 +1,154 @@ +# coding: utf-8 + +""" + Arduino IoT Cloud API + + Provides a set of endpoints to manage Arduino IoT Cloud **Devices**, **Things**, **Properties** and **Timeseries**. This API can be called just with any HTTP Client, or using one of these clients: * [Javascript NPM package](https://www.npmjs.com/package/@arduino/arduino-iot-client) * [Python PYPI Package](https://pypi.org/project/arduino-iot-client/) * [Golang Module](https://github.com/arduino/iot-client-go) # noqa: E501 + + The version of the OpenAPI document: 2.0 + Generated by: https://openapi-generator.tech +""" + +from datetime import date, datetime # noqa: F401 +import decimal # noqa: F401 +import functools # noqa: F401 +import io # noqa: F401 +import re # noqa: F401 +import typing # noqa: F401 +import typing_extensions # noqa: F401 +import uuid # noqa: F401 + +import frozendict # noqa: F401 + +from iot_api_client import schemas # noqa: F401 + + +class ArduinoTemplate( + schemas.DictSchema +): + """NOTE: This class is auto generated by OpenAPI Generator. + Ref: https://openapi-generator.tech + + Do not edit the class manually. + + ArduinoTemplate media type (default view) + """ + + + class MetaOapg: + required = { + "things", + } + + class properties: + + @staticmethod + def things() -> typing.Type['ArduinoThingresultCollection']: + return ArduinoThingresultCollection + + + class dashboards( + schemas.ListSchema + ): + + + class MetaOapg: + items = schemas.UUIDSchema + + def __new__( + cls, + _arg: typing.Union[typing.Tuple[typing.Union[MetaOapg.items, str, uuid.UUID, ]], typing.List[typing.Union[MetaOapg.items, str, uuid.UUID, ]]], + _configuration: typing.Optional[schemas.Configuration] = None, + ) -> 'dashboards': + return super().__new__( + cls, + _arg, + _configuration=_configuration, + ) + + def __getitem__(self, i: int) -> MetaOapg.items: + return super().__getitem__(i) + + + class triggers( + schemas.ListSchema + ): + + + class MetaOapg: + items = schemas.UUIDSchema + + def __new__( + cls, + _arg: typing.Union[typing.Tuple[typing.Union[MetaOapg.items, str, uuid.UUID, ]], typing.List[typing.Union[MetaOapg.items, str, uuid.UUID, ]]], + _configuration: typing.Optional[schemas.Configuration] = None, + ) -> 'triggers': + return super().__new__( + cls, + _arg, + _configuration=_configuration, + ) + + def __getitem__(self, i: int) -> MetaOapg.items: + return super().__getitem__(i) + __annotations__ = { + "things": things, + "dashboards": dashboards, + "triggers": triggers, + } + + things: 'ArduinoThingresultCollection' + + @typing.overload + def __getitem__(self, name: typing_extensions.Literal["things"]) -> 'ArduinoThingresultCollection': ... + + @typing.overload + def __getitem__(self, name: typing_extensions.Literal["dashboards"]) -> MetaOapg.properties.dashboards: ... + + @typing.overload + def __getitem__(self, name: typing_extensions.Literal["triggers"]) -> MetaOapg.properties.triggers: ... + + @typing.overload + def __getitem__(self, name: str) -> schemas.UnsetAnyTypeSchema: ... + + def __getitem__(self, name: typing.Union[typing_extensions.Literal["things", "dashboards", "triggers", ], str]): + # dict_instance[name] accessor + return super().__getitem__(name) + + + @typing.overload + def get_item_oapg(self, name: typing_extensions.Literal["things"]) -> 'ArduinoThingresultCollection': ... + + @typing.overload + def get_item_oapg(self, name: typing_extensions.Literal["dashboards"]) -> typing.Union[MetaOapg.properties.dashboards, schemas.Unset]: ... + + @typing.overload + def get_item_oapg(self, name: typing_extensions.Literal["triggers"]) -> typing.Union[MetaOapg.properties.triggers, schemas.Unset]: ... + + @typing.overload + def get_item_oapg(self, name: str) -> typing.Union[schemas.UnsetAnyTypeSchema, schemas.Unset]: ... + + def get_item_oapg(self, name: typing.Union[typing_extensions.Literal["things", "dashboards", "triggers", ], str]): + return super().get_item_oapg(name) + + + def __new__( + cls, + *_args: typing.Union[dict, frozendict.frozendict, ], + things: 'ArduinoThingresultCollection', + dashboards: typing.Union[MetaOapg.properties.dashboards, list, tuple, schemas.Unset] = schemas.unset, + triggers: typing.Union[MetaOapg.properties.triggers, list, tuple, schemas.Unset] = schemas.unset, + _configuration: typing.Optional[schemas.Configuration] = None, + **kwargs: typing.Union[schemas.AnyTypeSchema, dict, frozendict.frozendict, str, date, datetime, uuid.UUID, int, float, decimal.Decimal, None, list, tuple, bytes], + ) -> 'ArduinoTemplate': + return super().__new__( + cls, + *_args, + things=things, + dashboards=dashboards, + triggers=triggers, + _configuration=_configuration, + **kwargs, + ) + +from iot_api_client.model.arduino_thingresult_collection import ArduinoThingresultCollection diff --git a/iot_api_client/model/arduino_template.pyi b/iot_api_client/model/arduino_template.pyi new file mode 100644 index 0000000..6ff7e28 --- /dev/null +++ b/iot_api_client/model/arduino_template.pyi @@ -0,0 +1,154 @@ +# coding: utf-8 + +""" + Arduino IoT Cloud API + + Provides a set of endpoints to manage Arduino IoT Cloud **Devices**, **Things**, **Properties** and **Timeseries**. This API can be called just with any HTTP Client, or using one of these clients: * [Javascript NPM package](https://www.npmjs.com/package/@arduino/arduino-iot-client) * [Python PYPI Package](https://pypi.org/project/arduino-iot-client/) * [Golang Module](https://github.com/arduino/iot-client-go) # noqa: E501 + + The version of the OpenAPI document: 2.0 + Generated by: https://openapi-generator.tech +""" + +from datetime import date, datetime # noqa: F401 +import decimal # noqa: F401 +import functools # noqa: F401 +import io # noqa: F401 +import re # noqa: F401 +import typing # noqa: F401 +import typing_extensions # noqa: F401 +import uuid # noqa: F401 + +import frozendict # noqa: F401 + +from iot_api_client import schemas # noqa: F401 + + +class ArduinoTemplate( + schemas.DictSchema +): + """NOTE: This class is auto generated by OpenAPI Generator. + Ref: https://openapi-generator.tech + + Do not edit the class manually. + + ArduinoTemplate media type (default view) + """ + + + class MetaOapg: + required = { + "things", + } + + class properties: + + @staticmethod + def things() -> typing.Type['ArduinoThingresultCollection']: + return ArduinoThingresultCollection + + + class dashboards( + schemas.ListSchema + ): + + + class MetaOapg: + items = schemas.UUIDSchema + + def __new__( + cls, + _arg: typing.Union[typing.Tuple[typing.Union[MetaOapg.items, str, uuid.UUID, ]], typing.List[typing.Union[MetaOapg.items, str, uuid.UUID, ]]], + _configuration: typing.Optional[schemas.Configuration] = None, + ) -> 'dashboards': + return super().__new__( + cls, + _arg, + _configuration=_configuration, + ) + + def __getitem__(self, i: int) -> MetaOapg.items: + return super().__getitem__(i) + + + class triggers( + schemas.ListSchema + ): + + + class MetaOapg: + items = schemas.UUIDSchema + + def __new__( + cls, + _arg: typing.Union[typing.Tuple[typing.Union[MetaOapg.items, str, uuid.UUID, ]], typing.List[typing.Union[MetaOapg.items, str, uuid.UUID, ]]], + _configuration: typing.Optional[schemas.Configuration] = None, + ) -> 'triggers': + return super().__new__( + cls, + _arg, + _configuration=_configuration, + ) + + def __getitem__(self, i: int) -> MetaOapg.items: + return super().__getitem__(i) + __annotations__ = { + "things": things, + "dashboards": dashboards, + "triggers": triggers, + } + + things: 'ArduinoThingresultCollection' + + @typing.overload + def __getitem__(self, name: typing_extensions.Literal["things"]) -> 'ArduinoThingresultCollection': ... + + @typing.overload + def __getitem__(self, name: typing_extensions.Literal["dashboards"]) -> MetaOapg.properties.dashboards: ... + + @typing.overload + def __getitem__(self, name: typing_extensions.Literal["triggers"]) -> MetaOapg.properties.triggers: ... + + @typing.overload + def __getitem__(self, name: str) -> schemas.UnsetAnyTypeSchema: ... + + def __getitem__(self, name: typing.Union[typing_extensions.Literal["things", "dashboards", "triggers", ], str]): + # dict_instance[name] accessor + return super().__getitem__(name) + + + @typing.overload + def get_item_oapg(self, name: typing_extensions.Literal["things"]) -> 'ArduinoThingresultCollection': ... + + @typing.overload + def get_item_oapg(self, name: typing_extensions.Literal["dashboards"]) -> typing.Union[MetaOapg.properties.dashboards, schemas.Unset]: ... + + @typing.overload + def get_item_oapg(self, name: typing_extensions.Literal["triggers"]) -> typing.Union[MetaOapg.properties.triggers, schemas.Unset]: ... + + @typing.overload + def get_item_oapg(self, name: str) -> typing.Union[schemas.UnsetAnyTypeSchema, schemas.Unset]: ... + + def get_item_oapg(self, name: typing.Union[typing_extensions.Literal["things", "dashboards", "triggers", ], str]): + return super().get_item_oapg(name) + + + def __new__( + cls, + *_args: typing.Union[dict, frozendict.frozendict, ], + things: 'ArduinoThingresultCollection', + dashboards: typing.Union[MetaOapg.properties.dashboards, list, tuple, schemas.Unset] = schemas.unset, + triggers: typing.Union[MetaOapg.properties.triggers, list, tuple, schemas.Unset] = schemas.unset, + _configuration: typing.Optional[schemas.Configuration] = None, + **kwargs: typing.Union[schemas.AnyTypeSchema, dict, frozendict.frozendict, str, date, datetime, uuid.UUID, int, float, decimal.Decimal, None, list, tuple, bytes], + ) -> 'ArduinoTemplate': + return super().__new__( + cls, + *_args, + things=things, + dashboards=dashboards, + triggers=triggers, + _configuration=_configuration, + **kwargs, + ) + +from iot_api_client.model.arduino_thingresult_collection import ArduinoThingresultCollection diff --git a/iot_api_client/model/arduino_templateproperty.py b/iot_api_client/model/arduino_templateproperty.py index 3d78a6a..68a104b 100644 --- a/iot_api_client/model/arduino_templateproperty.py +++ b/iot_api_client/model/arduino_templateproperty.py @@ -48,6 +48,7 @@ class properties: permission = schemas.StrSchema type = schemas.StrSchema update_strategy = schemas.StrSchema + id = schemas.StrSchema update_parameter = schemas.Float64Schema variable_name = schemas.StrSchema __annotations__ = { @@ -55,6 +56,7 @@ class properties: "permission": permission, "type": type, "update_strategy": update_strategy, + "id": id, "update_parameter": update_parameter, "variable_name": variable_name, } @@ -76,6 +78,9 @@ def __getitem__(self, name: typing_extensions.Literal["type"]) -> MetaOapg.prope @typing.overload def __getitem__(self, name: typing_extensions.Literal["update_strategy"]) -> MetaOapg.properties.update_strategy: ... + @typing.overload + def __getitem__(self, name: typing_extensions.Literal["id"]) -> MetaOapg.properties.id: ... + @typing.overload def __getitem__(self, name: typing_extensions.Literal["update_parameter"]) -> MetaOapg.properties.update_parameter: ... @@ -85,7 +90,7 @@ def __getitem__(self, name: typing_extensions.Literal["variable_name"]) -> MetaO @typing.overload def __getitem__(self, name: str) -> schemas.UnsetAnyTypeSchema: ... - def __getitem__(self, name: typing.Union[typing_extensions.Literal["name", "permission", "type", "update_strategy", "update_parameter", "variable_name", ], str]): + def __getitem__(self, name: typing.Union[typing_extensions.Literal["name", "permission", "type", "update_strategy", "id", "update_parameter", "variable_name", ], str]): # dict_instance[name] accessor return super().__getitem__(name) @@ -102,6 +107,9 @@ def get_item_oapg(self, name: typing_extensions.Literal["type"]) -> MetaOapg.pro @typing.overload def get_item_oapg(self, name: typing_extensions.Literal["update_strategy"]) -> MetaOapg.properties.update_strategy: ... + @typing.overload + def get_item_oapg(self, name: typing_extensions.Literal["id"]) -> typing.Union[MetaOapg.properties.id, schemas.Unset]: ... + @typing.overload def get_item_oapg(self, name: typing_extensions.Literal["update_parameter"]) -> typing.Union[MetaOapg.properties.update_parameter, schemas.Unset]: ... @@ -111,7 +119,7 @@ def get_item_oapg(self, name: typing_extensions.Literal["variable_name"]) -> typ @typing.overload def get_item_oapg(self, name: str) -> typing.Union[schemas.UnsetAnyTypeSchema, schemas.Unset]: ... - def get_item_oapg(self, name: typing.Union[typing_extensions.Literal["name", "permission", "type", "update_strategy", "update_parameter", "variable_name", ], str]): + def get_item_oapg(self, name: typing.Union[typing_extensions.Literal["name", "permission", "type", "update_strategy", "id", "update_parameter", "variable_name", ], str]): return super().get_item_oapg(name) @@ -122,6 +130,7 @@ def __new__( name: typing.Union[MetaOapg.properties.name, str, ], permission: typing.Union[MetaOapg.properties.permission, str, ], type: typing.Union[MetaOapg.properties.type, str, ], + id: typing.Union[MetaOapg.properties.id, str, schemas.Unset] = schemas.unset, update_parameter: typing.Union[MetaOapg.properties.update_parameter, decimal.Decimal, int, float, schemas.Unset] = schemas.unset, variable_name: typing.Union[MetaOapg.properties.variable_name, str, schemas.Unset] = schemas.unset, _configuration: typing.Optional[schemas.Configuration] = None, @@ -134,6 +143,7 @@ def __new__( name=name, permission=permission, type=type, + id=id, update_parameter=update_parameter, variable_name=variable_name, _configuration=_configuration, diff --git a/iot_api_client/model/arduino_templateproperty.pyi b/iot_api_client/model/arduino_templateproperty.pyi index 3d78a6a..68a104b 100644 --- a/iot_api_client/model/arduino_templateproperty.pyi +++ b/iot_api_client/model/arduino_templateproperty.pyi @@ -48,6 +48,7 @@ class ArduinoTemplateproperty( permission = schemas.StrSchema type = schemas.StrSchema update_strategy = schemas.StrSchema + id = schemas.StrSchema update_parameter = schemas.Float64Schema variable_name = schemas.StrSchema __annotations__ = { @@ -55,6 +56,7 @@ class ArduinoTemplateproperty( "permission": permission, "type": type, "update_strategy": update_strategy, + "id": id, "update_parameter": update_parameter, "variable_name": variable_name, } @@ -76,6 +78,9 @@ class ArduinoTemplateproperty( @typing.overload def __getitem__(self, name: typing_extensions.Literal["update_strategy"]) -> MetaOapg.properties.update_strategy: ... + @typing.overload + def __getitem__(self, name: typing_extensions.Literal["id"]) -> MetaOapg.properties.id: ... + @typing.overload def __getitem__(self, name: typing_extensions.Literal["update_parameter"]) -> MetaOapg.properties.update_parameter: ... @@ -85,7 +90,7 @@ class ArduinoTemplateproperty( @typing.overload def __getitem__(self, name: str) -> schemas.UnsetAnyTypeSchema: ... - def __getitem__(self, name: typing.Union[typing_extensions.Literal["name", "permission", "type", "update_strategy", "update_parameter", "variable_name", ], str]): + def __getitem__(self, name: typing.Union[typing_extensions.Literal["name", "permission", "type", "update_strategy", "id", "update_parameter", "variable_name", ], str]): # dict_instance[name] accessor return super().__getitem__(name) @@ -102,6 +107,9 @@ class ArduinoTemplateproperty( @typing.overload def get_item_oapg(self, name: typing_extensions.Literal["update_strategy"]) -> MetaOapg.properties.update_strategy: ... + @typing.overload + def get_item_oapg(self, name: typing_extensions.Literal["id"]) -> typing.Union[MetaOapg.properties.id, schemas.Unset]: ... + @typing.overload def get_item_oapg(self, name: typing_extensions.Literal["update_parameter"]) -> typing.Union[MetaOapg.properties.update_parameter, schemas.Unset]: ... @@ -111,7 +119,7 @@ class ArduinoTemplateproperty( @typing.overload def get_item_oapg(self, name: str) -> typing.Union[schemas.UnsetAnyTypeSchema, schemas.Unset]: ... - def get_item_oapg(self, name: typing.Union[typing_extensions.Literal["name", "permission", "type", "update_strategy", "update_parameter", "variable_name", ], str]): + def get_item_oapg(self, name: typing.Union[typing_extensions.Literal["name", "permission", "type", "update_strategy", "id", "update_parameter", "variable_name", ], str]): return super().get_item_oapg(name) @@ -122,6 +130,7 @@ class ArduinoTemplateproperty( name: typing.Union[MetaOapg.properties.name, str, ], permission: typing.Union[MetaOapg.properties.permission, str, ], type: typing.Union[MetaOapg.properties.type, str, ], + id: typing.Union[MetaOapg.properties.id, str, schemas.Unset] = schemas.unset, update_parameter: typing.Union[MetaOapg.properties.update_parameter, decimal.Decimal, int, float, schemas.Unset] = schemas.unset, variable_name: typing.Union[MetaOapg.properties.variable_name, str, schemas.Unset] = schemas.unset, _configuration: typing.Optional[schemas.Configuration] = None, @@ -134,6 +143,7 @@ class ArduinoTemplateproperty( name=name, permission=permission, type=type, + id=id, update_parameter=update_parameter, variable_name=variable_name, _configuration=_configuration, diff --git a/iot_api_client/model/arduino_thing.py b/iot_api_client/model/arduino_thing.py index 992b03c..486b4aa 100644 --- a/iot_api_client/model/arduino_thing.py +++ b/iot_api_client/model/arduino_thing.py @@ -50,6 +50,32 @@ class properties: name = schemas.StrSchema timezone = schemas.StrSchema user_id = schemas.UUIDSchema + + + class assistant( + schemas.EnumBase, + schemas.StrSchema + ): + + + class MetaOapg: + enum_value_to_name = { + "ALEXA": "ALEXA", + "GOOGLE": "GOOGLE", + "NONE": "NONE", + } + + @schemas.classproperty + def ALEXA(cls): + return cls("ALEXA") + + @schemas.classproperty + def GOOGLE(cls): + return cls("GOOGLE") + + @schemas.classproperty + def NONE(cls): + return cls("NONE") created_at = schemas.DateTimeSchema deleted_at = schemas.DateTimeSchema device_fqbn = schemas.StrSchema @@ -101,6 +127,7 @@ def __new__( "name": name, "timezone": timezone, "user_id": user_id, + "assistant": assistant, "created_at": created_at, "deleted_at": deleted_at, "device_fqbn": device_fqbn, @@ -138,6 +165,9 @@ def __getitem__(self, name: typing_extensions.Literal["timezone"]) -> MetaOapg.p @typing.overload def __getitem__(self, name: typing_extensions.Literal["user_id"]) -> MetaOapg.properties.user_id: ... + @typing.overload + def __getitem__(self, name: typing_extensions.Literal["assistant"]) -> MetaOapg.properties.assistant: ... + @typing.overload def __getitem__(self, name: typing_extensions.Literal["created_at"]) -> MetaOapg.properties.created_at: ... @@ -183,7 +213,7 @@ def __getitem__(self, name: typing_extensions.Literal["webhook_uri"]) -> MetaOap @typing.overload def __getitem__(self, name: str) -> schemas.UnsetAnyTypeSchema: ... - def __getitem__(self, name: typing.Union[typing_extensions.Literal["href", "id", "name", "timezone", "user_id", "created_at", "deleted_at", "device_fqbn", "device_id", "device_name", "device_type", "organization_id", "properties", "properties_count", "sketch_id", "tags", "updated_at", "webhook_active", "webhook_uri", ], str]): + def __getitem__(self, name: typing.Union[typing_extensions.Literal["href", "id", "name", "timezone", "user_id", "assistant", "created_at", "deleted_at", "device_fqbn", "device_id", "device_name", "device_type", "organization_id", "properties", "properties_count", "sketch_id", "tags", "updated_at", "webhook_active", "webhook_uri", ], str]): # dict_instance[name] accessor return super().__getitem__(name) @@ -203,6 +233,9 @@ def get_item_oapg(self, name: typing_extensions.Literal["timezone"]) -> MetaOapg @typing.overload def get_item_oapg(self, name: typing_extensions.Literal["user_id"]) -> MetaOapg.properties.user_id: ... + @typing.overload + def get_item_oapg(self, name: typing_extensions.Literal["assistant"]) -> typing.Union[MetaOapg.properties.assistant, schemas.Unset]: ... + @typing.overload def get_item_oapg(self, name: typing_extensions.Literal["created_at"]) -> typing.Union[MetaOapg.properties.created_at, schemas.Unset]: ... @@ -248,7 +281,7 @@ def get_item_oapg(self, name: typing_extensions.Literal["webhook_uri"]) -> typin @typing.overload def get_item_oapg(self, name: str) -> typing.Union[schemas.UnsetAnyTypeSchema, schemas.Unset]: ... - def get_item_oapg(self, name: typing.Union[typing_extensions.Literal["href", "id", "name", "timezone", "user_id", "created_at", "deleted_at", "device_fqbn", "device_id", "device_name", "device_type", "organization_id", "properties", "properties_count", "sketch_id", "tags", "updated_at", "webhook_active", "webhook_uri", ], str]): + def get_item_oapg(self, name: typing.Union[typing_extensions.Literal["href", "id", "name", "timezone", "user_id", "assistant", "created_at", "deleted_at", "device_fqbn", "device_id", "device_name", "device_type", "organization_id", "properties", "properties_count", "sketch_id", "tags", "updated_at", "webhook_active", "webhook_uri", ], str]): return super().get_item_oapg(name) @@ -260,6 +293,7 @@ def __new__( name: typing.Union[MetaOapg.properties.name, str, ], href: typing.Union[MetaOapg.properties.href, str, ], id: typing.Union[MetaOapg.properties.id, str, uuid.UUID, ], + assistant: typing.Union[MetaOapg.properties.assistant, str, schemas.Unset] = schemas.unset, created_at: typing.Union[MetaOapg.properties.created_at, str, datetime, schemas.Unset] = schemas.unset, deleted_at: typing.Union[MetaOapg.properties.deleted_at, str, datetime, schemas.Unset] = schemas.unset, device_fqbn: typing.Union[MetaOapg.properties.device_fqbn, str, schemas.Unset] = schemas.unset, @@ -285,6 +319,7 @@ def __new__( name=name, href=href, id=id, + assistant=assistant, created_at=created_at, deleted_at=deleted_at, device_fqbn=device_fqbn, diff --git a/iot_api_client/model/arduino_thing.pyi b/iot_api_client/model/arduino_thing.pyi index 992b03c..74787f8 100644 --- a/iot_api_client/model/arduino_thing.pyi +++ b/iot_api_client/model/arduino_thing.pyi @@ -50,6 +50,24 @@ class ArduinoThing( name = schemas.StrSchema timezone = schemas.StrSchema user_id = schemas.UUIDSchema + + + class assistant( + schemas.EnumBase, + schemas.StrSchema + ): + + @schemas.classproperty + def ALEXA(cls): + return cls("ALEXA") + + @schemas.classproperty + def GOOGLE(cls): + return cls("GOOGLE") + + @schemas.classproperty + def NONE(cls): + return cls("NONE") created_at = schemas.DateTimeSchema deleted_at = schemas.DateTimeSchema device_fqbn = schemas.StrSchema @@ -101,6 +119,7 @@ class ArduinoThing( "name": name, "timezone": timezone, "user_id": user_id, + "assistant": assistant, "created_at": created_at, "deleted_at": deleted_at, "device_fqbn": device_fqbn, @@ -138,6 +157,9 @@ class ArduinoThing( @typing.overload def __getitem__(self, name: typing_extensions.Literal["user_id"]) -> MetaOapg.properties.user_id: ... + @typing.overload + def __getitem__(self, name: typing_extensions.Literal["assistant"]) -> MetaOapg.properties.assistant: ... + @typing.overload def __getitem__(self, name: typing_extensions.Literal["created_at"]) -> MetaOapg.properties.created_at: ... @@ -183,7 +205,7 @@ class ArduinoThing( @typing.overload def __getitem__(self, name: str) -> schemas.UnsetAnyTypeSchema: ... - def __getitem__(self, name: typing.Union[typing_extensions.Literal["href", "id", "name", "timezone", "user_id", "created_at", "deleted_at", "device_fqbn", "device_id", "device_name", "device_type", "organization_id", "properties", "properties_count", "sketch_id", "tags", "updated_at", "webhook_active", "webhook_uri", ], str]): + def __getitem__(self, name: typing.Union[typing_extensions.Literal["href", "id", "name", "timezone", "user_id", "assistant", "created_at", "deleted_at", "device_fqbn", "device_id", "device_name", "device_type", "organization_id", "properties", "properties_count", "sketch_id", "tags", "updated_at", "webhook_active", "webhook_uri", ], str]): # dict_instance[name] accessor return super().__getitem__(name) @@ -203,6 +225,9 @@ class ArduinoThing( @typing.overload def get_item_oapg(self, name: typing_extensions.Literal["user_id"]) -> MetaOapg.properties.user_id: ... + @typing.overload + def get_item_oapg(self, name: typing_extensions.Literal["assistant"]) -> typing.Union[MetaOapg.properties.assistant, schemas.Unset]: ... + @typing.overload def get_item_oapg(self, name: typing_extensions.Literal["created_at"]) -> typing.Union[MetaOapg.properties.created_at, schemas.Unset]: ... @@ -248,7 +273,7 @@ class ArduinoThing( @typing.overload def get_item_oapg(self, name: str) -> typing.Union[schemas.UnsetAnyTypeSchema, schemas.Unset]: ... - def get_item_oapg(self, name: typing.Union[typing_extensions.Literal["href", "id", "name", "timezone", "user_id", "created_at", "deleted_at", "device_fqbn", "device_id", "device_name", "device_type", "organization_id", "properties", "properties_count", "sketch_id", "tags", "updated_at", "webhook_active", "webhook_uri", ], str]): + def get_item_oapg(self, name: typing.Union[typing_extensions.Literal["href", "id", "name", "timezone", "user_id", "assistant", "created_at", "deleted_at", "device_fqbn", "device_id", "device_name", "device_type", "organization_id", "properties", "properties_count", "sketch_id", "tags", "updated_at", "webhook_active", "webhook_uri", ], str]): return super().get_item_oapg(name) @@ -260,6 +285,7 @@ class ArduinoThing( name: typing.Union[MetaOapg.properties.name, str, ], href: typing.Union[MetaOapg.properties.href, str, ], id: typing.Union[MetaOapg.properties.id, str, uuid.UUID, ], + assistant: typing.Union[MetaOapg.properties.assistant, str, schemas.Unset] = schemas.unset, created_at: typing.Union[MetaOapg.properties.created_at, str, datetime, schemas.Unset] = schemas.unset, deleted_at: typing.Union[MetaOapg.properties.deleted_at, str, datetime, schemas.Unset] = schemas.unset, device_fqbn: typing.Union[MetaOapg.properties.device_fqbn, str, schemas.Unset] = schemas.unset, @@ -285,6 +311,7 @@ class ArduinoThing( name=name, href=href, id=id, + assistant=assistant, created_at=created_at, deleted_at=deleted_at, device_fqbn=device_fqbn, diff --git a/iot_api_client/model/arduino_thingresult.py b/iot_api_client/model/arduino_thingresult.py new file mode 100644 index 0000000..4aa11fb --- /dev/null +++ b/iot_api_client/model/arduino_thingresult.py @@ -0,0 +1,107 @@ +# coding: utf-8 + +""" + Arduino IoT Cloud API + + Provides a set of endpoints to manage Arduino IoT Cloud **Devices**, **Things**, **Properties** and **Timeseries**. This API can be called just with any HTTP Client, or using one of these clients: * [Javascript NPM package](https://www.npmjs.com/package/@arduino/arduino-iot-client) * [Python PYPI Package](https://pypi.org/project/arduino-iot-client/) * [Golang Module](https://github.com/arduino/iot-client-go) # noqa: E501 + + The version of the OpenAPI document: 2.0 + Generated by: https://openapi-generator.tech +""" + +from datetime import date, datetime # noqa: F401 +import decimal # noqa: F401 +import functools # noqa: F401 +import io # noqa: F401 +import re # noqa: F401 +import typing # noqa: F401 +import typing_extensions # noqa: F401 +import uuid # noqa: F401 + +import frozendict # noqa: F401 + +from iot_api_client import schemas # noqa: F401 + + +class ArduinoThingresult( + schemas.DictSchema +): + """NOTE: This class is auto generated by OpenAPI Generator. + Ref: https://openapi-generator.tech + + Do not edit the class manually. + + ArduinoThingresult media type (default view) + """ + + + class MetaOapg: + required = { + "sketch_id", + "id", + } + + class properties: + id = schemas.UUIDSchema + sketch_id = schemas.UUIDSchema + device_id = schemas.UUIDSchema + __annotations__ = { + "id": id, + "sketch_id": sketch_id, + "device_id": device_id, + } + + sketch_id: MetaOapg.properties.sketch_id + id: MetaOapg.properties.id + + @typing.overload + def __getitem__(self, name: typing_extensions.Literal["id"]) -> MetaOapg.properties.id: ... + + @typing.overload + def __getitem__(self, name: typing_extensions.Literal["sketch_id"]) -> MetaOapg.properties.sketch_id: ... + + @typing.overload + def __getitem__(self, name: typing_extensions.Literal["device_id"]) -> MetaOapg.properties.device_id: ... + + @typing.overload + def __getitem__(self, name: str) -> schemas.UnsetAnyTypeSchema: ... + + def __getitem__(self, name: typing.Union[typing_extensions.Literal["id", "sketch_id", "device_id", ], str]): + # dict_instance[name] accessor + return super().__getitem__(name) + + + @typing.overload + def get_item_oapg(self, name: typing_extensions.Literal["id"]) -> MetaOapg.properties.id: ... + + @typing.overload + def get_item_oapg(self, name: typing_extensions.Literal["sketch_id"]) -> MetaOapg.properties.sketch_id: ... + + @typing.overload + def get_item_oapg(self, name: typing_extensions.Literal["device_id"]) -> typing.Union[MetaOapg.properties.device_id, schemas.Unset]: ... + + @typing.overload + def get_item_oapg(self, name: str) -> typing.Union[schemas.UnsetAnyTypeSchema, schemas.Unset]: ... + + def get_item_oapg(self, name: typing.Union[typing_extensions.Literal["id", "sketch_id", "device_id", ], str]): + return super().get_item_oapg(name) + + + def __new__( + cls, + *_args: typing.Union[dict, frozendict.frozendict, ], + sketch_id: typing.Union[MetaOapg.properties.sketch_id, str, uuid.UUID, ], + id: typing.Union[MetaOapg.properties.id, str, uuid.UUID, ], + device_id: typing.Union[MetaOapg.properties.device_id, str, uuid.UUID, schemas.Unset] = schemas.unset, + _configuration: typing.Optional[schemas.Configuration] = None, + **kwargs: typing.Union[schemas.AnyTypeSchema, dict, frozendict.frozendict, str, date, datetime, uuid.UUID, int, float, decimal.Decimal, None, list, tuple, bytes], + ) -> 'ArduinoThingresult': + return super().__new__( + cls, + *_args, + sketch_id=sketch_id, + id=id, + device_id=device_id, + _configuration=_configuration, + **kwargs, + ) diff --git a/iot_api_client/model/arduino_thingresult.pyi b/iot_api_client/model/arduino_thingresult.pyi new file mode 100644 index 0000000..4aa11fb --- /dev/null +++ b/iot_api_client/model/arduino_thingresult.pyi @@ -0,0 +1,107 @@ +# coding: utf-8 + +""" + Arduino IoT Cloud API + + Provides a set of endpoints to manage Arduino IoT Cloud **Devices**, **Things**, **Properties** and **Timeseries**. This API can be called just with any HTTP Client, or using one of these clients: * [Javascript NPM package](https://www.npmjs.com/package/@arduino/arduino-iot-client) * [Python PYPI Package](https://pypi.org/project/arduino-iot-client/) * [Golang Module](https://github.com/arduino/iot-client-go) # noqa: E501 + + The version of the OpenAPI document: 2.0 + Generated by: https://openapi-generator.tech +""" + +from datetime import date, datetime # noqa: F401 +import decimal # noqa: F401 +import functools # noqa: F401 +import io # noqa: F401 +import re # noqa: F401 +import typing # noqa: F401 +import typing_extensions # noqa: F401 +import uuid # noqa: F401 + +import frozendict # noqa: F401 + +from iot_api_client import schemas # noqa: F401 + + +class ArduinoThingresult( + schemas.DictSchema +): + """NOTE: This class is auto generated by OpenAPI Generator. + Ref: https://openapi-generator.tech + + Do not edit the class manually. + + ArduinoThingresult media type (default view) + """ + + + class MetaOapg: + required = { + "sketch_id", + "id", + } + + class properties: + id = schemas.UUIDSchema + sketch_id = schemas.UUIDSchema + device_id = schemas.UUIDSchema + __annotations__ = { + "id": id, + "sketch_id": sketch_id, + "device_id": device_id, + } + + sketch_id: MetaOapg.properties.sketch_id + id: MetaOapg.properties.id + + @typing.overload + def __getitem__(self, name: typing_extensions.Literal["id"]) -> MetaOapg.properties.id: ... + + @typing.overload + def __getitem__(self, name: typing_extensions.Literal["sketch_id"]) -> MetaOapg.properties.sketch_id: ... + + @typing.overload + def __getitem__(self, name: typing_extensions.Literal["device_id"]) -> MetaOapg.properties.device_id: ... + + @typing.overload + def __getitem__(self, name: str) -> schemas.UnsetAnyTypeSchema: ... + + def __getitem__(self, name: typing.Union[typing_extensions.Literal["id", "sketch_id", "device_id", ], str]): + # dict_instance[name] accessor + return super().__getitem__(name) + + + @typing.overload + def get_item_oapg(self, name: typing_extensions.Literal["id"]) -> MetaOapg.properties.id: ... + + @typing.overload + def get_item_oapg(self, name: typing_extensions.Literal["sketch_id"]) -> MetaOapg.properties.sketch_id: ... + + @typing.overload + def get_item_oapg(self, name: typing_extensions.Literal["device_id"]) -> typing.Union[MetaOapg.properties.device_id, schemas.Unset]: ... + + @typing.overload + def get_item_oapg(self, name: str) -> typing.Union[schemas.UnsetAnyTypeSchema, schemas.Unset]: ... + + def get_item_oapg(self, name: typing.Union[typing_extensions.Literal["id", "sketch_id", "device_id", ], str]): + return super().get_item_oapg(name) + + + def __new__( + cls, + *_args: typing.Union[dict, frozendict.frozendict, ], + sketch_id: typing.Union[MetaOapg.properties.sketch_id, str, uuid.UUID, ], + id: typing.Union[MetaOapg.properties.id, str, uuid.UUID, ], + device_id: typing.Union[MetaOapg.properties.device_id, str, uuid.UUID, schemas.Unset] = schemas.unset, + _configuration: typing.Optional[schemas.Configuration] = None, + **kwargs: typing.Union[schemas.AnyTypeSchema, dict, frozendict.frozendict, str, date, datetime, uuid.UUID, int, float, decimal.Decimal, None, list, tuple, bytes], + ) -> 'ArduinoThingresult': + return super().__new__( + cls, + *_args, + sketch_id=sketch_id, + id=id, + device_id=device_id, + _configuration=_configuration, + **kwargs, + ) diff --git a/iot_api_client/model/arduino_thingresult_collection.py b/iot_api_client/model/arduino_thingresult_collection.py new file mode 100644 index 0000000..96ba512 --- /dev/null +++ b/iot_api_client/model/arduino_thingresult_collection.py @@ -0,0 +1,58 @@ +# coding: utf-8 + +""" + Arduino IoT Cloud API + + Provides a set of endpoints to manage Arduino IoT Cloud **Devices**, **Things**, **Properties** and **Timeseries**. This API can be called just with any HTTP Client, or using one of these clients: * [Javascript NPM package](https://www.npmjs.com/package/@arduino/arduino-iot-client) * [Python PYPI Package](https://pypi.org/project/arduino-iot-client/) * [Golang Module](https://github.com/arduino/iot-client-go) # noqa: E501 + + The version of the OpenAPI document: 2.0 + Generated by: https://openapi-generator.tech +""" + +from datetime import date, datetime # noqa: F401 +import decimal # noqa: F401 +import functools # noqa: F401 +import io # noqa: F401 +import re # noqa: F401 +import typing # noqa: F401 +import typing_extensions # noqa: F401 +import uuid # noqa: F401 + +import frozendict # noqa: F401 + +from iot_api_client import schemas # noqa: F401 + + +class ArduinoThingresultCollection( + schemas.ListSchema +): + """NOTE: This class is auto generated by OpenAPI Generator. + Ref: https://openapi-generator.tech + + Do not edit the class manually. + + ArduinoThingresultCollection is the media type for an array of ArduinoThingresult (default view) + """ + + + class MetaOapg: + + @staticmethod + def items() -> typing.Type['ArduinoThingresult']: + return ArduinoThingresult + + def __new__( + cls, + _arg: typing.Union[typing.Tuple['ArduinoThingresult'], typing.List['ArduinoThingresult']], + _configuration: typing.Optional[schemas.Configuration] = None, + ) -> 'ArduinoThingresultCollection': + return super().__new__( + cls, + _arg, + _configuration=_configuration, + ) + + def __getitem__(self, i: int) -> 'ArduinoThingresult': + return super().__getitem__(i) + +from iot_api_client.model.arduino_thingresult import ArduinoThingresult diff --git a/iot_api_client/model/arduino_thingresult_collection.pyi b/iot_api_client/model/arduino_thingresult_collection.pyi new file mode 100644 index 0000000..96ba512 --- /dev/null +++ b/iot_api_client/model/arduino_thingresult_collection.pyi @@ -0,0 +1,58 @@ +# coding: utf-8 + +""" + Arduino IoT Cloud API + + Provides a set of endpoints to manage Arduino IoT Cloud **Devices**, **Things**, **Properties** and **Timeseries**. This API can be called just with any HTTP Client, or using one of these clients: * [Javascript NPM package](https://www.npmjs.com/package/@arduino/arduino-iot-client) * [Python PYPI Package](https://pypi.org/project/arduino-iot-client/) * [Golang Module](https://github.com/arduino/iot-client-go) # noqa: E501 + + The version of the OpenAPI document: 2.0 + Generated by: https://openapi-generator.tech +""" + +from datetime import date, datetime # noqa: F401 +import decimal # noqa: F401 +import functools # noqa: F401 +import io # noqa: F401 +import re # noqa: F401 +import typing # noqa: F401 +import typing_extensions # noqa: F401 +import uuid # noqa: F401 + +import frozendict # noqa: F401 + +from iot_api_client import schemas # noqa: F401 + + +class ArduinoThingresultCollection( + schemas.ListSchema +): + """NOTE: This class is auto generated by OpenAPI Generator. + Ref: https://openapi-generator.tech + + Do not edit the class manually. + + ArduinoThingresultCollection is the media type for an array of ArduinoThingresult (default view) + """ + + + class MetaOapg: + + @staticmethod + def items() -> typing.Type['ArduinoThingresult']: + return ArduinoThingresult + + def __new__( + cls, + _arg: typing.Union[typing.Tuple['ArduinoThingresult'], typing.List['ArduinoThingresult']], + _configuration: typing.Optional[schemas.Configuration] = None, + ) -> 'ArduinoThingresultCollection': + return super().__new__( + cls, + _arg, + _configuration=_configuration, + ) + + def __getitem__(self, i: int) -> 'ArduinoThingresult': + return super().__getitem__(i) + +from iot_api_client.model.arduino_thingresult import ArduinoThingresult diff --git a/iot_api_client/model/arduino_thingtemplate.py b/iot_api_client/model/arduino_thingtemplate.py index 0ddef11..8fc95c4 100644 --- a/iot_api_client/model/arduino_thingtemplate.py +++ b/iot_api_client/model/arduino_thingtemplate.py @@ -44,11 +44,13 @@ class MetaOapg: class properties: name = schemas.StrSchema timezone = schemas.StrSchema - organization_id = schemas.UUIDSchema @staticmethod - def properties() -> typing.Type['ArduinoTemplatepropertyCollection']: - return ArduinoTemplatepropertyCollection + def device_metadata() -> typing.Type['ArduinoDevicev2templatedevice']: + return ArduinoDevicev2templatedevice + id = schemas.StrSchema + organization_id = schemas.UUIDSchema + sketch_template = schemas.StrSchema class tags( @@ -75,13 +77,20 @@ def __new__( def __getitem__(self, i: int) -> 'Tag': return super().__getitem__(i) + + @staticmethod + def variables() -> typing.Type['ArduinoTemplatepropertyCollection']: + return ArduinoTemplatepropertyCollection webhook_uri = schemas.StrSchema __annotations__ = { "name": name, "timezone": timezone, + "device_metadata": device_metadata, + "id": id, "organization_id": organization_id, - "properties": properties, + "sketch_template": sketch_template, "tags": tags, + "variables": variables, "webhook_uri": webhook_uri, } @@ -94,22 +103,31 @@ def __getitem__(self, name: typing_extensions.Literal["name"]) -> MetaOapg.prope @typing.overload def __getitem__(self, name: typing_extensions.Literal["timezone"]) -> MetaOapg.properties.timezone: ... + @typing.overload + def __getitem__(self, name: typing_extensions.Literal["device_metadata"]) -> 'ArduinoDevicev2templatedevice': ... + + @typing.overload + def __getitem__(self, name: typing_extensions.Literal["id"]) -> MetaOapg.properties.id: ... + @typing.overload def __getitem__(self, name: typing_extensions.Literal["organization_id"]) -> MetaOapg.properties.organization_id: ... @typing.overload - def __getitem__(self, name: typing_extensions.Literal["properties"]) -> 'ArduinoTemplatepropertyCollection': ... + def __getitem__(self, name: typing_extensions.Literal["sketch_template"]) -> MetaOapg.properties.sketch_template: ... @typing.overload def __getitem__(self, name: typing_extensions.Literal["tags"]) -> MetaOapg.properties.tags: ... + @typing.overload + def __getitem__(self, name: typing_extensions.Literal["variables"]) -> 'ArduinoTemplatepropertyCollection': ... + @typing.overload def __getitem__(self, name: typing_extensions.Literal["webhook_uri"]) -> MetaOapg.properties.webhook_uri: ... @typing.overload def __getitem__(self, name: str) -> schemas.UnsetAnyTypeSchema: ... - def __getitem__(self, name: typing.Union[typing_extensions.Literal["name", "timezone", "organization_id", "properties", "tags", "webhook_uri", ], str]): + def __getitem__(self, name: typing.Union[typing_extensions.Literal["name", "timezone", "device_metadata", "id", "organization_id", "sketch_template", "tags", "variables", "webhook_uri", ], str]): # dict_instance[name] accessor return super().__getitem__(name) @@ -120,22 +138,31 @@ def get_item_oapg(self, name: typing_extensions.Literal["name"]) -> MetaOapg.pro @typing.overload def get_item_oapg(self, name: typing_extensions.Literal["timezone"]) -> MetaOapg.properties.timezone: ... + @typing.overload + def get_item_oapg(self, name: typing_extensions.Literal["device_metadata"]) -> typing.Union['ArduinoDevicev2templatedevice', schemas.Unset]: ... + + @typing.overload + def get_item_oapg(self, name: typing_extensions.Literal["id"]) -> typing.Union[MetaOapg.properties.id, schemas.Unset]: ... + @typing.overload def get_item_oapg(self, name: typing_extensions.Literal["organization_id"]) -> typing.Union[MetaOapg.properties.organization_id, schemas.Unset]: ... @typing.overload - def get_item_oapg(self, name: typing_extensions.Literal["properties"]) -> typing.Union['ArduinoTemplatepropertyCollection', schemas.Unset]: ... + def get_item_oapg(self, name: typing_extensions.Literal["sketch_template"]) -> typing.Union[MetaOapg.properties.sketch_template, schemas.Unset]: ... @typing.overload def get_item_oapg(self, name: typing_extensions.Literal["tags"]) -> typing.Union[MetaOapg.properties.tags, schemas.Unset]: ... + @typing.overload + def get_item_oapg(self, name: typing_extensions.Literal["variables"]) -> typing.Union['ArduinoTemplatepropertyCollection', schemas.Unset]: ... + @typing.overload def get_item_oapg(self, name: typing_extensions.Literal["webhook_uri"]) -> typing.Union[MetaOapg.properties.webhook_uri, schemas.Unset]: ... @typing.overload def get_item_oapg(self, name: str) -> typing.Union[schemas.UnsetAnyTypeSchema, schemas.Unset]: ... - def get_item_oapg(self, name: typing.Union[typing_extensions.Literal["name", "timezone", "organization_id", "properties", "tags", "webhook_uri", ], str]): + def get_item_oapg(self, name: typing.Union[typing_extensions.Literal["name", "timezone", "device_metadata", "id", "organization_id", "sketch_template", "tags", "variables", "webhook_uri", ], str]): return super().get_item_oapg(name) @@ -144,9 +171,12 @@ def __new__( *_args: typing.Union[dict, frozendict.frozendict, ], timezone: typing.Union[MetaOapg.properties.timezone, str, ], name: typing.Union[MetaOapg.properties.name, str, ], + device_metadata: typing.Union['ArduinoDevicev2templatedevice', schemas.Unset] = schemas.unset, + id: typing.Union[MetaOapg.properties.id, str, schemas.Unset] = schemas.unset, organization_id: typing.Union[MetaOapg.properties.organization_id, str, uuid.UUID, schemas.Unset] = schemas.unset, - properties: typing.Union['ArduinoTemplatepropertyCollection', schemas.Unset] = schemas.unset, + sketch_template: typing.Union[MetaOapg.properties.sketch_template, str, schemas.Unset] = schemas.unset, tags: typing.Union[MetaOapg.properties.tags, list, tuple, schemas.Unset] = schemas.unset, + variables: typing.Union['ArduinoTemplatepropertyCollection', schemas.Unset] = schemas.unset, webhook_uri: typing.Union[MetaOapg.properties.webhook_uri, str, schemas.Unset] = schemas.unset, _configuration: typing.Optional[schemas.Configuration] = None, **kwargs: typing.Union[schemas.AnyTypeSchema, dict, frozendict.frozendict, str, date, datetime, uuid.UUID, int, float, decimal.Decimal, None, list, tuple, bytes], @@ -156,13 +186,17 @@ def __new__( *_args, timezone=timezone, name=name, + device_metadata=device_metadata, + id=id, organization_id=organization_id, - properties=properties, + sketch_template=sketch_template, tags=tags, + variables=variables, webhook_uri=webhook_uri, _configuration=_configuration, **kwargs, ) +from iot_api_client.model.arduino_devicev2templatedevice import ArduinoDevicev2templatedevice from iot_api_client.model.arduino_templateproperty_collection import ArduinoTemplatepropertyCollection from iot_api_client.model.tag import Tag diff --git a/iot_api_client/model/arduino_thingtemplate.pyi b/iot_api_client/model/arduino_thingtemplate.pyi index 0ddef11..8fc95c4 100644 --- a/iot_api_client/model/arduino_thingtemplate.pyi +++ b/iot_api_client/model/arduino_thingtemplate.pyi @@ -44,11 +44,13 @@ class ArduinoThingtemplate( class properties: name = schemas.StrSchema timezone = schemas.StrSchema - organization_id = schemas.UUIDSchema @staticmethod - def properties() -> typing.Type['ArduinoTemplatepropertyCollection']: - return ArduinoTemplatepropertyCollection + def device_metadata() -> typing.Type['ArduinoDevicev2templatedevice']: + return ArduinoDevicev2templatedevice + id = schemas.StrSchema + organization_id = schemas.UUIDSchema + sketch_template = schemas.StrSchema class tags( @@ -75,13 +77,20 @@ class ArduinoThingtemplate( def __getitem__(self, i: int) -> 'Tag': return super().__getitem__(i) + + @staticmethod + def variables() -> typing.Type['ArduinoTemplatepropertyCollection']: + return ArduinoTemplatepropertyCollection webhook_uri = schemas.StrSchema __annotations__ = { "name": name, "timezone": timezone, + "device_metadata": device_metadata, + "id": id, "organization_id": organization_id, - "properties": properties, + "sketch_template": sketch_template, "tags": tags, + "variables": variables, "webhook_uri": webhook_uri, } @@ -94,22 +103,31 @@ class ArduinoThingtemplate( @typing.overload def __getitem__(self, name: typing_extensions.Literal["timezone"]) -> MetaOapg.properties.timezone: ... + @typing.overload + def __getitem__(self, name: typing_extensions.Literal["device_metadata"]) -> 'ArduinoDevicev2templatedevice': ... + + @typing.overload + def __getitem__(self, name: typing_extensions.Literal["id"]) -> MetaOapg.properties.id: ... + @typing.overload def __getitem__(self, name: typing_extensions.Literal["organization_id"]) -> MetaOapg.properties.organization_id: ... @typing.overload - def __getitem__(self, name: typing_extensions.Literal["properties"]) -> 'ArduinoTemplatepropertyCollection': ... + def __getitem__(self, name: typing_extensions.Literal["sketch_template"]) -> MetaOapg.properties.sketch_template: ... @typing.overload def __getitem__(self, name: typing_extensions.Literal["tags"]) -> MetaOapg.properties.tags: ... + @typing.overload + def __getitem__(self, name: typing_extensions.Literal["variables"]) -> 'ArduinoTemplatepropertyCollection': ... + @typing.overload def __getitem__(self, name: typing_extensions.Literal["webhook_uri"]) -> MetaOapg.properties.webhook_uri: ... @typing.overload def __getitem__(self, name: str) -> schemas.UnsetAnyTypeSchema: ... - def __getitem__(self, name: typing.Union[typing_extensions.Literal["name", "timezone", "organization_id", "properties", "tags", "webhook_uri", ], str]): + def __getitem__(self, name: typing.Union[typing_extensions.Literal["name", "timezone", "device_metadata", "id", "organization_id", "sketch_template", "tags", "variables", "webhook_uri", ], str]): # dict_instance[name] accessor return super().__getitem__(name) @@ -120,22 +138,31 @@ class ArduinoThingtemplate( @typing.overload def get_item_oapg(self, name: typing_extensions.Literal["timezone"]) -> MetaOapg.properties.timezone: ... + @typing.overload + def get_item_oapg(self, name: typing_extensions.Literal["device_metadata"]) -> typing.Union['ArduinoDevicev2templatedevice', schemas.Unset]: ... + + @typing.overload + def get_item_oapg(self, name: typing_extensions.Literal["id"]) -> typing.Union[MetaOapg.properties.id, schemas.Unset]: ... + @typing.overload def get_item_oapg(self, name: typing_extensions.Literal["organization_id"]) -> typing.Union[MetaOapg.properties.organization_id, schemas.Unset]: ... @typing.overload - def get_item_oapg(self, name: typing_extensions.Literal["properties"]) -> typing.Union['ArduinoTemplatepropertyCollection', schemas.Unset]: ... + def get_item_oapg(self, name: typing_extensions.Literal["sketch_template"]) -> typing.Union[MetaOapg.properties.sketch_template, schemas.Unset]: ... @typing.overload def get_item_oapg(self, name: typing_extensions.Literal["tags"]) -> typing.Union[MetaOapg.properties.tags, schemas.Unset]: ... + @typing.overload + def get_item_oapg(self, name: typing_extensions.Literal["variables"]) -> typing.Union['ArduinoTemplatepropertyCollection', schemas.Unset]: ... + @typing.overload def get_item_oapg(self, name: typing_extensions.Literal["webhook_uri"]) -> typing.Union[MetaOapg.properties.webhook_uri, schemas.Unset]: ... @typing.overload def get_item_oapg(self, name: str) -> typing.Union[schemas.UnsetAnyTypeSchema, schemas.Unset]: ... - def get_item_oapg(self, name: typing.Union[typing_extensions.Literal["name", "timezone", "organization_id", "properties", "tags", "webhook_uri", ], str]): + def get_item_oapg(self, name: typing.Union[typing_extensions.Literal["name", "timezone", "device_metadata", "id", "organization_id", "sketch_template", "tags", "variables", "webhook_uri", ], str]): return super().get_item_oapg(name) @@ -144,9 +171,12 @@ class ArduinoThingtemplate( *_args: typing.Union[dict, frozendict.frozendict, ], timezone: typing.Union[MetaOapg.properties.timezone, str, ], name: typing.Union[MetaOapg.properties.name, str, ], + device_metadata: typing.Union['ArduinoDevicev2templatedevice', schemas.Unset] = schemas.unset, + id: typing.Union[MetaOapg.properties.id, str, schemas.Unset] = schemas.unset, organization_id: typing.Union[MetaOapg.properties.organization_id, str, uuid.UUID, schemas.Unset] = schemas.unset, - properties: typing.Union['ArduinoTemplatepropertyCollection', schemas.Unset] = schemas.unset, + sketch_template: typing.Union[MetaOapg.properties.sketch_template, str, schemas.Unset] = schemas.unset, tags: typing.Union[MetaOapg.properties.tags, list, tuple, schemas.Unset] = schemas.unset, + variables: typing.Union['ArduinoTemplatepropertyCollection', schemas.Unset] = schemas.unset, webhook_uri: typing.Union[MetaOapg.properties.webhook_uri, str, schemas.Unset] = schemas.unset, _configuration: typing.Optional[schemas.Configuration] = None, **kwargs: typing.Union[schemas.AnyTypeSchema, dict, frozendict.frozendict, str, date, datetime, uuid.UUID, int, float, decimal.Decimal, None, list, tuple, bytes], @@ -156,13 +186,17 @@ class ArduinoThingtemplate( *_args, timezone=timezone, name=name, + device_metadata=device_metadata, + id=id, organization_id=organization_id, - properties=properties, + sketch_template=sketch_template, tags=tags, + variables=variables, webhook_uri=webhook_uri, _configuration=_configuration, **kwargs, ) +from iot_api_client.model.arduino_devicev2templatedevice import ArduinoDevicev2templatedevice from iot_api_client.model.arduino_templateproperty_collection import ArduinoTemplatepropertyCollection from iot_api_client.model.tag import Tag diff --git a/iot_api_client/model/arduino_widgetv2.py b/iot_api_client/model/arduino_widgetv2.py index 7cff6dd..61d37fa 100644 --- a/iot_api_client/model/arduino_widgetv2.py +++ b/iot_api_client/model/arduino_widgetv2.py @@ -78,22 +78,7 @@ def __new__( _configuration=_configuration, **kwargs, ) - - - class type( - schemas.EnumBase, - schemas.StrSchema - ): - - - class MetaOapg: - enum_value_to_name = { - "slider, gauge": "SLIDER_GAUGE", - } - - @schemas.classproperty - def SLIDER_GAUGE(cls): - return cls("slider, gauge") + type = schemas.StrSchema width = schemas.Int64Schema x = schemas.Int64Schema y = schemas.Int64Schema diff --git a/iot_api_client/model/arduino_widgetv2.pyi b/iot_api_client/model/arduino_widgetv2.pyi index 9872235..61d37fa 100644 --- a/iot_api_client/model/arduino_widgetv2.pyi +++ b/iot_api_client/model/arduino_widgetv2.pyi @@ -78,16 +78,7 @@ class ArduinoWidgetv2( _configuration=_configuration, **kwargs, ) - - - class type( - schemas.EnumBase, - schemas.StrSchema - ): - - @schemas.classproperty - def SLIDER_GAUGE(cls): - return cls("slider, gauge") + type = schemas.StrSchema width = schemas.Int64Schema x = schemas.Int64Schema y = schemas.Int64Schema diff --git a/iot_api_client/model/batch_query_sampled_request_media_v1.py b/iot_api_client/model/batch_query_sampled_request_media_v1.py new file mode 100644 index 0000000..2bd8b0a --- /dev/null +++ b/iot_api_client/model/batch_query_sampled_request_media_v1.py @@ -0,0 +1,130 @@ +# coding: utf-8 + +""" + Arduino IoT Cloud API + + Provides a set of endpoints to manage Arduino IoT Cloud **Devices**, **Things**, **Properties** and **Timeseries**. This API can be called just with any HTTP Client, or using one of these clients: * [Javascript NPM package](https://www.npmjs.com/package/@arduino/arduino-iot-client) * [Python PYPI Package](https://pypi.org/project/arduino-iot-client/) * [Golang Module](https://github.com/arduino/iot-client-go) # noqa: E501 + + The version of the OpenAPI document: 2.0 + Generated by: https://openapi-generator.tech +""" + +from datetime import date, datetime # noqa: F401 +import decimal # noqa: F401 +import functools # noqa: F401 +import io # noqa: F401 +import re # noqa: F401 +import typing # noqa: F401 +import typing_extensions # noqa: F401 +import uuid # noqa: F401 + +import frozendict # noqa: F401 + +from iot_api_client import schemas # noqa: F401 + + +class BatchQuerySampledRequestMediaV1( + schemas.DictSchema +): + """NOTE: This class is auto generated by OpenAPI Generator. + Ref: https://openapi-generator.tech + + Do not edit the class manually. + """ + + + class MetaOapg: + required = { + "q", + } + + class properties: + q = schemas.StrSchema + _from = schemas.DateTimeSchema + + + class interval( + schemas.IntSchema + ): + + + class MetaOapg: + inclusive_maximum = 86400 + inclusive_minimum = 60 + series_limit = schemas.Int64Schema + to = schemas.DateTimeSchema + __annotations__ = { + "q": q, + "from": _from, + "interval": interval, + "series_limit": series_limit, + "to": to, + } + + q: MetaOapg.properties.q + + @typing.overload + def __getitem__(self, name: typing_extensions.Literal["q"]) -> MetaOapg.properties.q: ... + + @typing.overload + def __getitem__(self, name: typing_extensions.Literal["from"]) -> MetaOapg.properties._from: ... + + @typing.overload + def __getitem__(self, name: typing_extensions.Literal["interval"]) -> MetaOapg.properties.interval: ... + + @typing.overload + def __getitem__(self, name: typing_extensions.Literal["series_limit"]) -> MetaOapg.properties.series_limit: ... + + @typing.overload + def __getitem__(self, name: typing_extensions.Literal["to"]) -> MetaOapg.properties.to: ... + + @typing.overload + def __getitem__(self, name: str) -> schemas.UnsetAnyTypeSchema: ... + + def __getitem__(self, name: typing.Union[typing_extensions.Literal["q", "from", "interval", "series_limit", "to", ], str]): + # dict_instance[name] accessor + return super().__getitem__(name) + + + @typing.overload + def get_item_oapg(self, name: typing_extensions.Literal["q"]) -> MetaOapg.properties.q: ... + + @typing.overload + def get_item_oapg(self, name: typing_extensions.Literal["from"]) -> typing.Union[MetaOapg.properties._from, schemas.Unset]: ... + + @typing.overload + def get_item_oapg(self, name: typing_extensions.Literal["interval"]) -> typing.Union[MetaOapg.properties.interval, schemas.Unset]: ... + + @typing.overload + def get_item_oapg(self, name: typing_extensions.Literal["series_limit"]) -> typing.Union[MetaOapg.properties.series_limit, schemas.Unset]: ... + + @typing.overload + def get_item_oapg(self, name: typing_extensions.Literal["to"]) -> typing.Union[MetaOapg.properties.to, schemas.Unset]: ... + + @typing.overload + def get_item_oapg(self, name: str) -> typing.Union[schemas.UnsetAnyTypeSchema, schemas.Unset]: ... + + def get_item_oapg(self, name: typing.Union[typing_extensions.Literal["q", "from", "interval", "series_limit", "to", ], str]): + return super().get_item_oapg(name) + + + def __new__( + cls, + *_args: typing.Union[dict, frozendict.frozendict, ], + q: typing.Union[MetaOapg.properties.q, str, ], + interval: typing.Union[MetaOapg.properties.interval, decimal.Decimal, int, schemas.Unset] = schemas.unset, + series_limit: typing.Union[MetaOapg.properties.series_limit, decimal.Decimal, int, schemas.Unset] = schemas.unset, + to: typing.Union[MetaOapg.properties.to, str, datetime, schemas.Unset] = schemas.unset, + _configuration: typing.Optional[schemas.Configuration] = None, + **kwargs: typing.Union[schemas.AnyTypeSchema, dict, frozendict.frozendict, str, date, datetime, uuid.UUID, int, float, decimal.Decimal, None, list, tuple, bytes], + ) -> 'BatchQuerySampledRequestMediaV1': + return super().__new__( + cls, + *_args, + q=q, + interval=interval, + series_limit=series_limit, + to=to, + _configuration=_configuration, + **kwargs, + ) diff --git a/iot_api_client/model/batch_query_sampled_request_media_v1.pyi b/iot_api_client/model/batch_query_sampled_request_media_v1.pyi new file mode 100644 index 0000000..2c514cf --- /dev/null +++ b/iot_api_client/model/batch_query_sampled_request_media_v1.pyi @@ -0,0 +1,126 @@ +# coding: utf-8 + +""" + Arduino IoT Cloud API + + Provides a set of endpoints to manage Arduino IoT Cloud **Devices**, **Things**, **Properties** and **Timeseries**. This API can be called just with any HTTP Client, or using one of these clients: * [Javascript NPM package](https://www.npmjs.com/package/@arduino/arduino-iot-client) * [Python PYPI Package](https://pypi.org/project/arduino-iot-client/) * [Golang Module](https://github.com/arduino/iot-client-go) # noqa: E501 + + The version of the OpenAPI document: 2.0 + Generated by: https://openapi-generator.tech +""" + +from datetime import date, datetime # noqa: F401 +import decimal # noqa: F401 +import functools # noqa: F401 +import io # noqa: F401 +import re # noqa: F401 +import typing # noqa: F401 +import typing_extensions # noqa: F401 +import uuid # noqa: F401 + +import frozendict # noqa: F401 + +from iot_api_client import schemas # noqa: F401 + + +class BatchQuerySampledRequestMediaV1( + schemas.DictSchema +): + """NOTE: This class is auto generated by OpenAPI Generator. + Ref: https://openapi-generator.tech + + Do not edit the class manually. + """ + + + class MetaOapg: + required = { + "q", + } + + class properties: + q = schemas.StrSchema + _from = schemas.DateTimeSchema + + + class interval( + schemas.IntSchema + ): + pass + series_limit = schemas.Int64Schema + to = schemas.DateTimeSchema + __annotations__ = { + "q": q, + "from": _from, + "interval": interval, + "series_limit": series_limit, + "to": to, + } + + q: MetaOapg.properties.q + + @typing.overload + def __getitem__(self, name: typing_extensions.Literal["q"]) -> MetaOapg.properties.q: ... + + @typing.overload + def __getitem__(self, name: typing_extensions.Literal["from"]) -> MetaOapg.properties._from: ... + + @typing.overload + def __getitem__(self, name: typing_extensions.Literal["interval"]) -> MetaOapg.properties.interval: ... + + @typing.overload + def __getitem__(self, name: typing_extensions.Literal["series_limit"]) -> MetaOapg.properties.series_limit: ... + + @typing.overload + def __getitem__(self, name: typing_extensions.Literal["to"]) -> MetaOapg.properties.to: ... + + @typing.overload + def __getitem__(self, name: str) -> schemas.UnsetAnyTypeSchema: ... + + def __getitem__(self, name: typing.Union[typing_extensions.Literal["q", "from", "interval", "series_limit", "to", ], str]): + # dict_instance[name] accessor + return super().__getitem__(name) + + + @typing.overload + def get_item_oapg(self, name: typing_extensions.Literal["q"]) -> MetaOapg.properties.q: ... + + @typing.overload + def get_item_oapg(self, name: typing_extensions.Literal["from"]) -> typing.Union[MetaOapg.properties._from, schemas.Unset]: ... + + @typing.overload + def get_item_oapg(self, name: typing_extensions.Literal["interval"]) -> typing.Union[MetaOapg.properties.interval, schemas.Unset]: ... + + @typing.overload + def get_item_oapg(self, name: typing_extensions.Literal["series_limit"]) -> typing.Union[MetaOapg.properties.series_limit, schemas.Unset]: ... + + @typing.overload + def get_item_oapg(self, name: typing_extensions.Literal["to"]) -> typing.Union[MetaOapg.properties.to, schemas.Unset]: ... + + @typing.overload + def get_item_oapg(self, name: str) -> typing.Union[schemas.UnsetAnyTypeSchema, schemas.Unset]: ... + + def get_item_oapg(self, name: typing.Union[typing_extensions.Literal["q", "from", "interval", "series_limit", "to", ], str]): + return super().get_item_oapg(name) + + + def __new__( + cls, + *_args: typing.Union[dict, frozendict.frozendict, ], + q: typing.Union[MetaOapg.properties.q, str, ], + interval: typing.Union[MetaOapg.properties.interval, decimal.Decimal, int, schemas.Unset] = schemas.unset, + series_limit: typing.Union[MetaOapg.properties.series_limit, decimal.Decimal, int, schemas.Unset] = schemas.unset, + to: typing.Union[MetaOapg.properties.to, str, datetime, schemas.Unset] = schemas.unset, + _configuration: typing.Optional[schemas.Configuration] = None, + **kwargs: typing.Union[schemas.AnyTypeSchema, dict, frozendict.frozendict, str, date, datetime, uuid.UUID, int, float, decimal.Decimal, None, list, tuple, bytes], + ) -> 'BatchQuerySampledRequestMediaV1': + return super().__new__( + cls, + *_args, + q=q, + interval=interval, + series_limit=series_limit, + to=to, + _configuration=_configuration, + **kwargs, + ) diff --git a/iot_api_client/model/batch_query_sampled_requests_media_v1.py b/iot_api_client/model/batch_query_sampled_requests_media_v1.py new file mode 100644 index 0000000..0cceccc --- /dev/null +++ b/iot_api_client/model/batch_query_sampled_requests_media_v1.py @@ -0,0 +1,122 @@ +# coding: utf-8 + +""" + Arduino IoT Cloud API + + Provides a set of endpoints to manage Arduino IoT Cloud **Devices**, **Things**, **Properties** and **Timeseries**. This API can be called just with any HTTP Client, or using one of these clients: * [Javascript NPM package](https://www.npmjs.com/package/@arduino/arduino-iot-client) * [Python PYPI Package](https://pypi.org/project/arduino-iot-client/) * [Golang Module](https://github.com/arduino/iot-client-go) # noqa: E501 + + The version of the OpenAPI document: 2.0 + Generated by: https://openapi-generator.tech +""" + +from datetime import date, datetime # noqa: F401 +import decimal # noqa: F401 +import functools # noqa: F401 +import io # noqa: F401 +import re # noqa: F401 +import typing # noqa: F401 +import typing_extensions # noqa: F401 +import uuid # noqa: F401 + +import frozendict # noqa: F401 + +from iot_api_client import schemas # noqa: F401 + + +class BatchQuerySampledRequestsMediaV1( + schemas.DictSchema +): + """NOTE: This class is auto generated by OpenAPI Generator. + Ref: https://openapi-generator.tech + + Do not edit the class manually. + """ + + + class MetaOapg: + required = { + "resp_version", + "requests", + } + + class properties: + + + class requests( + schemas.ListSchema + ): + + + class MetaOapg: + + @staticmethod + def items() -> typing.Type['BatchQuerySampledRequestMediaV1']: + return BatchQuerySampledRequestMediaV1 + + def __new__( + cls, + _arg: typing.Union[typing.Tuple['BatchQuerySampledRequestMediaV1'], typing.List['BatchQuerySampledRequestMediaV1']], + _configuration: typing.Optional[schemas.Configuration] = None, + ) -> 'requests': + return super().__new__( + cls, + _arg, + _configuration=_configuration, + ) + + def __getitem__(self, i: int) -> 'BatchQuerySampledRequestMediaV1': + return super().__getitem__(i) + resp_version = schemas.Int64Schema + __annotations__ = { + "requests": requests, + "resp_version": resp_version, + } + + resp_version: MetaOapg.properties.resp_version + requests: MetaOapg.properties.requests + + @typing.overload + def __getitem__(self, name: typing_extensions.Literal["requests"]) -> MetaOapg.properties.requests: ... + + @typing.overload + def __getitem__(self, name: typing_extensions.Literal["resp_version"]) -> MetaOapg.properties.resp_version: ... + + @typing.overload + def __getitem__(self, name: str) -> schemas.UnsetAnyTypeSchema: ... + + def __getitem__(self, name: typing.Union[typing_extensions.Literal["requests", "resp_version", ], str]): + # dict_instance[name] accessor + return super().__getitem__(name) + + + @typing.overload + def get_item_oapg(self, name: typing_extensions.Literal["requests"]) -> MetaOapg.properties.requests: ... + + @typing.overload + def get_item_oapg(self, name: typing_extensions.Literal["resp_version"]) -> MetaOapg.properties.resp_version: ... + + @typing.overload + def get_item_oapg(self, name: str) -> typing.Union[schemas.UnsetAnyTypeSchema, schemas.Unset]: ... + + def get_item_oapg(self, name: typing.Union[typing_extensions.Literal["requests", "resp_version", ], str]): + return super().get_item_oapg(name) + + + def __new__( + cls, + *_args: typing.Union[dict, frozendict.frozendict, ], + resp_version: typing.Union[MetaOapg.properties.resp_version, decimal.Decimal, int, ], + requests: typing.Union[MetaOapg.properties.requests, list, tuple, ], + _configuration: typing.Optional[schemas.Configuration] = None, + **kwargs: typing.Union[schemas.AnyTypeSchema, dict, frozendict.frozendict, str, date, datetime, uuid.UUID, int, float, decimal.Decimal, None, list, tuple, bytes], + ) -> 'BatchQuerySampledRequestsMediaV1': + return super().__new__( + cls, + *_args, + resp_version=resp_version, + requests=requests, + _configuration=_configuration, + **kwargs, + ) + +from iot_api_client.model.batch_query_sampled_request_media_v1 import BatchQuerySampledRequestMediaV1 diff --git a/iot_api_client/model/batch_query_sampled_requests_media_v1.pyi b/iot_api_client/model/batch_query_sampled_requests_media_v1.pyi new file mode 100644 index 0000000..0cceccc --- /dev/null +++ b/iot_api_client/model/batch_query_sampled_requests_media_v1.pyi @@ -0,0 +1,122 @@ +# coding: utf-8 + +""" + Arduino IoT Cloud API + + Provides a set of endpoints to manage Arduino IoT Cloud **Devices**, **Things**, **Properties** and **Timeseries**. This API can be called just with any HTTP Client, or using one of these clients: * [Javascript NPM package](https://www.npmjs.com/package/@arduino/arduino-iot-client) * [Python PYPI Package](https://pypi.org/project/arduino-iot-client/) * [Golang Module](https://github.com/arduino/iot-client-go) # noqa: E501 + + The version of the OpenAPI document: 2.0 + Generated by: https://openapi-generator.tech +""" + +from datetime import date, datetime # noqa: F401 +import decimal # noqa: F401 +import functools # noqa: F401 +import io # noqa: F401 +import re # noqa: F401 +import typing # noqa: F401 +import typing_extensions # noqa: F401 +import uuid # noqa: F401 + +import frozendict # noqa: F401 + +from iot_api_client import schemas # noqa: F401 + + +class BatchQuerySampledRequestsMediaV1( + schemas.DictSchema +): + """NOTE: This class is auto generated by OpenAPI Generator. + Ref: https://openapi-generator.tech + + Do not edit the class manually. + """ + + + class MetaOapg: + required = { + "resp_version", + "requests", + } + + class properties: + + + class requests( + schemas.ListSchema + ): + + + class MetaOapg: + + @staticmethod + def items() -> typing.Type['BatchQuerySampledRequestMediaV1']: + return BatchQuerySampledRequestMediaV1 + + def __new__( + cls, + _arg: typing.Union[typing.Tuple['BatchQuerySampledRequestMediaV1'], typing.List['BatchQuerySampledRequestMediaV1']], + _configuration: typing.Optional[schemas.Configuration] = None, + ) -> 'requests': + return super().__new__( + cls, + _arg, + _configuration=_configuration, + ) + + def __getitem__(self, i: int) -> 'BatchQuerySampledRequestMediaV1': + return super().__getitem__(i) + resp_version = schemas.Int64Schema + __annotations__ = { + "requests": requests, + "resp_version": resp_version, + } + + resp_version: MetaOapg.properties.resp_version + requests: MetaOapg.properties.requests + + @typing.overload + def __getitem__(self, name: typing_extensions.Literal["requests"]) -> MetaOapg.properties.requests: ... + + @typing.overload + def __getitem__(self, name: typing_extensions.Literal["resp_version"]) -> MetaOapg.properties.resp_version: ... + + @typing.overload + def __getitem__(self, name: str) -> schemas.UnsetAnyTypeSchema: ... + + def __getitem__(self, name: typing.Union[typing_extensions.Literal["requests", "resp_version", ], str]): + # dict_instance[name] accessor + return super().__getitem__(name) + + + @typing.overload + def get_item_oapg(self, name: typing_extensions.Literal["requests"]) -> MetaOapg.properties.requests: ... + + @typing.overload + def get_item_oapg(self, name: typing_extensions.Literal["resp_version"]) -> MetaOapg.properties.resp_version: ... + + @typing.overload + def get_item_oapg(self, name: str) -> typing.Union[schemas.UnsetAnyTypeSchema, schemas.Unset]: ... + + def get_item_oapg(self, name: typing.Union[typing_extensions.Literal["requests", "resp_version", ], str]): + return super().get_item_oapg(name) + + + def __new__( + cls, + *_args: typing.Union[dict, frozendict.frozendict, ], + resp_version: typing.Union[MetaOapg.properties.resp_version, decimal.Decimal, int, ], + requests: typing.Union[MetaOapg.properties.requests, list, tuple, ], + _configuration: typing.Optional[schemas.Configuration] = None, + **kwargs: typing.Union[schemas.AnyTypeSchema, dict, frozendict.frozendict, str, date, datetime, uuid.UUID, int, float, decimal.Decimal, None, list, tuple, bytes], + ) -> 'BatchQuerySampledRequestsMediaV1': + return super().__new__( + cls, + *_args, + resp_version=resp_version, + requests=requests, + _configuration=_configuration, + **kwargs, + ) + +from iot_api_client.model.batch_query_sampled_request_media_v1 import BatchQuerySampledRequestMediaV1 diff --git a/iot_api_client/model/create_devices_v2_payload.py b/iot_api_client/model/create_devices_v2_payload.py index dbab37c..3f3c054 100644 --- a/iot_api_client/model/create_devices_v2_payload.py +++ b/iot_api_client/model/create_devices_v2_payload.py @@ -168,6 +168,8 @@ class MetaOapg: "gsm": "GSM", "nb": "NB", "lora": "LORA", + "catm1": "CATM1", + "cellular": "CELLULAR", } @schemas.classproperty @@ -193,6 +195,14 @@ def NB(cls): @schemas.classproperty def LORA(cls): return cls("lora") + + @schemas.classproperty + def CATM1(cls): + return cls("catm1") + + @schemas.classproperty + def CELLULAR(cls): + return cls("cellular") fqbn = schemas.StrSchema diff --git a/iot_api_client/model/create_devices_v2_payload.pyi b/iot_api_client/model/create_devices_v2_payload.pyi index aa99e16..e303e49 100644 --- a/iot_api_client/model/create_devices_v2_payload.pyi +++ b/iot_api_client/model/create_devices_v2_payload.pyi @@ -157,6 +157,14 @@ class CreateDevicesV2Payload( @schemas.classproperty def LORA(cls): return cls("lora") + + @schemas.classproperty + def CATM1(cls): + return cls("catm1") + + @schemas.classproperty + def CELLULAR(cls): + return cls("cellular") fqbn = schemas.StrSchema diff --git a/iot_api_client/model/dashboardv2.py b/iot_api_client/model/dashboardv2.py index b959b89..217e8a5 100644 --- a/iot_api_client/model/dashboardv2.py +++ b/iot_api_client/model/dashboardv2.py @@ -40,6 +40,15 @@ class MetaOapg: class properties: + class cover_image( + schemas.StrSchema + ): + + + class MetaOapg: + max_length = 1024 + + class name( schemas.StrSchema ): @@ -77,10 +86,14 @@ def __new__( def __getitem__(self, i: int) -> 'Widget': return super().__getitem__(i) __annotations__ = { + "cover_image": cover_image, "name": name, "widgets": widgets, } + @typing.overload + def __getitem__(self, name: typing_extensions.Literal["cover_image"]) -> MetaOapg.properties.cover_image: ... + @typing.overload def __getitem__(self, name: typing_extensions.Literal["name"]) -> MetaOapg.properties.name: ... @@ -90,11 +103,14 @@ def __getitem__(self, name: typing_extensions.Literal["widgets"]) -> MetaOapg.pr @typing.overload def __getitem__(self, name: str) -> schemas.UnsetAnyTypeSchema: ... - def __getitem__(self, name: typing.Union[typing_extensions.Literal["name", "widgets", ], str]): + def __getitem__(self, name: typing.Union[typing_extensions.Literal["cover_image", "name", "widgets", ], str]): # dict_instance[name] accessor return super().__getitem__(name) + @typing.overload + def get_item_oapg(self, name: typing_extensions.Literal["cover_image"]) -> typing.Union[MetaOapg.properties.cover_image, schemas.Unset]: ... + @typing.overload def get_item_oapg(self, name: typing_extensions.Literal["name"]) -> typing.Union[MetaOapg.properties.name, schemas.Unset]: ... @@ -104,13 +120,14 @@ def get_item_oapg(self, name: typing_extensions.Literal["widgets"]) -> typing.Un @typing.overload def get_item_oapg(self, name: str) -> typing.Union[schemas.UnsetAnyTypeSchema, schemas.Unset]: ... - def get_item_oapg(self, name: typing.Union[typing_extensions.Literal["name", "widgets", ], str]): + def get_item_oapg(self, name: typing.Union[typing_extensions.Literal["cover_image", "name", "widgets", ], str]): return super().get_item_oapg(name) def __new__( cls, *_args: typing.Union[dict, frozendict.frozendict, ], + cover_image: typing.Union[MetaOapg.properties.cover_image, str, schemas.Unset] = schemas.unset, name: typing.Union[MetaOapg.properties.name, str, schemas.Unset] = schemas.unset, widgets: typing.Union[MetaOapg.properties.widgets, list, tuple, schemas.Unset] = schemas.unset, _configuration: typing.Optional[schemas.Configuration] = None, @@ -119,6 +136,7 @@ def __new__( return super().__new__( cls, *_args, + cover_image=cover_image, name=name, widgets=widgets, _configuration=_configuration, diff --git a/iot_api_client/model/dashboardv2.pyi b/iot_api_client/model/dashboardv2.pyi index ded2f0a..7e21ad8 100644 --- a/iot_api_client/model/dashboardv2.pyi +++ b/iot_api_client/model/dashboardv2.pyi @@ -40,6 +40,12 @@ class Dashboardv2( class properties: + class cover_image( + schemas.StrSchema + ): + pass + + class name( schemas.StrSchema ): @@ -71,10 +77,14 @@ class Dashboardv2( def __getitem__(self, i: int) -> 'Widget': return super().__getitem__(i) __annotations__ = { + "cover_image": cover_image, "name": name, "widgets": widgets, } + @typing.overload + def __getitem__(self, name: typing_extensions.Literal["cover_image"]) -> MetaOapg.properties.cover_image: ... + @typing.overload def __getitem__(self, name: typing_extensions.Literal["name"]) -> MetaOapg.properties.name: ... @@ -84,11 +94,14 @@ class Dashboardv2( @typing.overload def __getitem__(self, name: str) -> schemas.UnsetAnyTypeSchema: ... - def __getitem__(self, name: typing.Union[typing_extensions.Literal["name", "widgets", ], str]): + def __getitem__(self, name: typing.Union[typing_extensions.Literal["cover_image", "name", "widgets", ], str]): # dict_instance[name] accessor return super().__getitem__(name) + @typing.overload + def get_item_oapg(self, name: typing_extensions.Literal["cover_image"]) -> typing.Union[MetaOapg.properties.cover_image, schemas.Unset]: ... + @typing.overload def get_item_oapg(self, name: typing_extensions.Literal["name"]) -> typing.Union[MetaOapg.properties.name, schemas.Unset]: ... @@ -98,13 +111,14 @@ class Dashboardv2( @typing.overload def get_item_oapg(self, name: str) -> typing.Union[schemas.UnsetAnyTypeSchema, schemas.Unset]: ... - def get_item_oapg(self, name: typing.Union[typing_extensions.Literal["name", "widgets", ], str]): + def get_item_oapg(self, name: typing.Union[typing_extensions.Literal["cover_image", "name", "widgets", ], str]): return super().get_item_oapg(name) def __new__( cls, *_args: typing.Union[dict, frozendict.frozendict, ], + cover_image: typing.Union[MetaOapg.properties.cover_image, str, schemas.Unset] = schemas.unset, name: typing.Union[MetaOapg.properties.name, str, schemas.Unset] = schemas.unset, widgets: typing.Union[MetaOapg.properties.widgets, list, tuple, schemas.Unset] = schemas.unset, _configuration: typing.Optional[schemas.Configuration] = None, @@ -113,6 +127,7 @@ class Dashboardv2( return super().__new__( cls, *_args, + cover_image=cover_image, name=name, widgets=widgets, _configuration=_configuration, diff --git a/iot_api_client/model/devicev2.py b/iot_api_client/model/devicev2.py index 6d666cb..b930147 100644 --- a/iot_api_client/model/devicev2.py +++ b/iot_api_client/model/devicev2.py @@ -54,6 +54,8 @@ class MetaOapg: "gsm": "GSM", "nb": "NB", "lora": "LORA", + "catm1": "CATM1", + "cellular": "CELLULAR", } @schemas.classproperty @@ -79,6 +81,14 @@ def NB(cls): @schemas.classproperty def LORA(cls): return cls("lora") + + @schemas.classproperty + def CATM1(cls): + return cls("catm1") + + @schemas.classproperty + def CELLULAR(cls): + return cls("cellular") fqbn = schemas.StrSchema diff --git a/iot_api_client/model/devicev2.pyi b/iot_api_client/model/devicev2.pyi index 7d3eca6..49f27f1 100644 --- a/iot_api_client/model/devicev2.pyi +++ b/iot_api_client/model/devicev2.pyi @@ -68,6 +68,14 @@ class Devicev2( @schemas.classproperty def LORA(cls): return cls("lora") + + @schemas.classproperty + def CATM1(cls): + return cls("catm1") + + @schemas.classproperty + def CELLULAR(cls): + return cls("cellular") fqbn = schemas.StrSchema diff --git a/iot_api_client/model/template.py b/iot_api_client/model/template.py new file mode 100644 index 0000000..a6f9569 --- /dev/null +++ b/iot_api_client/model/template.py @@ -0,0 +1,154 @@ +# coding: utf-8 + +""" + Arduino IoT Cloud API + + Provides a set of endpoints to manage Arduino IoT Cloud **Devices**, **Things**, **Properties** and **Timeseries**. This API can be called just with any HTTP Client, or using one of these clients: * [Javascript NPM package](https://www.npmjs.com/package/@arduino/arduino-iot-client) * [Python PYPI Package](https://pypi.org/project/arduino-iot-client/) * [Golang Module](https://github.com/arduino/iot-client-go) # noqa: E501 + + The version of the OpenAPI document: 2.0 + Generated by: https://openapi-generator.tech +""" + +from datetime import date, datetime # noqa: F401 +import decimal # noqa: F401 +import functools # noqa: F401 +import io # noqa: F401 +import re # noqa: F401 +import typing # noqa: F401 +import typing_extensions # noqa: F401 +import uuid # noqa: F401 + +import frozendict # noqa: F401 + +from iot_api_client import schemas # noqa: F401 + + +class Template( + schemas.DictSchema +): + """NOTE: This class is auto generated by OpenAPI Generator. + Ref: https://openapi-generator.tech + + Do not edit the class manually. + + TemplatePayload describes the needed attribute to apply a template + """ + + + class MetaOapg: + required = { + "template_name", + } + + class properties: + template_name = schemas.StrSchema + custom_template_id = schemas.StrSchema + + + class prefix_name( + schemas.StrSchema + ): + + + class MetaOapg: + max_length = 45 + regex=[{ + 'pattern': r'^[a-zA-Z0-9_. -]+$', # noqa: E501 + }] + + + class things_options( + schemas.DictSchema + ): + + + class MetaOapg: + additional_properties = schemas.AnyTypeSchema + + def __getitem__(self, name: typing.Union[str, ]) -> MetaOapg.additional_properties: + # dict_instance[name] accessor + return super().__getitem__(name) + + def get_item_oapg(self, name: typing.Union[str, ]) -> MetaOapg.additional_properties: + return super().get_item_oapg(name) + + def __new__( + cls, + *_args: typing.Union[dict, frozendict.frozendict, ], + _configuration: typing.Optional[schemas.Configuration] = None, + **kwargs: typing.Union[MetaOapg.additional_properties, dict, frozendict.frozendict, str, date, datetime, uuid.UUID, int, float, decimal.Decimal, bool, None, list, tuple, bytes, io.FileIO, io.BufferedReader, ], + ) -> 'things_options': + return super().__new__( + cls, + *_args, + _configuration=_configuration, + **kwargs, + ) + __annotations__ = { + "template_name": template_name, + "custom_template_id": custom_template_id, + "prefix_name": prefix_name, + "things_options": things_options, + } + + template_name: MetaOapg.properties.template_name + + @typing.overload + def __getitem__(self, name: typing_extensions.Literal["template_name"]) -> MetaOapg.properties.template_name: ... + + @typing.overload + def __getitem__(self, name: typing_extensions.Literal["custom_template_id"]) -> MetaOapg.properties.custom_template_id: ... + + @typing.overload + def __getitem__(self, name: typing_extensions.Literal["prefix_name"]) -> MetaOapg.properties.prefix_name: ... + + @typing.overload + def __getitem__(self, name: typing_extensions.Literal["things_options"]) -> MetaOapg.properties.things_options: ... + + @typing.overload + def __getitem__(self, name: str) -> schemas.UnsetAnyTypeSchema: ... + + def __getitem__(self, name: typing.Union[typing_extensions.Literal["template_name", "custom_template_id", "prefix_name", "things_options", ], str]): + # dict_instance[name] accessor + return super().__getitem__(name) + + + @typing.overload + def get_item_oapg(self, name: typing_extensions.Literal["template_name"]) -> MetaOapg.properties.template_name: ... + + @typing.overload + def get_item_oapg(self, name: typing_extensions.Literal["custom_template_id"]) -> typing.Union[MetaOapg.properties.custom_template_id, schemas.Unset]: ... + + @typing.overload + def get_item_oapg(self, name: typing_extensions.Literal["prefix_name"]) -> typing.Union[MetaOapg.properties.prefix_name, schemas.Unset]: ... + + @typing.overload + def get_item_oapg(self, name: typing_extensions.Literal["things_options"]) -> typing.Union[MetaOapg.properties.things_options, schemas.Unset]: ... + + @typing.overload + def get_item_oapg(self, name: str) -> typing.Union[schemas.UnsetAnyTypeSchema, schemas.Unset]: ... + + def get_item_oapg(self, name: typing.Union[typing_extensions.Literal["template_name", "custom_template_id", "prefix_name", "things_options", ], str]): + return super().get_item_oapg(name) + + + def __new__( + cls, + *_args: typing.Union[dict, frozendict.frozendict, ], + template_name: typing.Union[MetaOapg.properties.template_name, str, ], + custom_template_id: typing.Union[MetaOapg.properties.custom_template_id, str, schemas.Unset] = schemas.unset, + prefix_name: typing.Union[MetaOapg.properties.prefix_name, str, schemas.Unset] = schemas.unset, + things_options: typing.Union[MetaOapg.properties.things_options, dict, frozendict.frozendict, schemas.Unset] = schemas.unset, + _configuration: typing.Optional[schemas.Configuration] = None, + **kwargs: typing.Union[schemas.AnyTypeSchema, dict, frozendict.frozendict, str, date, datetime, uuid.UUID, int, float, decimal.Decimal, None, list, tuple, bytes], + ) -> 'Template': + return super().__new__( + cls, + *_args, + template_name=template_name, + custom_template_id=custom_template_id, + prefix_name=prefix_name, + things_options=things_options, + _configuration=_configuration, + **kwargs, + ) diff --git a/iot_api_client/model/template.pyi b/iot_api_client/model/template.pyi new file mode 100644 index 0000000..da8269e --- /dev/null +++ b/iot_api_client/model/template.pyi @@ -0,0 +1,148 @@ +# coding: utf-8 + +""" + Arduino IoT Cloud API + + Provides a set of endpoints to manage Arduino IoT Cloud **Devices**, **Things**, **Properties** and **Timeseries**. This API can be called just with any HTTP Client, or using one of these clients: * [Javascript NPM package](https://www.npmjs.com/package/@arduino/arduino-iot-client) * [Python PYPI Package](https://pypi.org/project/arduino-iot-client/) * [Golang Module](https://github.com/arduino/iot-client-go) # noqa: E501 + + The version of the OpenAPI document: 2.0 + Generated by: https://openapi-generator.tech +""" + +from datetime import date, datetime # noqa: F401 +import decimal # noqa: F401 +import functools # noqa: F401 +import io # noqa: F401 +import re # noqa: F401 +import typing # noqa: F401 +import typing_extensions # noqa: F401 +import uuid # noqa: F401 + +import frozendict # noqa: F401 + +from iot_api_client import schemas # noqa: F401 + + +class Template( + schemas.DictSchema +): + """NOTE: This class is auto generated by OpenAPI Generator. + Ref: https://openapi-generator.tech + + Do not edit the class manually. + + TemplatePayload describes the needed attribute to apply a template + """ + + + class MetaOapg: + required = { + "template_name", + } + + class properties: + template_name = schemas.StrSchema + custom_template_id = schemas.StrSchema + + + class prefix_name( + schemas.StrSchema + ): + pass + + + class things_options( + schemas.DictSchema + ): + + + class MetaOapg: + additional_properties = schemas.AnyTypeSchema + + def __getitem__(self, name: typing.Union[str, ]) -> MetaOapg.additional_properties: + # dict_instance[name] accessor + return super().__getitem__(name) + + def get_item_oapg(self, name: typing.Union[str, ]) -> MetaOapg.additional_properties: + return super().get_item_oapg(name) + + def __new__( + cls, + *_args: typing.Union[dict, frozendict.frozendict, ], + _configuration: typing.Optional[schemas.Configuration] = None, + **kwargs: typing.Union[MetaOapg.additional_properties, dict, frozendict.frozendict, str, date, datetime, uuid.UUID, int, float, decimal.Decimal, bool, None, list, tuple, bytes, io.FileIO, io.BufferedReader, ], + ) -> 'things_options': + return super().__new__( + cls, + *_args, + _configuration=_configuration, + **kwargs, + ) + __annotations__ = { + "template_name": template_name, + "custom_template_id": custom_template_id, + "prefix_name": prefix_name, + "things_options": things_options, + } + + template_name: MetaOapg.properties.template_name + + @typing.overload + def __getitem__(self, name: typing_extensions.Literal["template_name"]) -> MetaOapg.properties.template_name: ... + + @typing.overload + def __getitem__(self, name: typing_extensions.Literal["custom_template_id"]) -> MetaOapg.properties.custom_template_id: ... + + @typing.overload + def __getitem__(self, name: typing_extensions.Literal["prefix_name"]) -> MetaOapg.properties.prefix_name: ... + + @typing.overload + def __getitem__(self, name: typing_extensions.Literal["things_options"]) -> MetaOapg.properties.things_options: ... + + @typing.overload + def __getitem__(self, name: str) -> schemas.UnsetAnyTypeSchema: ... + + def __getitem__(self, name: typing.Union[typing_extensions.Literal["template_name", "custom_template_id", "prefix_name", "things_options", ], str]): + # dict_instance[name] accessor + return super().__getitem__(name) + + + @typing.overload + def get_item_oapg(self, name: typing_extensions.Literal["template_name"]) -> MetaOapg.properties.template_name: ... + + @typing.overload + def get_item_oapg(self, name: typing_extensions.Literal["custom_template_id"]) -> typing.Union[MetaOapg.properties.custom_template_id, schemas.Unset]: ... + + @typing.overload + def get_item_oapg(self, name: typing_extensions.Literal["prefix_name"]) -> typing.Union[MetaOapg.properties.prefix_name, schemas.Unset]: ... + + @typing.overload + def get_item_oapg(self, name: typing_extensions.Literal["things_options"]) -> typing.Union[MetaOapg.properties.things_options, schemas.Unset]: ... + + @typing.overload + def get_item_oapg(self, name: str) -> typing.Union[schemas.UnsetAnyTypeSchema, schemas.Unset]: ... + + def get_item_oapg(self, name: typing.Union[typing_extensions.Literal["template_name", "custom_template_id", "prefix_name", "things_options", ], str]): + return super().get_item_oapg(name) + + + def __new__( + cls, + *_args: typing.Union[dict, frozendict.frozendict, ], + template_name: typing.Union[MetaOapg.properties.template_name, str, ], + custom_template_id: typing.Union[MetaOapg.properties.custom_template_id, str, schemas.Unset] = schemas.unset, + prefix_name: typing.Union[MetaOapg.properties.prefix_name, str, schemas.Unset] = schemas.unset, + things_options: typing.Union[MetaOapg.properties.things_options, dict, frozendict.frozendict, schemas.Unset] = schemas.unset, + _configuration: typing.Optional[schemas.Configuration] = None, + **kwargs: typing.Union[schemas.AnyTypeSchema, dict, frozendict.frozendict, str, date, datetime, uuid.UUID, int, float, decimal.Decimal, None, list, tuple, bytes], + ) -> 'Template': + return super().__new__( + cls, + *_args, + template_name=template_name, + custom_template_id=custom_template_id, + prefix_name=prefix_name, + things_options=things_options, + _configuration=_configuration, + **kwargs, + ) diff --git a/iot_api_client/model/thing_clone.py b/iot_api_client/model/thing_clone.py index 03f2699..c789c65 100644 --- a/iot_api_client/model/thing_clone.py +++ b/iot_api_client/model/thing_clone.py @@ -51,7 +51,7 @@ class name( class MetaOapg: max_length = 64 regex=[{ - 'pattern': r'^[a-zA-Z0-9_.@ -]+$', # noqa: E501 + 'pattern': r'^[a-zA-Z0-9_. -]+$', # noqa: E501 }] include_tags = schemas.BoolSchema __annotations__ = { diff --git a/iot_api_client/model/thing_create.py b/iot_api_client/model/thing_create.py index ce199cf..56ec737 100644 --- a/iot_api_client/model/thing_create.py +++ b/iot_api_client/model/thing_create.py @@ -38,6 +38,32 @@ class ThingCreate( class MetaOapg: class properties: + + + class assistant( + schemas.EnumBase, + schemas.StrSchema + ): + + + class MetaOapg: + enum_value_to_name = { + "ALEXA": "ALEXA", + "GOOGLE": "GOOGLE", + "NONE": "NONE", + } + + @schemas.classproperty + def ALEXA(cls): + return cls("ALEXA") + + @schemas.classproperty + def GOOGLE(cls): + return cls("GOOGLE") + + @schemas.classproperty + def NONE(cls): + return cls("NONE") device_id = schemas.UUIDSchema id = schemas.UUIDSchema @@ -50,7 +76,7 @@ class name( class MetaOapg: max_length = 64 regex=[{ - 'pattern': r'^[a-zA-Z0-9_.@ -]+$', # noqa: E501 + 'pattern': r'^[a-zA-Z0-9_. -]+$', # noqa: E501 }] @@ -108,6 +134,7 @@ def __getitem__(self, i: int) -> 'Tag': webhook_active = schemas.BoolSchema webhook_uri = schemas.StrSchema __annotations__ = { + "assistant": assistant, "device_id": device_id, "id": id, "name": name, @@ -118,6 +145,9 @@ def __getitem__(self, i: int) -> 'Tag': "webhook_uri": webhook_uri, } + @typing.overload + def __getitem__(self, name: typing_extensions.Literal["assistant"]) -> MetaOapg.properties.assistant: ... + @typing.overload def __getitem__(self, name: typing_extensions.Literal["device_id"]) -> MetaOapg.properties.device_id: ... @@ -145,11 +175,14 @@ def __getitem__(self, name: typing_extensions.Literal["webhook_uri"]) -> MetaOap @typing.overload def __getitem__(self, name: str) -> schemas.UnsetAnyTypeSchema: ... - def __getitem__(self, name: typing.Union[typing_extensions.Literal["device_id", "id", "name", "properties", "tags", "timezone", "webhook_active", "webhook_uri", ], str]): + def __getitem__(self, name: typing.Union[typing_extensions.Literal["assistant", "device_id", "id", "name", "properties", "tags", "timezone", "webhook_active", "webhook_uri", ], str]): # dict_instance[name] accessor return super().__getitem__(name) + @typing.overload + def get_item_oapg(self, name: typing_extensions.Literal["assistant"]) -> typing.Union[MetaOapg.properties.assistant, schemas.Unset]: ... + @typing.overload def get_item_oapg(self, name: typing_extensions.Literal["device_id"]) -> typing.Union[MetaOapg.properties.device_id, schemas.Unset]: ... @@ -177,13 +210,14 @@ def get_item_oapg(self, name: typing_extensions.Literal["webhook_uri"]) -> typin @typing.overload def get_item_oapg(self, name: str) -> typing.Union[schemas.UnsetAnyTypeSchema, schemas.Unset]: ... - def get_item_oapg(self, name: typing.Union[typing_extensions.Literal["device_id", "id", "name", "properties", "tags", "timezone", "webhook_active", "webhook_uri", ], str]): + def get_item_oapg(self, name: typing.Union[typing_extensions.Literal["assistant", "device_id", "id", "name", "properties", "tags", "timezone", "webhook_active", "webhook_uri", ], str]): return super().get_item_oapg(name) def __new__( cls, *_args: typing.Union[dict, frozendict.frozendict, ], + assistant: typing.Union[MetaOapg.properties.assistant, str, schemas.Unset] = schemas.unset, device_id: typing.Union[MetaOapg.properties.device_id, str, uuid.UUID, schemas.Unset] = schemas.unset, id: typing.Union[MetaOapg.properties.id, str, uuid.UUID, schemas.Unset] = schemas.unset, name: typing.Union[MetaOapg.properties.name, str, schemas.Unset] = schemas.unset, @@ -198,6 +232,7 @@ def __new__( return super().__new__( cls, *_args, + assistant=assistant, device_id=device_id, id=id, name=name, diff --git a/iot_api_client/model/thing_create.pyi b/iot_api_client/model/thing_create.pyi index fd95eee..e7ac0dd 100644 --- a/iot_api_client/model/thing_create.pyi +++ b/iot_api_client/model/thing_create.pyi @@ -38,6 +38,24 @@ class ThingCreate( class MetaOapg: class properties: + + + class assistant( + schemas.EnumBase, + schemas.StrSchema + ): + + @schemas.classproperty + def ALEXA(cls): + return cls("ALEXA") + + @schemas.classproperty + def GOOGLE(cls): + return cls("GOOGLE") + + @schemas.classproperty + def NONE(cls): + return cls("NONE") device_id = schemas.UUIDSchema id = schemas.UUIDSchema @@ -102,6 +120,7 @@ class ThingCreate( webhook_active = schemas.BoolSchema webhook_uri = schemas.StrSchema __annotations__ = { + "assistant": assistant, "device_id": device_id, "id": id, "name": name, @@ -112,6 +131,9 @@ class ThingCreate( "webhook_uri": webhook_uri, } + @typing.overload + def __getitem__(self, name: typing_extensions.Literal["assistant"]) -> MetaOapg.properties.assistant: ... + @typing.overload def __getitem__(self, name: typing_extensions.Literal["device_id"]) -> MetaOapg.properties.device_id: ... @@ -139,11 +161,14 @@ class ThingCreate( @typing.overload def __getitem__(self, name: str) -> schemas.UnsetAnyTypeSchema: ... - def __getitem__(self, name: typing.Union[typing_extensions.Literal["device_id", "id", "name", "properties", "tags", "timezone", "webhook_active", "webhook_uri", ], str]): + def __getitem__(self, name: typing.Union[typing_extensions.Literal["assistant", "device_id", "id", "name", "properties", "tags", "timezone", "webhook_active", "webhook_uri", ], str]): # dict_instance[name] accessor return super().__getitem__(name) + @typing.overload + def get_item_oapg(self, name: typing_extensions.Literal["assistant"]) -> typing.Union[MetaOapg.properties.assistant, schemas.Unset]: ... + @typing.overload def get_item_oapg(self, name: typing_extensions.Literal["device_id"]) -> typing.Union[MetaOapg.properties.device_id, schemas.Unset]: ... @@ -171,13 +196,14 @@ class ThingCreate( @typing.overload def get_item_oapg(self, name: str) -> typing.Union[schemas.UnsetAnyTypeSchema, schemas.Unset]: ... - def get_item_oapg(self, name: typing.Union[typing_extensions.Literal["device_id", "id", "name", "properties", "tags", "timezone", "webhook_active", "webhook_uri", ], str]): + def get_item_oapg(self, name: typing.Union[typing_extensions.Literal["assistant", "device_id", "id", "name", "properties", "tags", "timezone", "webhook_active", "webhook_uri", ], str]): return super().get_item_oapg(name) def __new__( cls, *_args: typing.Union[dict, frozendict.frozendict, ], + assistant: typing.Union[MetaOapg.properties.assistant, str, schemas.Unset] = schemas.unset, device_id: typing.Union[MetaOapg.properties.device_id, str, uuid.UUID, schemas.Unset] = schemas.unset, id: typing.Union[MetaOapg.properties.id, str, uuid.UUID, schemas.Unset] = schemas.unset, name: typing.Union[MetaOapg.properties.name, str, schemas.Unset] = schemas.unset, @@ -192,6 +218,7 @@ class ThingCreate( return super().__new__( cls, *_args, + assistant=assistant, device_id=device_id, id=id, name=name, diff --git a/iot_api_client/model/thing_update.py b/iot_api_client/model/thing_update.py index 996153d..84596c0 100644 --- a/iot_api_client/model/thing_update.py +++ b/iot_api_client/model/thing_update.py @@ -38,6 +38,32 @@ class ThingUpdate( class MetaOapg: class properties: + + + class assistant( + schemas.EnumBase, + schemas.StrSchema + ): + + + class MetaOapg: + enum_value_to_name = { + "ALEXA": "ALEXA", + "GOOGLE": "GOOGLE", + "NONE": "NONE", + } + + @schemas.classproperty + def ALEXA(cls): + return cls("ALEXA") + + @schemas.classproperty + def GOOGLE(cls): + return cls("GOOGLE") + + @schemas.classproperty + def NONE(cls): + return cls("NONE") device_id = schemas.UUIDSchema id = schemas.UUIDSchema @@ -50,7 +76,7 @@ class name( class MetaOapg: max_length = 64 regex=[{ - 'pattern': r'^[a-zA-Z0-9_.@ -]+$', # noqa: E501 + 'pattern': r'^[a-zA-Z0-9_. -]+$', # noqa: E501 }] @@ -82,6 +108,7 @@ def __getitem__(self, i: int) -> 'ModelProperty': webhook_active = schemas.BoolSchema webhook_uri = schemas.StrSchema __annotations__ = { + "assistant": assistant, "device_id": device_id, "id": id, "name": name, @@ -91,6 +118,9 @@ def __getitem__(self, i: int) -> 'ModelProperty': "webhook_uri": webhook_uri, } + @typing.overload + def __getitem__(self, name: typing_extensions.Literal["assistant"]) -> MetaOapg.properties.assistant: ... + @typing.overload def __getitem__(self, name: typing_extensions.Literal["device_id"]) -> MetaOapg.properties.device_id: ... @@ -115,11 +145,14 @@ def __getitem__(self, name: typing_extensions.Literal["webhook_uri"]) -> MetaOap @typing.overload def __getitem__(self, name: str) -> schemas.UnsetAnyTypeSchema: ... - def __getitem__(self, name: typing.Union[typing_extensions.Literal["device_id", "id", "name", "properties", "timezone", "webhook_active", "webhook_uri", ], str]): + def __getitem__(self, name: typing.Union[typing_extensions.Literal["assistant", "device_id", "id", "name", "properties", "timezone", "webhook_active", "webhook_uri", ], str]): # dict_instance[name] accessor return super().__getitem__(name) + @typing.overload + def get_item_oapg(self, name: typing_extensions.Literal["assistant"]) -> typing.Union[MetaOapg.properties.assistant, schemas.Unset]: ... + @typing.overload def get_item_oapg(self, name: typing_extensions.Literal["device_id"]) -> typing.Union[MetaOapg.properties.device_id, schemas.Unset]: ... @@ -144,13 +177,14 @@ def get_item_oapg(self, name: typing_extensions.Literal["webhook_uri"]) -> typin @typing.overload def get_item_oapg(self, name: str) -> typing.Union[schemas.UnsetAnyTypeSchema, schemas.Unset]: ... - def get_item_oapg(self, name: typing.Union[typing_extensions.Literal["device_id", "id", "name", "properties", "timezone", "webhook_active", "webhook_uri", ], str]): + def get_item_oapg(self, name: typing.Union[typing_extensions.Literal["assistant", "device_id", "id", "name", "properties", "timezone", "webhook_active", "webhook_uri", ], str]): return super().get_item_oapg(name) def __new__( cls, *_args: typing.Union[dict, frozendict.frozendict, ], + assistant: typing.Union[MetaOapg.properties.assistant, str, schemas.Unset] = schemas.unset, device_id: typing.Union[MetaOapg.properties.device_id, str, uuid.UUID, schemas.Unset] = schemas.unset, id: typing.Union[MetaOapg.properties.id, str, uuid.UUID, schemas.Unset] = schemas.unset, name: typing.Union[MetaOapg.properties.name, str, schemas.Unset] = schemas.unset, @@ -164,6 +198,7 @@ def __new__( return super().__new__( cls, *_args, + assistant=assistant, device_id=device_id, id=id, name=name, diff --git a/iot_api_client/model/thing_update.pyi b/iot_api_client/model/thing_update.pyi index 21eb340..45b67d3 100644 --- a/iot_api_client/model/thing_update.pyi +++ b/iot_api_client/model/thing_update.pyi @@ -38,6 +38,24 @@ class ThingUpdate( class MetaOapg: class properties: + + + class assistant( + schemas.EnumBase, + schemas.StrSchema + ): + + @schemas.classproperty + def ALEXA(cls): + return cls("ALEXA") + + @schemas.classproperty + def GOOGLE(cls): + return cls("GOOGLE") + + @schemas.classproperty + def NONE(cls): + return cls("NONE") device_id = schemas.UUIDSchema id = schemas.UUIDSchema @@ -76,6 +94,7 @@ class ThingUpdate( webhook_active = schemas.BoolSchema webhook_uri = schemas.StrSchema __annotations__ = { + "assistant": assistant, "device_id": device_id, "id": id, "name": name, @@ -85,6 +104,9 @@ class ThingUpdate( "webhook_uri": webhook_uri, } + @typing.overload + def __getitem__(self, name: typing_extensions.Literal["assistant"]) -> MetaOapg.properties.assistant: ... + @typing.overload def __getitem__(self, name: typing_extensions.Literal["device_id"]) -> MetaOapg.properties.device_id: ... @@ -109,11 +131,14 @@ class ThingUpdate( @typing.overload def __getitem__(self, name: str) -> schemas.UnsetAnyTypeSchema: ... - def __getitem__(self, name: typing.Union[typing_extensions.Literal["device_id", "id", "name", "properties", "timezone", "webhook_active", "webhook_uri", ], str]): + def __getitem__(self, name: typing.Union[typing_extensions.Literal["assistant", "device_id", "id", "name", "properties", "timezone", "webhook_active", "webhook_uri", ], str]): # dict_instance[name] accessor return super().__getitem__(name) + @typing.overload + def get_item_oapg(self, name: typing_extensions.Literal["assistant"]) -> typing.Union[MetaOapg.properties.assistant, schemas.Unset]: ... + @typing.overload def get_item_oapg(self, name: typing_extensions.Literal["device_id"]) -> typing.Union[MetaOapg.properties.device_id, schemas.Unset]: ... @@ -138,13 +163,14 @@ class ThingUpdate( @typing.overload def get_item_oapg(self, name: str) -> typing.Union[schemas.UnsetAnyTypeSchema, schemas.Unset]: ... - def get_item_oapg(self, name: typing.Union[typing_extensions.Literal["device_id", "id", "name", "properties", "timezone", "webhook_active", "webhook_uri", ], str]): + def get_item_oapg(self, name: typing.Union[typing_extensions.Literal["assistant", "device_id", "id", "name", "properties", "timezone", "webhook_active", "webhook_uri", ], str]): return super().get_item_oapg(name) def __new__( cls, *_args: typing.Union[dict, frozendict.frozendict, ], + assistant: typing.Union[MetaOapg.properties.assistant, str, schemas.Unset] = schemas.unset, device_id: typing.Union[MetaOapg.properties.device_id, str, uuid.UUID, schemas.Unset] = schemas.unset, id: typing.Union[MetaOapg.properties.id, str, uuid.UUID, schemas.Unset] = schemas.unset, name: typing.Union[MetaOapg.properties.name, str, schemas.Unset] = schemas.unset, @@ -158,6 +184,7 @@ class ThingUpdate( return super().__new__( cls, *_args, + assistant=assistant, device_id=device_id, id=id, name=name, diff --git a/iot_api_client/models/__init__.py b/iot_api_client/models/__init__.py index 3518188..800fbb6 100644 --- a/iot_api_client/models/__init__.py +++ b/iot_api_client/models/__init__.py @@ -12,6 +12,8 @@ # sys.setrecursionlimit(n) from iot_api_client.model.arduino_compressedv2 import ArduinoCompressedv2 +from iot_api_client.model.arduino_credentialsv1 import ArduinoCredentialsv1 +from iot_api_client.model.arduino_credentialsv1_collection import ArduinoCredentialsv1Collection from iot_api_client.model.arduino_dashboardowner import ArduinoDashboardowner from iot_api_client.model.arduino_dashboardshare import ArduinoDashboardshare from iot_api_client.model.arduino_dashboardshare_collection import ArduinoDashboardshareCollection @@ -36,6 +38,7 @@ from iot_api_client.model.arduino_devicev2propertyvalue import ArduinoDevicev2propertyvalue from iot_api_client.model.arduino_devicev2propertyvalue_collection import ArduinoDevicev2propertyvalueCollection from iot_api_client.model.arduino_devicev2propertyvalues import ArduinoDevicev2propertyvalues +from iot_api_client.model.arduino_devicev2templatedevice import ArduinoDevicev2templatedevice from iot_api_client.model.arduino_linkedvariable import ArduinoLinkedvariable from iot_api_client.model.arduino_linkedvariable_collection import ArduinoLinkedvariableCollection from iot_api_client.model.arduino_loradevicev1 import ArduinoLoradevicev1 @@ -44,18 +47,23 @@ from iot_api_client.model.arduino_property import ArduinoProperty from iot_api_client.model.arduino_property_collection import ArduinoPropertyCollection from iot_api_client.model.arduino_series_batch import ArduinoSeriesBatch +from iot_api_client.model.arduino_series_batch_sampled import ArduinoSeriesBatchSampled from iot_api_client.model.arduino_series_raw_batch import ArduinoSeriesRawBatch from iot_api_client.model.arduino_series_raw_batch_lastvalue import ArduinoSeriesRawBatchLastvalue from iot_api_client.model.arduino_series_raw_last_value_response import ArduinoSeriesRawLastValueResponse from iot_api_client.model.arduino_series_raw_response import ArduinoSeriesRawResponse from iot_api_client.model.arduino_series_response import ArduinoSeriesResponse +from iot_api_client.model.arduino_series_sampled_response import ArduinoSeriesSampledResponse from iot_api_client.model.arduino_tags import ArduinoTags +from iot_api_client.model.arduino_template import ArduinoTemplate from iot_api_client.model.arduino_templateproperty import ArduinoTemplateproperty from iot_api_client.model.arduino_templateproperty_collection import ArduinoTemplatepropertyCollection from iot_api_client.model.arduino_templatevariable import ArduinoTemplatevariable from iot_api_client.model.arduino_templatevariable_collection import ArduinoTemplatevariableCollection from iot_api_client.model.arduino_thing import ArduinoThing from iot_api_client.model.arduino_thing_collection import ArduinoThingCollection +from iot_api_client.model.arduino_thingresult import ArduinoThingresult +from iot_api_client.model.arduino_thingresult_collection import ArduinoThingresultCollection from iot_api_client.model.arduino_thingtemplate import ArduinoThingtemplate from iot_api_client.model.arduino_timeseriesmedia import ArduinoTimeseriesmedia from iot_api_client.model.arduino_timezone import ArduinoTimezone @@ -71,6 +79,8 @@ from iot_api_client.model.batch_query_raw_response_series_media_v1 import BatchQueryRawResponseSeriesMediaV1 from iot_api_client.model.batch_query_request_media_v1 import BatchQueryRequestMediaV1 from iot_api_client.model.batch_query_requests_media_v1 import BatchQueryRequestsMediaV1 +from iot_api_client.model.batch_query_sampled_request_media_v1 import BatchQuerySampledRequestMediaV1 +from iot_api_client.model.batch_query_sampled_requests_media_v1 import BatchQuerySampledRequestsMediaV1 from iot_api_client.model.check_devices_v2_pass_payload import CheckDevicesV2PassPayload from iot_api_client.model.clone import Clone from iot_api_client.model.create_devices_v2_certs_payload import CreateDevicesV2CertsPayload @@ -92,6 +102,7 @@ from iot_api_client.model.property_value import PropertyValue from iot_api_client.model.sharerequest import Sharerequest from iot_api_client.model.tag import Tag +from iot_api_client.model.template import Template from iot_api_client.model.thing_clone import ThingClone from iot_api_client.model.thing_create import ThingCreate from iot_api_client.model.thing_sketch import ThingSketch diff --git a/iot_api_client/paths/__init__.py b/iot_api_client/paths/__init__.py index c4a327d..5f5fce8 100644 --- a/iot_api_client/paths/__init__.py +++ b/iot_api_client/paths/__init__.py @@ -8,6 +8,9 @@ class PathValues(str, enum.Enum): V1_LORADEVICES_ = "/v1/lora-devices/" V1_LORAFREQPLANS_ = "/v1/lora-freq-plans/" + V1_NETWORK_CREDENTIALS_TYPE = "/v1/network_credentials/{type}" + V1_NETWORK_CREDENTIALS_TYPE_CONNECTIONS = "/v1/network_credentials/{type}/connections" + V1_TEMPLATES = "/v1/templates" V2_DASHBOARDS = "/v2/dashboards" V2_DASHBOARDS_ID = "/v2/dashboards/{id}" V2_DASHBOARDS_ID_CLONE = "/v2/dashboards/{id}/clone" @@ -32,6 +35,7 @@ class PathValues(str, enum.Enum): V2_SERIES_BATCH_QUERY = "/v2/series/batch_query" V2_SERIES_BATCH_QUERY_RAW = "/v2/series/batch_query_raw" V2_SERIES_BATCH_QUERY_RAW_LASTVALUE = "/v2/series/batch_query_raw/lastvalue" + V2_SERIES_BATCH_QUERY_SAMPLING = "/v2/series/batch_query_sampling" V2_SERIES_HISTORIC_DATA = "/v2/series/historic_data" V2_THINGS = "/v2/things" V2_THINGS_ID = "/v2/things/{id}" diff --git a/iot_api_client/paths/v1_network_credentials_type/__init__.py b/iot_api_client/paths/v1_network_credentials_type/__init__.py new file mode 100644 index 0000000..598902e --- /dev/null +++ b/iot_api_client/paths/v1_network_credentials_type/__init__.py @@ -0,0 +1,7 @@ +# do not import all endpoints into this module because that uses a lot of memory and stack frames +# if you need the ability to import all endpoints from this module, import them with +# from iot_api_client.paths.v1_network_credentials_type import Api + +from iot_api_client.paths import PathValues + +path = PathValues.V1_NETWORK_CREDENTIALS_TYPE \ No newline at end of file diff --git a/iot_api_client/paths/v1_network_credentials_type/get.py b/iot_api_client/paths/v1_network_credentials_type/get.py new file mode 100644 index 0000000..0e1bae0 --- /dev/null +++ b/iot_api_client/paths/v1_network_credentials_type/get.py @@ -0,0 +1,518 @@ +# coding: utf-8 + +""" + + + Generated by: https://openapi-generator.tech +""" + +from dataclasses import dataclass +import typing_extensions +import urllib3 +from urllib3._collections import HTTPHeaderDict + +from iot_api_client import api_client, exceptions +from datetime import date, datetime # noqa: F401 +import decimal # noqa: F401 +import functools # noqa: F401 +import io # noqa: F401 +import re # noqa: F401 +import typing # noqa: F401 +import typing_extensions # noqa: F401 +import uuid # noqa: F401 + +import frozendict # noqa: F401 + +from iot_api_client import schemas # noqa: F401 + +from iot_api_client.model.arduino_credentialsv1_collection import ArduinoCredentialsv1Collection + +from . import path + +# Query params + + +class ConnectionSchema( + schemas.EnumBase, + schemas.StrSchema +): + + + class MetaOapg: + enum_value_to_name = { + "wifi": "WIFI", + "eth": "ETH", + "wifiandsecret": "WIFIANDSECRET", + "gsm": "GSM", + "nb": "NB", + "lora": "LORA", + "catm1": "CATM1", + "cellular": "CELLULAR", + } + + @schemas.classproperty + def WIFI(cls): + return cls("wifi") + + @schemas.classproperty + def ETH(cls): + return cls("eth") + + @schemas.classproperty + def WIFIANDSECRET(cls): + return cls("wifiandsecret") + + @schemas.classproperty + def GSM(cls): + return cls("gsm") + + @schemas.classproperty + def NB(cls): + return cls("nb") + + @schemas.classproperty + def LORA(cls): + return cls("lora") + + @schemas.classproperty + def CATM1(cls): + return cls("catm1") + + @schemas.classproperty + def CELLULAR(cls): + return cls("cellular") +RequestRequiredQueryParams = typing_extensions.TypedDict( + 'RequestRequiredQueryParams', + { + } +) +RequestOptionalQueryParams = typing_extensions.TypedDict( + 'RequestOptionalQueryParams', + { + 'connection': typing.Union[ConnectionSchema, str, ], + }, + total=False +) + + +class RequestQueryParams(RequestRequiredQueryParams, RequestOptionalQueryParams): + pass + + +request_query_connection = api_client.QueryParameter( + name="connection", + style=api_client.ParameterStyle.FORM, + schema=ConnectionSchema, + explode=True, +) +# Path params + + +class TypeSchema( + schemas.EnumBase, + schemas.StrSchema +): + + + class MetaOapg: + enum_value_to_name = { + "mkrwifi1010": "MKRWIFI1010", + "mkr1000": "MKR1000", + "nano_33_iot": "NANO_33_IOT", + "mkrgsm1400": "MKRGSM1400", + "mkrwan1310": "MKRWAN1310", + "mkrwan1300": "MKRWAN1300", + "mkrnb1500": "MKRNB1500", + "lora-device": "LORADEVICE", + "login_and_secretkey_wifi": "LOGIN_AND_SECRETKEY_WIFI", + "envie_m7": "ENVIE_M7", + "nanorp2040connect": "NANORP2040CONNECT", + "nicla_vision": "NICLA_VISION", + "opta": "OPTA", + "giga": "GIGA", + "portenta_c33": "PORTENTA_C33", + "unor4wifi": "UNOR4WIFI", + "nano_nora": "NANO_NORA", + } + + @schemas.classproperty + def MKRWIFI1010(cls): + return cls("mkrwifi1010") + + @schemas.classproperty + def MKR1000(cls): + return cls("mkr1000") + + @schemas.classproperty + def NANO_33_IOT(cls): + return cls("nano_33_iot") + + @schemas.classproperty + def MKRGSM1400(cls): + return cls("mkrgsm1400") + + @schemas.classproperty + def MKRWAN1310(cls): + return cls("mkrwan1310") + + @schemas.classproperty + def MKRWAN1300(cls): + return cls("mkrwan1300") + + @schemas.classproperty + def MKRNB1500(cls): + return cls("mkrnb1500") + + @schemas.classproperty + def LORADEVICE(cls): + return cls("lora-device") + + @schemas.classproperty + def LOGIN_AND_SECRETKEY_WIFI(cls): + return cls("login_and_secretkey_wifi") + + @schemas.classproperty + def ENVIE_M7(cls): + return cls("envie_m7") + + @schemas.classproperty + def NANORP2040CONNECT(cls): + return cls("nanorp2040connect") + + @schemas.classproperty + def NICLA_VISION(cls): + return cls("nicla_vision") + + @schemas.classproperty + def OPTA(cls): + return cls("opta") + + @schemas.classproperty + def GIGA(cls): + return cls("giga") + + @schemas.classproperty + def PORTENTA_C33(cls): + return cls("portenta_c33") + + @schemas.classproperty + def UNOR4WIFI(cls): + return cls("unor4wifi") + + @schemas.classproperty + def NANO_NORA(cls): + return cls("nano_nora") +RequestRequiredPathParams = typing_extensions.TypedDict( + 'RequestRequiredPathParams', + { + 'type': typing.Union[TypeSchema, str, ], + } +) +RequestOptionalPathParams = typing_extensions.TypedDict( + 'RequestOptionalPathParams', + { + }, + total=False +) + + +class RequestPathParams(RequestRequiredPathParams, RequestOptionalPathParams): + pass + + +request_path_type = api_client.PathParameter( + name="type", + style=api_client.ParameterStyle.SIMPLE, + schema=TypeSchema, + required=True, +) +SchemaFor200ResponseBodyApplicationVndArduinoCredentialsv1jsonTypecollection = ArduinoCredentialsv1Collection + + +@dataclass +class ApiResponseFor200(api_client.ApiResponse): + response: urllib3.HTTPResponse + body: typing.Union[ + SchemaFor200ResponseBodyApplicationVndArduinoCredentialsv1jsonTypecollection, + ] + headers: schemas.Unset = schemas.unset + + +_response_for_200 = api_client.OpenApiResponse( + response_cls=ApiResponseFor200, + content={ + 'application/vnd.arduino.credentialsv1+json; type=collection': api_client.MediaType( + schema=SchemaFor200ResponseBodyApplicationVndArduinoCredentialsv1jsonTypecollection), + }, +) + + +@dataclass +class ApiResponseFor401(api_client.ApiResponse): + response: urllib3.HTTPResponse + body: schemas.Unset = schemas.unset + headers: schemas.Unset = schemas.unset + + +_response_for_401 = api_client.OpenApiResponse( + response_cls=ApiResponseFor401, +) + + +@dataclass +class ApiResponseFor404(api_client.ApiResponse): + response: urllib3.HTTPResponse + body: schemas.Unset = schemas.unset + headers: schemas.Unset = schemas.unset + + +_response_for_404 = api_client.OpenApiResponse( + response_cls=ApiResponseFor404, +) +_status_code_to_response = { + '200': _response_for_200, + '401': _response_for_401, + '404': _response_for_404, +} +_all_accept_content_types = ( + 'application/vnd.arduino.credentialsv1+json; type=collection', +) + + +class BaseApi(api_client.Api): + @typing.overload + def _network_credentials_v1_show_oapg( + self, + query_params: RequestQueryParams = frozendict.frozendict(), + path_params: RequestPathParams = frozendict.frozendict(), + accept_content_types: typing.Tuple[str] = _all_accept_content_types, + stream: bool = False, + timeout: typing.Optional[typing.Union[int, typing.Tuple]] = None, + skip_deserialization: typing_extensions.Literal[False] = ..., + ) -> typing.Union[ + ApiResponseFor200, + ]: ... + + @typing.overload + def _network_credentials_v1_show_oapg( + self, + skip_deserialization: typing_extensions.Literal[True], + query_params: RequestQueryParams = frozendict.frozendict(), + path_params: RequestPathParams = frozendict.frozendict(), + accept_content_types: typing.Tuple[str] = _all_accept_content_types, + stream: bool = False, + timeout: typing.Optional[typing.Union[int, typing.Tuple]] = None, + ) -> api_client.ApiResponseWithoutDeserialization: ... + + @typing.overload + def _network_credentials_v1_show_oapg( + self, + query_params: RequestQueryParams = frozendict.frozendict(), + path_params: RequestPathParams = frozendict.frozendict(), + accept_content_types: typing.Tuple[str] = _all_accept_content_types, + stream: bool = False, + timeout: typing.Optional[typing.Union[int, typing.Tuple]] = None, + skip_deserialization: bool = ..., + ) -> typing.Union[ + ApiResponseFor200, + api_client.ApiResponseWithoutDeserialization, + ]: ... + + def _network_credentials_v1_show_oapg( + self, + query_params: RequestQueryParams = frozendict.frozendict(), + path_params: RequestPathParams = frozendict.frozendict(), + accept_content_types: typing.Tuple[str] = _all_accept_content_types, + stream: bool = False, + timeout: typing.Optional[typing.Union[int, typing.Tuple]] = None, + skip_deserialization: bool = False, + ): + """ + show network_credentials_v1 + :param skip_deserialization: If true then api_response.response will be set but + api_response.body and api_response.headers will not be deserialized into schema + class instances + """ + self._verify_typed_dict_inputs_oapg(RequestQueryParams, query_params) + self._verify_typed_dict_inputs_oapg(RequestPathParams, path_params) + used_path = path.value + + _path_params = {} + for parameter in ( + request_path_type, + ): + parameter_data = path_params.get(parameter.name, schemas.unset) + if parameter_data is schemas.unset: + continue + serialized_data = parameter.serialize(parameter_data) + _path_params.update(serialized_data) + + for k, v in _path_params.items(): + used_path = used_path.replace('{%s}' % k, v) + + prefix_separator_iterator = None + for parameter in ( + request_query_connection, + ): + parameter_data = query_params.get(parameter.name, schemas.unset) + if parameter_data is schemas.unset: + continue + if prefix_separator_iterator is None: + prefix_separator_iterator = parameter.get_prefix_separator_iterator() + serialized_data = parameter.serialize(parameter_data, prefix_separator_iterator) + for serialized_value in serialized_data.values(): + used_path += serialized_value + + _headers = HTTPHeaderDict() + # TODO add cookie handling + if accept_content_types: + for accept_content_type in accept_content_types: + _headers.add('Accept', accept_content_type) + + response = self.api_client.call_api( + resource_path=used_path, + method='get'.upper(), + headers=_headers, + stream=stream, + timeout=timeout, + ) + + if skip_deserialization: + api_response = api_client.ApiResponseWithoutDeserialization(response=response) + else: + response_for_status = _status_code_to_response.get(str(response.status)) + if response_for_status: + api_response = response_for_status.deserialize(response, self.api_client.configuration) + else: + api_response = api_client.ApiResponseWithoutDeserialization(response=response) + + if not 200 <= response.status <= 299: + raise exceptions.ApiException( + status=response.status, + reason=response.reason, + api_response=api_response + ) + + return api_response + + +class NetworkCredentialsV1Show(BaseApi): + # this class is used by api classes that refer to endpoints with operationId fn names + + @typing.overload + def network_credentials_v1_show( + self, + query_params: RequestQueryParams = frozendict.frozendict(), + path_params: RequestPathParams = frozendict.frozendict(), + accept_content_types: typing.Tuple[str] = _all_accept_content_types, + stream: bool = False, + timeout: typing.Optional[typing.Union[int, typing.Tuple]] = None, + skip_deserialization: typing_extensions.Literal[False] = ..., + ) -> typing.Union[ + ApiResponseFor200, + ]: ... + + @typing.overload + def network_credentials_v1_show( + self, + skip_deserialization: typing_extensions.Literal[True], + query_params: RequestQueryParams = frozendict.frozendict(), + path_params: RequestPathParams = frozendict.frozendict(), + accept_content_types: typing.Tuple[str] = _all_accept_content_types, + stream: bool = False, + timeout: typing.Optional[typing.Union[int, typing.Tuple]] = None, + ) -> api_client.ApiResponseWithoutDeserialization: ... + + @typing.overload + def network_credentials_v1_show( + self, + query_params: RequestQueryParams = frozendict.frozendict(), + path_params: RequestPathParams = frozendict.frozendict(), + accept_content_types: typing.Tuple[str] = _all_accept_content_types, + stream: bool = False, + timeout: typing.Optional[typing.Union[int, typing.Tuple]] = None, + skip_deserialization: bool = ..., + ) -> typing.Union[ + ApiResponseFor200, + api_client.ApiResponseWithoutDeserialization, + ]: ... + + def network_credentials_v1_show( + self, + query_params: RequestQueryParams = frozendict.frozendict(), + path_params: RequestPathParams = frozendict.frozendict(), + accept_content_types: typing.Tuple[str] = _all_accept_content_types, + stream: bool = False, + timeout: typing.Optional[typing.Union[int, typing.Tuple]] = None, + skip_deserialization: bool = False, + ): + return self._network_credentials_v1_show_oapg( + query_params=query_params, + path_params=path_params, + accept_content_types=accept_content_types, + stream=stream, + timeout=timeout, + skip_deserialization=skip_deserialization + ) + + +class ApiForget(BaseApi): + # this class is used by api classes that refer to endpoints by path and http method names + + @typing.overload + def get( + self, + query_params: RequestQueryParams = frozendict.frozendict(), + path_params: RequestPathParams = frozendict.frozendict(), + accept_content_types: typing.Tuple[str] = _all_accept_content_types, + stream: bool = False, + timeout: typing.Optional[typing.Union[int, typing.Tuple]] = None, + skip_deserialization: typing_extensions.Literal[False] = ..., + ) -> typing.Union[ + ApiResponseFor200, + ]: ... + + @typing.overload + def get( + self, + skip_deserialization: typing_extensions.Literal[True], + query_params: RequestQueryParams = frozendict.frozendict(), + path_params: RequestPathParams = frozendict.frozendict(), + accept_content_types: typing.Tuple[str] = _all_accept_content_types, + stream: bool = False, + timeout: typing.Optional[typing.Union[int, typing.Tuple]] = None, + ) -> api_client.ApiResponseWithoutDeserialization: ... + + @typing.overload + def get( + self, + query_params: RequestQueryParams = frozendict.frozendict(), + path_params: RequestPathParams = frozendict.frozendict(), + accept_content_types: typing.Tuple[str] = _all_accept_content_types, + stream: bool = False, + timeout: typing.Optional[typing.Union[int, typing.Tuple]] = None, + skip_deserialization: bool = ..., + ) -> typing.Union[ + ApiResponseFor200, + api_client.ApiResponseWithoutDeserialization, + ]: ... + + def get( + self, + query_params: RequestQueryParams = frozendict.frozendict(), + path_params: RequestPathParams = frozendict.frozendict(), + accept_content_types: typing.Tuple[str] = _all_accept_content_types, + stream: bool = False, + timeout: typing.Optional[typing.Union[int, typing.Tuple]] = None, + skip_deserialization: bool = False, + ): + return self._network_credentials_v1_show_oapg( + query_params=query_params, + path_params=path_params, + accept_content_types=accept_content_types, + stream=stream, + timeout=timeout, + skip_deserialization=skip_deserialization + ) + + diff --git a/iot_api_client/paths/v1_network_credentials_type/get.pyi b/iot_api_client/paths/v1_network_credentials_type/get.pyi new file mode 100644 index 0000000..88d1fb6 --- /dev/null +++ b/iot_api_client/paths/v1_network_credentials_type/get.pyi @@ -0,0 +1,476 @@ +# coding: utf-8 + +""" + + + Generated by: https://openapi-generator.tech +""" + +from dataclasses import dataclass +import typing_extensions +import urllib3 +from urllib3._collections import HTTPHeaderDict + +from iot_api_client import api_client, exceptions +from datetime import date, datetime # noqa: F401 +import decimal # noqa: F401 +import functools # noqa: F401 +import io # noqa: F401 +import re # noqa: F401 +import typing # noqa: F401 +import typing_extensions # noqa: F401 +import uuid # noqa: F401 + +import frozendict # noqa: F401 + +from iot_api_client import schemas # noqa: F401 + +from iot_api_client.model.arduino_credentialsv1_collection import ArduinoCredentialsv1Collection + +# Query params + + +class ConnectionSchema( + schemas.EnumBase, + schemas.StrSchema +): + + @schemas.classproperty + def WIFI(cls): + return cls("wifi") + + @schemas.classproperty + def ETH(cls): + return cls("eth") + + @schemas.classproperty + def WIFIANDSECRET(cls): + return cls("wifiandsecret") + + @schemas.classproperty + def GSM(cls): + return cls("gsm") + + @schemas.classproperty + def NB(cls): + return cls("nb") + + @schemas.classproperty + def LORA(cls): + return cls("lora") + + @schemas.classproperty + def CATM1(cls): + return cls("catm1") + + @schemas.classproperty + def CELLULAR(cls): + return cls("cellular") +RequestRequiredQueryParams = typing_extensions.TypedDict( + 'RequestRequiredQueryParams', + { + } +) +RequestOptionalQueryParams = typing_extensions.TypedDict( + 'RequestOptionalQueryParams', + { + 'connection': typing.Union[ConnectionSchema, str, ], + }, + total=False +) + + +class RequestQueryParams(RequestRequiredQueryParams, RequestOptionalQueryParams): + pass + + +request_query_connection = api_client.QueryParameter( + name="connection", + style=api_client.ParameterStyle.FORM, + schema=ConnectionSchema, + explode=True, +) +# Path params + + +class TypeSchema( + schemas.EnumBase, + schemas.StrSchema +): + + @schemas.classproperty + def MKRWIFI1010(cls): + return cls("mkrwifi1010") + + @schemas.classproperty + def MKR1000(cls): + return cls("mkr1000") + + @schemas.classproperty + def NANO_33_IOT(cls): + return cls("nano_33_iot") + + @schemas.classproperty + def MKRGSM1400(cls): + return cls("mkrgsm1400") + + @schemas.classproperty + def MKRWAN1310(cls): + return cls("mkrwan1310") + + @schemas.classproperty + def MKRWAN1300(cls): + return cls("mkrwan1300") + + @schemas.classproperty + def MKRNB1500(cls): + return cls("mkrnb1500") + + @schemas.classproperty + def LORADEVICE(cls): + return cls("lora-device") + + @schemas.classproperty + def LOGIN_AND_SECRETKEY_WIFI(cls): + return cls("login_and_secretkey_wifi") + + @schemas.classproperty + def ENVIE_M7(cls): + return cls("envie_m7") + + @schemas.classproperty + def NANORP2040CONNECT(cls): + return cls("nanorp2040connect") + + @schemas.classproperty + def NICLA_VISION(cls): + return cls("nicla_vision") + + @schemas.classproperty + def OPTA(cls): + return cls("opta") + + @schemas.classproperty + def GIGA(cls): + return cls("giga") + + @schemas.classproperty + def PORTENTA_C33(cls): + return cls("portenta_c33") + + @schemas.classproperty + def UNOR4WIFI(cls): + return cls("unor4wifi") + + @schemas.classproperty + def NANO_NORA(cls): + return cls("nano_nora") +RequestRequiredPathParams = typing_extensions.TypedDict( + 'RequestRequiredPathParams', + { + 'type': typing.Union[TypeSchema, str, ], + } +) +RequestOptionalPathParams = typing_extensions.TypedDict( + 'RequestOptionalPathParams', + { + }, + total=False +) + + +class RequestPathParams(RequestRequiredPathParams, RequestOptionalPathParams): + pass + + +request_path_type = api_client.PathParameter( + name="type", + style=api_client.ParameterStyle.SIMPLE, + schema=TypeSchema, + required=True, +) +SchemaFor200ResponseBodyApplicationVndArduinoCredentialsv1jsonTypecollection = ArduinoCredentialsv1Collection + + +@dataclass +class ApiResponseFor200(api_client.ApiResponse): + response: urllib3.HTTPResponse + body: typing.Union[ + SchemaFor200ResponseBodyApplicationVndArduinoCredentialsv1jsonTypecollection, + ] + headers: schemas.Unset = schemas.unset + + +_response_for_200 = api_client.OpenApiResponse( + response_cls=ApiResponseFor200, + content={ + 'application/vnd.arduino.credentialsv1+json; type=collection': api_client.MediaType( + schema=SchemaFor200ResponseBodyApplicationVndArduinoCredentialsv1jsonTypecollection), + }, +) + + +@dataclass +class ApiResponseFor401(api_client.ApiResponse): + response: urllib3.HTTPResponse + body: schemas.Unset = schemas.unset + headers: schemas.Unset = schemas.unset + + +_response_for_401 = api_client.OpenApiResponse( + response_cls=ApiResponseFor401, +) + + +@dataclass +class ApiResponseFor404(api_client.ApiResponse): + response: urllib3.HTTPResponse + body: schemas.Unset = schemas.unset + headers: schemas.Unset = schemas.unset + + +_response_for_404 = api_client.OpenApiResponse( + response_cls=ApiResponseFor404, +) +_all_accept_content_types = ( + 'application/vnd.arduino.credentialsv1+json; type=collection', +) + + +class BaseApi(api_client.Api): + @typing.overload + def _network_credentials_v1_show_oapg( + self, + query_params: RequestQueryParams = frozendict.frozendict(), + path_params: RequestPathParams = frozendict.frozendict(), + accept_content_types: typing.Tuple[str] = _all_accept_content_types, + stream: bool = False, + timeout: typing.Optional[typing.Union[int, typing.Tuple]] = None, + skip_deserialization: typing_extensions.Literal[False] = ..., + ) -> typing.Union[ + ApiResponseFor200, + ]: ... + + @typing.overload + def _network_credentials_v1_show_oapg( + self, + skip_deserialization: typing_extensions.Literal[True], + query_params: RequestQueryParams = frozendict.frozendict(), + path_params: RequestPathParams = frozendict.frozendict(), + accept_content_types: typing.Tuple[str] = _all_accept_content_types, + stream: bool = False, + timeout: typing.Optional[typing.Union[int, typing.Tuple]] = None, + ) -> api_client.ApiResponseWithoutDeserialization: ... + + @typing.overload + def _network_credentials_v1_show_oapg( + self, + query_params: RequestQueryParams = frozendict.frozendict(), + path_params: RequestPathParams = frozendict.frozendict(), + accept_content_types: typing.Tuple[str] = _all_accept_content_types, + stream: bool = False, + timeout: typing.Optional[typing.Union[int, typing.Tuple]] = None, + skip_deserialization: bool = ..., + ) -> typing.Union[ + ApiResponseFor200, + api_client.ApiResponseWithoutDeserialization, + ]: ... + + def _network_credentials_v1_show_oapg( + self, + query_params: RequestQueryParams = frozendict.frozendict(), + path_params: RequestPathParams = frozendict.frozendict(), + accept_content_types: typing.Tuple[str] = _all_accept_content_types, + stream: bool = False, + timeout: typing.Optional[typing.Union[int, typing.Tuple]] = None, + skip_deserialization: bool = False, + ): + """ + show network_credentials_v1 + :param skip_deserialization: If true then api_response.response will be set but + api_response.body and api_response.headers will not be deserialized into schema + class instances + """ + self._verify_typed_dict_inputs_oapg(RequestQueryParams, query_params) + self._verify_typed_dict_inputs_oapg(RequestPathParams, path_params) + used_path = path.value + + _path_params = {} + for parameter in ( + request_path_type, + ): + parameter_data = path_params.get(parameter.name, schemas.unset) + if parameter_data is schemas.unset: + continue + serialized_data = parameter.serialize(parameter_data) + _path_params.update(serialized_data) + + for k, v in _path_params.items(): + used_path = used_path.replace('{%s}' % k, v) + + prefix_separator_iterator = None + for parameter in ( + request_query_connection, + ): + parameter_data = query_params.get(parameter.name, schemas.unset) + if parameter_data is schemas.unset: + continue + if prefix_separator_iterator is None: + prefix_separator_iterator = parameter.get_prefix_separator_iterator() + serialized_data = parameter.serialize(parameter_data, prefix_separator_iterator) + for serialized_value in serialized_data.values(): + used_path += serialized_value + + _headers = HTTPHeaderDict() + # TODO add cookie handling + if accept_content_types: + for accept_content_type in accept_content_types: + _headers.add('Accept', accept_content_type) + + response = self.api_client.call_api( + resource_path=used_path, + method='get'.upper(), + headers=_headers, + stream=stream, + timeout=timeout, + ) + + if skip_deserialization: + api_response = api_client.ApiResponseWithoutDeserialization(response=response) + else: + response_for_status = _status_code_to_response.get(str(response.status)) + if response_for_status: + api_response = response_for_status.deserialize(response, self.api_client.configuration) + else: + api_response = api_client.ApiResponseWithoutDeserialization(response=response) + + if not 200 <= response.status <= 299: + raise exceptions.ApiException( + status=response.status, + reason=response.reason, + api_response=api_response + ) + + return api_response + + +class NetworkCredentialsV1Show(BaseApi): + # this class is used by api classes that refer to endpoints with operationId fn names + + @typing.overload + def network_credentials_v1_show( + self, + query_params: RequestQueryParams = frozendict.frozendict(), + path_params: RequestPathParams = frozendict.frozendict(), + accept_content_types: typing.Tuple[str] = _all_accept_content_types, + stream: bool = False, + timeout: typing.Optional[typing.Union[int, typing.Tuple]] = None, + skip_deserialization: typing_extensions.Literal[False] = ..., + ) -> typing.Union[ + ApiResponseFor200, + ]: ... + + @typing.overload + def network_credentials_v1_show( + self, + skip_deserialization: typing_extensions.Literal[True], + query_params: RequestQueryParams = frozendict.frozendict(), + path_params: RequestPathParams = frozendict.frozendict(), + accept_content_types: typing.Tuple[str] = _all_accept_content_types, + stream: bool = False, + timeout: typing.Optional[typing.Union[int, typing.Tuple]] = None, + ) -> api_client.ApiResponseWithoutDeserialization: ... + + @typing.overload + def network_credentials_v1_show( + self, + query_params: RequestQueryParams = frozendict.frozendict(), + path_params: RequestPathParams = frozendict.frozendict(), + accept_content_types: typing.Tuple[str] = _all_accept_content_types, + stream: bool = False, + timeout: typing.Optional[typing.Union[int, typing.Tuple]] = None, + skip_deserialization: bool = ..., + ) -> typing.Union[ + ApiResponseFor200, + api_client.ApiResponseWithoutDeserialization, + ]: ... + + def network_credentials_v1_show( + self, + query_params: RequestQueryParams = frozendict.frozendict(), + path_params: RequestPathParams = frozendict.frozendict(), + accept_content_types: typing.Tuple[str] = _all_accept_content_types, + stream: bool = False, + timeout: typing.Optional[typing.Union[int, typing.Tuple]] = None, + skip_deserialization: bool = False, + ): + return self._network_credentials_v1_show_oapg( + query_params=query_params, + path_params=path_params, + accept_content_types=accept_content_types, + stream=stream, + timeout=timeout, + skip_deserialization=skip_deserialization + ) + + +class ApiForget(BaseApi): + # this class is used by api classes that refer to endpoints by path and http method names + + @typing.overload + def get( + self, + query_params: RequestQueryParams = frozendict.frozendict(), + path_params: RequestPathParams = frozendict.frozendict(), + accept_content_types: typing.Tuple[str] = _all_accept_content_types, + stream: bool = False, + timeout: typing.Optional[typing.Union[int, typing.Tuple]] = None, + skip_deserialization: typing_extensions.Literal[False] = ..., + ) -> typing.Union[ + ApiResponseFor200, + ]: ... + + @typing.overload + def get( + self, + skip_deserialization: typing_extensions.Literal[True], + query_params: RequestQueryParams = frozendict.frozendict(), + path_params: RequestPathParams = frozendict.frozendict(), + accept_content_types: typing.Tuple[str] = _all_accept_content_types, + stream: bool = False, + timeout: typing.Optional[typing.Union[int, typing.Tuple]] = None, + ) -> api_client.ApiResponseWithoutDeserialization: ... + + @typing.overload + def get( + self, + query_params: RequestQueryParams = frozendict.frozendict(), + path_params: RequestPathParams = frozendict.frozendict(), + accept_content_types: typing.Tuple[str] = _all_accept_content_types, + stream: bool = False, + timeout: typing.Optional[typing.Union[int, typing.Tuple]] = None, + skip_deserialization: bool = ..., + ) -> typing.Union[ + ApiResponseFor200, + api_client.ApiResponseWithoutDeserialization, + ]: ... + + def get( + self, + query_params: RequestQueryParams = frozendict.frozendict(), + path_params: RequestPathParams = frozendict.frozendict(), + accept_content_types: typing.Tuple[str] = _all_accept_content_types, + stream: bool = False, + timeout: typing.Optional[typing.Union[int, typing.Tuple]] = None, + skip_deserialization: bool = False, + ): + return self._network_credentials_v1_show_oapg( + query_params=query_params, + path_params=path_params, + accept_content_types=accept_content_types, + stream=stream, + timeout=timeout, + skip_deserialization=skip_deserialization + ) + + diff --git a/iot_api_client/paths/v1_network_credentials_type_connections/__init__.py b/iot_api_client/paths/v1_network_credentials_type_connections/__init__.py new file mode 100644 index 0000000..00ece55 --- /dev/null +++ b/iot_api_client/paths/v1_network_credentials_type_connections/__init__.py @@ -0,0 +1,7 @@ +# do not import all endpoints into this module because that uses a lot of memory and stack frames +# if you need the ability to import all endpoints from this module, import them with +# from iot_api_client.paths.v1_network_credentials_type_connections import Api + +from iot_api_client.paths import PathValues + +path = PathValues.V1_NETWORK_CREDENTIALS_TYPE_CONNECTIONS \ No newline at end of file diff --git a/iot_api_client/paths/v1_network_credentials_type_connections/get.py b/iot_api_client/paths/v1_network_credentials_type_connections/get.py new file mode 100644 index 0000000..0122da0 --- /dev/null +++ b/iot_api_client/paths/v1_network_credentials_type_connections/get.py @@ -0,0 +1,381 @@ +# coding: utf-8 + +""" + + + Generated by: https://openapi-generator.tech +""" + +from dataclasses import dataclass +import typing_extensions +import urllib3 + +from iot_api_client import api_client, exceptions +from datetime import date, datetime # noqa: F401 +import decimal # noqa: F401 +import functools # noqa: F401 +import io # noqa: F401 +import re # noqa: F401 +import typing # noqa: F401 +import typing_extensions # noqa: F401 +import uuid # noqa: F401 + +import frozendict # noqa: F401 + +from iot_api_client import schemas # noqa: F401 + +from . import path + +# Path params + + +class TypeSchema( + schemas.EnumBase, + schemas.StrSchema +): + + + class MetaOapg: + enum_value_to_name = { + "mkrwifi1010": "MKRWIFI1010", + "mkr1000": "MKR1000", + "nano_33_iot": "NANO_33_IOT", + "mkrgsm1400": "MKRGSM1400", + "mkrwan1310": "MKRWAN1310", + "mkrwan1300": "MKRWAN1300", + "mkrnb1500": "MKRNB1500", + "lora-device": "LORADEVICE", + "login_and_secretkey_wifi": "LOGIN_AND_SECRETKEY_WIFI", + "envie_m7": "ENVIE_M7", + "nanorp2040connect": "NANORP2040CONNECT", + "nicla_vision": "NICLA_VISION", + "opta": "OPTA", + "giga": "GIGA", + "portenta_c33": "PORTENTA_C33", + "unor4wifi": "UNOR4WIFI", + "nano_nora": "NANO_NORA", + } + + @schemas.classproperty + def MKRWIFI1010(cls): + return cls("mkrwifi1010") + + @schemas.classproperty + def MKR1000(cls): + return cls("mkr1000") + + @schemas.classproperty + def NANO_33_IOT(cls): + return cls("nano_33_iot") + + @schemas.classproperty + def MKRGSM1400(cls): + return cls("mkrgsm1400") + + @schemas.classproperty + def MKRWAN1310(cls): + return cls("mkrwan1310") + + @schemas.classproperty + def MKRWAN1300(cls): + return cls("mkrwan1300") + + @schemas.classproperty + def MKRNB1500(cls): + return cls("mkrnb1500") + + @schemas.classproperty + def LORADEVICE(cls): + return cls("lora-device") + + @schemas.classproperty + def LOGIN_AND_SECRETKEY_WIFI(cls): + return cls("login_and_secretkey_wifi") + + @schemas.classproperty + def ENVIE_M7(cls): + return cls("envie_m7") + + @schemas.classproperty + def NANORP2040CONNECT(cls): + return cls("nanorp2040connect") + + @schemas.classproperty + def NICLA_VISION(cls): + return cls("nicla_vision") + + @schemas.classproperty + def OPTA(cls): + return cls("opta") + + @schemas.classproperty + def GIGA(cls): + return cls("giga") + + @schemas.classproperty + def PORTENTA_C33(cls): + return cls("portenta_c33") + + @schemas.classproperty + def UNOR4WIFI(cls): + return cls("unor4wifi") + + @schemas.classproperty + def NANO_NORA(cls): + return cls("nano_nora") +RequestRequiredPathParams = typing_extensions.TypedDict( + 'RequestRequiredPathParams', + { + 'type': typing.Union[TypeSchema, str, ], + } +) +RequestOptionalPathParams = typing_extensions.TypedDict( + 'RequestOptionalPathParams', + { + }, + total=False +) + + +class RequestPathParams(RequestRequiredPathParams, RequestOptionalPathParams): + pass + + +request_path_type = api_client.PathParameter( + name="type", + style=api_client.ParameterStyle.SIMPLE, + schema=TypeSchema, + required=True, +) + + +@dataclass +class ApiResponseFor200(api_client.ApiResponse): + response: urllib3.HTTPResponse + body: schemas.Unset = schemas.unset + headers: schemas.Unset = schemas.unset + + +_response_for_200 = api_client.OpenApiResponse( + response_cls=ApiResponseFor200, +) + + +@dataclass +class ApiResponseFor401(api_client.ApiResponse): + response: urllib3.HTTPResponse + body: schemas.Unset = schemas.unset + headers: schemas.Unset = schemas.unset + + +_response_for_401 = api_client.OpenApiResponse( + response_cls=ApiResponseFor401, +) + + +@dataclass +class ApiResponseFor404(api_client.ApiResponse): + response: urllib3.HTTPResponse + body: schemas.Unset = schemas.unset + headers: schemas.Unset = schemas.unset + + +_response_for_404 = api_client.OpenApiResponse( + response_cls=ApiResponseFor404, +) +_status_code_to_response = { + '200': _response_for_200, + '401': _response_for_401, + '404': _response_for_404, +} + + +class BaseApi(api_client.Api): + @typing.overload + def _network_credentials_v1_show_by_device_oapg( + self, + path_params: RequestPathParams = frozendict.frozendict(), + stream: bool = False, + timeout: typing.Optional[typing.Union[int, typing.Tuple]] = None, + skip_deserialization: typing_extensions.Literal[False] = ..., + ) -> typing.Union[ + ApiResponseFor200, + ]: ... + + @typing.overload + def _network_credentials_v1_show_by_device_oapg( + self, + skip_deserialization: typing_extensions.Literal[True], + path_params: RequestPathParams = frozendict.frozendict(), + stream: bool = False, + timeout: typing.Optional[typing.Union[int, typing.Tuple]] = None, + ) -> api_client.ApiResponseWithoutDeserialization: ... + + @typing.overload + def _network_credentials_v1_show_by_device_oapg( + self, + path_params: RequestPathParams = frozendict.frozendict(), + stream: bool = False, + timeout: typing.Optional[typing.Union[int, typing.Tuple]] = None, + skip_deserialization: bool = ..., + ) -> typing.Union[ + ApiResponseFor200, + api_client.ApiResponseWithoutDeserialization, + ]: ... + + def _network_credentials_v1_show_by_device_oapg( + self, + path_params: RequestPathParams = frozendict.frozendict(), + stream: bool = False, + timeout: typing.Optional[typing.Union[int, typing.Tuple]] = None, + skip_deserialization: bool = False, + ): + """ + showByDevice network_credentials_v1 + :param skip_deserialization: If true then api_response.response will be set but + api_response.body and api_response.headers will not be deserialized into schema + class instances + """ + self._verify_typed_dict_inputs_oapg(RequestPathParams, path_params) + used_path = path.value + + _path_params = {} + for parameter in ( + request_path_type, + ): + parameter_data = path_params.get(parameter.name, schemas.unset) + if parameter_data is schemas.unset: + continue + serialized_data = parameter.serialize(parameter_data) + _path_params.update(serialized_data) + + for k, v in _path_params.items(): + used_path = used_path.replace('{%s}' % k, v) + # TODO add cookie handling + + response = self.api_client.call_api( + resource_path=used_path, + method='get'.upper(), + stream=stream, + timeout=timeout, + ) + + if skip_deserialization: + api_response = api_client.ApiResponseWithoutDeserialization(response=response) + else: + response_for_status = _status_code_to_response.get(str(response.status)) + if response_for_status: + api_response = response_for_status.deserialize(response, self.api_client.configuration) + else: + api_response = api_client.ApiResponseWithoutDeserialization(response=response) + + if not 200 <= response.status <= 299: + raise exceptions.ApiException( + status=response.status, + reason=response.reason, + api_response=api_response + ) + + return api_response + + +class NetworkCredentialsV1ShowByDevice(BaseApi): + # this class is used by api classes that refer to endpoints with operationId fn names + + @typing.overload + def network_credentials_v1_show_by_device( + self, + path_params: RequestPathParams = frozendict.frozendict(), + stream: bool = False, + timeout: typing.Optional[typing.Union[int, typing.Tuple]] = None, + skip_deserialization: typing_extensions.Literal[False] = ..., + ) -> typing.Union[ + ApiResponseFor200, + ]: ... + + @typing.overload + def network_credentials_v1_show_by_device( + self, + skip_deserialization: typing_extensions.Literal[True], + path_params: RequestPathParams = frozendict.frozendict(), + stream: bool = False, + timeout: typing.Optional[typing.Union[int, typing.Tuple]] = None, + ) -> api_client.ApiResponseWithoutDeserialization: ... + + @typing.overload + def network_credentials_v1_show_by_device( + self, + path_params: RequestPathParams = frozendict.frozendict(), + stream: bool = False, + timeout: typing.Optional[typing.Union[int, typing.Tuple]] = None, + skip_deserialization: bool = ..., + ) -> typing.Union[ + ApiResponseFor200, + api_client.ApiResponseWithoutDeserialization, + ]: ... + + def network_credentials_v1_show_by_device( + self, + path_params: RequestPathParams = frozendict.frozendict(), + stream: bool = False, + timeout: typing.Optional[typing.Union[int, typing.Tuple]] = None, + skip_deserialization: bool = False, + ): + return self._network_credentials_v1_show_by_device_oapg( + path_params=path_params, + stream=stream, + timeout=timeout, + skip_deserialization=skip_deserialization + ) + + +class ApiForget(BaseApi): + # this class is used by api classes that refer to endpoints by path and http method names + + @typing.overload + def get( + self, + path_params: RequestPathParams = frozendict.frozendict(), + stream: bool = False, + timeout: typing.Optional[typing.Union[int, typing.Tuple]] = None, + skip_deserialization: typing_extensions.Literal[False] = ..., + ) -> typing.Union[ + ApiResponseFor200, + ]: ... + + @typing.overload + def get( + self, + skip_deserialization: typing_extensions.Literal[True], + path_params: RequestPathParams = frozendict.frozendict(), + stream: bool = False, + timeout: typing.Optional[typing.Union[int, typing.Tuple]] = None, + ) -> api_client.ApiResponseWithoutDeserialization: ... + + @typing.overload + def get( + self, + path_params: RequestPathParams = frozendict.frozendict(), + stream: bool = False, + timeout: typing.Optional[typing.Union[int, typing.Tuple]] = None, + skip_deserialization: bool = ..., + ) -> typing.Union[ + ApiResponseFor200, + api_client.ApiResponseWithoutDeserialization, + ]: ... + + def get( + self, + path_params: RequestPathParams = frozendict.frozendict(), + stream: bool = False, + timeout: typing.Optional[typing.Union[int, typing.Tuple]] = None, + skip_deserialization: bool = False, + ): + return self._network_credentials_v1_show_by_device_oapg( + path_params=path_params, + stream=stream, + timeout=timeout, + skip_deserialization=skip_deserialization + ) + + diff --git a/iot_api_client/paths/v1_network_credentials_type_connections/get.pyi b/iot_api_client/paths/v1_network_credentials_type_connections/get.pyi new file mode 100644 index 0000000..2154b71 --- /dev/null +++ b/iot_api_client/paths/v1_network_credentials_type_connections/get.pyi @@ -0,0 +1,352 @@ +# coding: utf-8 + +""" + + + Generated by: https://openapi-generator.tech +""" + +from dataclasses import dataclass +import typing_extensions +import urllib3 + +from iot_api_client import api_client, exceptions +from datetime import date, datetime # noqa: F401 +import decimal # noqa: F401 +import functools # noqa: F401 +import io # noqa: F401 +import re # noqa: F401 +import typing # noqa: F401 +import typing_extensions # noqa: F401 +import uuid # noqa: F401 + +import frozendict # noqa: F401 + +from iot_api_client import schemas # noqa: F401 + +# Path params + + +class TypeSchema( + schemas.EnumBase, + schemas.StrSchema +): + + @schemas.classproperty + def MKRWIFI1010(cls): + return cls("mkrwifi1010") + + @schemas.classproperty + def MKR1000(cls): + return cls("mkr1000") + + @schemas.classproperty + def NANO_33_IOT(cls): + return cls("nano_33_iot") + + @schemas.classproperty + def MKRGSM1400(cls): + return cls("mkrgsm1400") + + @schemas.classproperty + def MKRWAN1310(cls): + return cls("mkrwan1310") + + @schemas.classproperty + def MKRWAN1300(cls): + return cls("mkrwan1300") + + @schemas.classproperty + def MKRNB1500(cls): + return cls("mkrnb1500") + + @schemas.classproperty + def LORADEVICE(cls): + return cls("lora-device") + + @schemas.classproperty + def LOGIN_AND_SECRETKEY_WIFI(cls): + return cls("login_and_secretkey_wifi") + + @schemas.classproperty + def ENVIE_M7(cls): + return cls("envie_m7") + + @schemas.classproperty + def NANORP2040CONNECT(cls): + return cls("nanorp2040connect") + + @schemas.classproperty + def NICLA_VISION(cls): + return cls("nicla_vision") + + @schemas.classproperty + def OPTA(cls): + return cls("opta") + + @schemas.classproperty + def GIGA(cls): + return cls("giga") + + @schemas.classproperty + def PORTENTA_C33(cls): + return cls("portenta_c33") + + @schemas.classproperty + def UNOR4WIFI(cls): + return cls("unor4wifi") + + @schemas.classproperty + def NANO_NORA(cls): + return cls("nano_nora") +RequestRequiredPathParams = typing_extensions.TypedDict( + 'RequestRequiredPathParams', + { + 'type': typing.Union[TypeSchema, str, ], + } +) +RequestOptionalPathParams = typing_extensions.TypedDict( + 'RequestOptionalPathParams', + { + }, + total=False +) + + +class RequestPathParams(RequestRequiredPathParams, RequestOptionalPathParams): + pass + + +request_path_type = api_client.PathParameter( + name="type", + style=api_client.ParameterStyle.SIMPLE, + schema=TypeSchema, + required=True, +) + + +@dataclass +class ApiResponseFor200(api_client.ApiResponse): + response: urllib3.HTTPResponse + body: schemas.Unset = schemas.unset + headers: schemas.Unset = schemas.unset + + +_response_for_200 = api_client.OpenApiResponse( + response_cls=ApiResponseFor200, +) + + +@dataclass +class ApiResponseFor401(api_client.ApiResponse): + response: urllib3.HTTPResponse + body: schemas.Unset = schemas.unset + headers: schemas.Unset = schemas.unset + + +_response_for_401 = api_client.OpenApiResponse( + response_cls=ApiResponseFor401, +) + + +@dataclass +class ApiResponseFor404(api_client.ApiResponse): + response: urllib3.HTTPResponse + body: schemas.Unset = schemas.unset + headers: schemas.Unset = schemas.unset + + +_response_for_404 = api_client.OpenApiResponse( + response_cls=ApiResponseFor404, +) + + +class BaseApi(api_client.Api): + @typing.overload + def _network_credentials_v1_show_by_device_oapg( + self, + path_params: RequestPathParams = frozendict.frozendict(), + stream: bool = False, + timeout: typing.Optional[typing.Union[int, typing.Tuple]] = None, + skip_deserialization: typing_extensions.Literal[False] = ..., + ) -> typing.Union[ + ApiResponseFor200, + ]: ... + + @typing.overload + def _network_credentials_v1_show_by_device_oapg( + self, + skip_deserialization: typing_extensions.Literal[True], + path_params: RequestPathParams = frozendict.frozendict(), + stream: bool = False, + timeout: typing.Optional[typing.Union[int, typing.Tuple]] = None, + ) -> api_client.ApiResponseWithoutDeserialization: ... + + @typing.overload + def _network_credentials_v1_show_by_device_oapg( + self, + path_params: RequestPathParams = frozendict.frozendict(), + stream: bool = False, + timeout: typing.Optional[typing.Union[int, typing.Tuple]] = None, + skip_deserialization: bool = ..., + ) -> typing.Union[ + ApiResponseFor200, + api_client.ApiResponseWithoutDeserialization, + ]: ... + + def _network_credentials_v1_show_by_device_oapg( + self, + path_params: RequestPathParams = frozendict.frozendict(), + stream: bool = False, + timeout: typing.Optional[typing.Union[int, typing.Tuple]] = None, + skip_deserialization: bool = False, + ): + """ + showByDevice network_credentials_v1 + :param skip_deserialization: If true then api_response.response will be set but + api_response.body and api_response.headers will not be deserialized into schema + class instances + """ + self._verify_typed_dict_inputs_oapg(RequestPathParams, path_params) + used_path = path.value + + _path_params = {} + for parameter in ( + request_path_type, + ): + parameter_data = path_params.get(parameter.name, schemas.unset) + if parameter_data is schemas.unset: + continue + serialized_data = parameter.serialize(parameter_data) + _path_params.update(serialized_data) + + for k, v in _path_params.items(): + used_path = used_path.replace('{%s}' % k, v) + # TODO add cookie handling + + response = self.api_client.call_api( + resource_path=used_path, + method='get'.upper(), + stream=stream, + timeout=timeout, + ) + + if skip_deserialization: + api_response = api_client.ApiResponseWithoutDeserialization(response=response) + else: + response_for_status = _status_code_to_response.get(str(response.status)) + if response_for_status: + api_response = response_for_status.deserialize(response, self.api_client.configuration) + else: + api_response = api_client.ApiResponseWithoutDeserialization(response=response) + + if not 200 <= response.status <= 299: + raise exceptions.ApiException( + status=response.status, + reason=response.reason, + api_response=api_response + ) + + return api_response + + +class NetworkCredentialsV1ShowByDevice(BaseApi): + # this class is used by api classes that refer to endpoints with operationId fn names + + @typing.overload + def network_credentials_v1_show_by_device( + self, + path_params: RequestPathParams = frozendict.frozendict(), + stream: bool = False, + timeout: typing.Optional[typing.Union[int, typing.Tuple]] = None, + skip_deserialization: typing_extensions.Literal[False] = ..., + ) -> typing.Union[ + ApiResponseFor200, + ]: ... + + @typing.overload + def network_credentials_v1_show_by_device( + self, + skip_deserialization: typing_extensions.Literal[True], + path_params: RequestPathParams = frozendict.frozendict(), + stream: bool = False, + timeout: typing.Optional[typing.Union[int, typing.Tuple]] = None, + ) -> api_client.ApiResponseWithoutDeserialization: ... + + @typing.overload + def network_credentials_v1_show_by_device( + self, + path_params: RequestPathParams = frozendict.frozendict(), + stream: bool = False, + timeout: typing.Optional[typing.Union[int, typing.Tuple]] = None, + skip_deserialization: bool = ..., + ) -> typing.Union[ + ApiResponseFor200, + api_client.ApiResponseWithoutDeserialization, + ]: ... + + def network_credentials_v1_show_by_device( + self, + path_params: RequestPathParams = frozendict.frozendict(), + stream: bool = False, + timeout: typing.Optional[typing.Union[int, typing.Tuple]] = None, + skip_deserialization: bool = False, + ): + return self._network_credentials_v1_show_by_device_oapg( + path_params=path_params, + stream=stream, + timeout=timeout, + skip_deserialization=skip_deserialization + ) + + +class ApiForget(BaseApi): + # this class is used by api classes that refer to endpoints by path and http method names + + @typing.overload + def get( + self, + path_params: RequestPathParams = frozendict.frozendict(), + stream: bool = False, + timeout: typing.Optional[typing.Union[int, typing.Tuple]] = None, + skip_deserialization: typing_extensions.Literal[False] = ..., + ) -> typing.Union[ + ApiResponseFor200, + ]: ... + + @typing.overload + def get( + self, + skip_deserialization: typing_extensions.Literal[True], + path_params: RequestPathParams = frozendict.frozendict(), + stream: bool = False, + timeout: typing.Optional[typing.Union[int, typing.Tuple]] = None, + ) -> api_client.ApiResponseWithoutDeserialization: ... + + @typing.overload + def get( + self, + path_params: RequestPathParams = frozendict.frozendict(), + stream: bool = False, + timeout: typing.Optional[typing.Union[int, typing.Tuple]] = None, + skip_deserialization: bool = ..., + ) -> typing.Union[ + ApiResponseFor200, + api_client.ApiResponseWithoutDeserialization, + ]: ... + + def get( + self, + path_params: RequestPathParams = frozendict.frozendict(), + stream: bool = False, + timeout: typing.Optional[typing.Union[int, typing.Tuple]] = None, + skip_deserialization: bool = False, + ): + return self._network_credentials_v1_show_by_device_oapg( + path_params=path_params, + stream=stream, + timeout=timeout, + skip_deserialization=skip_deserialization + ) + + diff --git a/iot_api_client/paths/v1_templates/__init__.py b/iot_api_client/paths/v1_templates/__init__.py new file mode 100644 index 0000000..0cb3fb3 --- /dev/null +++ b/iot_api_client/paths/v1_templates/__init__.py @@ -0,0 +1,7 @@ +# do not import all endpoints into this module because that uses a lot of memory and stack frames +# if you need the ability to import all endpoints from this module, import them with +# from iot_api_client.paths.v1_templates import Api + +from iot_api_client.paths import PathValues + +path = PathValues.V1_TEMPLATES \ No newline at end of file diff --git a/iot_api_client/paths/v1_templates/put.py b/iot_api_client/paths/v1_templates/put.py new file mode 100644 index 0000000..0c25e81 --- /dev/null +++ b/iot_api_client/paths/v1_templates/put.py @@ -0,0 +1,545 @@ +# coding: utf-8 + +""" + + + Generated by: https://openapi-generator.tech +""" + +from dataclasses import dataclass +import typing_extensions +import urllib3 +from urllib3._collections import HTTPHeaderDict + +from iot_api_client import api_client, exceptions +from datetime import date, datetime # noqa: F401 +import decimal # noqa: F401 +import functools # noqa: F401 +import io # noqa: F401 +import re # noqa: F401 +import typing # noqa: F401 +import typing_extensions # noqa: F401 +import uuid # noqa: F401 + +import frozendict # noqa: F401 + +from iot_api_client import schemas # noqa: F401 + +from iot_api_client.model.error import Error +from iot_api_client.model.arduino_template import ArduinoTemplate +from iot_api_client.model.template import Template + +from . import path + +# Header params +XOrganizationSchema = schemas.StrSchema +RequestRequiredHeaderParams = typing_extensions.TypedDict( + 'RequestRequiredHeaderParams', + { + } +) +RequestOptionalHeaderParams = typing_extensions.TypedDict( + 'RequestOptionalHeaderParams', + { + 'X-Organization': typing.Union[XOrganizationSchema, str, ], + }, + total=False +) + + +class RequestHeaderParams(RequestRequiredHeaderParams, RequestOptionalHeaderParams): + pass + + +request_header_x_organization = api_client.HeaderParameter( + name="X-Organization", + style=api_client.ParameterStyle.SIMPLE, + schema=XOrganizationSchema, +) +# body param +SchemaForRequestBodyApplicationJson = Template +SchemaForRequestBodyApplicationXWwwFormUrlencoded = Template + + +request_body_template = api_client.RequestBody( + content={ + 'application/json': api_client.MediaType( + schema=SchemaForRequestBodyApplicationJson), + 'application/x-www-form-urlencoded': api_client.MediaType( + schema=SchemaForRequestBodyApplicationXWwwFormUrlencoded), + }, + required=True, +) +SchemaFor200ResponseBodyApplicationVndArduinoTemplatejson = ArduinoTemplate +SchemaFor200ResponseBodyApplicationVndGoaErrorjson = ArduinoTemplate + + +@dataclass +class ApiResponseFor200(api_client.ApiResponse): + response: urllib3.HTTPResponse + body: typing.Union[ + SchemaFor200ResponseBodyApplicationVndArduinoTemplatejson, + SchemaFor200ResponseBodyApplicationVndGoaErrorjson, + ] + headers: schemas.Unset = schemas.unset + + +_response_for_200 = api_client.OpenApiResponse( + response_cls=ApiResponseFor200, + content={ + 'application/vnd.arduino.template+json': api_client.MediaType( + schema=SchemaFor200ResponseBodyApplicationVndArduinoTemplatejson), + 'application/vnd.goa.error+json': api_client.MediaType( + schema=SchemaFor200ResponseBodyApplicationVndGoaErrorjson), + }, +) +SchemaFor400ResponseBodyApplicationVndArduinoTemplatejson = Error +SchemaFor400ResponseBodyApplicationVndGoaErrorjson = Error + + +@dataclass +class ApiResponseFor400(api_client.ApiResponse): + response: urllib3.HTTPResponse + body: typing.Union[ + SchemaFor400ResponseBodyApplicationVndArduinoTemplatejson, + SchemaFor400ResponseBodyApplicationVndGoaErrorjson, + ] + headers: schemas.Unset = schemas.unset + + +_response_for_400 = api_client.OpenApiResponse( + response_cls=ApiResponseFor400, + content={ + 'application/vnd.arduino.template+json': api_client.MediaType( + schema=SchemaFor400ResponseBodyApplicationVndArduinoTemplatejson), + 'application/vnd.goa.error+json': api_client.MediaType( + schema=SchemaFor400ResponseBodyApplicationVndGoaErrorjson), + }, +) + + +@dataclass +class ApiResponseFor401(api_client.ApiResponse): + response: urllib3.HTTPResponse + body: schemas.Unset = schemas.unset + headers: schemas.Unset = schemas.unset + + +_response_for_401 = api_client.OpenApiResponse( + response_cls=ApiResponseFor401, +) +SchemaFor404ResponseBodyApplicationVndArduinoTemplatejson = Error +SchemaFor404ResponseBodyApplicationVndGoaErrorjson = Error + + +@dataclass +class ApiResponseFor404(api_client.ApiResponse): + response: urllib3.HTTPResponse + body: typing.Union[ + SchemaFor404ResponseBodyApplicationVndArduinoTemplatejson, + SchemaFor404ResponseBodyApplicationVndGoaErrorjson, + ] + headers: schemas.Unset = schemas.unset + + +_response_for_404 = api_client.OpenApiResponse( + response_cls=ApiResponseFor404, + content={ + 'application/vnd.arduino.template+json': api_client.MediaType( + schema=SchemaFor404ResponseBodyApplicationVndArduinoTemplatejson), + 'application/vnd.goa.error+json': api_client.MediaType( + schema=SchemaFor404ResponseBodyApplicationVndGoaErrorjson), + }, +) +SchemaFor409ResponseBodyApplicationVndArduinoTemplatejson = Error +SchemaFor409ResponseBodyApplicationVndGoaErrorjson = Error + + +@dataclass +class ApiResponseFor409(api_client.ApiResponse): + response: urllib3.HTTPResponse + body: typing.Union[ + SchemaFor409ResponseBodyApplicationVndArduinoTemplatejson, + SchemaFor409ResponseBodyApplicationVndGoaErrorjson, + ] + headers: schemas.Unset = schemas.unset + + +_response_for_409 = api_client.OpenApiResponse( + response_cls=ApiResponseFor409, + content={ + 'application/vnd.arduino.template+json': api_client.MediaType( + schema=SchemaFor409ResponseBodyApplicationVndArduinoTemplatejson), + 'application/vnd.goa.error+json': api_client.MediaType( + schema=SchemaFor409ResponseBodyApplicationVndGoaErrorjson), + }, +) +SchemaFor500ResponseBodyApplicationVndArduinoTemplatejson = Error +SchemaFor500ResponseBodyApplicationVndGoaErrorjson = Error + + +@dataclass +class ApiResponseFor500(api_client.ApiResponse): + response: urllib3.HTTPResponse + body: typing.Union[ + SchemaFor500ResponseBodyApplicationVndArduinoTemplatejson, + SchemaFor500ResponseBodyApplicationVndGoaErrorjson, + ] + headers: schemas.Unset = schemas.unset + + +_response_for_500 = api_client.OpenApiResponse( + response_cls=ApiResponseFor500, + content={ + 'application/vnd.arduino.template+json': api_client.MediaType( + schema=SchemaFor500ResponseBodyApplicationVndArduinoTemplatejson), + 'application/vnd.goa.error+json': api_client.MediaType( + schema=SchemaFor500ResponseBodyApplicationVndGoaErrorjson), + }, +) +_status_code_to_response = { + '200': _response_for_200, + '400': _response_for_400, + '401': _response_for_401, + '404': _response_for_404, + '409': _response_for_409, + '500': _response_for_500, +} +_all_accept_content_types = ( + 'application/vnd.arduino.template+json', + 'application/vnd.goa.error+json', +) + + +class BaseApi(api_client.Api): + @typing.overload + def _templates_apply_oapg( + self, + body: typing.Union[SchemaForRequestBodyApplicationJson,], + content_type: typing_extensions.Literal["application/json"] = ..., + header_params: RequestHeaderParams = frozendict.frozendict(), + accept_content_types: typing.Tuple[str] = _all_accept_content_types, + stream: bool = False, + timeout: typing.Optional[typing.Union[int, typing.Tuple]] = None, + skip_deserialization: typing_extensions.Literal[False] = ..., + ) -> typing.Union[ + ApiResponseFor200, + ]: ... + + @typing.overload + def _templates_apply_oapg( + self, + body: typing.Union[SchemaForRequestBodyApplicationXWwwFormUrlencoded,], + content_type: typing_extensions.Literal["application/x-www-form-urlencoded"], + header_params: RequestHeaderParams = frozendict.frozendict(), + accept_content_types: typing.Tuple[str] = _all_accept_content_types, + stream: bool = False, + timeout: typing.Optional[typing.Union[int, typing.Tuple]] = None, + skip_deserialization: typing_extensions.Literal[False] = ..., + ) -> typing.Union[ + ApiResponseFor200, + ]: ... + + @typing.overload + def _templates_apply_oapg( + self, + body: typing.Union[SchemaForRequestBodyApplicationJson,SchemaForRequestBodyApplicationXWwwFormUrlencoded,], + content_type: str = ..., + header_params: RequestHeaderParams = frozendict.frozendict(), + accept_content_types: typing.Tuple[str] = _all_accept_content_types, + stream: bool = False, + timeout: typing.Optional[typing.Union[int, typing.Tuple]] = None, + skip_deserialization: typing_extensions.Literal[False] = ..., + ) -> typing.Union[ + ApiResponseFor200, + ]: ... + + + @typing.overload + def _templates_apply_oapg( + self, + body: typing.Union[SchemaForRequestBodyApplicationJson,SchemaForRequestBodyApplicationXWwwFormUrlencoded,], + skip_deserialization: typing_extensions.Literal[True], + content_type: str = ..., + header_params: RequestHeaderParams = frozendict.frozendict(), + accept_content_types: typing.Tuple[str] = _all_accept_content_types, + stream: bool = False, + timeout: typing.Optional[typing.Union[int, typing.Tuple]] = None, + ) -> api_client.ApiResponseWithoutDeserialization: ... + + @typing.overload + def _templates_apply_oapg( + self, + body: typing.Union[SchemaForRequestBodyApplicationJson,SchemaForRequestBodyApplicationXWwwFormUrlencoded,], + content_type: str = ..., + header_params: RequestHeaderParams = frozendict.frozendict(), + accept_content_types: typing.Tuple[str] = _all_accept_content_types, + stream: bool = False, + timeout: typing.Optional[typing.Union[int, typing.Tuple]] = None, + skip_deserialization: bool = ..., + ) -> typing.Union[ + ApiResponseFor200, + api_client.ApiResponseWithoutDeserialization, + ]: ... + + def _templates_apply_oapg( + self, + body: typing.Union[SchemaForRequestBodyApplicationJson,SchemaForRequestBodyApplicationXWwwFormUrlencoded,], + content_type: str = 'application/json', + header_params: RequestHeaderParams = frozendict.frozendict(), + accept_content_types: typing.Tuple[str] = _all_accept_content_types, + stream: bool = False, + timeout: typing.Optional[typing.Union[int, typing.Tuple]] = None, + skip_deserialization: bool = False, + ): + """ + apply templates + :param skip_deserialization: If true then api_response.response will be set but + api_response.body and api_response.headers will not be deserialized into schema + class instances + """ + self._verify_typed_dict_inputs_oapg(RequestHeaderParams, header_params) + used_path = path.value + + _headers = HTTPHeaderDict() + for parameter in ( + request_header_x_organization, + ): + parameter_data = header_params.get(parameter.name, schemas.unset) + if parameter_data is schemas.unset: + continue + serialized_data = parameter.serialize(parameter_data) + _headers.extend(serialized_data) + # TODO add cookie handling + if accept_content_types: + for accept_content_type in accept_content_types: + _headers.add('Accept', accept_content_type) + + if body is schemas.unset: + raise exceptions.ApiValueError( + 'The required body parameter has an invalid value of: unset. Set a valid value instead') + _fields = None + _body = None + serialized_data = request_body_template.serialize(body, content_type) + _headers.add('Content-Type', content_type) + if 'fields' in serialized_data: + _fields = serialized_data['fields'] + elif 'body' in serialized_data: + _body = serialized_data['body'] + response = self.api_client.call_api( + resource_path=used_path, + method='put'.upper(), + headers=_headers, + fields=_fields, + body=_body, + stream=stream, + timeout=timeout, + ) + + if skip_deserialization: + api_response = api_client.ApiResponseWithoutDeserialization(response=response) + else: + response_for_status = _status_code_to_response.get(str(response.status)) + if response_for_status: + api_response = response_for_status.deserialize(response, self.api_client.configuration) + else: + api_response = api_client.ApiResponseWithoutDeserialization(response=response) + + if not 200 <= response.status <= 299: + raise exceptions.ApiException( + status=response.status, + reason=response.reason, + api_response=api_response + ) + + return api_response + + +class TemplatesApply(BaseApi): + # this class is used by api classes that refer to endpoints with operationId fn names + + @typing.overload + def templates_apply( + self, + body: typing.Union[SchemaForRequestBodyApplicationJson,], + content_type: typing_extensions.Literal["application/json"] = ..., + header_params: RequestHeaderParams = frozendict.frozendict(), + accept_content_types: typing.Tuple[str] = _all_accept_content_types, + stream: bool = False, + timeout: typing.Optional[typing.Union[int, typing.Tuple]] = None, + skip_deserialization: typing_extensions.Literal[False] = ..., + ) -> typing.Union[ + ApiResponseFor200, + ]: ... + + @typing.overload + def templates_apply( + self, + body: typing.Union[SchemaForRequestBodyApplicationXWwwFormUrlencoded,], + content_type: typing_extensions.Literal["application/x-www-form-urlencoded"], + header_params: RequestHeaderParams = frozendict.frozendict(), + accept_content_types: typing.Tuple[str] = _all_accept_content_types, + stream: bool = False, + timeout: typing.Optional[typing.Union[int, typing.Tuple]] = None, + skip_deserialization: typing_extensions.Literal[False] = ..., + ) -> typing.Union[ + ApiResponseFor200, + ]: ... + + @typing.overload + def templates_apply( + self, + body: typing.Union[SchemaForRequestBodyApplicationJson,SchemaForRequestBodyApplicationXWwwFormUrlencoded,], + content_type: str = ..., + header_params: RequestHeaderParams = frozendict.frozendict(), + accept_content_types: typing.Tuple[str] = _all_accept_content_types, + stream: bool = False, + timeout: typing.Optional[typing.Union[int, typing.Tuple]] = None, + skip_deserialization: typing_extensions.Literal[False] = ..., + ) -> typing.Union[ + ApiResponseFor200, + ]: ... + + + @typing.overload + def templates_apply( + self, + body: typing.Union[SchemaForRequestBodyApplicationJson,SchemaForRequestBodyApplicationXWwwFormUrlencoded,], + skip_deserialization: typing_extensions.Literal[True], + content_type: str = ..., + header_params: RequestHeaderParams = frozendict.frozendict(), + accept_content_types: typing.Tuple[str] = _all_accept_content_types, + stream: bool = False, + timeout: typing.Optional[typing.Union[int, typing.Tuple]] = None, + ) -> api_client.ApiResponseWithoutDeserialization: ... + + @typing.overload + def templates_apply( + self, + body: typing.Union[SchemaForRequestBodyApplicationJson,SchemaForRequestBodyApplicationXWwwFormUrlencoded,], + content_type: str = ..., + header_params: RequestHeaderParams = frozendict.frozendict(), + accept_content_types: typing.Tuple[str] = _all_accept_content_types, + stream: bool = False, + timeout: typing.Optional[typing.Union[int, typing.Tuple]] = None, + skip_deserialization: bool = ..., + ) -> typing.Union[ + ApiResponseFor200, + api_client.ApiResponseWithoutDeserialization, + ]: ... + + def templates_apply( + self, + body: typing.Union[SchemaForRequestBodyApplicationJson,SchemaForRequestBodyApplicationXWwwFormUrlencoded,], + content_type: str = 'application/json', + header_params: RequestHeaderParams = frozendict.frozendict(), + accept_content_types: typing.Tuple[str] = _all_accept_content_types, + stream: bool = False, + timeout: typing.Optional[typing.Union[int, typing.Tuple]] = None, + skip_deserialization: bool = False, + ): + return self._templates_apply_oapg( + body=body, + header_params=header_params, + content_type=content_type, + accept_content_types=accept_content_types, + stream=stream, + timeout=timeout, + skip_deserialization=skip_deserialization + ) + + +class ApiForput(BaseApi): + # this class is used by api classes that refer to endpoints by path and http method names + + @typing.overload + def put( + self, + body: typing.Union[SchemaForRequestBodyApplicationJson,], + content_type: typing_extensions.Literal["application/json"] = ..., + header_params: RequestHeaderParams = frozendict.frozendict(), + accept_content_types: typing.Tuple[str] = _all_accept_content_types, + stream: bool = False, + timeout: typing.Optional[typing.Union[int, typing.Tuple]] = None, + skip_deserialization: typing_extensions.Literal[False] = ..., + ) -> typing.Union[ + ApiResponseFor200, + ]: ... + + @typing.overload + def put( + self, + body: typing.Union[SchemaForRequestBodyApplicationXWwwFormUrlencoded,], + content_type: typing_extensions.Literal["application/x-www-form-urlencoded"], + header_params: RequestHeaderParams = frozendict.frozendict(), + accept_content_types: typing.Tuple[str] = _all_accept_content_types, + stream: bool = False, + timeout: typing.Optional[typing.Union[int, typing.Tuple]] = None, + skip_deserialization: typing_extensions.Literal[False] = ..., + ) -> typing.Union[ + ApiResponseFor200, + ]: ... + + @typing.overload + def put( + self, + body: typing.Union[SchemaForRequestBodyApplicationJson,SchemaForRequestBodyApplicationXWwwFormUrlencoded,], + content_type: str = ..., + header_params: RequestHeaderParams = frozendict.frozendict(), + accept_content_types: typing.Tuple[str] = _all_accept_content_types, + stream: bool = False, + timeout: typing.Optional[typing.Union[int, typing.Tuple]] = None, + skip_deserialization: typing_extensions.Literal[False] = ..., + ) -> typing.Union[ + ApiResponseFor200, + ]: ... + + + @typing.overload + def put( + self, + body: typing.Union[SchemaForRequestBodyApplicationJson,SchemaForRequestBodyApplicationXWwwFormUrlencoded,], + skip_deserialization: typing_extensions.Literal[True], + content_type: str = ..., + header_params: RequestHeaderParams = frozendict.frozendict(), + accept_content_types: typing.Tuple[str] = _all_accept_content_types, + stream: bool = False, + timeout: typing.Optional[typing.Union[int, typing.Tuple]] = None, + ) -> api_client.ApiResponseWithoutDeserialization: ... + + @typing.overload + def put( + self, + body: typing.Union[SchemaForRequestBodyApplicationJson,SchemaForRequestBodyApplicationXWwwFormUrlencoded,], + content_type: str = ..., + header_params: RequestHeaderParams = frozendict.frozendict(), + accept_content_types: typing.Tuple[str] = _all_accept_content_types, + stream: bool = False, + timeout: typing.Optional[typing.Union[int, typing.Tuple]] = None, + skip_deserialization: bool = ..., + ) -> typing.Union[ + ApiResponseFor200, + api_client.ApiResponseWithoutDeserialization, + ]: ... + + def put( + self, + body: typing.Union[SchemaForRequestBodyApplicationJson,SchemaForRequestBodyApplicationXWwwFormUrlencoded,], + content_type: str = 'application/json', + header_params: RequestHeaderParams = frozendict.frozendict(), + accept_content_types: typing.Tuple[str] = _all_accept_content_types, + stream: bool = False, + timeout: typing.Optional[typing.Union[int, typing.Tuple]] = None, + skip_deserialization: bool = False, + ): + return self._templates_apply_oapg( + body=body, + header_params=header_params, + content_type=content_type, + accept_content_types=accept_content_types, + stream=stream, + timeout=timeout, + skip_deserialization=skip_deserialization + ) + + diff --git a/iot_api_client/paths/v1_templates/put.pyi b/iot_api_client/paths/v1_templates/put.pyi new file mode 100644 index 0000000..056324b --- /dev/null +++ b/iot_api_client/paths/v1_templates/put.pyi @@ -0,0 +1,535 @@ +# coding: utf-8 + +""" + + + Generated by: https://openapi-generator.tech +""" + +from dataclasses import dataclass +import typing_extensions +import urllib3 +from urllib3._collections import HTTPHeaderDict + +from iot_api_client import api_client, exceptions +from datetime import date, datetime # noqa: F401 +import decimal # noqa: F401 +import functools # noqa: F401 +import io # noqa: F401 +import re # noqa: F401 +import typing # noqa: F401 +import typing_extensions # noqa: F401 +import uuid # noqa: F401 + +import frozendict # noqa: F401 + +from iot_api_client import schemas # noqa: F401 + +from iot_api_client.model.error import Error +from iot_api_client.model.arduino_template import ArduinoTemplate +from iot_api_client.model.template import Template + +# Header params +XOrganizationSchema = schemas.StrSchema +RequestRequiredHeaderParams = typing_extensions.TypedDict( + 'RequestRequiredHeaderParams', + { + } +) +RequestOptionalHeaderParams = typing_extensions.TypedDict( + 'RequestOptionalHeaderParams', + { + 'X-Organization': typing.Union[XOrganizationSchema, str, ], + }, + total=False +) + + +class RequestHeaderParams(RequestRequiredHeaderParams, RequestOptionalHeaderParams): + pass + + +request_header_x_organization = api_client.HeaderParameter( + name="X-Organization", + style=api_client.ParameterStyle.SIMPLE, + schema=XOrganizationSchema, +) +# body param +SchemaForRequestBodyApplicationJson = Template +SchemaForRequestBodyApplicationXWwwFormUrlencoded = Template + + +request_body_template = api_client.RequestBody( + content={ + 'application/json': api_client.MediaType( + schema=SchemaForRequestBodyApplicationJson), + 'application/x-www-form-urlencoded': api_client.MediaType( + schema=SchemaForRequestBodyApplicationXWwwFormUrlencoded), + }, + required=True, +) +SchemaFor200ResponseBodyApplicationVndArduinoTemplatejson = ArduinoTemplate +SchemaFor200ResponseBodyApplicationVndGoaErrorjson = ArduinoTemplate + + +@dataclass +class ApiResponseFor200(api_client.ApiResponse): + response: urllib3.HTTPResponse + body: typing.Union[ + SchemaFor200ResponseBodyApplicationVndArduinoTemplatejson, + SchemaFor200ResponseBodyApplicationVndGoaErrorjson, + ] + headers: schemas.Unset = schemas.unset + + +_response_for_200 = api_client.OpenApiResponse( + response_cls=ApiResponseFor200, + content={ + 'application/vnd.arduino.template+json': api_client.MediaType( + schema=SchemaFor200ResponseBodyApplicationVndArduinoTemplatejson), + 'application/vnd.goa.error+json': api_client.MediaType( + schema=SchemaFor200ResponseBodyApplicationVndGoaErrorjson), + }, +) +SchemaFor400ResponseBodyApplicationVndArduinoTemplatejson = Error +SchemaFor400ResponseBodyApplicationVndGoaErrorjson = Error + + +@dataclass +class ApiResponseFor400(api_client.ApiResponse): + response: urllib3.HTTPResponse + body: typing.Union[ + SchemaFor400ResponseBodyApplicationVndArduinoTemplatejson, + SchemaFor400ResponseBodyApplicationVndGoaErrorjson, + ] + headers: schemas.Unset = schemas.unset + + +_response_for_400 = api_client.OpenApiResponse( + response_cls=ApiResponseFor400, + content={ + 'application/vnd.arduino.template+json': api_client.MediaType( + schema=SchemaFor400ResponseBodyApplicationVndArduinoTemplatejson), + 'application/vnd.goa.error+json': api_client.MediaType( + schema=SchemaFor400ResponseBodyApplicationVndGoaErrorjson), + }, +) + + +@dataclass +class ApiResponseFor401(api_client.ApiResponse): + response: urllib3.HTTPResponse + body: schemas.Unset = schemas.unset + headers: schemas.Unset = schemas.unset + + +_response_for_401 = api_client.OpenApiResponse( + response_cls=ApiResponseFor401, +) +SchemaFor404ResponseBodyApplicationVndArduinoTemplatejson = Error +SchemaFor404ResponseBodyApplicationVndGoaErrorjson = Error + + +@dataclass +class ApiResponseFor404(api_client.ApiResponse): + response: urllib3.HTTPResponse + body: typing.Union[ + SchemaFor404ResponseBodyApplicationVndArduinoTemplatejson, + SchemaFor404ResponseBodyApplicationVndGoaErrorjson, + ] + headers: schemas.Unset = schemas.unset + + +_response_for_404 = api_client.OpenApiResponse( + response_cls=ApiResponseFor404, + content={ + 'application/vnd.arduino.template+json': api_client.MediaType( + schema=SchemaFor404ResponseBodyApplicationVndArduinoTemplatejson), + 'application/vnd.goa.error+json': api_client.MediaType( + schema=SchemaFor404ResponseBodyApplicationVndGoaErrorjson), + }, +) +SchemaFor409ResponseBodyApplicationVndArduinoTemplatejson = Error +SchemaFor409ResponseBodyApplicationVndGoaErrorjson = Error + + +@dataclass +class ApiResponseFor409(api_client.ApiResponse): + response: urllib3.HTTPResponse + body: typing.Union[ + SchemaFor409ResponseBodyApplicationVndArduinoTemplatejson, + SchemaFor409ResponseBodyApplicationVndGoaErrorjson, + ] + headers: schemas.Unset = schemas.unset + + +_response_for_409 = api_client.OpenApiResponse( + response_cls=ApiResponseFor409, + content={ + 'application/vnd.arduino.template+json': api_client.MediaType( + schema=SchemaFor409ResponseBodyApplicationVndArduinoTemplatejson), + 'application/vnd.goa.error+json': api_client.MediaType( + schema=SchemaFor409ResponseBodyApplicationVndGoaErrorjson), + }, +) +SchemaFor500ResponseBodyApplicationVndArduinoTemplatejson = Error +SchemaFor500ResponseBodyApplicationVndGoaErrorjson = Error + + +@dataclass +class ApiResponseFor500(api_client.ApiResponse): + response: urllib3.HTTPResponse + body: typing.Union[ + SchemaFor500ResponseBodyApplicationVndArduinoTemplatejson, + SchemaFor500ResponseBodyApplicationVndGoaErrorjson, + ] + headers: schemas.Unset = schemas.unset + + +_response_for_500 = api_client.OpenApiResponse( + response_cls=ApiResponseFor500, + content={ + 'application/vnd.arduino.template+json': api_client.MediaType( + schema=SchemaFor500ResponseBodyApplicationVndArduinoTemplatejson), + 'application/vnd.goa.error+json': api_client.MediaType( + schema=SchemaFor500ResponseBodyApplicationVndGoaErrorjson), + }, +) +_all_accept_content_types = ( + 'application/vnd.arduino.template+json', + 'application/vnd.goa.error+json', +) + + +class BaseApi(api_client.Api): + @typing.overload + def _templates_apply_oapg( + self, + body: typing.Union[SchemaForRequestBodyApplicationJson,], + content_type: typing_extensions.Literal["application/json"] = ..., + header_params: RequestHeaderParams = frozendict.frozendict(), + accept_content_types: typing.Tuple[str] = _all_accept_content_types, + stream: bool = False, + timeout: typing.Optional[typing.Union[int, typing.Tuple]] = None, + skip_deserialization: typing_extensions.Literal[False] = ..., + ) -> typing.Union[ + ApiResponseFor200, + ]: ... + + @typing.overload + def _templates_apply_oapg( + self, + body: typing.Union[SchemaForRequestBodyApplicationXWwwFormUrlencoded,], + content_type: typing_extensions.Literal["application/x-www-form-urlencoded"], + header_params: RequestHeaderParams = frozendict.frozendict(), + accept_content_types: typing.Tuple[str] = _all_accept_content_types, + stream: bool = False, + timeout: typing.Optional[typing.Union[int, typing.Tuple]] = None, + skip_deserialization: typing_extensions.Literal[False] = ..., + ) -> typing.Union[ + ApiResponseFor200, + ]: ... + + @typing.overload + def _templates_apply_oapg( + self, + body: typing.Union[SchemaForRequestBodyApplicationJson,SchemaForRequestBodyApplicationXWwwFormUrlencoded,], + content_type: str = ..., + header_params: RequestHeaderParams = frozendict.frozendict(), + accept_content_types: typing.Tuple[str] = _all_accept_content_types, + stream: bool = False, + timeout: typing.Optional[typing.Union[int, typing.Tuple]] = None, + skip_deserialization: typing_extensions.Literal[False] = ..., + ) -> typing.Union[ + ApiResponseFor200, + ]: ... + + + @typing.overload + def _templates_apply_oapg( + self, + body: typing.Union[SchemaForRequestBodyApplicationJson,SchemaForRequestBodyApplicationXWwwFormUrlencoded,], + skip_deserialization: typing_extensions.Literal[True], + content_type: str = ..., + header_params: RequestHeaderParams = frozendict.frozendict(), + accept_content_types: typing.Tuple[str] = _all_accept_content_types, + stream: bool = False, + timeout: typing.Optional[typing.Union[int, typing.Tuple]] = None, + ) -> api_client.ApiResponseWithoutDeserialization: ... + + @typing.overload + def _templates_apply_oapg( + self, + body: typing.Union[SchemaForRequestBodyApplicationJson,SchemaForRequestBodyApplicationXWwwFormUrlencoded,], + content_type: str = ..., + header_params: RequestHeaderParams = frozendict.frozendict(), + accept_content_types: typing.Tuple[str] = _all_accept_content_types, + stream: bool = False, + timeout: typing.Optional[typing.Union[int, typing.Tuple]] = None, + skip_deserialization: bool = ..., + ) -> typing.Union[ + ApiResponseFor200, + api_client.ApiResponseWithoutDeserialization, + ]: ... + + def _templates_apply_oapg( + self, + body: typing.Union[SchemaForRequestBodyApplicationJson,SchemaForRequestBodyApplicationXWwwFormUrlencoded,], + content_type: str = 'application/json', + header_params: RequestHeaderParams = frozendict.frozendict(), + accept_content_types: typing.Tuple[str] = _all_accept_content_types, + stream: bool = False, + timeout: typing.Optional[typing.Union[int, typing.Tuple]] = None, + skip_deserialization: bool = False, + ): + """ + apply templates + :param skip_deserialization: If true then api_response.response will be set but + api_response.body and api_response.headers will not be deserialized into schema + class instances + """ + self._verify_typed_dict_inputs_oapg(RequestHeaderParams, header_params) + used_path = path.value + + _headers = HTTPHeaderDict() + for parameter in ( + request_header_x_organization, + ): + parameter_data = header_params.get(parameter.name, schemas.unset) + if parameter_data is schemas.unset: + continue + serialized_data = parameter.serialize(parameter_data) + _headers.extend(serialized_data) + # TODO add cookie handling + if accept_content_types: + for accept_content_type in accept_content_types: + _headers.add('Accept', accept_content_type) + + if body is schemas.unset: + raise exceptions.ApiValueError( + 'The required body parameter has an invalid value of: unset. Set a valid value instead') + _fields = None + _body = None + serialized_data = request_body_template.serialize(body, content_type) + _headers.add('Content-Type', content_type) + if 'fields' in serialized_data: + _fields = serialized_data['fields'] + elif 'body' in serialized_data: + _body = serialized_data['body'] + response = self.api_client.call_api( + resource_path=used_path, + method='put'.upper(), + headers=_headers, + fields=_fields, + body=_body, + stream=stream, + timeout=timeout, + ) + + if skip_deserialization: + api_response = api_client.ApiResponseWithoutDeserialization(response=response) + else: + response_for_status = _status_code_to_response.get(str(response.status)) + if response_for_status: + api_response = response_for_status.deserialize(response, self.api_client.configuration) + else: + api_response = api_client.ApiResponseWithoutDeserialization(response=response) + + if not 200 <= response.status <= 299: + raise exceptions.ApiException( + status=response.status, + reason=response.reason, + api_response=api_response + ) + + return api_response + + +class TemplatesApply(BaseApi): + # this class is used by api classes that refer to endpoints with operationId fn names + + @typing.overload + def templates_apply( + self, + body: typing.Union[SchemaForRequestBodyApplicationJson,], + content_type: typing_extensions.Literal["application/json"] = ..., + header_params: RequestHeaderParams = frozendict.frozendict(), + accept_content_types: typing.Tuple[str] = _all_accept_content_types, + stream: bool = False, + timeout: typing.Optional[typing.Union[int, typing.Tuple]] = None, + skip_deserialization: typing_extensions.Literal[False] = ..., + ) -> typing.Union[ + ApiResponseFor200, + ]: ... + + @typing.overload + def templates_apply( + self, + body: typing.Union[SchemaForRequestBodyApplicationXWwwFormUrlencoded,], + content_type: typing_extensions.Literal["application/x-www-form-urlencoded"], + header_params: RequestHeaderParams = frozendict.frozendict(), + accept_content_types: typing.Tuple[str] = _all_accept_content_types, + stream: bool = False, + timeout: typing.Optional[typing.Union[int, typing.Tuple]] = None, + skip_deserialization: typing_extensions.Literal[False] = ..., + ) -> typing.Union[ + ApiResponseFor200, + ]: ... + + @typing.overload + def templates_apply( + self, + body: typing.Union[SchemaForRequestBodyApplicationJson,SchemaForRequestBodyApplicationXWwwFormUrlencoded,], + content_type: str = ..., + header_params: RequestHeaderParams = frozendict.frozendict(), + accept_content_types: typing.Tuple[str] = _all_accept_content_types, + stream: bool = False, + timeout: typing.Optional[typing.Union[int, typing.Tuple]] = None, + skip_deserialization: typing_extensions.Literal[False] = ..., + ) -> typing.Union[ + ApiResponseFor200, + ]: ... + + + @typing.overload + def templates_apply( + self, + body: typing.Union[SchemaForRequestBodyApplicationJson,SchemaForRequestBodyApplicationXWwwFormUrlencoded,], + skip_deserialization: typing_extensions.Literal[True], + content_type: str = ..., + header_params: RequestHeaderParams = frozendict.frozendict(), + accept_content_types: typing.Tuple[str] = _all_accept_content_types, + stream: bool = False, + timeout: typing.Optional[typing.Union[int, typing.Tuple]] = None, + ) -> api_client.ApiResponseWithoutDeserialization: ... + + @typing.overload + def templates_apply( + self, + body: typing.Union[SchemaForRequestBodyApplicationJson,SchemaForRequestBodyApplicationXWwwFormUrlencoded,], + content_type: str = ..., + header_params: RequestHeaderParams = frozendict.frozendict(), + accept_content_types: typing.Tuple[str] = _all_accept_content_types, + stream: bool = False, + timeout: typing.Optional[typing.Union[int, typing.Tuple]] = None, + skip_deserialization: bool = ..., + ) -> typing.Union[ + ApiResponseFor200, + api_client.ApiResponseWithoutDeserialization, + ]: ... + + def templates_apply( + self, + body: typing.Union[SchemaForRequestBodyApplicationJson,SchemaForRequestBodyApplicationXWwwFormUrlencoded,], + content_type: str = 'application/json', + header_params: RequestHeaderParams = frozendict.frozendict(), + accept_content_types: typing.Tuple[str] = _all_accept_content_types, + stream: bool = False, + timeout: typing.Optional[typing.Union[int, typing.Tuple]] = None, + skip_deserialization: bool = False, + ): + return self._templates_apply_oapg( + body=body, + header_params=header_params, + content_type=content_type, + accept_content_types=accept_content_types, + stream=stream, + timeout=timeout, + skip_deserialization=skip_deserialization + ) + + +class ApiForput(BaseApi): + # this class is used by api classes that refer to endpoints by path and http method names + + @typing.overload + def put( + self, + body: typing.Union[SchemaForRequestBodyApplicationJson,], + content_type: typing_extensions.Literal["application/json"] = ..., + header_params: RequestHeaderParams = frozendict.frozendict(), + accept_content_types: typing.Tuple[str] = _all_accept_content_types, + stream: bool = False, + timeout: typing.Optional[typing.Union[int, typing.Tuple]] = None, + skip_deserialization: typing_extensions.Literal[False] = ..., + ) -> typing.Union[ + ApiResponseFor200, + ]: ... + + @typing.overload + def put( + self, + body: typing.Union[SchemaForRequestBodyApplicationXWwwFormUrlencoded,], + content_type: typing_extensions.Literal["application/x-www-form-urlencoded"], + header_params: RequestHeaderParams = frozendict.frozendict(), + accept_content_types: typing.Tuple[str] = _all_accept_content_types, + stream: bool = False, + timeout: typing.Optional[typing.Union[int, typing.Tuple]] = None, + skip_deserialization: typing_extensions.Literal[False] = ..., + ) -> typing.Union[ + ApiResponseFor200, + ]: ... + + @typing.overload + def put( + self, + body: typing.Union[SchemaForRequestBodyApplicationJson,SchemaForRequestBodyApplicationXWwwFormUrlencoded,], + content_type: str = ..., + header_params: RequestHeaderParams = frozendict.frozendict(), + accept_content_types: typing.Tuple[str] = _all_accept_content_types, + stream: bool = False, + timeout: typing.Optional[typing.Union[int, typing.Tuple]] = None, + skip_deserialization: typing_extensions.Literal[False] = ..., + ) -> typing.Union[ + ApiResponseFor200, + ]: ... + + + @typing.overload + def put( + self, + body: typing.Union[SchemaForRequestBodyApplicationJson,SchemaForRequestBodyApplicationXWwwFormUrlencoded,], + skip_deserialization: typing_extensions.Literal[True], + content_type: str = ..., + header_params: RequestHeaderParams = frozendict.frozendict(), + accept_content_types: typing.Tuple[str] = _all_accept_content_types, + stream: bool = False, + timeout: typing.Optional[typing.Union[int, typing.Tuple]] = None, + ) -> api_client.ApiResponseWithoutDeserialization: ... + + @typing.overload + def put( + self, + body: typing.Union[SchemaForRequestBodyApplicationJson,SchemaForRequestBodyApplicationXWwwFormUrlencoded,], + content_type: str = ..., + header_params: RequestHeaderParams = frozendict.frozendict(), + accept_content_types: typing.Tuple[str] = _all_accept_content_types, + stream: bool = False, + timeout: typing.Optional[typing.Union[int, typing.Tuple]] = None, + skip_deserialization: bool = ..., + ) -> typing.Union[ + ApiResponseFor200, + api_client.ApiResponseWithoutDeserialization, + ]: ... + + def put( + self, + body: typing.Union[SchemaForRequestBodyApplicationJson,SchemaForRequestBodyApplicationXWwwFormUrlencoded,], + content_type: str = 'application/json', + header_params: RequestHeaderParams = frozendict.frozendict(), + accept_content_types: typing.Tuple[str] = _all_accept_content_types, + stream: bool = False, + timeout: typing.Optional[typing.Union[int, typing.Tuple]] = None, + skip_deserialization: bool = False, + ): + return self._templates_apply_oapg( + body=body, + header_params=header_params, + content_type=content_type, + accept_content_types=accept_content_types, + stream=stream, + timeout=timeout, + skip_deserialization=skip_deserialization + ) + + diff --git a/iot_api_client/paths/v2_series_batch_query/post.py b/iot_api_client/paths/v2_series_batch_query/post.py index caa2f62..974543f 100644 --- a/iot_api_client/paths/v2_series_batch_query/post.py +++ b/iot_api_client/paths/v2_series_batch_query/post.py @@ -31,6 +31,31 @@ from . import path +# Header params +XOrganizationSchema = schemas.StrSchema +RequestRequiredHeaderParams = typing_extensions.TypedDict( + 'RequestRequiredHeaderParams', + { + } +) +RequestOptionalHeaderParams = typing_extensions.TypedDict( + 'RequestOptionalHeaderParams', + { + 'X-Organization': typing.Union[XOrganizationSchema, str, ], + }, + total=False +) + + +class RequestHeaderParams(RequestRequiredHeaderParams, RequestOptionalHeaderParams): + pass + + +request_header_x_organization = api_client.HeaderParameter( + name="X-Organization", + style=api_client.ParameterStyle.SIMPLE, + schema=XOrganizationSchema, +) # body param SchemaForRequestBodyApplicationJson = BatchQueryRequestsMediaV1 SchemaForRequestBodyApplicationXWwwFormUrlencoded = BatchQueryRequestsMediaV1 @@ -184,6 +209,7 @@ def _series_v2_batch_query_oapg( self, body: typing.Union[SchemaForRequestBodyApplicationJson,], content_type: typing_extensions.Literal["application/json"] = ..., + header_params: RequestHeaderParams = frozendict.frozendict(), accept_content_types: typing.Tuple[str] = _all_accept_content_types, stream: bool = False, timeout: typing.Optional[typing.Union[int, typing.Tuple]] = None, @@ -197,6 +223,7 @@ def _series_v2_batch_query_oapg( self, body: typing.Union[SchemaForRequestBodyApplicationXWwwFormUrlencoded,], content_type: typing_extensions.Literal["application/x-www-form-urlencoded"], + header_params: RequestHeaderParams = frozendict.frozendict(), accept_content_types: typing.Tuple[str] = _all_accept_content_types, stream: bool = False, timeout: typing.Optional[typing.Union[int, typing.Tuple]] = None, @@ -210,6 +237,7 @@ def _series_v2_batch_query_oapg( self, body: typing.Union[SchemaForRequestBodyApplicationJson,SchemaForRequestBodyApplicationXWwwFormUrlencoded,], content_type: str = ..., + header_params: RequestHeaderParams = frozendict.frozendict(), accept_content_types: typing.Tuple[str] = _all_accept_content_types, stream: bool = False, timeout: typing.Optional[typing.Union[int, typing.Tuple]] = None, @@ -225,6 +253,7 @@ def _series_v2_batch_query_oapg( body: typing.Union[SchemaForRequestBodyApplicationJson,SchemaForRequestBodyApplicationXWwwFormUrlencoded,], skip_deserialization: typing_extensions.Literal[True], content_type: str = ..., + header_params: RequestHeaderParams = frozendict.frozendict(), accept_content_types: typing.Tuple[str] = _all_accept_content_types, stream: bool = False, timeout: typing.Optional[typing.Union[int, typing.Tuple]] = None, @@ -235,6 +264,7 @@ def _series_v2_batch_query_oapg( self, body: typing.Union[SchemaForRequestBodyApplicationJson,SchemaForRequestBodyApplicationXWwwFormUrlencoded,], content_type: str = ..., + header_params: RequestHeaderParams = frozendict.frozendict(), accept_content_types: typing.Tuple[str] = _all_accept_content_types, stream: bool = False, timeout: typing.Optional[typing.Union[int, typing.Tuple]] = None, @@ -248,6 +278,7 @@ def _series_v2_batch_query_oapg( self, body: typing.Union[SchemaForRequestBodyApplicationJson,SchemaForRequestBodyApplicationXWwwFormUrlencoded,], content_type: str = 'application/json', + header_params: RequestHeaderParams = frozendict.frozendict(), accept_content_types: typing.Tuple[str] = _all_accept_content_types, stream: bool = False, timeout: typing.Optional[typing.Union[int, typing.Tuple]] = None, @@ -259,9 +290,18 @@ def _series_v2_batch_query_oapg( api_response.body and api_response.headers will not be deserialized into schema class instances """ + self._verify_typed_dict_inputs_oapg(RequestHeaderParams, header_params) used_path = path.value _headers = HTTPHeaderDict() + for parameter in ( + request_header_x_organization, + ): + parameter_data = header_params.get(parameter.name, schemas.unset) + if parameter_data is schemas.unset: + continue + serialized_data = parameter.serialize(parameter_data) + _headers.extend(serialized_data) # TODO add cookie handling if accept_content_types: for accept_content_type in accept_content_types: @@ -316,6 +356,7 @@ def series_v2_batch_query( self, body: typing.Union[SchemaForRequestBodyApplicationJson,], content_type: typing_extensions.Literal["application/json"] = ..., + header_params: RequestHeaderParams = frozendict.frozendict(), accept_content_types: typing.Tuple[str] = _all_accept_content_types, stream: bool = False, timeout: typing.Optional[typing.Union[int, typing.Tuple]] = None, @@ -329,6 +370,7 @@ def series_v2_batch_query( self, body: typing.Union[SchemaForRequestBodyApplicationXWwwFormUrlencoded,], content_type: typing_extensions.Literal["application/x-www-form-urlencoded"], + header_params: RequestHeaderParams = frozendict.frozendict(), accept_content_types: typing.Tuple[str] = _all_accept_content_types, stream: bool = False, timeout: typing.Optional[typing.Union[int, typing.Tuple]] = None, @@ -342,6 +384,7 @@ def series_v2_batch_query( self, body: typing.Union[SchemaForRequestBodyApplicationJson,SchemaForRequestBodyApplicationXWwwFormUrlencoded,], content_type: str = ..., + header_params: RequestHeaderParams = frozendict.frozendict(), accept_content_types: typing.Tuple[str] = _all_accept_content_types, stream: bool = False, timeout: typing.Optional[typing.Union[int, typing.Tuple]] = None, @@ -357,6 +400,7 @@ def series_v2_batch_query( body: typing.Union[SchemaForRequestBodyApplicationJson,SchemaForRequestBodyApplicationXWwwFormUrlencoded,], skip_deserialization: typing_extensions.Literal[True], content_type: str = ..., + header_params: RequestHeaderParams = frozendict.frozendict(), accept_content_types: typing.Tuple[str] = _all_accept_content_types, stream: bool = False, timeout: typing.Optional[typing.Union[int, typing.Tuple]] = None, @@ -367,6 +411,7 @@ def series_v2_batch_query( self, body: typing.Union[SchemaForRequestBodyApplicationJson,SchemaForRequestBodyApplicationXWwwFormUrlencoded,], content_type: str = ..., + header_params: RequestHeaderParams = frozendict.frozendict(), accept_content_types: typing.Tuple[str] = _all_accept_content_types, stream: bool = False, timeout: typing.Optional[typing.Union[int, typing.Tuple]] = None, @@ -380,6 +425,7 @@ def series_v2_batch_query( self, body: typing.Union[SchemaForRequestBodyApplicationJson,SchemaForRequestBodyApplicationXWwwFormUrlencoded,], content_type: str = 'application/json', + header_params: RequestHeaderParams = frozendict.frozendict(), accept_content_types: typing.Tuple[str] = _all_accept_content_types, stream: bool = False, timeout: typing.Optional[typing.Union[int, typing.Tuple]] = None, @@ -387,6 +433,7 @@ def series_v2_batch_query( ): return self._series_v2_batch_query_oapg( body=body, + header_params=header_params, content_type=content_type, accept_content_types=accept_content_types, stream=stream, @@ -403,6 +450,7 @@ def post( self, body: typing.Union[SchemaForRequestBodyApplicationJson,], content_type: typing_extensions.Literal["application/json"] = ..., + header_params: RequestHeaderParams = frozendict.frozendict(), accept_content_types: typing.Tuple[str] = _all_accept_content_types, stream: bool = False, timeout: typing.Optional[typing.Union[int, typing.Tuple]] = None, @@ -416,6 +464,7 @@ def post( self, body: typing.Union[SchemaForRequestBodyApplicationXWwwFormUrlencoded,], content_type: typing_extensions.Literal["application/x-www-form-urlencoded"], + header_params: RequestHeaderParams = frozendict.frozendict(), accept_content_types: typing.Tuple[str] = _all_accept_content_types, stream: bool = False, timeout: typing.Optional[typing.Union[int, typing.Tuple]] = None, @@ -429,6 +478,7 @@ def post( self, body: typing.Union[SchemaForRequestBodyApplicationJson,SchemaForRequestBodyApplicationXWwwFormUrlencoded,], content_type: str = ..., + header_params: RequestHeaderParams = frozendict.frozendict(), accept_content_types: typing.Tuple[str] = _all_accept_content_types, stream: bool = False, timeout: typing.Optional[typing.Union[int, typing.Tuple]] = None, @@ -444,6 +494,7 @@ def post( body: typing.Union[SchemaForRequestBodyApplicationJson,SchemaForRequestBodyApplicationXWwwFormUrlencoded,], skip_deserialization: typing_extensions.Literal[True], content_type: str = ..., + header_params: RequestHeaderParams = frozendict.frozendict(), accept_content_types: typing.Tuple[str] = _all_accept_content_types, stream: bool = False, timeout: typing.Optional[typing.Union[int, typing.Tuple]] = None, @@ -454,6 +505,7 @@ def post( self, body: typing.Union[SchemaForRequestBodyApplicationJson,SchemaForRequestBodyApplicationXWwwFormUrlencoded,], content_type: str = ..., + header_params: RequestHeaderParams = frozendict.frozendict(), accept_content_types: typing.Tuple[str] = _all_accept_content_types, stream: bool = False, timeout: typing.Optional[typing.Union[int, typing.Tuple]] = None, @@ -467,6 +519,7 @@ def post( self, body: typing.Union[SchemaForRequestBodyApplicationJson,SchemaForRequestBodyApplicationXWwwFormUrlencoded,], content_type: str = 'application/json', + header_params: RequestHeaderParams = frozendict.frozendict(), accept_content_types: typing.Tuple[str] = _all_accept_content_types, stream: bool = False, timeout: typing.Optional[typing.Union[int, typing.Tuple]] = None, @@ -474,6 +527,7 @@ def post( ): return self._series_v2_batch_query_oapg( body=body, + header_params=header_params, content_type=content_type, accept_content_types=accept_content_types, stream=stream, diff --git a/iot_api_client/paths/v2_series_batch_query/post.pyi b/iot_api_client/paths/v2_series_batch_query/post.pyi index fd4acc2..b3e744f 100644 --- a/iot_api_client/paths/v2_series_batch_query/post.pyi +++ b/iot_api_client/paths/v2_series_batch_query/post.pyi @@ -29,6 +29,31 @@ from iot_api_client.model.batch_query_requests_media_v1 import BatchQueryRequest from iot_api_client.model.error import Error from iot_api_client.model.arduino_series_batch import ArduinoSeriesBatch +# Header params +XOrganizationSchema = schemas.StrSchema +RequestRequiredHeaderParams = typing_extensions.TypedDict( + 'RequestRequiredHeaderParams', + { + } +) +RequestOptionalHeaderParams = typing_extensions.TypedDict( + 'RequestOptionalHeaderParams', + { + 'X-Organization': typing.Union[XOrganizationSchema, str, ], + }, + total=False +) + + +class RequestHeaderParams(RequestRequiredHeaderParams, RequestOptionalHeaderParams): + pass + + +request_header_x_organization = api_client.HeaderParameter( + name="X-Organization", + style=api_client.ParameterStyle.SIMPLE, + schema=XOrganizationSchema, +) # body param SchemaForRequestBodyApplicationJson = BatchQueryRequestsMediaV1 SchemaForRequestBodyApplicationXWwwFormUrlencoded = BatchQueryRequestsMediaV1 @@ -171,6 +196,7 @@ class BaseApi(api_client.Api): self, body: typing.Union[SchemaForRequestBodyApplicationJson,], content_type: typing_extensions.Literal["application/json"] = ..., + header_params: RequestHeaderParams = frozendict.frozendict(), accept_content_types: typing.Tuple[str] = _all_accept_content_types, stream: bool = False, timeout: typing.Optional[typing.Union[int, typing.Tuple]] = None, @@ -184,6 +210,7 @@ class BaseApi(api_client.Api): self, body: typing.Union[SchemaForRequestBodyApplicationXWwwFormUrlencoded,], content_type: typing_extensions.Literal["application/x-www-form-urlencoded"], + header_params: RequestHeaderParams = frozendict.frozendict(), accept_content_types: typing.Tuple[str] = _all_accept_content_types, stream: bool = False, timeout: typing.Optional[typing.Union[int, typing.Tuple]] = None, @@ -197,6 +224,7 @@ class BaseApi(api_client.Api): self, body: typing.Union[SchemaForRequestBodyApplicationJson,SchemaForRequestBodyApplicationXWwwFormUrlencoded,], content_type: str = ..., + header_params: RequestHeaderParams = frozendict.frozendict(), accept_content_types: typing.Tuple[str] = _all_accept_content_types, stream: bool = False, timeout: typing.Optional[typing.Union[int, typing.Tuple]] = None, @@ -212,6 +240,7 @@ class BaseApi(api_client.Api): body: typing.Union[SchemaForRequestBodyApplicationJson,SchemaForRequestBodyApplicationXWwwFormUrlencoded,], skip_deserialization: typing_extensions.Literal[True], content_type: str = ..., + header_params: RequestHeaderParams = frozendict.frozendict(), accept_content_types: typing.Tuple[str] = _all_accept_content_types, stream: bool = False, timeout: typing.Optional[typing.Union[int, typing.Tuple]] = None, @@ -222,6 +251,7 @@ class BaseApi(api_client.Api): self, body: typing.Union[SchemaForRequestBodyApplicationJson,SchemaForRequestBodyApplicationXWwwFormUrlencoded,], content_type: str = ..., + header_params: RequestHeaderParams = frozendict.frozendict(), accept_content_types: typing.Tuple[str] = _all_accept_content_types, stream: bool = False, timeout: typing.Optional[typing.Union[int, typing.Tuple]] = None, @@ -235,6 +265,7 @@ class BaseApi(api_client.Api): self, body: typing.Union[SchemaForRequestBodyApplicationJson,SchemaForRequestBodyApplicationXWwwFormUrlencoded,], content_type: str = 'application/json', + header_params: RequestHeaderParams = frozendict.frozendict(), accept_content_types: typing.Tuple[str] = _all_accept_content_types, stream: bool = False, timeout: typing.Optional[typing.Union[int, typing.Tuple]] = None, @@ -246,9 +277,18 @@ class BaseApi(api_client.Api): api_response.body and api_response.headers will not be deserialized into schema class instances """ + self._verify_typed_dict_inputs_oapg(RequestHeaderParams, header_params) used_path = path.value _headers = HTTPHeaderDict() + for parameter in ( + request_header_x_organization, + ): + parameter_data = header_params.get(parameter.name, schemas.unset) + if parameter_data is schemas.unset: + continue + serialized_data = parameter.serialize(parameter_data) + _headers.extend(serialized_data) # TODO add cookie handling if accept_content_types: for accept_content_type in accept_content_types: @@ -303,6 +343,7 @@ class SeriesV2BatchQuery(BaseApi): self, body: typing.Union[SchemaForRequestBodyApplicationJson,], content_type: typing_extensions.Literal["application/json"] = ..., + header_params: RequestHeaderParams = frozendict.frozendict(), accept_content_types: typing.Tuple[str] = _all_accept_content_types, stream: bool = False, timeout: typing.Optional[typing.Union[int, typing.Tuple]] = None, @@ -316,6 +357,7 @@ class SeriesV2BatchQuery(BaseApi): self, body: typing.Union[SchemaForRequestBodyApplicationXWwwFormUrlencoded,], content_type: typing_extensions.Literal["application/x-www-form-urlencoded"], + header_params: RequestHeaderParams = frozendict.frozendict(), accept_content_types: typing.Tuple[str] = _all_accept_content_types, stream: bool = False, timeout: typing.Optional[typing.Union[int, typing.Tuple]] = None, @@ -329,6 +371,7 @@ class SeriesV2BatchQuery(BaseApi): self, body: typing.Union[SchemaForRequestBodyApplicationJson,SchemaForRequestBodyApplicationXWwwFormUrlencoded,], content_type: str = ..., + header_params: RequestHeaderParams = frozendict.frozendict(), accept_content_types: typing.Tuple[str] = _all_accept_content_types, stream: bool = False, timeout: typing.Optional[typing.Union[int, typing.Tuple]] = None, @@ -344,6 +387,7 @@ class SeriesV2BatchQuery(BaseApi): body: typing.Union[SchemaForRequestBodyApplicationJson,SchemaForRequestBodyApplicationXWwwFormUrlencoded,], skip_deserialization: typing_extensions.Literal[True], content_type: str = ..., + header_params: RequestHeaderParams = frozendict.frozendict(), accept_content_types: typing.Tuple[str] = _all_accept_content_types, stream: bool = False, timeout: typing.Optional[typing.Union[int, typing.Tuple]] = None, @@ -354,6 +398,7 @@ class SeriesV2BatchQuery(BaseApi): self, body: typing.Union[SchemaForRequestBodyApplicationJson,SchemaForRequestBodyApplicationXWwwFormUrlencoded,], content_type: str = ..., + header_params: RequestHeaderParams = frozendict.frozendict(), accept_content_types: typing.Tuple[str] = _all_accept_content_types, stream: bool = False, timeout: typing.Optional[typing.Union[int, typing.Tuple]] = None, @@ -367,6 +412,7 @@ class SeriesV2BatchQuery(BaseApi): self, body: typing.Union[SchemaForRequestBodyApplicationJson,SchemaForRequestBodyApplicationXWwwFormUrlencoded,], content_type: str = 'application/json', + header_params: RequestHeaderParams = frozendict.frozendict(), accept_content_types: typing.Tuple[str] = _all_accept_content_types, stream: bool = False, timeout: typing.Optional[typing.Union[int, typing.Tuple]] = None, @@ -374,6 +420,7 @@ class SeriesV2BatchQuery(BaseApi): ): return self._series_v2_batch_query_oapg( body=body, + header_params=header_params, content_type=content_type, accept_content_types=accept_content_types, stream=stream, @@ -390,6 +437,7 @@ class ApiForpost(BaseApi): self, body: typing.Union[SchemaForRequestBodyApplicationJson,], content_type: typing_extensions.Literal["application/json"] = ..., + header_params: RequestHeaderParams = frozendict.frozendict(), accept_content_types: typing.Tuple[str] = _all_accept_content_types, stream: bool = False, timeout: typing.Optional[typing.Union[int, typing.Tuple]] = None, @@ -403,6 +451,7 @@ class ApiForpost(BaseApi): self, body: typing.Union[SchemaForRequestBodyApplicationXWwwFormUrlencoded,], content_type: typing_extensions.Literal["application/x-www-form-urlencoded"], + header_params: RequestHeaderParams = frozendict.frozendict(), accept_content_types: typing.Tuple[str] = _all_accept_content_types, stream: bool = False, timeout: typing.Optional[typing.Union[int, typing.Tuple]] = None, @@ -416,6 +465,7 @@ class ApiForpost(BaseApi): self, body: typing.Union[SchemaForRequestBodyApplicationJson,SchemaForRequestBodyApplicationXWwwFormUrlencoded,], content_type: str = ..., + header_params: RequestHeaderParams = frozendict.frozendict(), accept_content_types: typing.Tuple[str] = _all_accept_content_types, stream: bool = False, timeout: typing.Optional[typing.Union[int, typing.Tuple]] = None, @@ -431,6 +481,7 @@ class ApiForpost(BaseApi): body: typing.Union[SchemaForRequestBodyApplicationJson,SchemaForRequestBodyApplicationXWwwFormUrlencoded,], skip_deserialization: typing_extensions.Literal[True], content_type: str = ..., + header_params: RequestHeaderParams = frozendict.frozendict(), accept_content_types: typing.Tuple[str] = _all_accept_content_types, stream: bool = False, timeout: typing.Optional[typing.Union[int, typing.Tuple]] = None, @@ -441,6 +492,7 @@ class ApiForpost(BaseApi): self, body: typing.Union[SchemaForRequestBodyApplicationJson,SchemaForRequestBodyApplicationXWwwFormUrlencoded,], content_type: str = ..., + header_params: RequestHeaderParams = frozendict.frozendict(), accept_content_types: typing.Tuple[str] = _all_accept_content_types, stream: bool = False, timeout: typing.Optional[typing.Union[int, typing.Tuple]] = None, @@ -454,6 +506,7 @@ class ApiForpost(BaseApi): self, body: typing.Union[SchemaForRequestBodyApplicationJson,SchemaForRequestBodyApplicationXWwwFormUrlencoded,], content_type: str = 'application/json', + header_params: RequestHeaderParams = frozendict.frozendict(), accept_content_types: typing.Tuple[str] = _all_accept_content_types, stream: bool = False, timeout: typing.Optional[typing.Union[int, typing.Tuple]] = None, @@ -461,6 +514,7 @@ class ApiForpost(BaseApi): ): return self._series_v2_batch_query_oapg( body=body, + header_params=header_params, content_type=content_type, accept_content_types=accept_content_types, stream=stream, diff --git a/iot_api_client/paths/v2_series_batch_query_raw/post.py b/iot_api_client/paths/v2_series_batch_query_raw/post.py index 8b0b9fd..d6531e8 100644 --- a/iot_api_client/paths/v2_series_batch_query_raw/post.py +++ b/iot_api_client/paths/v2_series_batch_query_raw/post.py @@ -31,6 +31,31 @@ from . import path +# Header params +XOrganizationSchema = schemas.StrSchema +RequestRequiredHeaderParams = typing_extensions.TypedDict( + 'RequestRequiredHeaderParams', + { + } +) +RequestOptionalHeaderParams = typing_extensions.TypedDict( + 'RequestOptionalHeaderParams', + { + 'X-Organization': typing.Union[XOrganizationSchema, str, ], + }, + total=False +) + + +class RequestHeaderParams(RequestRequiredHeaderParams, RequestOptionalHeaderParams): + pass + + +request_header_x_organization = api_client.HeaderParameter( + name="X-Organization", + style=api_client.ParameterStyle.SIMPLE, + schema=XOrganizationSchema, +) # body param SchemaForRequestBodyApplicationJson = BatchQueryRawRequestsMediaV1 SchemaForRequestBodyApplicationXWwwFormUrlencoded = BatchQueryRawRequestsMediaV1 @@ -184,6 +209,7 @@ def _series_v2_batch_query_raw_oapg( self, body: typing.Union[SchemaForRequestBodyApplicationJson,], content_type: typing_extensions.Literal["application/json"] = ..., + header_params: RequestHeaderParams = frozendict.frozendict(), accept_content_types: typing.Tuple[str] = _all_accept_content_types, stream: bool = False, timeout: typing.Optional[typing.Union[int, typing.Tuple]] = None, @@ -197,6 +223,7 @@ def _series_v2_batch_query_raw_oapg( self, body: typing.Union[SchemaForRequestBodyApplicationXWwwFormUrlencoded,], content_type: typing_extensions.Literal["application/x-www-form-urlencoded"], + header_params: RequestHeaderParams = frozendict.frozendict(), accept_content_types: typing.Tuple[str] = _all_accept_content_types, stream: bool = False, timeout: typing.Optional[typing.Union[int, typing.Tuple]] = None, @@ -210,6 +237,7 @@ def _series_v2_batch_query_raw_oapg( self, body: typing.Union[SchemaForRequestBodyApplicationJson,SchemaForRequestBodyApplicationXWwwFormUrlencoded,], content_type: str = ..., + header_params: RequestHeaderParams = frozendict.frozendict(), accept_content_types: typing.Tuple[str] = _all_accept_content_types, stream: bool = False, timeout: typing.Optional[typing.Union[int, typing.Tuple]] = None, @@ -225,6 +253,7 @@ def _series_v2_batch_query_raw_oapg( body: typing.Union[SchemaForRequestBodyApplicationJson,SchemaForRequestBodyApplicationXWwwFormUrlencoded,], skip_deserialization: typing_extensions.Literal[True], content_type: str = ..., + header_params: RequestHeaderParams = frozendict.frozendict(), accept_content_types: typing.Tuple[str] = _all_accept_content_types, stream: bool = False, timeout: typing.Optional[typing.Union[int, typing.Tuple]] = None, @@ -235,6 +264,7 @@ def _series_v2_batch_query_raw_oapg( self, body: typing.Union[SchemaForRequestBodyApplicationJson,SchemaForRequestBodyApplicationXWwwFormUrlencoded,], content_type: str = ..., + header_params: RequestHeaderParams = frozendict.frozendict(), accept_content_types: typing.Tuple[str] = _all_accept_content_types, stream: bool = False, timeout: typing.Optional[typing.Union[int, typing.Tuple]] = None, @@ -248,6 +278,7 @@ def _series_v2_batch_query_raw_oapg( self, body: typing.Union[SchemaForRequestBodyApplicationJson,SchemaForRequestBodyApplicationXWwwFormUrlencoded,], content_type: str = 'application/json', + header_params: RequestHeaderParams = frozendict.frozendict(), accept_content_types: typing.Tuple[str] = _all_accept_content_types, stream: bool = False, timeout: typing.Optional[typing.Union[int, typing.Tuple]] = None, @@ -259,9 +290,18 @@ def _series_v2_batch_query_raw_oapg( api_response.body and api_response.headers will not be deserialized into schema class instances """ + self._verify_typed_dict_inputs_oapg(RequestHeaderParams, header_params) used_path = path.value _headers = HTTPHeaderDict() + for parameter in ( + request_header_x_organization, + ): + parameter_data = header_params.get(parameter.name, schemas.unset) + if parameter_data is schemas.unset: + continue + serialized_data = parameter.serialize(parameter_data) + _headers.extend(serialized_data) # TODO add cookie handling if accept_content_types: for accept_content_type in accept_content_types: @@ -316,6 +356,7 @@ def series_v2_batch_query_raw( self, body: typing.Union[SchemaForRequestBodyApplicationJson,], content_type: typing_extensions.Literal["application/json"] = ..., + header_params: RequestHeaderParams = frozendict.frozendict(), accept_content_types: typing.Tuple[str] = _all_accept_content_types, stream: bool = False, timeout: typing.Optional[typing.Union[int, typing.Tuple]] = None, @@ -329,6 +370,7 @@ def series_v2_batch_query_raw( self, body: typing.Union[SchemaForRequestBodyApplicationXWwwFormUrlencoded,], content_type: typing_extensions.Literal["application/x-www-form-urlencoded"], + header_params: RequestHeaderParams = frozendict.frozendict(), accept_content_types: typing.Tuple[str] = _all_accept_content_types, stream: bool = False, timeout: typing.Optional[typing.Union[int, typing.Tuple]] = None, @@ -342,6 +384,7 @@ def series_v2_batch_query_raw( self, body: typing.Union[SchemaForRequestBodyApplicationJson,SchemaForRequestBodyApplicationXWwwFormUrlencoded,], content_type: str = ..., + header_params: RequestHeaderParams = frozendict.frozendict(), accept_content_types: typing.Tuple[str] = _all_accept_content_types, stream: bool = False, timeout: typing.Optional[typing.Union[int, typing.Tuple]] = None, @@ -357,6 +400,7 @@ def series_v2_batch_query_raw( body: typing.Union[SchemaForRequestBodyApplicationJson,SchemaForRequestBodyApplicationXWwwFormUrlencoded,], skip_deserialization: typing_extensions.Literal[True], content_type: str = ..., + header_params: RequestHeaderParams = frozendict.frozendict(), accept_content_types: typing.Tuple[str] = _all_accept_content_types, stream: bool = False, timeout: typing.Optional[typing.Union[int, typing.Tuple]] = None, @@ -367,6 +411,7 @@ def series_v2_batch_query_raw( self, body: typing.Union[SchemaForRequestBodyApplicationJson,SchemaForRequestBodyApplicationXWwwFormUrlencoded,], content_type: str = ..., + header_params: RequestHeaderParams = frozendict.frozendict(), accept_content_types: typing.Tuple[str] = _all_accept_content_types, stream: bool = False, timeout: typing.Optional[typing.Union[int, typing.Tuple]] = None, @@ -380,6 +425,7 @@ def series_v2_batch_query_raw( self, body: typing.Union[SchemaForRequestBodyApplicationJson,SchemaForRequestBodyApplicationXWwwFormUrlencoded,], content_type: str = 'application/json', + header_params: RequestHeaderParams = frozendict.frozendict(), accept_content_types: typing.Tuple[str] = _all_accept_content_types, stream: bool = False, timeout: typing.Optional[typing.Union[int, typing.Tuple]] = None, @@ -387,6 +433,7 @@ def series_v2_batch_query_raw( ): return self._series_v2_batch_query_raw_oapg( body=body, + header_params=header_params, content_type=content_type, accept_content_types=accept_content_types, stream=stream, @@ -403,6 +450,7 @@ def post( self, body: typing.Union[SchemaForRequestBodyApplicationJson,], content_type: typing_extensions.Literal["application/json"] = ..., + header_params: RequestHeaderParams = frozendict.frozendict(), accept_content_types: typing.Tuple[str] = _all_accept_content_types, stream: bool = False, timeout: typing.Optional[typing.Union[int, typing.Tuple]] = None, @@ -416,6 +464,7 @@ def post( self, body: typing.Union[SchemaForRequestBodyApplicationXWwwFormUrlencoded,], content_type: typing_extensions.Literal["application/x-www-form-urlencoded"], + header_params: RequestHeaderParams = frozendict.frozendict(), accept_content_types: typing.Tuple[str] = _all_accept_content_types, stream: bool = False, timeout: typing.Optional[typing.Union[int, typing.Tuple]] = None, @@ -429,6 +478,7 @@ def post( self, body: typing.Union[SchemaForRequestBodyApplicationJson,SchemaForRequestBodyApplicationXWwwFormUrlencoded,], content_type: str = ..., + header_params: RequestHeaderParams = frozendict.frozendict(), accept_content_types: typing.Tuple[str] = _all_accept_content_types, stream: bool = False, timeout: typing.Optional[typing.Union[int, typing.Tuple]] = None, @@ -444,6 +494,7 @@ def post( body: typing.Union[SchemaForRequestBodyApplicationJson,SchemaForRequestBodyApplicationXWwwFormUrlencoded,], skip_deserialization: typing_extensions.Literal[True], content_type: str = ..., + header_params: RequestHeaderParams = frozendict.frozendict(), accept_content_types: typing.Tuple[str] = _all_accept_content_types, stream: bool = False, timeout: typing.Optional[typing.Union[int, typing.Tuple]] = None, @@ -454,6 +505,7 @@ def post( self, body: typing.Union[SchemaForRequestBodyApplicationJson,SchemaForRequestBodyApplicationXWwwFormUrlencoded,], content_type: str = ..., + header_params: RequestHeaderParams = frozendict.frozendict(), accept_content_types: typing.Tuple[str] = _all_accept_content_types, stream: bool = False, timeout: typing.Optional[typing.Union[int, typing.Tuple]] = None, @@ -467,6 +519,7 @@ def post( self, body: typing.Union[SchemaForRequestBodyApplicationJson,SchemaForRequestBodyApplicationXWwwFormUrlencoded,], content_type: str = 'application/json', + header_params: RequestHeaderParams = frozendict.frozendict(), accept_content_types: typing.Tuple[str] = _all_accept_content_types, stream: bool = False, timeout: typing.Optional[typing.Union[int, typing.Tuple]] = None, @@ -474,6 +527,7 @@ def post( ): return self._series_v2_batch_query_raw_oapg( body=body, + header_params=header_params, content_type=content_type, accept_content_types=accept_content_types, stream=stream, diff --git a/iot_api_client/paths/v2_series_batch_query_raw/post.pyi b/iot_api_client/paths/v2_series_batch_query_raw/post.pyi index b83813d..8a75f56 100644 --- a/iot_api_client/paths/v2_series_batch_query_raw/post.pyi +++ b/iot_api_client/paths/v2_series_batch_query_raw/post.pyi @@ -29,6 +29,31 @@ from iot_api_client.model.error import Error from iot_api_client.model.arduino_series_raw_batch import ArduinoSeriesRawBatch from iot_api_client.model.batch_query_raw_requests_media_v1 import BatchQueryRawRequestsMediaV1 +# Header params +XOrganizationSchema = schemas.StrSchema +RequestRequiredHeaderParams = typing_extensions.TypedDict( + 'RequestRequiredHeaderParams', + { + } +) +RequestOptionalHeaderParams = typing_extensions.TypedDict( + 'RequestOptionalHeaderParams', + { + 'X-Organization': typing.Union[XOrganizationSchema, str, ], + }, + total=False +) + + +class RequestHeaderParams(RequestRequiredHeaderParams, RequestOptionalHeaderParams): + pass + + +request_header_x_organization = api_client.HeaderParameter( + name="X-Organization", + style=api_client.ParameterStyle.SIMPLE, + schema=XOrganizationSchema, +) # body param SchemaForRequestBodyApplicationJson = BatchQueryRawRequestsMediaV1 SchemaForRequestBodyApplicationXWwwFormUrlencoded = BatchQueryRawRequestsMediaV1 @@ -171,6 +196,7 @@ class BaseApi(api_client.Api): self, body: typing.Union[SchemaForRequestBodyApplicationJson,], content_type: typing_extensions.Literal["application/json"] = ..., + header_params: RequestHeaderParams = frozendict.frozendict(), accept_content_types: typing.Tuple[str] = _all_accept_content_types, stream: bool = False, timeout: typing.Optional[typing.Union[int, typing.Tuple]] = None, @@ -184,6 +210,7 @@ class BaseApi(api_client.Api): self, body: typing.Union[SchemaForRequestBodyApplicationXWwwFormUrlencoded,], content_type: typing_extensions.Literal["application/x-www-form-urlencoded"], + header_params: RequestHeaderParams = frozendict.frozendict(), accept_content_types: typing.Tuple[str] = _all_accept_content_types, stream: bool = False, timeout: typing.Optional[typing.Union[int, typing.Tuple]] = None, @@ -197,6 +224,7 @@ class BaseApi(api_client.Api): self, body: typing.Union[SchemaForRequestBodyApplicationJson,SchemaForRequestBodyApplicationXWwwFormUrlencoded,], content_type: str = ..., + header_params: RequestHeaderParams = frozendict.frozendict(), accept_content_types: typing.Tuple[str] = _all_accept_content_types, stream: bool = False, timeout: typing.Optional[typing.Union[int, typing.Tuple]] = None, @@ -212,6 +240,7 @@ class BaseApi(api_client.Api): body: typing.Union[SchemaForRequestBodyApplicationJson,SchemaForRequestBodyApplicationXWwwFormUrlencoded,], skip_deserialization: typing_extensions.Literal[True], content_type: str = ..., + header_params: RequestHeaderParams = frozendict.frozendict(), accept_content_types: typing.Tuple[str] = _all_accept_content_types, stream: bool = False, timeout: typing.Optional[typing.Union[int, typing.Tuple]] = None, @@ -222,6 +251,7 @@ class BaseApi(api_client.Api): self, body: typing.Union[SchemaForRequestBodyApplicationJson,SchemaForRequestBodyApplicationXWwwFormUrlencoded,], content_type: str = ..., + header_params: RequestHeaderParams = frozendict.frozendict(), accept_content_types: typing.Tuple[str] = _all_accept_content_types, stream: bool = False, timeout: typing.Optional[typing.Union[int, typing.Tuple]] = None, @@ -235,6 +265,7 @@ class BaseApi(api_client.Api): self, body: typing.Union[SchemaForRequestBodyApplicationJson,SchemaForRequestBodyApplicationXWwwFormUrlencoded,], content_type: str = 'application/json', + header_params: RequestHeaderParams = frozendict.frozendict(), accept_content_types: typing.Tuple[str] = _all_accept_content_types, stream: bool = False, timeout: typing.Optional[typing.Union[int, typing.Tuple]] = None, @@ -246,9 +277,18 @@ class BaseApi(api_client.Api): api_response.body and api_response.headers will not be deserialized into schema class instances """ + self._verify_typed_dict_inputs_oapg(RequestHeaderParams, header_params) used_path = path.value _headers = HTTPHeaderDict() + for parameter in ( + request_header_x_organization, + ): + parameter_data = header_params.get(parameter.name, schemas.unset) + if parameter_data is schemas.unset: + continue + serialized_data = parameter.serialize(parameter_data) + _headers.extend(serialized_data) # TODO add cookie handling if accept_content_types: for accept_content_type in accept_content_types: @@ -303,6 +343,7 @@ class SeriesV2BatchQueryRaw(BaseApi): self, body: typing.Union[SchemaForRequestBodyApplicationJson,], content_type: typing_extensions.Literal["application/json"] = ..., + header_params: RequestHeaderParams = frozendict.frozendict(), accept_content_types: typing.Tuple[str] = _all_accept_content_types, stream: bool = False, timeout: typing.Optional[typing.Union[int, typing.Tuple]] = None, @@ -316,6 +357,7 @@ class SeriesV2BatchQueryRaw(BaseApi): self, body: typing.Union[SchemaForRequestBodyApplicationXWwwFormUrlencoded,], content_type: typing_extensions.Literal["application/x-www-form-urlencoded"], + header_params: RequestHeaderParams = frozendict.frozendict(), accept_content_types: typing.Tuple[str] = _all_accept_content_types, stream: bool = False, timeout: typing.Optional[typing.Union[int, typing.Tuple]] = None, @@ -329,6 +371,7 @@ class SeriesV2BatchQueryRaw(BaseApi): self, body: typing.Union[SchemaForRequestBodyApplicationJson,SchemaForRequestBodyApplicationXWwwFormUrlencoded,], content_type: str = ..., + header_params: RequestHeaderParams = frozendict.frozendict(), accept_content_types: typing.Tuple[str] = _all_accept_content_types, stream: bool = False, timeout: typing.Optional[typing.Union[int, typing.Tuple]] = None, @@ -344,6 +387,7 @@ class SeriesV2BatchQueryRaw(BaseApi): body: typing.Union[SchemaForRequestBodyApplicationJson,SchemaForRequestBodyApplicationXWwwFormUrlencoded,], skip_deserialization: typing_extensions.Literal[True], content_type: str = ..., + header_params: RequestHeaderParams = frozendict.frozendict(), accept_content_types: typing.Tuple[str] = _all_accept_content_types, stream: bool = False, timeout: typing.Optional[typing.Union[int, typing.Tuple]] = None, @@ -354,6 +398,7 @@ class SeriesV2BatchQueryRaw(BaseApi): self, body: typing.Union[SchemaForRequestBodyApplicationJson,SchemaForRequestBodyApplicationXWwwFormUrlencoded,], content_type: str = ..., + header_params: RequestHeaderParams = frozendict.frozendict(), accept_content_types: typing.Tuple[str] = _all_accept_content_types, stream: bool = False, timeout: typing.Optional[typing.Union[int, typing.Tuple]] = None, @@ -367,6 +412,7 @@ class SeriesV2BatchQueryRaw(BaseApi): self, body: typing.Union[SchemaForRequestBodyApplicationJson,SchemaForRequestBodyApplicationXWwwFormUrlencoded,], content_type: str = 'application/json', + header_params: RequestHeaderParams = frozendict.frozendict(), accept_content_types: typing.Tuple[str] = _all_accept_content_types, stream: bool = False, timeout: typing.Optional[typing.Union[int, typing.Tuple]] = None, @@ -374,6 +420,7 @@ class SeriesV2BatchQueryRaw(BaseApi): ): return self._series_v2_batch_query_raw_oapg( body=body, + header_params=header_params, content_type=content_type, accept_content_types=accept_content_types, stream=stream, @@ -390,6 +437,7 @@ class ApiForpost(BaseApi): self, body: typing.Union[SchemaForRequestBodyApplicationJson,], content_type: typing_extensions.Literal["application/json"] = ..., + header_params: RequestHeaderParams = frozendict.frozendict(), accept_content_types: typing.Tuple[str] = _all_accept_content_types, stream: bool = False, timeout: typing.Optional[typing.Union[int, typing.Tuple]] = None, @@ -403,6 +451,7 @@ class ApiForpost(BaseApi): self, body: typing.Union[SchemaForRequestBodyApplicationXWwwFormUrlencoded,], content_type: typing_extensions.Literal["application/x-www-form-urlencoded"], + header_params: RequestHeaderParams = frozendict.frozendict(), accept_content_types: typing.Tuple[str] = _all_accept_content_types, stream: bool = False, timeout: typing.Optional[typing.Union[int, typing.Tuple]] = None, @@ -416,6 +465,7 @@ class ApiForpost(BaseApi): self, body: typing.Union[SchemaForRequestBodyApplicationJson,SchemaForRequestBodyApplicationXWwwFormUrlencoded,], content_type: str = ..., + header_params: RequestHeaderParams = frozendict.frozendict(), accept_content_types: typing.Tuple[str] = _all_accept_content_types, stream: bool = False, timeout: typing.Optional[typing.Union[int, typing.Tuple]] = None, @@ -431,6 +481,7 @@ class ApiForpost(BaseApi): body: typing.Union[SchemaForRequestBodyApplicationJson,SchemaForRequestBodyApplicationXWwwFormUrlencoded,], skip_deserialization: typing_extensions.Literal[True], content_type: str = ..., + header_params: RequestHeaderParams = frozendict.frozendict(), accept_content_types: typing.Tuple[str] = _all_accept_content_types, stream: bool = False, timeout: typing.Optional[typing.Union[int, typing.Tuple]] = None, @@ -441,6 +492,7 @@ class ApiForpost(BaseApi): self, body: typing.Union[SchemaForRequestBodyApplicationJson,SchemaForRequestBodyApplicationXWwwFormUrlencoded,], content_type: str = ..., + header_params: RequestHeaderParams = frozendict.frozendict(), accept_content_types: typing.Tuple[str] = _all_accept_content_types, stream: bool = False, timeout: typing.Optional[typing.Union[int, typing.Tuple]] = None, @@ -454,6 +506,7 @@ class ApiForpost(BaseApi): self, body: typing.Union[SchemaForRequestBodyApplicationJson,SchemaForRequestBodyApplicationXWwwFormUrlencoded,], content_type: str = 'application/json', + header_params: RequestHeaderParams = frozendict.frozendict(), accept_content_types: typing.Tuple[str] = _all_accept_content_types, stream: bool = False, timeout: typing.Optional[typing.Union[int, typing.Tuple]] = None, @@ -461,6 +514,7 @@ class ApiForpost(BaseApi): ): return self._series_v2_batch_query_raw_oapg( body=body, + header_params=header_params, content_type=content_type, accept_content_types=accept_content_types, stream=stream, diff --git a/iot_api_client/paths/v2_series_batch_query_raw_lastvalue/post.py b/iot_api_client/paths/v2_series_batch_query_raw_lastvalue/post.py index 14a4b70..0a3333b 100644 --- a/iot_api_client/paths/v2_series_batch_query_raw_lastvalue/post.py +++ b/iot_api_client/paths/v2_series_batch_query_raw_lastvalue/post.py @@ -31,6 +31,31 @@ from . import path +# Header params +XOrganizationSchema = schemas.StrSchema +RequestRequiredHeaderParams = typing_extensions.TypedDict( + 'RequestRequiredHeaderParams', + { + } +) +RequestOptionalHeaderParams = typing_extensions.TypedDict( + 'RequestOptionalHeaderParams', + { + 'X-Organization': typing.Union[XOrganizationSchema, str, ], + }, + total=False +) + + +class RequestHeaderParams(RequestRequiredHeaderParams, RequestOptionalHeaderParams): + pass + + +request_header_x_organization = api_client.HeaderParameter( + name="X-Organization", + style=api_client.ParameterStyle.SIMPLE, + schema=XOrganizationSchema, +) # body param SchemaForRequestBodyApplicationJson = BatchLastValueRequestsMediaV1 SchemaForRequestBodyApplicationXWwwFormUrlencoded = BatchLastValueRequestsMediaV1 @@ -160,6 +185,7 @@ def _series_v2_batch_query_raw_last_value_oapg( self, body: typing.Union[SchemaForRequestBodyApplicationJson,], content_type: typing_extensions.Literal["application/json"] = ..., + header_params: RequestHeaderParams = frozendict.frozendict(), accept_content_types: typing.Tuple[str] = _all_accept_content_types, stream: bool = False, timeout: typing.Optional[typing.Union[int, typing.Tuple]] = None, @@ -173,6 +199,7 @@ def _series_v2_batch_query_raw_last_value_oapg( self, body: typing.Union[SchemaForRequestBodyApplicationXWwwFormUrlencoded,], content_type: typing_extensions.Literal["application/x-www-form-urlencoded"], + header_params: RequestHeaderParams = frozendict.frozendict(), accept_content_types: typing.Tuple[str] = _all_accept_content_types, stream: bool = False, timeout: typing.Optional[typing.Union[int, typing.Tuple]] = None, @@ -186,6 +213,7 @@ def _series_v2_batch_query_raw_last_value_oapg( self, body: typing.Union[SchemaForRequestBodyApplicationJson,SchemaForRequestBodyApplicationXWwwFormUrlencoded,], content_type: str = ..., + header_params: RequestHeaderParams = frozendict.frozendict(), accept_content_types: typing.Tuple[str] = _all_accept_content_types, stream: bool = False, timeout: typing.Optional[typing.Union[int, typing.Tuple]] = None, @@ -201,6 +229,7 @@ def _series_v2_batch_query_raw_last_value_oapg( body: typing.Union[SchemaForRequestBodyApplicationJson,SchemaForRequestBodyApplicationXWwwFormUrlencoded,], skip_deserialization: typing_extensions.Literal[True], content_type: str = ..., + header_params: RequestHeaderParams = frozendict.frozendict(), accept_content_types: typing.Tuple[str] = _all_accept_content_types, stream: bool = False, timeout: typing.Optional[typing.Union[int, typing.Tuple]] = None, @@ -211,6 +240,7 @@ def _series_v2_batch_query_raw_last_value_oapg( self, body: typing.Union[SchemaForRequestBodyApplicationJson,SchemaForRequestBodyApplicationXWwwFormUrlencoded,], content_type: str = ..., + header_params: RequestHeaderParams = frozendict.frozendict(), accept_content_types: typing.Tuple[str] = _all_accept_content_types, stream: bool = False, timeout: typing.Optional[typing.Union[int, typing.Tuple]] = None, @@ -224,6 +254,7 @@ def _series_v2_batch_query_raw_last_value_oapg( self, body: typing.Union[SchemaForRequestBodyApplicationJson,SchemaForRequestBodyApplicationXWwwFormUrlencoded,], content_type: str = 'application/json', + header_params: RequestHeaderParams = frozendict.frozendict(), accept_content_types: typing.Tuple[str] = _all_accept_content_types, stream: bool = False, timeout: typing.Optional[typing.Union[int, typing.Tuple]] = None, @@ -235,9 +266,18 @@ def _series_v2_batch_query_raw_last_value_oapg( api_response.body and api_response.headers will not be deserialized into schema class instances """ + self._verify_typed_dict_inputs_oapg(RequestHeaderParams, header_params) used_path = path.value _headers = HTTPHeaderDict() + for parameter in ( + request_header_x_organization, + ): + parameter_data = header_params.get(parameter.name, schemas.unset) + if parameter_data is schemas.unset: + continue + serialized_data = parameter.serialize(parameter_data) + _headers.extend(serialized_data) # TODO add cookie handling if accept_content_types: for accept_content_type in accept_content_types: @@ -292,6 +332,7 @@ def series_v2_batch_query_raw_last_value( self, body: typing.Union[SchemaForRequestBodyApplicationJson,], content_type: typing_extensions.Literal["application/json"] = ..., + header_params: RequestHeaderParams = frozendict.frozendict(), accept_content_types: typing.Tuple[str] = _all_accept_content_types, stream: bool = False, timeout: typing.Optional[typing.Union[int, typing.Tuple]] = None, @@ -305,6 +346,7 @@ def series_v2_batch_query_raw_last_value( self, body: typing.Union[SchemaForRequestBodyApplicationXWwwFormUrlencoded,], content_type: typing_extensions.Literal["application/x-www-form-urlencoded"], + header_params: RequestHeaderParams = frozendict.frozendict(), accept_content_types: typing.Tuple[str] = _all_accept_content_types, stream: bool = False, timeout: typing.Optional[typing.Union[int, typing.Tuple]] = None, @@ -318,6 +360,7 @@ def series_v2_batch_query_raw_last_value( self, body: typing.Union[SchemaForRequestBodyApplicationJson,SchemaForRequestBodyApplicationXWwwFormUrlencoded,], content_type: str = ..., + header_params: RequestHeaderParams = frozendict.frozendict(), accept_content_types: typing.Tuple[str] = _all_accept_content_types, stream: bool = False, timeout: typing.Optional[typing.Union[int, typing.Tuple]] = None, @@ -333,6 +376,7 @@ def series_v2_batch_query_raw_last_value( body: typing.Union[SchemaForRequestBodyApplicationJson,SchemaForRequestBodyApplicationXWwwFormUrlencoded,], skip_deserialization: typing_extensions.Literal[True], content_type: str = ..., + header_params: RequestHeaderParams = frozendict.frozendict(), accept_content_types: typing.Tuple[str] = _all_accept_content_types, stream: bool = False, timeout: typing.Optional[typing.Union[int, typing.Tuple]] = None, @@ -343,6 +387,7 @@ def series_v2_batch_query_raw_last_value( self, body: typing.Union[SchemaForRequestBodyApplicationJson,SchemaForRequestBodyApplicationXWwwFormUrlencoded,], content_type: str = ..., + header_params: RequestHeaderParams = frozendict.frozendict(), accept_content_types: typing.Tuple[str] = _all_accept_content_types, stream: bool = False, timeout: typing.Optional[typing.Union[int, typing.Tuple]] = None, @@ -356,6 +401,7 @@ def series_v2_batch_query_raw_last_value( self, body: typing.Union[SchemaForRequestBodyApplicationJson,SchemaForRequestBodyApplicationXWwwFormUrlencoded,], content_type: str = 'application/json', + header_params: RequestHeaderParams = frozendict.frozendict(), accept_content_types: typing.Tuple[str] = _all_accept_content_types, stream: bool = False, timeout: typing.Optional[typing.Union[int, typing.Tuple]] = None, @@ -363,6 +409,7 @@ def series_v2_batch_query_raw_last_value( ): return self._series_v2_batch_query_raw_last_value_oapg( body=body, + header_params=header_params, content_type=content_type, accept_content_types=accept_content_types, stream=stream, @@ -379,6 +426,7 @@ def post( self, body: typing.Union[SchemaForRequestBodyApplicationJson,], content_type: typing_extensions.Literal["application/json"] = ..., + header_params: RequestHeaderParams = frozendict.frozendict(), accept_content_types: typing.Tuple[str] = _all_accept_content_types, stream: bool = False, timeout: typing.Optional[typing.Union[int, typing.Tuple]] = None, @@ -392,6 +440,7 @@ def post( self, body: typing.Union[SchemaForRequestBodyApplicationXWwwFormUrlencoded,], content_type: typing_extensions.Literal["application/x-www-form-urlencoded"], + header_params: RequestHeaderParams = frozendict.frozendict(), accept_content_types: typing.Tuple[str] = _all_accept_content_types, stream: bool = False, timeout: typing.Optional[typing.Union[int, typing.Tuple]] = None, @@ -405,6 +454,7 @@ def post( self, body: typing.Union[SchemaForRequestBodyApplicationJson,SchemaForRequestBodyApplicationXWwwFormUrlencoded,], content_type: str = ..., + header_params: RequestHeaderParams = frozendict.frozendict(), accept_content_types: typing.Tuple[str] = _all_accept_content_types, stream: bool = False, timeout: typing.Optional[typing.Union[int, typing.Tuple]] = None, @@ -420,6 +470,7 @@ def post( body: typing.Union[SchemaForRequestBodyApplicationJson,SchemaForRequestBodyApplicationXWwwFormUrlencoded,], skip_deserialization: typing_extensions.Literal[True], content_type: str = ..., + header_params: RequestHeaderParams = frozendict.frozendict(), accept_content_types: typing.Tuple[str] = _all_accept_content_types, stream: bool = False, timeout: typing.Optional[typing.Union[int, typing.Tuple]] = None, @@ -430,6 +481,7 @@ def post( self, body: typing.Union[SchemaForRequestBodyApplicationJson,SchemaForRequestBodyApplicationXWwwFormUrlencoded,], content_type: str = ..., + header_params: RequestHeaderParams = frozendict.frozendict(), accept_content_types: typing.Tuple[str] = _all_accept_content_types, stream: bool = False, timeout: typing.Optional[typing.Union[int, typing.Tuple]] = None, @@ -443,6 +495,7 @@ def post( self, body: typing.Union[SchemaForRequestBodyApplicationJson,SchemaForRequestBodyApplicationXWwwFormUrlencoded,], content_type: str = 'application/json', + header_params: RequestHeaderParams = frozendict.frozendict(), accept_content_types: typing.Tuple[str] = _all_accept_content_types, stream: bool = False, timeout: typing.Optional[typing.Union[int, typing.Tuple]] = None, @@ -450,6 +503,7 @@ def post( ): return self._series_v2_batch_query_raw_last_value_oapg( body=body, + header_params=header_params, content_type=content_type, accept_content_types=accept_content_types, stream=stream, diff --git a/iot_api_client/paths/v2_series_batch_query_raw_lastvalue/post.pyi b/iot_api_client/paths/v2_series_batch_query_raw_lastvalue/post.pyi index 97222fe..e760f2c 100644 --- a/iot_api_client/paths/v2_series_batch_query_raw_lastvalue/post.pyi +++ b/iot_api_client/paths/v2_series_batch_query_raw_lastvalue/post.pyi @@ -29,6 +29,31 @@ from iot_api_client.model.batch_last_value_requests_media_v1 import BatchLastVal from iot_api_client.model.arduino_series_raw_batch_lastvalue import ArduinoSeriesRawBatchLastvalue from iot_api_client.model.error import Error +# Header params +XOrganizationSchema = schemas.StrSchema +RequestRequiredHeaderParams = typing_extensions.TypedDict( + 'RequestRequiredHeaderParams', + { + } +) +RequestOptionalHeaderParams = typing_extensions.TypedDict( + 'RequestOptionalHeaderParams', + { + 'X-Organization': typing.Union[XOrganizationSchema, str, ], + }, + total=False +) + + +class RequestHeaderParams(RequestRequiredHeaderParams, RequestOptionalHeaderParams): + pass + + +request_header_x_organization = api_client.HeaderParameter( + name="X-Organization", + style=api_client.ParameterStyle.SIMPLE, + schema=XOrganizationSchema, +) # body param SchemaForRequestBodyApplicationJson = BatchLastValueRequestsMediaV1 SchemaForRequestBodyApplicationXWwwFormUrlencoded = BatchLastValueRequestsMediaV1 @@ -148,6 +173,7 @@ class BaseApi(api_client.Api): self, body: typing.Union[SchemaForRequestBodyApplicationJson,], content_type: typing_extensions.Literal["application/json"] = ..., + header_params: RequestHeaderParams = frozendict.frozendict(), accept_content_types: typing.Tuple[str] = _all_accept_content_types, stream: bool = False, timeout: typing.Optional[typing.Union[int, typing.Tuple]] = None, @@ -161,6 +187,7 @@ class BaseApi(api_client.Api): self, body: typing.Union[SchemaForRequestBodyApplicationXWwwFormUrlencoded,], content_type: typing_extensions.Literal["application/x-www-form-urlencoded"], + header_params: RequestHeaderParams = frozendict.frozendict(), accept_content_types: typing.Tuple[str] = _all_accept_content_types, stream: bool = False, timeout: typing.Optional[typing.Union[int, typing.Tuple]] = None, @@ -174,6 +201,7 @@ class BaseApi(api_client.Api): self, body: typing.Union[SchemaForRequestBodyApplicationJson,SchemaForRequestBodyApplicationXWwwFormUrlencoded,], content_type: str = ..., + header_params: RequestHeaderParams = frozendict.frozendict(), accept_content_types: typing.Tuple[str] = _all_accept_content_types, stream: bool = False, timeout: typing.Optional[typing.Union[int, typing.Tuple]] = None, @@ -189,6 +217,7 @@ class BaseApi(api_client.Api): body: typing.Union[SchemaForRequestBodyApplicationJson,SchemaForRequestBodyApplicationXWwwFormUrlencoded,], skip_deserialization: typing_extensions.Literal[True], content_type: str = ..., + header_params: RequestHeaderParams = frozendict.frozendict(), accept_content_types: typing.Tuple[str] = _all_accept_content_types, stream: bool = False, timeout: typing.Optional[typing.Union[int, typing.Tuple]] = None, @@ -199,6 +228,7 @@ class BaseApi(api_client.Api): self, body: typing.Union[SchemaForRequestBodyApplicationJson,SchemaForRequestBodyApplicationXWwwFormUrlencoded,], content_type: str = ..., + header_params: RequestHeaderParams = frozendict.frozendict(), accept_content_types: typing.Tuple[str] = _all_accept_content_types, stream: bool = False, timeout: typing.Optional[typing.Union[int, typing.Tuple]] = None, @@ -212,6 +242,7 @@ class BaseApi(api_client.Api): self, body: typing.Union[SchemaForRequestBodyApplicationJson,SchemaForRequestBodyApplicationXWwwFormUrlencoded,], content_type: str = 'application/json', + header_params: RequestHeaderParams = frozendict.frozendict(), accept_content_types: typing.Tuple[str] = _all_accept_content_types, stream: bool = False, timeout: typing.Optional[typing.Union[int, typing.Tuple]] = None, @@ -223,9 +254,18 @@ class BaseApi(api_client.Api): api_response.body and api_response.headers will not be deserialized into schema class instances """ + self._verify_typed_dict_inputs_oapg(RequestHeaderParams, header_params) used_path = path.value _headers = HTTPHeaderDict() + for parameter in ( + request_header_x_organization, + ): + parameter_data = header_params.get(parameter.name, schemas.unset) + if parameter_data is schemas.unset: + continue + serialized_data = parameter.serialize(parameter_data) + _headers.extend(serialized_data) # TODO add cookie handling if accept_content_types: for accept_content_type in accept_content_types: @@ -280,6 +320,7 @@ class SeriesV2BatchQueryRawLastValue(BaseApi): self, body: typing.Union[SchemaForRequestBodyApplicationJson,], content_type: typing_extensions.Literal["application/json"] = ..., + header_params: RequestHeaderParams = frozendict.frozendict(), accept_content_types: typing.Tuple[str] = _all_accept_content_types, stream: bool = False, timeout: typing.Optional[typing.Union[int, typing.Tuple]] = None, @@ -293,6 +334,7 @@ class SeriesV2BatchQueryRawLastValue(BaseApi): self, body: typing.Union[SchemaForRequestBodyApplicationXWwwFormUrlencoded,], content_type: typing_extensions.Literal["application/x-www-form-urlencoded"], + header_params: RequestHeaderParams = frozendict.frozendict(), accept_content_types: typing.Tuple[str] = _all_accept_content_types, stream: bool = False, timeout: typing.Optional[typing.Union[int, typing.Tuple]] = None, @@ -306,6 +348,7 @@ class SeriesV2BatchQueryRawLastValue(BaseApi): self, body: typing.Union[SchemaForRequestBodyApplicationJson,SchemaForRequestBodyApplicationXWwwFormUrlencoded,], content_type: str = ..., + header_params: RequestHeaderParams = frozendict.frozendict(), accept_content_types: typing.Tuple[str] = _all_accept_content_types, stream: bool = False, timeout: typing.Optional[typing.Union[int, typing.Tuple]] = None, @@ -321,6 +364,7 @@ class SeriesV2BatchQueryRawLastValue(BaseApi): body: typing.Union[SchemaForRequestBodyApplicationJson,SchemaForRequestBodyApplicationXWwwFormUrlencoded,], skip_deserialization: typing_extensions.Literal[True], content_type: str = ..., + header_params: RequestHeaderParams = frozendict.frozendict(), accept_content_types: typing.Tuple[str] = _all_accept_content_types, stream: bool = False, timeout: typing.Optional[typing.Union[int, typing.Tuple]] = None, @@ -331,6 +375,7 @@ class SeriesV2BatchQueryRawLastValue(BaseApi): self, body: typing.Union[SchemaForRequestBodyApplicationJson,SchemaForRequestBodyApplicationXWwwFormUrlencoded,], content_type: str = ..., + header_params: RequestHeaderParams = frozendict.frozendict(), accept_content_types: typing.Tuple[str] = _all_accept_content_types, stream: bool = False, timeout: typing.Optional[typing.Union[int, typing.Tuple]] = None, @@ -344,6 +389,7 @@ class SeriesV2BatchQueryRawLastValue(BaseApi): self, body: typing.Union[SchemaForRequestBodyApplicationJson,SchemaForRequestBodyApplicationXWwwFormUrlencoded,], content_type: str = 'application/json', + header_params: RequestHeaderParams = frozendict.frozendict(), accept_content_types: typing.Tuple[str] = _all_accept_content_types, stream: bool = False, timeout: typing.Optional[typing.Union[int, typing.Tuple]] = None, @@ -351,6 +397,7 @@ class SeriesV2BatchQueryRawLastValue(BaseApi): ): return self._series_v2_batch_query_raw_last_value_oapg( body=body, + header_params=header_params, content_type=content_type, accept_content_types=accept_content_types, stream=stream, @@ -367,6 +414,7 @@ class ApiForpost(BaseApi): self, body: typing.Union[SchemaForRequestBodyApplicationJson,], content_type: typing_extensions.Literal["application/json"] = ..., + header_params: RequestHeaderParams = frozendict.frozendict(), accept_content_types: typing.Tuple[str] = _all_accept_content_types, stream: bool = False, timeout: typing.Optional[typing.Union[int, typing.Tuple]] = None, @@ -380,6 +428,7 @@ class ApiForpost(BaseApi): self, body: typing.Union[SchemaForRequestBodyApplicationXWwwFormUrlencoded,], content_type: typing_extensions.Literal["application/x-www-form-urlencoded"], + header_params: RequestHeaderParams = frozendict.frozendict(), accept_content_types: typing.Tuple[str] = _all_accept_content_types, stream: bool = False, timeout: typing.Optional[typing.Union[int, typing.Tuple]] = None, @@ -393,6 +442,7 @@ class ApiForpost(BaseApi): self, body: typing.Union[SchemaForRequestBodyApplicationJson,SchemaForRequestBodyApplicationXWwwFormUrlencoded,], content_type: str = ..., + header_params: RequestHeaderParams = frozendict.frozendict(), accept_content_types: typing.Tuple[str] = _all_accept_content_types, stream: bool = False, timeout: typing.Optional[typing.Union[int, typing.Tuple]] = None, @@ -408,6 +458,7 @@ class ApiForpost(BaseApi): body: typing.Union[SchemaForRequestBodyApplicationJson,SchemaForRequestBodyApplicationXWwwFormUrlencoded,], skip_deserialization: typing_extensions.Literal[True], content_type: str = ..., + header_params: RequestHeaderParams = frozendict.frozendict(), accept_content_types: typing.Tuple[str] = _all_accept_content_types, stream: bool = False, timeout: typing.Optional[typing.Union[int, typing.Tuple]] = None, @@ -418,6 +469,7 @@ class ApiForpost(BaseApi): self, body: typing.Union[SchemaForRequestBodyApplicationJson,SchemaForRequestBodyApplicationXWwwFormUrlencoded,], content_type: str = ..., + header_params: RequestHeaderParams = frozendict.frozendict(), accept_content_types: typing.Tuple[str] = _all_accept_content_types, stream: bool = False, timeout: typing.Optional[typing.Union[int, typing.Tuple]] = None, @@ -431,6 +483,7 @@ class ApiForpost(BaseApi): self, body: typing.Union[SchemaForRequestBodyApplicationJson,SchemaForRequestBodyApplicationXWwwFormUrlencoded,], content_type: str = 'application/json', + header_params: RequestHeaderParams = frozendict.frozendict(), accept_content_types: typing.Tuple[str] = _all_accept_content_types, stream: bool = False, timeout: typing.Optional[typing.Union[int, typing.Tuple]] = None, @@ -438,6 +491,7 @@ class ApiForpost(BaseApi): ): return self._series_v2_batch_query_raw_last_value_oapg( body=body, + header_params=header_params, content_type=content_type, accept_content_types=accept_content_types, stream=stream, diff --git a/iot_api_client/paths/v2_series_batch_query_sampling/__init__.py b/iot_api_client/paths/v2_series_batch_query_sampling/__init__.py new file mode 100644 index 0000000..1219ccc --- /dev/null +++ b/iot_api_client/paths/v2_series_batch_query_sampling/__init__.py @@ -0,0 +1,7 @@ +# do not import all endpoints into this module because that uses a lot of memory and stack frames +# if you need the ability to import all endpoints from this module, import them with +# from iot_api_client.paths.v2_series_batch_query_sampling import Api + +from iot_api_client.paths import PathValues + +path = PathValues.V2_SERIES_BATCH_QUERY_SAMPLING \ No newline at end of file diff --git a/iot_api_client/paths/v2_series_batch_query_sampling/post.py b/iot_api_client/paths/v2_series_batch_query_sampling/post.py new file mode 100644 index 0000000..334d976 --- /dev/null +++ b/iot_api_client/paths/v2_series_batch_query_sampling/post.py @@ -0,0 +1,538 @@ +# coding: utf-8 + +""" + + + Generated by: https://openapi-generator.tech +""" + +from dataclasses import dataclass +import typing_extensions +import urllib3 +from urllib3._collections import HTTPHeaderDict + +from iot_api_client import api_client, exceptions +from datetime import date, datetime # noqa: F401 +import decimal # noqa: F401 +import functools # noqa: F401 +import io # noqa: F401 +import re # noqa: F401 +import typing # noqa: F401 +import typing_extensions # noqa: F401 +import uuid # noqa: F401 + +import frozendict # noqa: F401 + +from iot_api_client import schemas # noqa: F401 + +from iot_api_client.model.batch_query_sampled_requests_media_v1 import BatchQuerySampledRequestsMediaV1 +from iot_api_client.model.error import Error +from iot_api_client.model.arduino_series_batch_sampled import ArduinoSeriesBatchSampled + +from . import path + +# Header params +XOrganizationSchema = schemas.StrSchema +RequestRequiredHeaderParams = typing_extensions.TypedDict( + 'RequestRequiredHeaderParams', + { + } +) +RequestOptionalHeaderParams = typing_extensions.TypedDict( + 'RequestOptionalHeaderParams', + { + 'X-Organization': typing.Union[XOrganizationSchema, str, ], + }, + total=False +) + + +class RequestHeaderParams(RequestRequiredHeaderParams, RequestOptionalHeaderParams): + pass + + +request_header_x_organization = api_client.HeaderParameter( + name="X-Organization", + style=api_client.ParameterStyle.SIMPLE, + schema=XOrganizationSchema, +) +# body param +SchemaForRequestBodyApplicationJson = BatchQuerySampledRequestsMediaV1 +SchemaForRequestBodyApplicationXWwwFormUrlencoded = BatchQuerySampledRequestsMediaV1 + + +request_body_batch_query_sampled_requests_media_v1 = api_client.RequestBody( + content={ + 'application/json': api_client.MediaType( + schema=SchemaForRequestBodyApplicationJson), + 'application/x-www-form-urlencoded': api_client.MediaType( + schema=SchemaForRequestBodyApplicationXWwwFormUrlencoded), + }, + required=True, +) +_auth = [ + 'oauth2', +] +SchemaFor200ResponseBodyApplicationVndArduinoSeriesBatchSampledjson = ArduinoSeriesBatchSampled +SchemaFor200ResponseBodyApplicationVndGoaErrorjson = ArduinoSeriesBatchSampled + + +@dataclass +class ApiResponseFor200(api_client.ApiResponse): + response: urllib3.HTTPResponse + body: typing.Union[ + SchemaFor200ResponseBodyApplicationVndArduinoSeriesBatchSampledjson, + SchemaFor200ResponseBodyApplicationVndGoaErrorjson, + ] + headers: schemas.Unset = schemas.unset + + +_response_for_200 = api_client.OpenApiResponse( + response_cls=ApiResponseFor200, + content={ + 'application/vnd.arduino.series.batch.sampled+json': api_client.MediaType( + schema=SchemaFor200ResponseBodyApplicationVndArduinoSeriesBatchSampledjson), + 'application/vnd.goa.error+json': api_client.MediaType( + schema=SchemaFor200ResponseBodyApplicationVndGoaErrorjson), + }, +) +SchemaFor400ResponseBodyApplicationVndArduinoSeriesBatchSampledjson = Error +SchemaFor400ResponseBodyApplicationVndGoaErrorjson = Error + + +@dataclass +class ApiResponseFor400(api_client.ApiResponse): + response: urllib3.HTTPResponse + body: typing.Union[ + SchemaFor400ResponseBodyApplicationVndArduinoSeriesBatchSampledjson, + SchemaFor400ResponseBodyApplicationVndGoaErrorjson, + ] + headers: schemas.Unset = schemas.unset + + +_response_for_400 = api_client.OpenApiResponse( + response_cls=ApiResponseFor400, + content={ + 'application/vnd.arduino.series.batch.sampled+json': api_client.MediaType( + schema=SchemaFor400ResponseBodyApplicationVndArduinoSeriesBatchSampledjson), + 'application/vnd.goa.error+json': api_client.MediaType( + schema=SchemaFor400ResponseBodyApplicationVndGoaErrorjson), + }, +) +SchemaFor401ResponseBodyApplicationVndArduinoSeriesBatchSampledjson = Error +SchemaFor401ResponseBodyApplicationVndGoaErrorjson = Error + + +@dataclass +class ApiResponseFor401(api_client.ApiResponse): + response: urllib3.HTTPResponse + body: typing.Union[ + SchemaFor401ResponseBodyApplicationVndArduinoSeriesBatchSampledjson, + SchemaFor401ResponseBodyApplicationVndGoaErrorjson, + ] + headers: schemas.Unset = schemas.unset + + +_response_for_401 = api_client.OpenApiResponse( + response_cls=ApiResponseFor401, + content={ + 'application/vnd.arduino.series.batch.sampled+json': api_client.MediaType( + schema=SchemaFor401ResponseBodyApplicationVndArduinoSeriesBatchSampledjson), + 'application/vnd.goa.error+json': api_client.MediaType( + schema=SchemaFor401ResponseBodyApplicationVndGoaErrorjson), + }, +) + + +@dataclass +class ApiResponseFor404(api_client.ApiResponse): + response: urllib3.HTTPResponse + body: schemas.Unset = schemas.unset + headers: schemas.Unset = schemas.unset + + +_response_for_404 = api_client.OpenApiResponse( + response_cls=ApiResponseFor404, +) + + +@dataclass +class ApiResponseFor501(api_client.ApiResponse): + response: urllib3.HTTPResponse + body: schemas.Unset = schemas.unset + headers: schemas.Unset = schemas.unset + + +_response_for_501 = api_client.OpenApiResponse( + response_cls=ApiResponseFor501, +) +SchemaFor503ResponseBodyApplicationVndArduinoSeriesBatchSampledjson = Error +SchemaFor503ResponseBodyApplicationVndGoaErrorjson = Error + + +@dataclass +class ApiResponseFor503(api_client.ApiResponse): + response: urllib3.HTTPResponse + body: typing.Union[ + SchemaFor503ResponseBodyApplicationVndArduinoSeriesBatchSampledjson, + SchemaFor503ResponseBodyApplicationVndGoaErrorjson, + ] + headers: schemas.Unset = schemas.unset + + +_response_for_503 = api_client.OpenApiResponse( + response_cls=ApiResponseFor503, + content={ + 'application/vnd.arduino.series.batch.sampled+json': api_client.MediaType( + schema=SchemaFor503ResponseBodyApplicationVndArduinoSeriesBatchSampledjson), + 'application/vnd.goa.error+json': api_client.MediaType( + schema=SchemaFor503ResponseBodyApplicationVndGoaErrorjson), + }, +) +_status_code_to_response = { + '200': _response_for_200, + '400': _response_for_400, + '401': _response_for_401, + '404': _response_for_404, + '501': _response_for_501, + '503': _response_for_503, +} +_all_accept_content_types = ( + 'application/vnd.arduino.series.batch.sampled+json', + 'application/vnd.goa.error+json', +) + + +class BaseApi(api_client.Api): + @typing.overload + def _series_v2_batch_query_sampling_oapg( + self, + body: typing.Union[SchemaForRequestBodyApplicationJson,], + content_type: typing_extensions.Literal["application/json"] = ..., + header_params: RequestHeaderParams = frozendict.frozendict(), + accept_content_types: typing.Tuple[str] = _all_accept_content_types, + stream: bool = False, + timeout: typing.Optional[typing.Union[int, typing.Tuple]] = None, + skip_deserialization: typing_extensions.Literal[False] = ..., + ) -> typing.Union[ + ApiResponseFor200, + ]: ... + + @typing.overload + def _series_v2_batch_query_sampling_oapg( + self, + body: typing.Union[SchemaForRequestBodyApplicationXWwwFormUrlencoded,], + content_type: typing_extensions.Literal["application/x-www-form-urlencoded"], + header_params: RequestHeaderParams = frozendict.frozendict(), + accept_content_types: typing.Tuple[str] = _all_accept_content_types, + stream: bool = False, + timeout: typing.Optional[typing.Union[int, typing.Tuple]] = None, + skip_deserialization: typing_extensions.Literal[False] = ..., + ) -> typing.Union[ + ApiResponseFor200, + ]: ... + + @typing.overload + def _series_v2_batch_query_sampling_oapg( + self, + body: typing.Union[SchemaForRequestBodyApplicationJson,SchemaForRequestBodyApplicationXWwwFormUrlencoded,], + content_type: str = ..., + header_params: RequestHeaderParams = frozendict.frozendict(), + accept_content_types: typing.Tuple[str] = _all_accept_content_types, + stream: bool = False, + timeout: typing.Optional[typing.Union[int, typing.Tuple]] = None, + skip_deserialization: typing_extensions.Literal[False] = ..., + ) -> typing.Union[ + ApiResponseFor200, + ]: ... + + + @typing.overload + def _series_v2_batch_query_sampling_oapg( + self, + body: typing.Union[SchemaForRequestBodyApplicationJson,SchemaForRequestBodyApplicationXWwwFormUrlencoded,], + skip_deserialization: typing_extensions.Literal[True], + content_type: str = ..., + header_params: RequestHeaderParams = frozendict.frozendict(), + accept_content_types: typing.Tuple[str] = _all_accept_content_types, + stream: bool = False, + timeout: typing.Optional[typing.Union[int, typing.Tuple]] = None, + ) -> api_client.ApiResponseWithoutDeserialization: ... + + @typing.overload + def _series_v2_batch_query_sampling_oapg( + self, + body: typing.Union[SchemaForRequestBodyApplicationJson,SchemaForRequestBodyApplicationXWwwFormUrlencoded,], + content_type: str = ..., + header_params: RequestHeaderParams = frozendict.frozendict(), + accept_content_types: typing.Tuple[str] = _all_accept_content_types, + stream: bool = False, + timeout: typing.Optional[typing.Union[int, typing.Tuple]] = None, + skip_deserialization: bool = ..., + ) -> typing.Union[ + ApiResponseFor200, + api_client.ApiResponseWithoutDeserialization, + ]: ... + + def _series_v2_batch_query_sampling_oapg( + self, + body: typing.Union[SchemaForRequestBodyApplicationJson,SchemaForRequestBodyApplicationXWwwFormUrlencoded,], + content_type: str = 'application/json', + header_params: RequestHeaderParams = frozendict.frozendict(), + accept_content_types: typing.Tuple[str] = _all_accept_content_types, + stream: bool = False, + timeout: typing.Optional[typing.Union[int, typing.Tuple]] = None, + skip_deserialization: bool = False, + ): + """ + batch_query_sampling series_v2 + :param skip_deserialization: If true then api_response.response will be set but + api_response.body and api_response.headers will not be deserialized into schema + class instances + """ + self._verify_typed_dict_inputs_oapg(RequestHeaderParams, header_params) + used_path = path.value + + _headers = HTTPHeaderDict() + for parameter in ( + request_header_x_organization, + ): + parameter_data = header_params.get(parameter.name, schemas.unset) + if parameter_data is schemas.unset: + continue + serialized_data = parameter.serialize(parameter_data) + _headers.extend(serialized_data) + # TODO add cookie handling + if accept_content_types: + for accept_content_type in accept_content_types: + _headers.add('Accept', accept_content_type) + + if body is schemas.unset: + raise exceptions.ApiValueError( + 'The required body parameter has an invalid value of: unset. Set a valid value instead') + _fields = None + _body = None + serialized_data = request_body_batch_query_sampled_requests_media_v1.serialize(body, content_type) + _headers.add('Content-Type', content_type) + if 'fields' in serialized_data: + _fields = serialized_data['fields'] + elif 'body' in serialized_data: + _body = serialized_data['body'] + response = self.api_client.call_api( + resource_path=used_path, + method='post'.upper(), + headers=_headers, + fields=_fields, + body=_body, + auth_settings=_auth, + stream=stream, + timeout=timeout, + ) + + if skip_deserialization: + api_response = api_client.ApiResponseWithoutDeserialization(response=response) + else: + response_for_status = _status_code_to_response.get(str(response.status)) + if response_for_status: + api_response = response_for_status.deserialize(response, self.api_client.configuration) + else: + api_response = api_client.ApiResponseWithoutDeserialization(response=response) + + if not 200 <= response.status <= 299: + raise exceptions.ApiException( + status=response.status, + reason=response.reason, + api_response=api_response + ) + + return api_response + + +class SeriesV2BatchQuerySampling(BaseApi): + # this class is used by api classes that refer to endpoints with operationId fn names + + @typing.overload + def series_v2_batch_query_sampling( + self, + body: typing.Union[SchemaForRequestBodyApplicationJson,], + content_type: typing_extensions.Literal["application/json"] = ..., + header_params: RequestHeaderParams = frozendict.frozendict(), + accept_content_types: typing.Tuple[str] = _all_accept_content_types, + stream: bool = False, + timeout: typing.Optional[typing.Union[int, typing.Tuple]] = None, + skip_deserialization: typing_extensions.Literal[False] = ..., + ) -> typing.Union[ + ApiResponseFor200, + ]: ... + + @typing.overload + def series_v2_batch_query_sampling( + self, + body: typing.Union[SchemaForRequestBodyApplicationXWwwFormUrlencoded,], + content_type: typing_extensions.Literal["application/x-www-form-urlencoded"], + header_params: RequestHeaderParams = frozendict.frozendict(), + accept_content_types: typing.Tuple[str] = _all_accept_content_types, + stream: bool = False, + timeout: typing.Optional[typing.Union[int, typing.Tuple]] = None, + skip_deserialization: typing_extensions.Literal[False] = ..., + ) -> typing.Union[ + ApiResponseFor200, + ]: ... + + @typing.overload + def series_v2_batch_query_sampling( + self, + body: typing.Union[SchemaForRequestBodyApplicationJson,SchemaForRequestBodyApplicationXWwwFormUrlencoded,], + content_type: str = ..., + header_params: RequestHeaderParams = frozendict.frozendict(), + accept_content_types: typing.Tuple[str] = _all_accept_content_types, + stream: bool = False, + timeout: typing.Optional[typing.Union[int, typing.Tuple]] = None, + skip_deserialization: typing_extensions.Literal[False] = ..., + ) -> typing.Union[ + ApiResponseFor200, + ]: ... + + + @typing.overload + def series_v2_batch_query_sampling( + self, + body: typing.Union[SchemaForRequestBodyApplicationJson,SchemaForRequestBodyApplicationXWwwFormUrlencoded,], + skip_deserialization: typing_extensions.Literal[True], + content_type: str = ..., + header_params: RequestHeaderParams = frozendict.frozendict(), + accept_content_types: typing.Tuple[str] = _all_accept_content_types, + stream: bool = False, + timeout: typing.Optional[typing.Union[int, typing.Tuple]] = None, + ) -> api_client.ApiResponseWithoutDeserialization: ... + + @typing.overload + def series_v2_batch_query_sampling( + self, + body: typing.Union[SchemaForRequestBodyApplicationJson,SchemaForRequestBodyApplicationXWwwFormUrlencoded,], + content_type: str = ..., + header_params: RequestHeaderParams = frozendict.frozendict(), + accept_content_types: typing.Tuple[str] = _all_accept_content_types, + stream: bool = False, + timeout: typing.Optional[typing.Union[int, typing.Tuple]] = None, + skip_deserialization: bool = ..., + ) -> typing.Union[ + ApiResponseFor200, + api_client.ApiResponseWithoutDeserialization, + ]: ... + + def series_v2_batch_query_sampling( + self, + body: typing.Union[SchemaForRequestBodyApplicationJson,SchemaForRequestBodyApplicationXWwwFormUrlencoded,], + content_type: str = 'application/json', + header_params: RequestHeaderParams = frozendict.frozendict(), + accept_content_types: typing.Tuple[str] = _all_accept_content_types, + stream: bool = False, + timeout: typing.Optional[typing.Union[int, typing.Tuple]] = None, + skip_deserialization: bool = False, + ): + return self._series_v2_batch_query_sampling_oapg( + body=body, + header_params=header_params, + content_type=content_type, + accept_content_types=accept_content_types, + stream=stream, + timeout=timeout, + skip_deserialization=skip_deserialization + ) + + +class ApiForpost(BaseApi): + # this class is used by api classes that refer to endpoints by path and http method names + + @typing.overload + def post( + self, + body: typing.Union[SchemaForRequestBodyApplicationJson,], + content_type: typing_extensions.Literal["application/json"] = ..., + header_params: RequestHeaderParams = frozendict.frozendict(), + accept_content_types: typing.Tuple[str] = _all_accept_content_types, + stream: bool = False, + timeout: typing.Optional[typing.Union[int, typing.Tuple]] = None, + skip_deserialization: typing_extensions.Literal[False] = ..., + ) -> typing.Union[ + ApiResponseFor200, + ]: ... + + @typing.overload + def post( + self, + body: typing.Union[SchemaForRequestBodyApplicationXWwwFormUrlencoded,], + content_type: typing_extensions.Literal["application/x-www-form-urlencoded"], + header_params: RequestHeaderParams = frozendict.frozendict(), + accept_content_types: typing.Tuple[str] = _all_accept_content_types, + stream: bool = False, + timeout: typing.Optional[typing.Union[int, typing.Tuple]] = None, + skip_deserialization: typing_extensions.Literal[False] = ..., + ) -> typing.Union[ + ApiResponseFor200, + ]: ... + + @typing.overload + def post( + self, + body: typing.Union[SchemaForRequestBodyApplicationJson,SchemaForRequestBodyApplicationXWwwFormUrlencoded,], + content_type: str = ..., + header_params: RequestHeaderParams = frozendict.frozendict(), + accept_content_types: typing.Tuple[str] = _all_accept_content_types, + stream: bool = False, + timeout: typing.Optional[typing.Union[int, typing.Tuple]] = None, + skip_deserialization: typing_extensions.Literal[False] = ..., + ) -> typing.Union[ + ApiResponseFor200, + ]: ... + + + @typing.overload + def post( + self, + body: typing.Union[SchemaForRequestBodyApplicationJson,SchemaForRequestBodyApplicationXWwwFormUrlencoded,], + skip_deserialization: typing_extensions.Literal[True], + content_type: str = ..., + header_params: RequestHeaderParams = frozendict.frozendict(), + accept_content_types: typing.Tuple[str] = _all_accept_content_types, + stream: bool = False, + timeout: typing.Optional[typing.Union[int, typing.Tuple]] = None, + ) -> api_client.ApiResponseWithoutDeserialization: ... + + @typing.overload + def post( + self, + body: typing.Union[SchemaForRequestBodyApplicationJson,SchemaForRequestBodyApplicationXWwwFormUrlencoded,], + content_type: str = ..., + header_params: RequestHeaderParams = frozendict.frozendict(), + accept_content_types: typing.Tuple[str] = _all_accept_content_types, + stream: bool = False, + timeout: typing.Optional[typing.Union[int, typing.Tuple]] = None, + skip_deserialization: bool = ..., + ) -> typing.Union[ + ApiResponseFor200, + api_client.ApiResponseWithoutDeserialization, + ]: ... + + def post( + self, + body: typing.Union[SchemaForRequestBodyApplicationJson,SchemaForRequestBodyApplicationXWwwFormUrlencoded,], + content_type: str = 'application/json', + header_params: RequestHeaderParams = frozendict.frozendict(), + accept_content_types: typing.Tuple[str] = _all_accept_content_types, + stream: bool = False, + timeout: typing.Optional[typing.Union[int, typing.Tuple]] = None, + skip_deserialization: bool = False, + ): + return self._series_v2_batch_query_sampling_oapg( + body=body, + header_params=header_params, + content_type=content_type, + accept_content_types=accept_content_types, + stream=stream, + timeout=timeout, + skip_deserialization=skip_deserialization + ) + + diff --git a/iot_api_client/paths/v2_series_batch_query_sampling/post.pyi b/iot_api_client/paths/v2_series_batch_query_sampling/post.pyi new file mode 100644 index 0000000..8948cef --- /dev/null +++ b/iot_api_client/paths/v2_series_batch_query_sampling/post.pyi @@ -0,0 +1,525 @@ +# coding: utf-8 + +""" + + + Generated by: https://openapi-generator.tech +""" + +from dataclasses import dataclass +import typing_extensions +import urllib3 +from urllib3._collections import HTTPHeaderDict + +from iot_api_client import api_client, exceptions +from datetime import date, datetime # noqa: F401 +import decimal # noqa: F401 +import functools # noqa: F401 +import io # noqa: F401 +import re # noqa: F401 +import typing # noqa: F401 +import typing_extensions # noqa: F401 +import uuid # noqa: F401 + +import frozendict # noqa: F401 + +from iot_api_client import schemas # noqa: F401 + +from iot_api_client.model.batch_query_sampled_requests_media_v1 import BatchQuerySampledRequestsMediaV1 +from iot_api_client.model.error import Error +from iot_api_client.model.arduino_series_batch_sampled import ArduinoSeriesBatchSampled + +# Header params +XOrganizationSchema = schemas.StrSchema +RequestRequiredHeaderParams = typing_extensions.TypedDict( + 'RequestRequiredHeaderParams', + { + } +) +RequestOptionalHeaderParams = typing_extensions.TypedDict( + 'RequestOptionalHeaderParams', + { + 'X-Organization': typing.Union[XOrganizationSchema, str, ], + }, + total=False +) + + +class RequestHeaderParams(RequestRequiredHeaderParams, RequestOptionalHeaderParams): + pass + + +request_header_x_organization = api_client.HeaderParameter( + name="X-Organization", + style=api_client.ParameterStyle.SIMPLE, + schema=XOrganizationSchema, +) +# body param +SchemaForRequestBodyApplicationJson = BatchQuerySampledRequestsMediaV1 +SchemaForRequestBodyApplicationXWwwFormUrlencoded = BatchQuerySampledRequestsMediaV1 + + +request_body_batch_query_sampled_requests_media_v1 = api_client.RequestBody( + content={ + 'application/json': api_client.MediaType( + schema=SchemaForRequestBodyApplicationJson), + 'application/x-www-form-urlencoded': api_client.MediaType( + schema=SchemaForRequestBodyApplicationXWwwFormUrlencoded), + }, + required=True, +) +SchemaFor200ResponseBodyApplicationVndArduinoSeriesBatchSampledjson = ArduinoSeriesBatchSampled +SchemaFor200ResponseBodyApplicationVndGoaErrorjson = ArduinoSeriesBatchSampled + + +@dataclass +class ApiResponseFor200(api_client.ApiResponse): + response: urllib3.HTTPResponse + body: typing.Union[ + SchemaFor200ResponseBodyApplicationVndArduinoSeriesBatchSampledjson, + SchemaFor200ResponseBodyApplicationVndGoaErrorjson, + ] + headers: schemas.Unset = schemas.unset + + +_response_for_200 = api_client.OpenApiResponse( + response_cls=ApiResponseFor200, + content={ + 'application/vnd.arduino.series.batch.sampled+json': api_client.MediaType( + schema=SchemaFor200ResponseBodyApplicationVndArduinoSeriesBatchSampledjson), + 'application/vnd.goa.error+json': api_client.MediaType( + schema=SchemaFor200ResponseBodyApplicationVndGoaErrorjson), + }, +) +SchemaFor400ResponseBodyApplicationVndArduinoSeriesBatchSampledjson = Error +SchemaFor400ResponseBodyApplicationVndGoaErrorjson = Error + + +@dataclass +class ApiResponseFor400(api_client.ApiResponse): + response: urllib3.HTTPResponse + body: typing.Union[ + SchemaFor400ResponseBodyApplicationVndArduinoSeriesBatchSampledjson, + SchemaFor400ResponseBodyApplicationVndGoaErrorjson, + ] + headers: schemas.Unset = schemas.unset + + +_response_for_400 = api_client.OpenApiResponse( + response_cls=ApiResponseFor400, + content={ + 'application/vnd.arduino.series.batch.sampled+json': api_client.MediaType( + schema=SchemaFor400ResponseBodyApplicationVndArduinoSeriesBatchSampledjson), + 'application/vnd.goa.error+json': api_client.MediaType( + schema=SchemaFor400ResponseBodyApplicationVndGoaErrorjson), + }, +) +SchemaFor401ResponseBodyApplicationVndArduinoSeriesBatchSampledjson = Error +SchemaFor401ResponseBodyApplicationVndGoaErrorjson = Error + + +@dataclass +class ApiResponseFor401(api_client.ApiResponse): + response: urllib3.HTTPResponse + body: typing.Union[ + SchemaFor401ResponseBodyApplicationVndArduinoSeriesBatchSampledjson, + SchemaFor401ResponseBodyApplicationVndGoaErrorjson, + ] + headers: schemas.Unset = schemas.unset + + +_response_for_401 = api_client.OpenApiResponse( + response_cls=ApiResponseFor401, + content={ + 'application/vnd.arduino.series.batch.sampled+json': api_client.MediaType( + schema=SchemaFor401ResponseBodyApplicationVndArduinoSeriesBatchSampledjson), + 'application/vnd.goa.error+json': api_client.MediaType( + schema=SchemaFor401ResponseBodyApplicationVndGoaErrorjson), + }, +) + + +@dataclass +class ApiResponseFor404(api_client.ApiResponse): + response: urllib3.HTTPResponse + body: schemas.Unset = schemas.unset + headers: schemas.Unset = schemas.unset + + +_response_for_404 = api_client.OpenApiResponse( + response_cls=ApiResponseFor404, +) + + +@dataclass +class ApiResponseFor501(api_client.ApiResponse): + response: urllib3.HTTPResponse + body: schemas.Unset = schemas.unset + headers: schemas.Unset = schemas.unset + + +_response_for_501 = api_client.OpenApiResponse( + response_cls=ApiResponseFor501, +) +SchemaFor503ResponseBodyApplicationVndArduinoSeriesBatchSampledjson = Error +SchemaFor503ResponseBodyApplicationVndGoaErrorjson = Error + + +@dataclass +class ApiResponseFor503(api_client.ApiResponse): + response: urllib3.HTTPResponse + body: typing.Union[ + SchemaFor503ResponseBodyApplicationVndArduinoSeriesBatchSampledjson, + SchemaFor503ResponseBodyApplicationVndGoaErrorjson, + ] + headers: schemas.Unset = schemas.unset + + +_response_for_503 = api_client.OpenApiResponse( + response_cls=ApiResponseFor503, + content={ + 'application/vnd.arduino.series.batch.sampled+json': api_client.MediaType( + schema=SchemaFor503ResponseBodyApplicationVndArduinoSeriesBatchSampledjson), + 'application/vnd.goa.error+json': api_client.MediaType( + schema=SchemaFor503ResponseBodyApplicationVndGoaErrorjson), + }, +) +_all_accept_content_types = ( + 'application/vnd.arduino.series.batch.sampled+json', + 'application/vnd.goa.error+json', +) + + +class BaseApi(api_client.Api): + @typing.overload + def _series_v2_batch_query_sampling_oapg( + self, + body: typing.Union[SchemaForRequestBodyApplicationJson,], + content_type: typing_extensions.Literal["application/json"] = ..., + header_params: RequestHeaderParams = frozendict.frozendict(), + accept_content_types: typing.Tuple[str] = _all_accept_content_types, + stream: bool = False, + timeout: typing.Optional[typing.Union[int, typing.Tuple]] = None, + skip_deserialization: typing_extensions.Literal[False] = ..., + ) -> typing.Union[ + ApiResponseFor200, + ]: ... + + @typing.overload + def _series_v2_batch_query_sampling_oapg( + self, + body: typing.Union[SchemaForRequestBodyApplicationXWwwFormUrlencoded,], + content_type: typing_extensions.Literal["application/x-www-form-urlencoded"], + header_params: RequestHeaderParams = frozendict.frozendict(), + accept_content_types: typing.Tuple[str] = _all_accept_content_types, + stream: bool = False, + timeout: typing.Optional[typing.Union[int, typing.Tuple]] = None, + skip_deserialization: typing_extensions.Literal[False] = ..., + ) -> typing.Union[ + ApiResponseFor200, + ]: ... + + @typing.overload + def _series_v2_batch_query_sampling_oapg( + self, + body: typing.Union[SchemaForRequestBodyApplicationJson,SchemaForRequestBodyApplicationXWwwFormUrlencoded,], + content_type: str = ..., + header_params: RequestHeaderParams = frozendict.frozendict(), + accept_content_types: typing.Tuple[str] = _all_accept_content_types, + stream: bool = False, + timeout: typing.Optional[typing.Union[int, typing.Tuple]] = None, + skip_deserialization: typing_extensions.Literal[False] = ..., + ) -> typing.Union[ + ApiResponseFor200, + ]: ... + + + @typing.overload + def _series_v2_batch_query_sampling_oapg( + self, + body: typing.Union[SchemaForRequestBodyApplicationJson,SchemaForRequestBodyApplicationXWwwFormUrlencoded,], + skip_deserialization: typing_extensions.Literal[True], + content_type: str = ..., + header_params: RequestHeaderParams = frozendict.frozendict(), + accept_content_types: typing.Tuple[str] = _all_accept_content_types, + stream: bool = False, + timeout: typing.Optional[typing.Union[int, typing.Tuple]] = None, + ) -> api_client.ApiResponseWithoutDeserialization: ... + + @typing.overload + def _series_v2_batch_query_sampling_oapg( + self, + body: typing.Union[SchemaForRequestBodyApplicationJson,SchemaForRequestBodyApplicationXWwwFormUrlencoded,], + content_type: str = ..., + header_params: RequestHeaderParams = frozendict.frozendict(), + accept_content_types: typing.Tuple[str] = _all_accept_content_types, + stream: bool = False, + timeout: typing.Optional[typing.Union[int, typing.Tuple]] = None, + skip_deserialization: bool = ..., + ) -> typing.Union[ + ApiResponseFor200, + api_client.ApiResponseWithoutDeserialization, + ]: ... + + def _series_v2_batch_query_sampling_oapg( + self, + body: typing.Union[SchemaForRequestBodyApplicationJson,SchemaForRequestBodyApplicationXWwwFormUrlencoded,], + content_type: str = 'application/json', + header_params: RequestHeaderParams = frozendict.frozendict(), + accept_content_types: typing.Tuple[str] = _all_accept_content_types, + stream: bool = False, + timeout: typing.Optional[typing.Union[int, typing.Tuple]] = None, + skip_deserialization: bool = False, + ): + """ + batch_query_sampling series_v2 + :param skip_deserialization: If true then api_response.response will be set but + api_response.body and api_response.headers will not be deserialized into schema + class instances + """ + self._verify_typed_dict_inputs_oapg(RequestHeaderParams, header_params) + used_path = path.value + + _headers = HTTPHeaderDict() + for parameter in ( + request_header_x_organization, + ): + parameter_data = header_params.get(parameter.name, schemas.unset) + if parameter_data is schemas.unset: + continue + serialized_data = parameter.serialize(parameter_data) + _headers.extend(serialized_data) + # TODO add cookie handling + if accept_content_types: + for accept_content_type in accept_content_types: + _headers.add('Accept', accept_content_type) + + if body is schemas.unset: + raise exceptions.ApiValueError( + 'The required body parameter has an invalid value of: unset. Set a valid value instead') + _fields = None + _body = None + serialized_data = request_body_batch_query_sampled_requests_media_v1.serialize(body, content_type) + _headers.add('Content-Type', content_type) + if 'fields' in serialized_data: + _fields = serialized_data['fields'] + elif 'body' in serialized_data: + _body = serialized_data['body'] + response = self.api_client.call_api( + resource_path=used_path, + method='post'.upper(), + headers=_headers, + fields=_fields, + body=_body, + auth_settings=_auth, + stream=stream, + timeout=timeout, + ) + + if skip_deserialization: + api_response = api_client.ApiResponseWithoutDeserialization(response=response) + else: + response_for_status = _status_code_to_response.get(str(response.status)) + if response_for_status: + api_response = response_for_status.deserialize(response, self.api_client.configuration) + else: + api_response = api_client.ApiResponseWithoutDeserialization(response=response) + + if not 200 <= response.status <= 299: + raise exceptions.ApiException( + status=response.status, + reason=response.reason, + api_response=api_response + ) + + return api_response + + +class SeriesV2BatchQuerySampling(BaseApi): + # this class is used by api classes that refer to endpoints with operationId fn names + + @typing.overload + def series_v2_batch_query_sampling( + self, + body: typing.Union[SchemaForRequestBodyApplicationJson,], + content_type: typing_extensions.Literal["application/json"] = ..., + header_params: RequestHeaderParams = frozendict.frozendict(), + accept_content_types: typing.Tuple[str] = _all_accept_content_types, + stream: bool = False, + timeout: typing.Optional[typing.Union[int, typing.Tuple]] = None, + skip_deserialization: typing_extensions.Literal[False] = ..., + ) -> typing.Union[ + ApiResponseFor200, + ]: ... + + @typing.overload + def series_v2_batch_query_sampling( + self, + body: typing.Union[SchemaForRequestBodyApplicationXWwwFormUrlencoded,], + content_type: typing_extensions.Literal["application/x-www-form-urlencoded"], + header_params: RequestHeaderParams = frozendict.frozendict(), + accept_content_types: typing.Tuple[str] = _all_accept_content_types, + stream: bool = False, + timeout: typing.Optional[typing.Union[int, typing.Tuple]] = None, + skip_deserialization: typing_extensions.Literal[False] = ..., + ) -> typing.Union[ + ApiResponseFor200, + ]: ... + + @typing.overload + def series_v2_batch_query_sampling( + self, + body: typing.Union[SchemaForRequestBodyApplicationJson,SchemaForRequestBodyApplicationXWwwFormUrlencoded,], + content_type: str = ..., + header_params: RequestHeaderParams = frozendict.frozendict(), + accept_content_types: typing.Tuple[str] = _all_accept_content_types, + stream: bool = False, + timeout: typing.Optional[typing.Union[int, typing.Tuple]] = None, + skip_deserialization: typing_extensions.Literal[False] = ..., + ) -> typing.Union[ + ApiResponseFor200, + ]: ... + + + @typing.overload + def series_v2_batch_query_sampling( + self, + body: typing.Union[SchemaForRequestBodyApplicationJson,SchemaForRequestBodyApplicationXWwwFormUrlencoded,], + skip_deserialization: typing_extensions.Literal[True], + content_type: str = ..., + header_params: RequestHeaderParams = frozendict.frozendict(), + accept_content_types: typing.Tuple[str] = _all_accept_content_types, + stream: bool = False, + timeout: typing.Optional[typing.Union[int, typing.Tuple]] = None, + ) -> api_client.ApiResponseWithoutDeserialization: ... + + @typing.overload + def series_v2_batch_query_sampling( + self, + body: typing.Union[SchemaForRequestBodyApplicationJson,SchemaForRequestBodyApplicationXWwwFormUrlencoded,], + content_type: str = ..., + header_params: RequestHeaderParams = frozendict.frozendict(), + accept_content_types: typing.Tuple[str] = _all_accept_content_types, + stream: bool = False, + timeout: typing.Optional[typing.Union[int, typing.Tuple]] = None, + skip_deserialization: bool = ..., + ) -> typing.Union[ + ApiResponseFor200, + api_client.ApiResponseWithoutDeserialization, + ]: ... + + def series_v2_batch_query_sampling( + self, + body: typing.Union[SchemaForRequestBodyApplicationJson,SchemaForRequestBodyApplicationXWwwFormUrlencoded,], + content_type: str = 'application/json', + header_params: RequestHeaderParams = frozendict.frozendict(), + accept_content_types: typing.Tuple[str] = _all_accept_content_types, + stream: bool = False, + timeout: typing.Optional[typing.Union[int, typing.Tuple]] = None, + skip_deserialization: bool = False, + ): + return self._series_v2_batch_query_sampling_oapg( + body=body, + header_params=header_params, + content_type=content_type, + accept_content_types=accept_content_types, + stream=stream, + timeout=timeout, + skip_deserialization=skip_deserialization + ) + + +class ApiForpost(BaseApi): + # this class is used by api classes that refer to endpoints by path and http method names + + @typing.overload + def post( + self, + body: typing.Union[SchemaForRequestBodyApplicationJson,], + content_type: typing_extensions.Literal["application/json"] = ..., + header_params: RequestHeaderParams = frozendict.frozendict(), + accept_content_types: typing.Tuple[str] = _all_accept_content_types, + stream: bool = False, + timeout: typing.Optional[typing.Union[int, typing.Tuple]] = None, + skip_deserialization: typing_extensions.Literal[False] = ..., + ) -> typing.Union[ + ApiResponseFor200, + ]: ... + + @typing.overload + def post( + self, + body: typing.Union[SchemaForRequestBodyApplicationXWwwFormUrlencoded,], + content_type: typing_extensions.Literal["application/x-www-form-urlencoded"], + header_params: RequestHeaderParams = frozendict.frozendict(), + accept_content_types: typing.Tuple[str] = _all_accept_content_types, + stream: bool = False, + timeout: typing.Optional[typing.Union[int, typing.Tuple]] = None, + skip_deserialization: typing_extensions.Literal[False] = ..., + ) -> typing.Union[ + ApiResponseFor200, + ]: ... + + @typing.overload + def post( + self, + body: typing.Union[SchemaForRequestBodyApplicationJson,SchemaForRequestBodyApplicationXWwwFormUrlencoded,], + content_type: str = ..., + header_params: RequestHeaderParams = frozendict.frozendict(), + accept_content_types: typing.Tuple[str] = _all_accept_content_types, + stream: bool = False, + timeout: typing.Optional[typing.Union[int, typing.Tuple]] = None, + skip_deserialization: typing_extensions.Literal[False] = ..., + ) -> typing.Union[ + ApiResponseFor200, + ]: ... + + + @typing.overload + def post( + self, + body: typing.Union[SchemaForRequestBodyApplicationJson,SchemaForRequestBodyApplicationXWwwFormUrlencoded,], + skip_deserialization: typing_extensions.Literal[True], + content_type: str = ..., + header_params: RequestHeaderParams = frozendict.frozendict(), + accept_content_types: typing.Tuple[str] = _all_accept_content_types, + stream: bool = False, + timeout: typing.Optional[typing.Union[int, typing.Tuple]] = None, + ) -> api_client.ApiResponseWithoutDeserialization: ... + + @typing.overload + def post( + self, + body: typing.Union[SchemaForRequestBodyApplicationJson,SchemaForRequestBodyApplicationXWwwFormUrlencoded,], + content_type: str = ..., + header_params: RequestHeaderParams = frozendict.frozendict(), + accept_content_types: typing.Tuple[str] = _all_accept_content_types, + stream: bool = False, + timeout: typing.Optional[typing.Union[int, typing.Tuple]] = None, + skip_deserialization: bool = ..., + ) -> typing.Union[ + ApiResponseFor200, + api_client.ApiResponseWithoutDeserialization, + ]: ... + + def post( + self, + body: typing.Union[SchemaForRequestBodyApplicationJson,SchemaForRequestBodyApplicationXWwwFormUrlencoded,], + content_type: str = 'application/json', + header_params: RequestHeaderParams = frozendict.frozendict(), + accept_content_types: typing.Tuple[str] = _all_accept_content_types, + stream: bool = False, + timeout: typing.Optional[typing.Union[int, typing.Tuple]] = None, + skip_deserialization: bool = False, + ): + return self._series_v2_batch_query_sampling_oapg( + body=body, + header_params=header_params, + content_type=content_type, + accept_content_types=accept_content_types, + stream=stream, + timeout=timeout, + skip_deserialization=skip_deserialization + ) + + diff --git a/iot_api_client/paths/v2_series_historic_data/post.py b/iot_api_client/paths/v2_series_historic_data/post.py index 2b5f727..ba05044 100644 --- a/iot_api_client/paths/v2_series_historic_data/post.py +++ b/iot_api_client/paths/v2_series_historic_data/post.py @@ -30,6 +30,31 @@ from . import path +# Header params +XOrganizationSchema = schemas.StrSchema +RequestRequiredHeaderParams = typing_extensions.TypedDict( + 'RequestRequiredHeaderParams', + { + } +) +RequestOptionalHeaderParams = typing_extensions.TypedDict( + 'RequestOptionalHeaderParams', + { + 'X-Organization': typing.Union[XOrganizationSchema, str, ], + }, + total=False +) + + +class RequestHeaderParams(RequestRequiredHeaderParams, RequestOptionalHeaderParams): + pass + + +request_header_x_organization = api_client.HeaderParameter( + name="X-Organization", + style=api_client.ParameterStyle.SIMPLE, + schema=XOrganizationSchema, +) # body param SchemaForRequestBodyApplicationJson = HistoricDataRequest SchemaForRequestBodyApplicationXWwwFormUrlencoded = HistoricDataRequest @@ -133,6 +158,7 @@ def _series_v2_historic_data_oapg( self, body: typing.Union[SchemaForRequestBodyApplicationJson,], content_type: typing_extensions.Literal["application/json"] = ..., + header_params: RequestHeaderParams = frozendict.frozendict(), accept_content_types: typing.Tuple[str] = _all_accept_content_types, stream: bool = False, timeout: typing.Optional[typing.Union[int, typing.Tuple]] = None, @@ -146,6 +172,7 @@ def _series_v2_historic_data_oapg( self, body: typing.Union[SchemaForRequestBodyApplicationXWwwFormUrlencoded,], content_type: typing_extensions.Literal["application/x-www-form-urlencoded"], + header_params: RequestHeaderParams = frozendict.frozendict(), accept_content_types: typing.Tuple[str] = _all_accept_content_types, stream: bool = False, timeout: typing.Optional[typing.Union[int, typing.Tuple]] = None, @@ -159,6 +186,7 @@ def _series_v2_historic_data_oapg( self, body: typing.Union[SchemaForRequestBodyApplicationJson,SchemaForRequestBodyApplicationXWwwFormUrlencoded,], content_type: str = ..., + header_params: RequestHeaderParams = frozendict.frozendict(), accept_content_types: typing.Tuple[str] = _all_accept_content_types, stream: bool = False, timeout: typing.Optional[typing.Union[int, typing.Tuple]] = None, @@ -174,6 +202,7 @@ def _series_v2_historic_data_oapg( body: typing.Union[SchemaForRequestBodyApplicationJson,SchemaForRequestBodyApplicationXWwwFormUrlencoded,], skip_deserialization: typing_extensions.Literal[True], content_type: str = ..., + header_params: RequestHeaderParams = frozendict.frozendict(), accept_content_types: typing.Tuple[str] = _all_accept_content_types, stream: bool = False, timeout: typing.Optional[typing.Union[int, typing.Tuple]] = None, @@ -184,6 +213,7 @@ def _series_v2_historic_data_oapg( self, body: typing.Union[SchemaForRequestBodyApplicationJson,SchemaForRequestBodyApplicationXWwwFormUrlencoded,], content_type: str = ..., + header_params: RequestHeaderParams = frozendict.frozendict(), accept_content_types: typing.Tuple[str] = _all_accept_content_types, stream: bool = False, timeout: typing.Optional[typing.Union[int, typing.Tuple]] = None, @@ -197,6 +227,7 @@ def _series_v2_historic_data_oapg( self, body: typing.Union[SchemaForRequestBodyApplicationJson,SchemaForRequestBodyApplicationXWwwFormUrlencoded,], content_type: str = 'application/json', + header_params: RequestHeaderParams = frozendict.frozendict(), accept_content_types: typing.Tuple[str] = _all_accept_content_types, stream: bool = False, timeout: typing.Optional[typing.Union[int, typing.Tuple]] = None, @@ -208,9 +239,18 @@ def _series_v2_historic_data_oapg( api_response.body and api_response.headers will not be deserialized into schema class instances """ + self._verify_typed_dict_inputs_oapg(RequestHeaderParams, header_params) used_path = path.value _headers = HTTPHeaderDict() + for parameter in ( + request_header_x_organization, + ): + parameter_data = header_params.get(parameter.name, schemas.unset) + if parameter_data is schemas.unset: + continue + serialized_data = parameter.serialize(parameter_data) + _headers.extend(serialized_data) # TODO add cookie handling if accept_content_types: for accept_content_type in accept_content_types: @@ -265,6 +305,7 @@ def series_v2_historic_data( self, body: typing.Union[SchemaForRequestBodyApplicationJson,], content_type: typing_extensions.Literal["application/json"] = ..., + header_params: RequestHeaderParams = frozendict.frozendict(), accept_content_types: typing.Tuple[str] = _all_accept_content_types, stream: bool = False, timeout: typing.Optional[typing.Union[int, typing.Tuple]] = None, @@ -278,6 +319,7 @@ def series_v2_historic_data( self, body: typing.Union[SchemaForRequestBodyApplicationXWwwFormUrlencoded,], content_type: typing_extensions.Literal["application/x-www-form-urlencoded"], + header_params: RequestHeaderParams = frozendict.frozendict(), accept_content_types: typing.Tuple[str] = _all_accept_content_types, stream: bool = False, timeout: typing.Optional[typing.Union[int, typing.Tuple]] = None, @@ -291,6 +333,7 @@ def series_v2_historic_data( self, body: typing.Union[SchemaForRequestBodyApplicationJson,SchemaForRequestBodyApplicationXWwwFormUrlencoded,], content_type: str = ..., + header_params: RequestHeaderParams = frozendict.frozendict(), accept_content_types: typing.Tuple[str] = _all_accept_content_types, stream: bool = False, timeout: typing.Optional[typing.Union[int, typing.Tuple]] = None, @@ -306,6 +349,7 @@ def series_v2_historic_data( body: typing.Union[SchemaForRequestBodyApplicationJson,SchemaForRequestBodyApplicationXWwwFormUrlencoded,], skip_deserialization: typing_extensions.Literal[True], content_type: str = ..., + header_params: RequestHeaderParams = frozendict.frozendict(), accept_content_types: typing.Tuple[str] = _all_accept_content_types, stream: bool = False, timeout: typing.Optional[typing.Union[int, typing.Tuple]] = None, @@ -316,6 +360,7 @@ def series_v2_historic_data( self, body: typing.Union[SchemaForRequestBodyApplicationJson,SchemaForRequestBodyApplicationXWwwFormUrlencoded,], content_type: str = ..., + header_params: RequestHeaderParams = frozendict.frozendict(), accept_content_types: typing.Tuple[str] = _all_accept_content_types, stream: bool = False, timeout: typing.Optional[typing.Union[int, typing.Tuple]] = None, @@ -329,6 +374,7 @@ def series_v2_historic_data( self, body: typing.Union[SchemaForRequestBodyApplicationJson,SchemaForRequestBodyApplicationXWwwFormUrlencoded,], content_type: str = 'application/json', + header_params: RequestHeaderParams = frozendict.frozendict(), accept_content_types: typing.Tuple[str] = _all_accept_content_types, stream: bool = False, timeout: typing.Optional[typing.Union[int, typing.Tuple]] = None, @@ -336,6 +382,7 @@ def series_v2_historic_data( ): return self._series_v2_historic_data_oapg( body=body, + header_params=header_params, content_type=content_type, accept_content_types=accept_content_types, stream=stream, @@ -352,6 +399,7 @@ def post( self, body: typing.Union[SchemaForRequestBodyApplicationJson,], content_type: typing_extensions.Literal["application/json"] = ..., + header_params: RequestHeaderParams = frozendict.frozendict(), accept_content_types: typing.Tuple[str] = _all_accept_content_types, stream: bool = False, timeout: typing.Optional[typing.Union[int, typing.Tuple]] = None, @@ -365,6 +413,7 @@ def post( self, body: typing.Union[SchemaForRequestBodyApplicationXWwwFormUrlencoded,], content_type: typing_extensions.Literal["application/x-www-form-urlencoded"], + header_params: RequestHeaderParams = frozendict.frozendict(), accept_content_types: typing.Tuple[str] = _all_accept_content_types, stream: bool = False, timeout: typing.Optional[typing.Union[int, typing.Tuple]] = None, @@ -378,6 +427,7 @@ def post( self, body: typing.Union[SchemaForRequestBodyApplicationJson,SchemaForRequestBodyApplicationXWwwFormUrlencoded,], content_type: str = ..., + header_params: RequestHeaderParams = frozendict.frozendict(), accept_content_types: typing.Tuple[str] = _all_accept_content_types, stream: bool = False, timeout: typing.Optional[typing.Union[int, typing.Tuple]] = None, @@ -393,6 +443,7 @@ def post( body: typing.Union[SchemaForRequestBodyApplicationJson,SchemaForRequestBodyApplicationXWwwFormUrlencoded,], skip_deserialization: typing_extensions.Literal[True], content_type: str = ..., + header_params: RequestHeaderParams = frozendict.frozendict(), accept_content_types: typing.Tuple[str] = _all_accept_content_types, stream: bool = False, timeout: typing.Optional[typing.Union[int, typing.Tuple]] = None, @@ -403,6 +454,7 @@ def post( self, body: typing.Union[SchemaForRequestBodyApplicationJson,SchemaForRequestBodyApplicationXWwwFormUrlencoded,], content_type: str = ..., + header_params: RequestHeaderParams = frozendict.frozendict(), accept_content_types: typing.Tuple[str] = _all_accept_content_types, stream: bool = False, timeout: typing.Optional[typing.Union[int, typing.Tuple]] = None, @@ -416,6 +468,7 @@ def post( self, body: typing.Union[SchemaForRequestBodyApplicationJson,SchemaForRequestBodyApplicationXWwwFormUrlencoded,], content_type: str = 'application/json', + header_params: RequestHeaderParams = frozendict.frozendict(), accept_content_types: typing.Tuple[str] = _all_accept_content_types, stream: bool = False, timeout: typing.Optional[typing.Union[int, typing.Tuple]] = None, @@ -423,6 +476,7 @@ def post( ): return self._series_v2_historic_data_oapg( body=body, + header_params=header_params, content_type=content_type, accept_content_types=accept_content_types, stream=stream, diff --git a/iot_api_client/paths/v2_series_historic_data/post.pyi b/iot_api_client/paths/v2_series_historic_data/post.pyi index b802cb7..98430c6 100644 --- a/iot_api_client/paths/v2_series_historic_data/post.pyi +++ b/iot_api_client/paths/v2_series_historic_data/post.pyi @@ -28,6 +28,31 @@ from iot_api_client import schemas # noqa: F401 from iot_api_client.model.historic_data_request import HistoricDataRequest from iot_api_client.model.error import Error +# Header params +XOrganizationSchema = schemas.StrSchema +RequestRequiredHeaderParams = typing_extensions.TypedDict( + 'RequestRequiredHeaderParams', + { + } +) +RequestOptionalHeaderParams = typing_extensions.TypedDict( + 'RequestOptionalHeaderParams', + { + 'X-Organization': typing.Union[XOrganizationSchema, str, ], + }, + total=False +) + + +class RequestHeaderParams(RequestRequiredHeaderParams, RequestOptionalHeaderParams): + pass + + +request_header_x_organization = api_client.HeaderParameter( + name="X-Organization", + style=api_client.ParameterStyle.SIMPLE, + schema=XOrganizationSchema, +) # body param SchemaForRequestBodyApplicationJson = HistoricDataRequest SchemaForRequestBodyApplicationXWwwFormUrlencoded = HistoricDataRequest @@ -122,6 +147,7 @@ class BaseApi(api_client.Api): self, body: typing.Union[SchemaForRequestBodyApplicationJson,], content_type: typing_extensions.Literal["application/json"] = ..., + header_params: RequestHeaderParams = frozendict.frozendict(), accept_content_types: typing.Tuple[str] = _all_accept_content_types, stream: bool = False, timeout: typing.Optional[typing.Union[int, typing.Tuple]] = None, @@ -135,6 +161,7 @@ class BaseApi(api_client.Api): self, body: typing.Union[SchemaForRequestBodyApplicationXWwwFormUrlencoded,], content_type: typing_extensions.Literal["application/x-www-form-urlencoded"], + header_params: RequestHeaderParams = frozendict.frozendict(), accept_content_types: typing.Tuple[str] = _all_accept_content_types, stream: bool = False, timeout: typing.Optional[typing.Union[int, typing.Tuple]] = None, @@ -148,6 +175,7 @@ class BaseApi(api_client.Api): self, body: typing.Union[SchemaForRequestBodyApplicationJson,SchemaForRequestBodyApplicationXWwwFormUrlencoded,], content_type: str = ..., + header_params: RequestHeaderParams = frozendict.frozendict(), accept_content_types: typing.Tuple[str] = _all_accept_content_types, stream: bool = False, timeout: typing.Optional[typing.Union[int, typing.Tuple]] = None, @@ -163,6 +191,7 @@ class BaseApi(api_client.Api): body: typing.Union[SchemaForRequestBodyApplicationJson,SchemaForRequestBodyApplicationXWwwFormUrlencoded,], skip_deserialization: typing_extensions.Literal[True], content_type: str = ..., + header_params: RequestHeaderParams = frozendict.frozendict(), accept_content_types: typing.Tuple[str] = _all_accept_content_types, stream: bool = False, timeout: typing.Optional[typing.Union[int, typing.Tuple]] = None, @@ -173,6 +202,7 @@ class BaseApi(api_client.Api): self, body: typing.Union[SchemaForRequestBodyApplicationJson,SchemaForRequestBodyApplicationXWwwFormUrlencoded,], content_type: str = ..., + header_params: RequestHeaderParams = frozendict.frozendict(), accept_content_types: typing.Tuple[str] = _all_accept_content_types, stream: bool = False, timeout: typing.Optional[typing.Union[int, typing.Tuple]] = None, @@ -186,6 +216,7 @@ class BaseApi(api_client.Api): self, body: typing.Union[SchemaForRequestBodyApplicationJson,SchemaForRequestBodyApplicationXWwwFormUrlencoded,], content_type: str = 'application/json', + header_params: RequestHeaderParams = frozendict.frozendict(), accept_content_types: typing.Tuple[str] = _all_accept_content_types, stream: bool = False, timeout: typing.Optional[typing.Union[int, typing.Tuple]] = None, @@ -197,9 +228,18 @@ class BaseApi(api_client.Api): api_response.body and api_response.headers will not be deserialized into schema class instances """ + self._verify_typed_dict_inputs_oapg(RequestHeaderParams, header_params) used_path = path.value _headers = HTTPHeaderDict() + for parameter in ( + request_header_x_organization, + ): + parameter_data = header_params.get(parameter.name, schemas.unset) + if parameter_data is schemas.unset: + continue + serialized_data = parameter.serialize(parameter_data) + _headers.extend(serialized_data) # TODO add cookie handling if accept_content_types: for accept_content_type in accept_content_types: @@ -254,6 +294,7 @@ class SeriesV2HistoricData(BaseApi): self, body: typing.Union[SchemaForRequestBodyApplicationJson,], content_type: typing_extensions.Literal["application/json"] = ..., + header_params: RequestHeaderParams = frozendict.frozendict(), accept_content_types: typing.Tuple[str] = _all_accept_content_types, stream: bool = False, timeout: typing.Optional[typing.Union[int, typing.Tuple]] = None, @@ -267,6 +308,7 @@ class SeriesV2HistoricData(BaseApi): self, body: typing.Union[SchemaForRequestBodyApplicationXWwwFormUrlencoded,], content_type: typing_extensions.Literal["application/x-www-form-urlencoded"], + header_params: RequestHeaderParams = frozendict.frozendict(), accept_content_types: typing.Tuple[str] = _all_accept_content_types, stream: bool = False, timeout: typing.Optional[typing.Union[int, typing.Tuple]] = None, @@ -280,6 +322,7 @@ class SeriesV2HistoricData(BaseApi): self, body: typing.Union[SchemaForRequestBodyApplicationJson,SchemaForRequestBodyApplicationXWwwFormUrlencoded,], content_type: str = ..., + header_params: RequestHeaderParams = frozendict.frozendict(), accept_content_types: typing.Tuple[str] = _all_accept_content_types, stream: bool = False, timeout: typing.Optional[typing.Union[int, typing.Tuple]] = None, @@ -295,6 +338,7 @@ class SeriesV2HistoricData(BaseApi): body: typing.Union[SchemaForRequestBodyApplicationJson,SchemaForRequestBodyApplicationXWwwFormUrlencoded,], skip_deserialization: typing_extensions.Literal[True], content_type: str = ..., + header_params: RequestHeaderParams = frozendict.frozendict(), accept_content_types: typing.Tuple[str] = _all_accept_content_types, stream: bool = False, timeout: typing.Optional[typing.Union[int, typing.Tuple]] = None, @@ -305,6 +349,7 @@ class SeriesV2HistoricData(BaseApi): self, body: typing.Union[SchemaForRequestBodyApplicationJson,SchemaForRequestBodyApplicationXWwwFormUrlencoded,], content_type: str = ..., + header_params: RequestHeaderParams = frozendict.frozendict(), accept_content_types: typing.Tuple[str] = _all_accept_content_types, stream: bool = False, timeout: typing.Optional[typing.Union[int, typing.Tuple]] = None, @@ -318,6 +363,7 @@ class SeriesV2HistoricData(BaseApi): self, body: typing.Union[SchemaForRequestBodyApplicationJson,SchemaForRequestBodyApplicationXWwwFormUrlencoded,], content_type: str = 'application/json', + header_params: RequestHeaderParams = frozendict.frozendict(), accept_content_types: typing.Tuple[str] = _all_accept_content_types, stream: bool = False, timeout: typing.Optional[typing.Union[int, typing.Tuple]] = None, @@ -325,6 +371,7 @@ class SeriesV2HistoricData(BaseApi): ): return self._series_v2_historic_data_oapg( body=body, + header_params=header_params, content_type=content_type, accept_content_types=accept_content_types, stream=stream, @@ -341,6 +388,7 @@ class ApiForpost(BaseApi): self, body: typing.Union[SchemaForRequestBodyApplicationJson,], content_type: typing_extensions.Literal["application/json"] = ..., + header_params: RequestHeaderParams = frozendict.frozendict(), accept_content_types: typing.Tuple[str] = _all_accept_content_types, stream: bool = False, timeout: typing.Optional[typing.Union[int, typing.Tuple]] = None, @@ -354,6 +402,7 @@ class ApiForpost(BaseApi): self, body: typing.Union[SchemaForRequestBodyApplicationXWwwFormUrlencoded,], content_type: typing_extensions.Literal["application/x-www-form-urlencoded"], + header_params: RequestHeaderParams = frozendict.frozendict(), accept_content_types: typing.Tuple[str] = _all_accept_content_types, stream: bool = False, timeout: typing.Optional[typing.Union[int, typing.Tuple]] = None, @@ -367,6 +416,7 @@ class ApiForpost(BaseApi): self, body: typing.Union[SchemaForRequestBodyApplicationJson,SchemaForRequestBodyApplicationXWwwFormUrlencoded,], content_type: str = ..., + header_params: RequestHeaderParams = frozendict.frozendict(), accept_content_types: typing.Tuple[str] = _all_accept_content_types, stream: bool = False, timeout: typing.Optional[typing.Union[int, typing.Tuple]] = None, @@ -382,6 +432,7 @@ class ApiForpost(BaseApi): body: typing.Union[SchemaForRequestBodyApplicationJson,SchemaForRequestBodyApplicationXWwwFormUrlencoded,], skip_deserialization: typing_extensions.Literal[True], content_type: str = ..., + header_params: RequestHeaderParams = frozendict.frozendict(), accept_content_types: typing.Tuple[str] = _all_accept_content_types, stream: bool = False, timeout: typing.Optional[typing.Union[int, typing.Tuple]] = None, @@ -392,6 +443,7 @@ class ApiForpost(BaseApi): self, body: typing.Union[SchemaForRequestBodyApplicationJson,SchemaForRequestBodyApplicationXWwwFormUrlencoded,], content_type: str = ..., + header_params: RequestHeaderParams = frozendict.frozendict(), accept_content_types: typing.Tuple[str] = _all_accept_content_types, stream: bool = False, timeout: typing.Optional[typing.Union[int, typing.Tuple]] = None, @@ -405,6 +457,7 @@ class ApiForpost(BaseApi): self, body: typing.Union[SchemaForRequestBodyApplicationJson,SchemaForRequestBodyApplicationXWwwFormUrlencoded,], content_type: str = 'application/json', + header_params: RequestHeaderParams = frozendict.frozendict(), accept_content_types: typing.Tuple[str] = _all_accept_content_types, stream: bool = False, timeout: typing.Optional[typing.Union[int, typing.Tuple]] = None, @@ -412,6 +465,7 @@ class ApiForpost(BaseApi): ): return self._series_v2_historic_data_oapg( body=body, + header_params=header_params, content_type=content_type, accept_content_types=accept_content_types, stream=stream, diff --git a/iot_api_client/paths/v2_things_id_template/get.py b/iot_api_client/paths/v2_things_id_template/get.py index 5a1fa7c..30b07fd 100644 --- a/iot_api_client/paths/v2_things_id_template/get.py +++ b/iot_api_client/paths/v2_things_id_template/get.py @@ -107,6 +107,29 @@ class ApiResponseFor200(api_client.ApiResponse): schema=SchemaFor200ResponseBodyApplicationVndGoaErrorjson), }, ) +SchemaFor400ResponseBodyApplicationVndArduinoThingtemplatejson = Error +SchemaFor400ResponseBodyApplicationVndGoaErrorjson = Error + + +@dataclass +class ApiResponseFor400(api_client.ApiResponse): + response: urllib3.HTTPResponse + body: typing.Union[ + SchemaFor400ResponseBodyApplicationVndArduinoThingtemplatejson, + SchemaFor400ResponseBodyApplicationVndGoaErrorjson, + ] + headers: schemas.Unset = schemas.unset + + +_response_for_400 = api_client.OpenApiResponse( + response_cls=ApiResponseFor400, + content={ + 'application/vnd.arduino.thingtemplate+json': api_client.MediaType( + schema=SchemaFor400ResponseBodyApplicationVndArduinoThingtemplatejson), + 'application/vnd.goa.error+json': api_client.MediaType( + schema=SchemaFor400ResponseBodyApplicationVndGoaErrorjson), + }, +) @dataclass @@ -156,6 +179,7 @@ class ApiResponseFor500(api_client.ApiResponse): ) _status_code_to_response = { '200': _response_for_200, + '400': _response_for_400, '401': _response_for_401, '404': _response_for_404, '500': _response_for_500, diff --git a/iot_api_client/paths/v2_things_id_template/get.pyi b/iot_api_client/paths/v2_things_id_template/get.pyi index f88a2de..a508f2d 100644 --- a/iot_api_client/paths/v2_things_id_template/get.pyi +++ b/iot_api_client/paths/v2_things_id_template/get.pyi @@ -102,6 +102,29 @@ _response_for_200 = api_client.OpenApiResponse( schema=SchemaFor200ResponseBodyApplicationVndGoaErrorjson), }, ) +SchemaFor400ResponseBodyApplicationVndArduinoThingtemplatejson = Error +SchemaFor400ResponseBodyApplicationVndGoaErrorjson = Error + + +@dataclass +class ApiResponseFor400(api_client.ApiResponse): + response: urllib3.HTTPResponse + body: typing.Union[ + SchemaFor400ResponseBodyApplicationVndArduinoThingtemplatejson, + SchemaFor400ResponseBodyApplicationVndGoaErrorjson, + ] + headers: schemas.Unset = schemas.unset + + +_response_for_400 = api_client.OpenApiResponse( + response_cls=ApiResponseFor400, + content={ + 'application/vnd.arduino.thingtemplate+json': api_client.MediaType( + schema=SchemaFor400ResponseBodyApplicationVndArduinoThingtemplatejson), + 'application/vnd.goa.error+json': api_client.MediaType( + schema=SchemaFor400ResponseBodyApplicationVndGoaErrorjson), + }, +) @dataclass diff --git a/test/test_models/test_arduino_credentialsv1.py b/test/test_models/test_arduino_credentialsv1.py new file mode 100644 index 0000000..7bc6918 --- /dev/null +++ b/test/test_models/test_arduino_credentialsv1.py @@ -0,0 +1,25 @@ +# coding: utf-8 + +""" + Arduino IoT Cloud API + + Provides a set of endpoints to manage Arduino IoT Cloud **Devices**, **Things**, **Properties** and **Timeseries**. This API can be called just with any HTTP Client, or using one of these clients: * [Javascript NPM package](https://www.npmjs.com/package/@arduino/arduino-iot-client) * [Python PYPI Package](https://pypi.org/project/arduino-iot-client/) * [Golang Module](https://github.com/arduino/iot-client-go) # noqa: E501 + + The version of the OpenAPI document: 2.0 + Generated by: https://openapi-generator.tech +""" + +import unittest + +import iot_api_client +from iot_api_client.model.arduino_credentialsv1 import ArduinoCredentialsv1 +from iot_api_client import configuration + + +class TestArduinoCredentialsv1(unittest.TestCase): + """ArduinoCredentialsv1 unit test stubs""" + _configuration = configuration.Configuration() + + +if __name__ == '__main__': + unittest.main() diff --git a/test/test_models/test_arduino_credentialsv1_collection.py b/test/test_models/test_arduino_credentialsv1_collection.py new file mode 100644 index 0000000..f3b675b --- /dev/null +++ b/test/test_models/test_arduino_credentialsv1_collection.py @@ -0,0 +1,25 @@ +# coding: utf-8 + +""" + Arduino IoT Cloud API + + Provides a set of endpoints to manage Arduino IoT Cloud **Devices**, **Things**, **Properties** and **Timeseries**. This API can be called just with any HTTP Client, or using one of these clients: * [Javascript NPM package](https://www.npmjs.com/package/@arduino/arduino-iot-client) * [Python PYPI Package](https://pypi.org/project/arduino-iot-client/) * [Golang Module](https://github.com/arduino/iot-client-go) # noqa: E501 + + The version of the OpenAPI document: 2.0 + Generated by: https://openapi-generator.tech +""" + +import unittest + +import iot_api_client +from iot_api_client.model.arduino_credentialsv1_collection import ArduinoCredentialsv1Collection +from iot_api_client import configuration + + +class TestArduinoCredentialsv1Collection(unittest.TestCase): + """ArduinoCredentialsv1Collection unit test stubs""" + _configuration = configuration.Configuration() + + +if __name__ == '__main__': + unittest.main() diff --git a/test/test_models/test_arduino_devicev2templatedevice.py b/test/test_models/test_arduino_devicev2templatedevice.py new file mode 100644 index 0000000..1124b99 --- /dev/null +++ b/test/test_models/test_arduino_devicev2templatedevice.py @@ -0,0 +1,25 @@ +# coding: utf-8 + +""" + Arduino IoT Cloud API + + Provides a set of endpoints to manage Arduino IoT Cloud **Devices**, **Things**, **Properties** and **Timeseries**. This API can be called just with any HTTP Client, or using one of these clients: * [Javascript NPM package](https://www.npmjs.com/package/@arduino/arduino-iot-client) * [Python PYPI Package](https://pypi.org/project/arduino-iot-client/) * [Golang Module](https://github.com/arduino/iot-client-go) # noqa: E501 + + The version of the OpenAPI document: 2.0 + Generated by: https://openapi-generator.tech +""" + +import unittest + +import iot_api_client +from iot_api_client.model.arduino_devicev2templatedevice import ArduinoDevicev2templatedevice +from iot_api_client import configuration + + +class TestArduinoDevicev2templatedevice(unittest.TestCase): + """ArduinoDevicev2templatedevice unit test stubs""" + _configuration = configuration.Configuration() + + +if __name__ == '__main__': + unittest.main() diff --git a/test/test_models/test_arduino_series_batch_sampled.py b/test/test_models/test_arduino_series_batch_sampled.py new file mode 100644 index 0000000..2a89203 --- /dev/null +++ b/test/test_models/test_arduino_series_batch_sampled.py @@ -0,0 +1,25 @@ +# coding: utf-8 + +""" + Arduino IoT Cloud API + + Provides a set of endpoints to manage Arduino IoT Cloud **Devices**, **Things**, **Properties** and **Timeseries**. This API can be called just with any HTTP Client, or using one of these clients: * [Javascript NPM package](https://www.npmjs.com/package/@arduino/arduino-iot-client) * [Python PYPI Package](https://pypi.org/project/arduino-iot-client/) * [Golang Module](https://github.com/arduino/iot-client-go) # noqa: E501 + + The version of the OpenAPI document: 2.0 + Generated by: https://openapi-generator.tech +""" + +import unittest + +import iot_api_client +from iot_api_client.model.arduino_series_batch_sampled import ArduinoSeriesBatchSampled +from iot_api_client import configuration + + +class TestArduinoSeriesBatchSampled(unittest.TestCase): + """ArduinoSeriesBatchSampled unit test stubs""" + _configuration = configuration.Configuration() + + +if __name__ == '__main__': + unittest.main() diff --git a/test/test_models/test_arduino_series_sampled_response.py b/test/test_models/test_arduino_series_sampled_response.py new file mode 100644 index 0000000..1248dd3 --- /dev/null +++ b/test/test_models/test_arduino_series_sampled_response.py @@ -0,0 +1,25 @@ +# coding: utf-8 + +""" + Arduino IoT Cloud API + + Provides a set of endpoints to manage Arduino IoT Cloud **Devices**, **Things**, **Properties** and **Timeseries**. This API can be called just with any HTTP Client, or using one of these clients: * [Javascript NPM package](https://www.npmjs.com/package/@arduino/arduino-iot-client) * [Python PYPI Package](https://pypi.org/project/arduino-iot-client/) * [Golang Module](https://github.com/arduino/iot-client-go) # noqa: E501 + + The version of the OpenAPI document: 2.0 + Generated by: https://openapi-generator.tech +""" + +import unittest + +import iot_api_client +from iot_api_client.model.arduino_series_sampled_response import ArduinoSeriesSampledResponse +from iot_api_client import configuration + + +class TestArduinoSeriesSampledResponse(unittest.TestCase): + """ArduinoSeriesSampledResponse unit test stubs""" + _configuration = configuration.Configuration() + + +if __name__ == '__main__': + unittest.main() diff --git a/test/test_models/test_arduino_template.py b/test/test_models/test_arduino_template.py new file mode 100644 index 0000000..83de295 --- /dev/null +++ b/test/test_models/test_arduino_template.py @@ -0,0 +1,25 @@ +# coding: utf-8 + +""" + Arduino IoT Cloud API + + Provides a set of endpoints to manage Arduino IoT Cloud **Devices**, **Things**, **Properties** and **Timeseries**. This API can be called just with any HTTP Client, or using one of these clients: * [Javascript NPM package](https://www.npmjs.com/package/@arduino/arduino-iot-client) * [Python PYPI Package](https://pypi.org/project/arduino-iot-client/) * [Golang Module](https://github.com/arduino/iot-client-go) # noqa: E501 + + The version of the OpenAPI document: 2.0 + Generated by: https://openapi-generator.tech +""" + +import unittest + +import iot_api_client +from iot_api_client.model.arduino_template import ArduinoTemplate +from iot_api_client import configuration + + +class TestArduinoTemplate(unittest.TestCase): + """ArduinoTemplate unit test stubs""" + _configuration = configuration.Configuration() + + +if __name__ == '__main__': + unittest.main() diff --git a/test/test_models/test_arduino_thingresult.py b/test/test_models/test_arduino_thingresult.py new file mode 100644 index 0000000..6310e2f --- /dev/null +++ b/test/test_models/test_arduino_thingresult.py @@ -0,0 +1,25 @@ +# coding: utf-8 + +""" + Arduino IoT Cloud API + + Provides a set of endpoints to manage Arduino IoT Cloud **Devices**, **Things**, **Properties** and **Timeseries**. This API can be called just with any HTTP Client, or using one of these clients: * [Javascript NPM package](https://www.npmjs.com/package/@arduino/arduino-iot-client) * [Python PYPI Package](https://pypi.org/project/arduino-iot-client/) * [Golang Module](https://github.com/arduino/iot-client-go) # noqa: E501 + + The version of the OpenAPI document: 2.0 + Generated by: https://openapi-generator.tech +""" + +import unittest + +import iot_api_client +from iot_api_client.model.arduino_thingresult import ArduinoThingresult +from iot_api_client import configuration + + +class TestArduinoThingresult(unittest.TestCase): + """ArduinoThingresult unit test stubs""" + _configuration = configuration.Configuration() + + +if __name__ == '__main__': + unittest.main() diff --git a/test/test_models/test_arduino_thingresult_collection.py b/test/test_models/test_arduino_thingresult_collection.py new file mode 100644 index 0000000..1a0fa12 --- /dev/null +++ b/test/test_models/test_arduino_thingresult_collection.py @@ -0,0 +1,25 @@ +# coding: utf-8 + +""" + Arduino IoT Cloud API + + Provides a set of endpoints to manage Arduino IoT Cloud **Devices**, **Things**, **Properties** and **Timeseries**. This API can be called just with any HTTP Client, or using one of these clients: * [Javascript NPM package](https://www.npmjs.com/package/@arduino/arduino-iot-client) * [Python PYPI Package](https://pypi.org/project/arduino-iot-client/) * [Golang Module](https://github.com/arduino/iot-client-go) # noqa: E501 + + The version of the OpenAPI document: 2.0 + Generated by: https://openapi-generator.tech +""" + +import unittest + +import iot_api_client +from iot_api_client.model.arduino_thingresult_collection import ArduinoThingresultCollection +from iot_api_client import configuration + + +class TestArduinoThingresultCollection(unittest.TestCase): + """ArduinoThingresultCollection unit test stubs""" + _configuration = configuration.Configuration() + + +if __name__ == '__main__': + unittest.main() diff --git a/test/test_models/test_batch_query_sampled_request_media_v1.py b/test/test_models/test_batch_query_sampled_request_media_v1.py new file mode 100644 index 0000000..3322017 --- /dev/null +++ b/test/test_models/test_batch_query_sampled_request_media_v1.py @@ -0,0 +1,25 @@ +# coding: utf-8 + +""" + Arduino IoT Cloud API + + Provides a set of endpoints to manage Arduino IoT Cloud **Devices**, **Things**, **Properties** and **Timeseries**. This API can be called just with any HTTP Client, or using one of these clients: * [Javascript NPM package](https://www.npmjs.com/package/@arduino/arduino-iot-client) * [Python PYPI Package](https://pypi.org/project/arduino-iot-client/) * [Golang Module](https://github.com/arduino/iot-client-go) # noqa: E501 + + The version of the OpenAPI document: 2.0 + Generated by: https://openapi-generator.tech +""" + +import unittest + +import iot_api_client +from iot_api_client.model.batch_query_sampled_request_media_v1 import BatchQuerySampledRequestMediaV1 +from iot_api_client import configuration + + +class TestBatchQuerySampledRequestMediaV1(unittest.TestCase): + """BatchQuerySampledRequestMediaV1 unit test stubs""" + _configuration = configuration.Configuration() + + +if __name__ == '__main__': + unittest.main() diff --git a/test/test_models/test_batch_query_sampled_requests_media_v1.py b/test/test_models/test_batch_query_sampled_requests_media_v1.py new file mode 100644 index 0000000..ab675fe --- /dev/null +++ b/test/test_models/test_batch_query_sampled_requests_media_v1.py @@ -0,0 +1,25 @@ +# coding: utf-8 + +""" + Arduino IoT Cloud API + + Provides a set of endpoints to manage Arduino IoT Cloud **Devices**, **Things**, **Properties** and **Timeseries**. This API can be called just with any HTTP Client, or using one of these clients: * [Javascript NPM package](https://www.npmjs.com/package/@arduino/arduino-iot-client) * [Python PYPI Package](https://pypi.org/project/arduino-iot-client/) * [Golang Module](https://github.com/arduino/iot-client-go) # noqa: E501 + + The version of the OpenAPI document: 2.0 + Generated by: https://openapi-generator.tech +""" + +import unittest + +import iot_api_client +from iot_api_client.model.batch_query_sampled_requests_media_v1 import BatchQuerySampledRequestsMediaV1 +from iot_api_client import configuration + + +class TestBatchQuerySampledRequestsMediaV1(unittest.TestCase): + """BatchQuerySampledRequestsMediaV1 unit test stubs""" + _configuration = configuration.Configuration() + + +if __name__ == '__main__': + unittest.main() diff --git a/test/test_models/test_template.py b/test/test_models/test_template.py new file mode 100644 index 0000000..d7dff8b --- /dev/null +++ b/test/test_models/test_template.py @@ -0,0 +1,25 @@ +# coding: utf-8 + +""" + Arduino IoT Cloud API + + Provides a set of endpoints to manage Arduino IoT Cloud **Devices**, **Things**, **Properties** and **Timeseries**. This API can be called just with any HTTP Client, or using one of these clients: * [Javascript NPM package](https://www.npmjs.com/package/@arduino/arduino-iot-client) * [Python PYPI Package](https://pypi.org/project/arduino-iot-client/) * [Golang Module](https://github.com/arduino/iot-client-go) # noqa: E501 + + The version of the OpenAPI document: 2.0 + Generated by: https://openapi-generator.tech +""" + +import unittest + +import iot_api_client +from iot_api_client.model.template import Template +from iot_api_client import configuration + + +class TestTemplate(unittest.TestCase): + """Template unit test stubs""" + _configuration = configuration.Configuration() + + +if __name__ == '__main__': + unittest.main() diff --git a/test/test_paths/test_v1_network_credentials_type/__init__.py b/test/test_paths/test_v1_network_credentials_type/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/test/test_paths/test_v1_network_credentials_type/test_get.py b/test/test_paths/test_v1_network_credentials_type/test_get.py new file mode 100644 index 0000000..0529fa2 --- /dev/null +++ b/test/test_paths/test_v1_network_credentials_type/test_get.py @@ -0,0 +1,41 @@ +# coding: utf-8 + +""" + + + Generated by: https://openapi-generator.tech +""" + +import unittest +from unittest.mock import patch + +import urllib3 + +import iot_api_client +from iot_api_client.paths.v1_network_credentials_type import get # noqa: E501 +from iot_api_client import configuration, schemas, api_client + +from .. import ApiTestMixin + + +class TestV1NetworkCredentialsType(ApiTestMixin, unittest.TestCase): + """ + V1NetworkCredentialsType unit test stubs + show network_credentials_v1 # noqa: E501 + """ + _configuration = configuration.Configuration() + + def setUp(self): + used_api_client = api_client.ApiClient(configuration=self._configuration) + self.api = get.ApiForget(api_client=used_api_client) # noqa: E501 + + def tearDown(self): + pass + + response_status = 200 + + + + +if __name__ == '__main__': + unittest.main() diff --git a/test/test_paths/test_v1_network_credentials_type_connections/__init__.py b/test/test_paths/test_v1_network_credentials_type_connections/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/test/test_paths/test_v1_network_credentials_type_connections/test_get.py b/test/test_paths/test_v1_network_credentials_type_connections/test_get.py new file mode 100644 index 0000000..ae5ef04 --- /dev/null +++ b/test/test_paths/test_v1_network_credentials_type_connections/test_get.py @@ -0,0 +1,40 @@ +# coding: utf-8 + +""" + + + Generated by: https://openapi-generator.tech +""" + +import unittest +from unittest.mock import patch + +import urllib3 + +import iot_api_client +from iot_api_client.paths.v1_network_credentials_type_connections import get # noqa: E501 +from iot_api_client import configuration, schemas, api_client + +from .. import ApiTestMixin + + +class TestV1NetworkCredentialsTypeConnections(ApiTestMixin, unittest.TestCase): + """ + V1NetworkCredentialsTypeConnections unit test stubs + showByDevice network_credentials_v1 # noqa: E501 + """ + _configuration = configuration.Configuration() + + def setUp(self): + used_api_client = api_client.ApiClient(configuration=self._configuration) + self.api = get.ApiForget(api_client=used_api_client) # noqa: E501 + + def tearDown(self): + pass + + response_status = 200 + response_body = '' + + +if __name__ == '__main__': + unittest.main() diff --git a/test/test_paths/test_v1_templates/__init__.py b/test/test_paths/test_v1_templates/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/test/test_paths/test_v1_templates/test_put.py b/test/test_paths/test_v1_templates/test_put.py new file mode 100644 index 0000000..fd12c7e --- /dev/null +++ b/test/test_paths/test_v1_templates/test_put.py @@ -0,0 +1,47 @@ +# coding: utf-8 + +""" + + + Generated by: https://openapi-generator.tech +""" + +import unittest +from unittest.mock import patch + +import urllib3 + +import iot_api_client +from iot_api_client.paths.v1_templates import put # noqa: E501 +from iot_api_client import configuration, schemas, api_client + +from .. import ApiTestMixin + + +class TestV1Templates(ApiTestMixin, unittest.TestCase): + """ + V1Templates unit test stubs + apply templates # noqa: E501 + """ + _configuration = configuration.Configuration() + + def setUp(self): + used_api_client = api_client.ApiClient(configuration=self._configuration) + self.api = put.ApiForput(api_client=used_api_client) # noqa: E501 + + def tearDown(self): + pass + + response_status = 200 + + + + + + + + + + +if __name__ == '__main__': + unittest.main() diff --git a/test/test_paths/test_v2_series_batch_query_sampling/__init__.py b/test/test_paths/test_v2_series_batch_query_sampling/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/test/test_paths/test_v2_series_batch_query_sampling/test_post.py b/test/test_paths/test_v2_series_batch_query_sampling/test_post.py new file mode 100644 index 0000000..a6693c2 --- /dev/null +++ b/test/test_paths/test_v2_series_batch_query_sampling/test_post.py @@ -0,0 +1,47 @@ +# coding: utf-8 + +""" + + + Generated by: https://openapi-generator.tech +""" + +import unittest +from unittest.mock import patch + +import urllib3 + +import iot_api_client +from iot_api_client.paths.v2_series_batch_query_sampling import post # noqa: E501 +from iot_api_client import configuration, schemas, api_client + +from .. import ApiTestMixin + + +class TestV2SeriesBatchQuerySampling(ApiTestMixin, unittest.TestCase): + """ + V2SeriesBatchQuerySampling unit test stubs + batch_query_sampling series_v2 # noqa: E501 + """ + _configuration = configuration.Configuration() + + def setUp(self): + used_api_client = api_client.ApiClient(configuration=self._configuration) + self.api = post.ApiForpost(api_client=used_api_client) # noqa: E501 + + def tearDown(self): + pass + + response_status = 200 + + + + + + + + + + +if __name__ == '__main__': + unittest.main()