From f35be35fd7b79ee1c07ea4441228e9f900cbf2bc Mon Sep 17 00:00:00 2001 From: plankthom <1620679+plankthom@users.noreply.github.com> Date: Fri, 2 Aug 2024 12:27:04 +0000 Subject: [PATCH] chore: regenerate queries sdk :repeat: --- .github/workflows/python.yml | 136 + .openapi-generator-ignore | 23 + .openapi-generator/FILES | 231 + .openapi-generator/VERSION | 1 + LICENSE.txt | 13 + Makefile | 158 + README.md | 192 + docs/AggregationByResourceAndMetric.md | 28 + docs/AggregationByResourceOrMetric.md | 28 + docs/AggregationMethod.md | 28 + docs/AggregationMethodOneOf.md | 12 + docs/AggregationMethodOneOf1.md | 12 + docs/AggregationMethodOneOf2.md | 12 + docs/AggregationMethodOneOf3.md | 12 + docs/AggregationMethodOneOf4.md | 12 + docs/AggregationMethodOneOf5.md | 12 + docs/AggregationMethodOneOf6.md | 12 + docs/AggregationMethodOneOf7.md | 12 + docs/AggregationMethodOneOf8.md | 12 + docs/AggregationsInner.md | 28 + docs/AlignAt.md | 12 + docs/AlignShift.md | 12 + docs/Alignment.md | 33 + docs/AlignmentGridInterval.md | 29 + docs/AlignmentTimezone.md | 29 + docs/CauseException.md | 32 + docs/ColumnDataSet.md | 34 + docs/ColumnDataSetDataAxis.md | 11 + docs/ColumnHeader.md | 32 + docs/ColumnHeadersInner.md | 31 + docs/DataAxisOption.md | 12 + docs/DataSetAttributes.md | 30 + docs/DataSetWindow.md | 32 + docs/Datum.md | 29 + docs/DefaultAggregation.md | 29 + docs/DefaultInterpolation.md | 32 + docs/DeleteResponse.md | 32 + docs/Embeddings.md | 28 + docs/ExecuteApi.md | 190 + docs/FromOverride.md | 28 + docs/GroupingInterval.md | 29 + docs/GroupingIntervalOverride.md | 29 + docs/GroupingIntervalOverrideOneOf.md | 12 + docs/HALLink.md | 32 + docs/HALLinkMethod.md | 12 + docs/HALLinkRole.md | 12 + docs/HTTPValidationError.md | 29 + docs/HeaderArrayOption.md | 12 + docs/Hierarchical.md | 29 + docs/Interpolation.md | 31 + docs/InterpolationMethod.md | 28 + docs/InterpolationMethodOneOf.md | 12 + docs/InterpolationMethodOneOf1.md | 12 + docs/InterpolationMethodOneOf10.md | 12 + docs/InterpolationMethodOneOf11.md | 12 + docs/InterpolationMethodOneOf12.md | 12 + docs/InterpolationMethodOneOf13.md | 12 + docs/InterpolationMethodOneOf2.md | 12 + docs/InterpolationMethodOneOf3.md | 12 + docs/InterpolationMethodOneOf4.md | 12 + docs/InterpolationMethodOneOf5.md | 12 + docs/InterpolationMethodOneOf6.md | 12 + docs/InterpolationMethodOneOf7.md | 12 + docs/InterpolationMethodOneOf8.md | 12 + docs/InterpolationMethodOneOf9.md | 12 + docs/InterpolationSpec.md | 32 + docs/Links.md | 31 + docs/LocationInner.md | 28 + docs/ManageApi.md | 370 ++ docs/Message.md | 33 + docs/MessageArguments.md | 30 + docs/MessageLevel.md | 11 + docs/MessageProperties.md | 31 + docs/ObjectData.md | 36 + docs/ObjectDataSet.md | 32 + docs/ObjectDataValue.md | 28 + docs/Operation.md | 336 + docs/QueriesListResponse.md | 36 + docs/QueryDefinition.md | 42 + docs/QueryEntityInput.md | 32 + docs/QueryExecutionMessage.md | 36 + docs/QueryExecutionMessageLevel.md | 11 + docs/QueryHALLinks.md | 31 + docs/QueryInput.md | 41 + docs/QueryListHALLinks.md | 34 + docs/QueryListItem.md | 33 + docs/QueryOutput.md | 41 + docs/QueryResponse.md | 35 + docs/QueryResult.md | 32 + docs/QueryUpdateInput.md | 31 + docs/Render.md | 42 + docs/Render1.md | 41 + docs/RenderMode.md | 29 + docs/RenderModeOneOf.md | 12 + docs/RenderModeOneOf1.md | 12 + docs/RenderModeOneOf2.md | 12 + docs/RenderModeOneOf3.md | 12 + docs/RenderModeOneOf4.md | 12 + docs/RenderModeOneOf5.md | 12 + docs/RenderModeOneOf6.md | 12 + docs/RenderModeOneOf7.md | 12 + docs/RenderModeOneOf8.md | 12 + docs/RenderModeOneOf9.md | 12 + docs/ResponseDataSet.md | 35 + docs/RowDataSet.md | 34 + docs/RowDataSetDataAxis.md | 11 + docs/RowHeader.md | 31 + docs/RowHeadersInner.md | 30 + docs/SeriesDataSet.md | 34 + docs/SeriesSpec.md | 34 + docs/StatusApi.md | 71 + docs/TimeWindowFrom.md | 29 + docs/TimeWindowUntil.md | 29 + docs/ValidationError.md | 31 + docs/Window.md | 29 + docs/WindowOverride.md | 28 + openapi/queries.openapi.yaml | 5244 ++++++++++++++++ openapi/queries.transformed.openapi.yaml | 5501 +++++++++++++++++ pyproject.toml | 21 + requirements.txt | 3 + test/__init__.py | 1 + test/api/__init__.py | 1 + test/api/__pycache__/__init__.cpython-311.pyc | Bin 0 -> 283 bytes ...cute_api_test.cpython-311-pytest-8.3.2.pyc | Bin 0 -> 10690 bytes ...nage_api_test.cpython-311-pytest-8.3.2.pyc | Bin 0 -> 14492 bytes ...atus_api_test.cpython-311-pytest-8.3.2.pyc | Bin 0 -> 5416 bytes test/api/execute_api_test.py | 203 + test/api/manage_api_test.py | 289 + test/api/status_api_test.py | 82 + test/conftest.py | 71 + test/openapi.py | 2315 +++++++ test/types/__init__.py | 1 + .../__pycache__/__init__.cpython-311.pyc | Bin 0 -> 296 bytes .../aggregation_method_stub.cpython-311.pyc | Bin 0 -> 3604 bytes .../delete_response_stub.cpython-311.pyc | Bin 0 -> 3642 bytes .../from_override_stub.cpython-311.pyc | Bin 0 -> 3940 bytes ...ing_interval_override_stub.cpython-311.pyc | Bin 0 -> 3585 bytes .../interpolation_stub.cpython-311.pyc | Bin 0 -> 3042 bytes ...queries_list_response_stub.cpython-311.pyc | Bin 0 -> 4300 bytes .../query_definition_stub.cpython-311.pyc | Bin 0 -> 3063 bytes .../query_entity_input_stub.cpython-311.pyc | Bin 0 -> 3451 bytes .../query_input_stub.cpython-311.pyc | Bin 0 -> 4608 bytes .../query_response_stub.cpython-311.pyc | Bin 0 -> 3813 bytes .../query_result_stub.cpython-311.pyc | Bin 0 -> 3960 bytes .../__pycache__/render1_stub.cpython-311.pyc | Bin 0 -> 2950 bytes .../window_override_stub.cpython-311.pyc | Bin 0 -> 3298 bytes ...aggregation_by_resource_and_metric_stub.py | 77 + .../aggregation_by_resource_or_metric_stub.py | 79 + test/types/aggregation_method_one_of1_stub.py | 69 + test/types/aggregation_method_one_of2_stub.py | 69 + test/types/aggregation_method_one_of3_stub.py | 69 + test/types/aggregation_method_one_of4_stub.py | 69 + test/types/aggregation_method_one_of5_stub.py | 69 + test/types/aggregation_method_one_of6_stub.py | 69 + test/types/aggregation_method_one_of7_stub.py | 69 + test/types/aggregation_method_one_of8_stub.py | 69 + test/types/aggregation_method_one_of_stub.py | 69 + test/types/aggregation_method_stub.py | 80 + test/types/aggregations_inner_stub.py | 62 + test/types/align_at_stub.py | 58 + test/types/align_shift_stub.py | 60 + test/types/alignment_grid_interval_stub.py | 78 + test/types/alignment_stub.py | 72 + test/types/alignment_timezone_stub.py | 74 + test/types/cause_exception_stub.py | 80 + test/types/column_data_set_data_axis_stub.py | 69 + test/types/column_data_set_stub.py | 93 + test/types/column_header_stub.py | 77 + test/types/column_headers_inner_stub.py | 67 + test/types/data_axis_option_stub.py | 62 + test/types/data_set_attributes_stub.py | 70 + test/types/data_set_window_stub.py | 83 + test/types/datum_stub.py | 67 + test/types/default_aggregation_stub.py | 90 + test/types/default_interpolation_stub.py | 72 + test/types/delete_response_stub.py | 87 + test/types/embeddings_stub.py | 66 + test/types/from_override_stub.py | 82 + .../grouping_interval_override_one_of_stub.py | 71 + test/types/grouping_interval_override_stub.py | 78 + test/types/grouping_interval_stub.py | 72 + test/types/hal_link_method_stub.py | 63 + test/types/hal_link_role_stub.py | 60 + test/types/hal_link_stub.py | 74 + test/types/header_array_option_stub.py | 64 + test/types/hierarchical_stub.py | 69 + test/types/http_validation_error_stub.py | 73 + .../interpolation_method_one_of10_stub.py | 68 + .../interpolation_method_one_of11_stub.py | 68 + .../interpolation_method_one_of12_stub.py | 68 + .../interpolation_method_one_of13_stub.py | 68 + .../interpolation_method_one_of1_stub.py | 68 + .../interpolation_method_one_of2_stub.py | 68 + .../interpolation_method_one_of3_stub.py | 68 + .../interpolation_method_one_of4_stub.py | 68 + .../interpolation_method_one_of5_stub.py | 68 + .../interpolation_method_one_of6_stub.py | 68 + .../interpolation_method_one_of7_stub.py | 68 + .../interpolation_method_one_of8_stub.py | 68 + .../interpolation_method_one_of9_stub.py | 68 + .../types/interpolation_method_one_of_stub.py | 68 + test/types/interpolation_method_stub.py | 92 + test/types/interpolation_spec_stub.py | 78 + test/types/interpolation_stub.py | 65 + test/types/links_stub.py | 64 + test/types/location_inner_stub.py | 65 + test/types/message_arguments_stub.py | 65 + test/types/message_level_stub.py | 63 + test/types/message_properties_stub.py | 72 + test/types/message_stub.py | 78 + test/types/object_data_set_stub.py | 78 + test/types/object_data_stub.py | 98 + test/types/object_data_value_stub.py | 67 + test/types/queries_list_response_stub.py | 107 + test/types/query_definition_stub.py | 65 + test/types/query_entity_input_stub.py | 78 + .../query_execution_message_level_stub.py | 68 + test/types/query_execution_message_stub.py | 101 + test/types/query_hal_links_stub.py | 71 + test/types/query_input_stub.py | 109 + test/types/query_list_hal_links_stub.py | 83 + test/types/query_list_item_stub.py | 84 + test/types/query_output_stub.py | 109 + test/types/query_response_stub.py | 93 + test/types/query_result_stub.py | 89 + test/types/query_update_input_stub.py | 72 + test/types/render1_stub.py | 61 + test/types/render_mode_one_of1_stub.py | 65 + test/types/render_mode_one_of2_stub.py | 65 + test/types/render_mode_one_of3_stub.py | 65 + test/types/render_mode_one_of4_stub.py | 65 + test/types/render_mode_one_of5_stub.py | 65 + test/types/render_mode_one_of6_stub.py | 65 + test/types/render_mode_one_of7_stub.py | 65 + test/types/render_mode_one_of8_stub.py | 65 + test/types/render_mode_one_of9_stub.py | 65 + test/types/render_mode_one_of_stub.py | 63 + test/types/render_mode_stub.py | 81 + test/types/render_stub.py | 118 + test/types/response_data_set_stub.py | 70 + test/types/row_data_set_data_axis_stub.py | 67 + test/types/row_data_set_stub.py | 99 + test/types/row_header_stub.py | 67 + test/types/row_headers_inner_stub.py | 65 + test/types/series_data_set_stub.py | 106 + test/types/series_spec_stub.py | 87 + test/types/time_window_from_stub.py | 82 + test/types/time_window_until_stub.py | 82 + test/types/validation_error_stub.py | 79 + test/types/window_override_stub.py | 69 + test/types/window_stub.py | 66 + .../.openapi-generator/FILES | 115 + .../.openapi-generator/VERSION | 1 + waylay-sdk-queries-types/LICENSE.txt | 13 + waylay-sdk-queries-types/README.md | 65 + waylay-sdk-queries-types/pyproject.toml | 73 + .../services/queries/models/__init__.py | 231 + .../__pycache__/__init__.cpython-311.pyc | Bin 0 -> 9291 bytes ...ion_by_resource_and_metric.cpython-311.pyc | Bin 0 -> 1115 bytes ...tion_by_resource_or_metric.cpython-311.pyc | Bin 0 -> 1188 bytes .../aggregation_method.cpython-311.pyc | Bin 0 -> 1994 bytes .../aggregation_method_one_of.cpython-311.pyc | Bin 0 -> 1292 bytes ...aggregation_method_one_of1.cpython-311.pyc | Bin 0 -> 1292 bytes ...aggregation_method_one_of2.cpython-311.pyc | Bin 0 -> 1303 bytes ...aggregation_method_one_of3.cpython-311.pyc | Bin 0 -> 1362 bytes ...aggregation_method_one_of4.cpython-311.pyc | Bin 0 -> 1281 bytes ...aggregation_method_one_of5.cpython-311.pyc | Bin 0 -> 1272 bytes ...aggregation_method_one_of6.cpython-311.pyc | Bin 0 -> 1285 bytes ...aggregation_method_one_of7.cpython-311.pyc | Bin 0 -> 1268 bytes ...aggregation_method_one_of8.cpython-311.pyc | Bin 0 -> 1268 bytes .../aggregations_inner.cpython-311.pyc | Bin 0 -> 937 bytes .../__pycache__/align_at.cpython-311.pyc | Bin 0 -> 1553 bytes .../__pycache__/align_shift.cpython-311.pyc | Bin 0 -> 1580 bytes .../__pycache__/alignment.cpython-311.pyc | Bin 0 -> 1841 bytes .../alignment_grid_interval.cpython-311.pyc | Bin 0 -> 1125 bytes .../alignment_timezone.cpython-311.pyc | Bin 0 -> 1056 bytes .../cause_exception.cpython-311.pyc | Bin 0 -> 1439 bytes .../column_data_set.cpython-311.pyc | Bin 0 -> 2811 bytes .../column_data_set_data_axis.cpython-311.pyc | Bin 0 -> 1231 bytes .../__pycache__/column_header.cpython-311.pyc | Bin 0 -> 1442 bytes .../column_headers_inner.cpython-311.pyc | Bin 0 -> 1122 bytes .../data_axis_option.cpython-311.pyc | Bin 0 -> 1259 bytes .../data_set_attributes.cpython-311.pyc | Bin 0 -> 1554 bytes .../data_set_window.cpython-311.pyc | Bin 0 -> 1852 bytes .../models/__pycache__/datum.cpython-311.pyc | Bin 0 -> 908 bytes .../default_aggregation.cpython-311.pyc | Bin 0 -> 1662 bytes .../default_interpolation.cpython-311.pyc | Bin 0 -> 1072 bytes .../delete_response.cpython-311.pyc | Bin 0 -> 1991 bytes .../__pycache__/embeddings.cpython-311.pyc | Bin 0 -> 1054 bytes .../__pycache__/from_override.cpython-311.pyc | Bin 0 -> 1373 bytes .../grouping_interval.cpython-311.pyc | Bin 0 -> 1114 bytes ...grouping_interval_override.cpython-311.pyc | Bin 0 -> 1127 bytes ...g_interval_override_one_of.cpython-311.pyc | Bin 0 -> 1405 bytes .../__pycache__/hal_link.cpython-311.pyc | Bin 0 -> 1727 bytes .../hal_link_method.cpython-311.pyc | Bin 0 -> 1317 bytes .../__pycache__/hal_link_role.cpython-311.pyc | Bin 0 -> 1350 bytes .../header_array_option.cpython-311.pyc | Bin 0 -> 1271 bytes .../__pycache__/hierarchical.cpython-311.pyc | Bin 0 -> 927 bytes .../http_validation_error.cpython-311.pyc | Bin 0 -> 1440 bytes .../__pycache__/interpolation.cpython-311.pyc | Bin 0 -> 1055 bytes .../interpolation_method.cpython-311.pyc | Bin 0 -> 2707 bytes ...nterpolation_method_one_of.cpython-311.pyc | Bin 0 -> 1304 bytes ...terpolation_method_one_of1.cpython-311.pyc | Bin 0 -> 1303 bytes ...erpolation_method_one_of10.cpython-311.pyc | Bin 0 -> 1291 bytes ...erpolation_method_one_of11.cpython-311.pyc | Bin 0 -> 1294 bytes ...erpolation_method_one_of12.cpython-311.pyc | Bin 0 -> 1279 bytes ...erpolation_method_one_of13.cpython-311.pyc | Bin 0 -> 1307 bytes ...terpolation_method_one_of2.cpython-311.pyc | Bin 0 -> 1308 bytes ...terpolation_method_one_of3.cpython-311.pyc | Bin 0 -> 1333 bytes ...terpolation_method_one_of4.cpython-311.pyc | Bin 0 -> 1267 bytes ...terpolation_method_one_of5.cpython-311.pyc | Bin 0 -> 1302 bytes ...terpolation_method_one_of6.cpython-311.pyc | Bin 0 -> 1308 bytes ...terpolation_method_one_of7.cpython-311.pyc | Bin 0 -> 1312 bytes ...terpolation_method_one_of8.cpython-311.pyc | Bin 0 -> 1304 bytes ...terpolation_method_one_of9.cpython-311.pyc | Bin 0 -> 1326 bytes .../interpolation_spec.cpython-311.pyc | Bin 0 -> 2228 bytes .../models/__pycache__/links.cpython-311.pyc | Bin 0 -> 964 bytes .../location_inner.cpython-311.pyc | Bin 0 -> 882 bytes .../__pycache__/message.cpython-311.pyc | Bin 0 -> 1668 bytes .../message_arguments.cpython-311.pyc | Bin 0 -> 974 bytes .../__pycache__/message_level.cpython-311.pyc | Bin 0 -> 1290 bytes .../message_properties.cpython-311.pyc | Bin 0 -> 1373 bytes .../__pycache__/object_data.cpython-311.pyc | Bin 0 -> 2755 bytes .../object_data_set.cpython-311.pyc | Bin 0 -> 2443 bytes .../object_data_value.cpython-311.pyc | Bin 0 -> 1053 bytes .../queries_list_response.cpython-311.pyc | Bin 0 -> 2589 bytes .../query_definition.cpython-311.pyc | Bin 0 -> 1034 bytes .../query_entity_input.cpython-311.pyc | Bin 0 -> 1796 bytes .../query_execution_message.cpython-311.pyc | Bin 0 -> 2260 bytes ...ry_execution_message_level.cpython-311.pyc | Bin 0 -> 1325 bytes .../query_hal_links.cpython-311.pyc | Bin 0 -> 1457 bytes .../__pycache__/query_input.cpython-311.pyc | Bin 0 -> 3634 bytes .../query_list_hal_links.cpython-311.pyc | Bin 0 -> 1620 bytes .../query_list_item.cpython-311.pyc | Bin 0 -> 2017 bytes .../__pycache__/query_output.cpython-311.pyc | Bin 0 -> 3636 bytes .../query_response.cpython-311.pyc | Bin 0 -> 2269 bytes .../__pycache__/query_result.cpython-311.pyc | Bin 0 -> 2127 bytes .../query_update_input.cpython-311.pyc | Bin 0 -> 1668 bytes .../models/__pycache__/render.cpython-311.pyc | Bin 0 -> 3726 bytes .../__pycache__/render1.cpython-311.pyc | Bin 0 -> 992 bytes .../__pycache__/render_mode.cpython-311.pyc | Bin 0 -> 1966 bytes .../render_mode_one_of.cpython-311.pyc | Bin 0 -> 1399 bytes .../render_mode_one_of1.cpython-311.pyc | Bin 0 -> 1373 bytes .../render_mode_one_of2.cpython-311.pyc | Bin 0 -> 1441 bytes .../render_mode_one_of3.cpython-311.pyc | Bin 0 -> 1425 bytes .../render_mode_one_of4.cpython-311.pyc | Bin 0 -> 1504 bytes .../render_mode_one_of5.cpython-311.pyc | Bin 0 -> 1378 bytes .../render_mode_one_of6.cpython-311.pyc | Bin 0 -> 1392 bytes .../render_mode_one_of7.cpython-311.pyc | Bin 0 -> 1438 bytes .../render_mode_one_of8.cpython-311.pyc | Bin 0 -> 1389 bytes .../render_mode_one_of9.cpython-311.pyc | Bin 0 -> 1275 bytes .../response_data_set.cpython-311.pyc | Bin 0 -> 1251 bytes .../__pycache__/row_data_set.cpython-311.pyc | Bin 0 -> 2542 bytes .../row_data_set_data_axis.cpython-311.pyc | Bin 0 -> 1225 bytes .../__pycache__/row_header.cpython-311.pyc | Bin 0 -> 1716 bytes .../row_headers_inner.cpython-311.pyc | Bin 0 -> 991 bytes .../series_data_set.cpython-311.pyc | Bin 0 -> 2584 bytes .../__pycache__/series_spec.cpython-311.pyc | Bin 0 -> 2202 bytes .../time_window_from.cpython-311.pyc | Bin 0 -> 1382 bytes .../time_window_until.cpython-311.pyc | Bin 0 -> 1384 bytes .../validation_error.cpython-311.pyc | Bin 0 -> 1481 bytes .../models/__pycache__/window.cpython-311.pyc | Bin 0 -> 933 bytes .../window_override.cpython-311.pyc | Bin 0 -> 946 bytes .../aggregation_by_resource_and_metric.py | 31 + .../aggregation_by_resource_or_metric.py | 32 + .../queries/models/aggregation_method.py | 43 + .../models/aggregation_method_one_of.py | 23 + .../models/aggregation_method_one_of1.py | 23 + .../models/aggregation_method_one_of2.py | 23 + .../models/aggregation_method_one_of3.py | 23 + .../models/aggregation_method_one_of4.py | 23 + .../models/aggregation_method_one_of5.py | 23 + .../models/aggregation_method_one_of6.py | 23 + .../models/aggregation_method_one_of7.py | 23 + .../models/aggregation_method_one_of8.py | 23 + .../queries/models/aggregations_inner.py | 25 + .../services/queries/models/align_at.py | 26 + .../services/queries/models/align_shift.py | 25 + .../services/queries/models/alignment.py | 35 + .../queries/models/alignment_grid_interval.py | 31 + .../queries/models/alignment_timezone.py | 29 + .../queries/models/cause_exception.py | 32 + .../queries/models/column_data_set.py | 44 + .../models/column_data_set_data_axis.py | 23 + .../services/queries/models/column_header.py | 30 + .../queries/models/column_headers_inner.py | 31 + .../queries/models/data_axis_option.py | 24 + .../queries/models/data_set_attributes.py | 32 + .../queries/models/data_set_window.py | 36 + .../waylay/services/queries/models/datum.py | 23 + .../queries/models/default_aggregation.py | 43 + .../queries/models/default_interpolation.py | 28 + .../queries/models/delete_response.py | 42 + .../services/queries/models/embeddings.py | 28 + .../services/queries/models/from_override.py | 34 + .../queries/models/grouping_interval.py | 31 + .../models/grouping_interval_override.py | 31 + .../grouping_interval_override_one_of.py | 23 + .../services/queries/models/hal_link.py | 35 + .../queries/models/hal_link_method.py | 27 + .../services/queries/models/hal_link_role.py | 28 + .../queries/models/header_array_option.py | 24 + .../services/queries/models/hierarchical.py | 24 + .../queries/models/http_validation_error.py | 31 + .../services/queries/models/interpolation.py | 28 + .../queries/models/interpolation_method.py | 53 + .../models/interpolation_method_one_of.py | 23 + .../models/interpolation_method_one_of1.py | 23 + .../models/interpolation_method_one_of10.py | 23 + .../models/interpolation_method_one_of11.py | 23 + .../models/interpolation_method_one_of12.py | 23 + .../models/interpolation_method_one_of13.py | 23 + .../models/interpolation_method_one_of2.py | 23 + .../models/interpolation_method_one_of3.py | 23 + .../models/interpolation_method_one_of4.py | 23 + .../models/interpolation_method_one_of5.py | 23 + .../models/interpolation_method_one_of6.py | 23 + .../models/interpolation_method_one_of7.py | 23 + .../models/interpolation_method_one_of8.py | 23 + .../models/interpolation_method_one_of9.py | 23 + .../queries/models/interpolation_spec.py | 39 + .../waylay/services/queries/models/links.py | 26 + .../services/queries/models/location_inner.py | 23 + .../waylay/services/queries/models/message.py | 35 + .../queries/models/message_arguments.py | 25 + .../services/queries/models/message_level.py | 27 + .../queries/models/message_properties.py | 29 + .../waylay/services/queries/models/object.py | 4 + .../services/queries/models/object_data.py | 54 + .../queries/models/object_data_set.py | 35 + .../queries/models/object_data_value.py | 31 + .../waylay/services/queries/models/py.typed | 0 .../queries/models/queries_list_response.py | 52 + .../queries/models/query_definition.py | 26 + .../queries/models/query_entity_input.py | 37 + .../queries/models/query_execution_message.py | 43 + .../models/query_execution_message_level.py | 26 + .../queries/models/query_hal_links.py | 31 + .../services/queries/models/query_input.py | 63 + .../queries/models/query_list_hal_links.py | 34 + .../queries/models/query_list_item.py | 40 + .../services/queries/models/query_output.py | 63 + .../services/queries/models/query_response.py | 44 + .../services/queries/models/query_result.py | 38 + .../queries/models/query_update_input.py | 35 + .../waylay/services/queries/models/render.py | 74 + .../waylay/services/queries/models/render1.py | 26 + .../services/queries/models/render_mode.py | 45 + .../queries/models/render_mode_one_of.py | 23 + .../queries/models/render_mode_one_of1.py | 23 + .../queries/models/render_mode_one_of2.py | 23 + .../queries/models/render_mode_one_of3.py | 23 + .../queries/models/render_mode_one_of4.py | 23 + .../queries/models/render_mode_one_of5.py | 23 + .../queries/models/render_mode_one_of6.py | 23 + .../queries/models/render_mode_one_of7.py | 23 + .../queries/models/render_mode_one_of8.py | 23 + .../queries/models/render_mode_one_of9.py | 23 + .../queries/models/response_data_set.py | 33 + .../services/queries/models/row_data_set.py | 42 + .../queries/models/row_data_set_data_axis.py | 23 + .../services/queries/models/row_header.py | 35 + .../queries/models/row_headers_inner.py | 27 + .../queries/models/series_data_set.py | 42 + .../services/queries/models/series_spec.py | 45 + .../queries/models/time_window_from.py | 34 + .../queries/models/time_window_until.py | 34 + .../queries/models/validation_error.py | 34 + .../waylay/services/queries/models/window.py | 28 + .../queries/models/window_override.py | 28 + .../services/queries/queries/__init__.py | 13 + .../__pycache__/__init__.cpython-311.pyc | Bin 0 -> 658 bytes .../__pycache__/execute_api.cpython-311.pyc | Bin 0 -> 4008 bytes .../__pycache__/manage_api.cpython-311.pyc | Bin 0 -> 4166 bytes .../__pycache__/status_api.cpython-311.pyc | Bin 0 -> 1426 bytes .../services/queries/queries/execute_api.py | 128 + .../services/queries/queries/manage_api.py | 120 + .../waylay/services/queries/queries/py.typed | 0 .../services/queries/queries/status_api.py | 31 + waylay-sdk-queries/.openapi-generator/FILES | 10 + waylay-sdk-queries/.openapi-generator/VERSION | 1 + waylay-sdk-queries/LICENSE.txt | 13 + waylay-sdk-queries/README.md | 66 + waylay-sdk-queries/pyproject.toml | 76 + .../waylay/services/queries/api/__init__.py | 12 + .../api/__pycache__/__init__.cpython-311.pyc | Bin 0 -> 563 bytes .../__pycache__/execute_api.cpython-311.pyc | Bin 0 -> 14448 bytes .../__pycache__/manage_api.cpython-311.pyc | Bin 0 -> 25812 bytes .../__pycache__/status_api.cpython-311.pyc | Bin 0 -> 6662 bytes .../services/queries/api/execute_api.py | 428 ++ .../waylay/services/queries/api/manage_api.py | 915 +++ .../src/waylay/services/queries/api/py.typed | 0 .../waylay/services/queries/api/status_api.py | 197 + .../services/queries/service/__init__.py | 24 + .../__pycache__/__init__.cpython-311.pyc | Bin 0 -> 809 bytes .../__pycache__/service.cpython-311.pyc | Bin 0 -> 1617 bytes .../waylay/services/queries/service/py.typed | 0 .../services/queries/service/service.py | 26 + 498 files changed, 31469 insertions(+) create mode 100644 .github/workflows/python.yml create mode 100644 .openapi-generator-ignore create mode 100644 .openapi-generator/FILES create mode 100644 .openapi-generator/VERSION create mode 100644 LICENSE.txt create mode 100644 Makefile create mode 100644 docs/AggregationByResourceAndMetric.md create mode 100644 docs/AggregationByResourceOrMetric.md create mode 100644 docs/AggregationMethod.md create mode 100644 docs/AggregationMethodOneOf.md create mode 100644 docs/AggregationMethodOneOf1.md create mode 100644 docs/AggregationMethodOneOf2.md create mode 100644 docs/AggregationMethodOneOf3.md create mode 100644 docs/AggregationMethodOneOf4.md create mode 100644 docs/AggregationMethodOneOf5.md create mode 100644 docs/AggregationMethodOneOf6.md create mode 100644 docs/AggregationMethodOneOf7.md create mode 100644 docs/AggregationMethodOneOf8.md create mode 100644 docs/AggregationsInner.md create mode 100644 docs/AlignAt.md create mode 100644 docs/AlignShift.md create mode 100644 docs/Alignment.md create mode 100644 docs/AlignmentGridInterval.md create mode 100644 docs/AlignmentTimezone.md create mode 100644 docs/CauseException.md create mode 100644 docs/ColumnDataSet.md create mode 100644 docs/ColumnDataSetDataAxis.md create mode 100644 docs/ColumnHeader.md create mode 100644 docs/ColumnHeadersInner.md create mode 100644 docs/DataAxisOption.md create mode 100644 docs/DataSetAttributes.md create mode 100644 docs/DataSetWindow.md create mode 100644 docs/Datum.md create mode 100644 docs/DefaultAggregation.md create mode 100644 docs/DefaultInterpolation.md create mode 100644 docs/DeleteResponse.md create mode 100644 docs/Embeddings.md create mode 100644 docs/ExecuteApi.md create mode 100644 docs/FromOverride.md create mode 100644 docs/GroupingInterval.md create mode 100644 docs/GroupingIntervalOverride.md create mode 100644 docs/GroupingIntervalOverrideOneOf.md create mode 100644 docs/HALLink.md create mode 100644 docs/HALLinkMethod.md create mode 100644 docs/HALLinkRole.md create mode 100644 docs/HTTPValidationError.md create mode 100644 docs/HeaderArrayOption.md create mode 100644 docs/Hierarchical.md create mode 100644 docs/Interpolation.md create mode 100644 docs/InterpolationMethod.md create mode 100644 docs/InterpolationMethodOneOf.md create mode 100644 docs/InterpolationMethodOneOf1.md create mode 100644 docs/InterpolationMethodOneOf10.md create mode 100644 docs/InterpolationMethodOneOf11.md create mode 100644 docs/InterpolationMethodOneOf12.md create mode 100644 docs/InterpolationMethodOneOf13.md create mode 100644 docs/InterpolationMethodOneOf2.md create mode 100644 docs/InterpolationMethodOneOf3.md create mode 100644 docs/InterpolationMethodOneOf4.md create mode 100644 docs/InterpolationMethodOneOf5.md create mode 100644 docs/InterpolationMethodOneOf6.md create mode 100644 docs/InterpolationMethodOneOf7.md create mode 100644 docs/InterpolationMethodOneOf8.md create mode 100644 docs/InterpolationMethodOneOf9.md create mode 100644 docs/InterpolationSpec.md create mode 100644 docs/Links.md create mode 100644 docs/LocationInner.md create mode 100644 docs/ManageApi.md create mode 100644 docs/Message.md create mode 100644 docs/MessageArguments.md create mode 100644 docs/MessageLevel.md create mode 100644 docs/MessageProperties.md create mode 100644 docs/ObjectData.md create mode 100644 docs/ObjectDataSet.md create mode 100644 docs/ObjectDataValue.md create mode 100644 docs/Operation.md create mode 100644 docs/QueriesListResponse.md create mode 100644 docs/QueryDefinition.md create mode 100644 docs/QueryEntityInput.md create mode 100644 docs/QueryExecutionMessage.md create mode 100644 docs/QueryExecutionMessageLevel.md create mode 100644 docs/QueryHALLinks.md create mode 100644 docs/QueryInput.md create mode 100644 docs/QueryListHALLinks.md create mode 100644 docs/QueryListItem.md create mode 100644 docs/QueryOutput.md create mode 100644 docs/QueryResponse.md create mode 100644 docs/QueryResult.md create mode 100644 docs/QueryUpdateInput.md create mode 100644 docs/Render.md create mode 100644 docs/Render1.md create mode 100644 docs/RenderMode.md create mode 100644 docs/RenderModeOneOf.md create mode 100644 docs/RenderModeOneOf1.md create mode 100644 docs/RenderModeOneOf2.md create mode 100644 docs/RenderModeOneOf3.md create mode 100644 docs/RenderModeOneOf4.md create mode 100644 docs/RenderModeOneOf5.md create mode 100644 docs/RenderModeOneOf6.md create mode 100644 docs/RenderModeOneOf7.md create mode 100644 docs/RenderModeOneOf8.md create mode 100644 docs/RenderModeOneOf9.md create mode 100644 docs/ResponseDataSet.md create mode 100644 docs/RowDataSet.md create mode 100644 docs/RowDataSetDataAxis.md create mode 100644 docs/RowHeader.md create mode 100644 docs/RowHeadersInner.md create mode 100644 docs/SeriesDataSet.md create mode 100644 docs/SeriesSpec.md create mode 100644 docs/StatusApi.md create mode 100644 docs/TimeWindowFrom.md create mode 100644 docs/TimeWindowUntil.md create mode 100644 docs/ValidationError.md create mode 100644 docs/Window.md create mode 100644 docs/WindowOverride.md create mode 100644 openapi/queries.openapi.yaml create mode 100644 openapi/queries.transformed.openapi.yaml create mode 100644 pyproject.toml create mode 100644 requirements.txt create mode 100644 test/__init__.py create mode 100644 test/api/__init__.py create mode 100644 test/api/__pycache__/__init__.cpython-311.pyc create mode 100644 test/api/__pycache__/execute_api_test.cpython-311-pytest-8.3.2.pyc create mode 100644 test/api/__pycache__/manage_api_test.cpython-311-pytest-8.3.2.pyc create mode 100644 test/api/__pycache__/status_api_test.cpython-311-pytest-8.3.2.pyc create mode 100644 test/api/execute_api_test.py create mode 100644 test/api/manage_api_test.py create mode 100644 test/api/status_api_test.py create mode 100644 test/conftest.py create mode 100644 test/openapi.py create mode 100644 test/types/__init__.py create mode 100644 test/types/__pycache__/__init__.cpython-311.pyc create mode 100644 test/types/__pycache__/aggregation_method_stub.cpython-311.pyc create mode 100644 test/types/__pycache__/delete_response_stub.cpython-311.pyc create mode 100644 test/types/__pycache__/from_override_stub.cpython-311.pyc create mode 100644 test/types/__pycache__/grouping_interval_override_stub.cpython-311.pyc create mode 100644 test/types/__pycache__/interpolation_stub.cpython-311.pyc create mode 100644 test/types/__pycache__/queries_list_response_stub.cpython-311.pyc create mode 100644 test/types/__pycache__/query_definition_stub.cpython-311.pyc create mode 100644 test/types/__pycache__/query_entity_input_stub.cpython-311.pyc create mode 100644 test/types/__pycache__/query_input_stub.cpython-311.pyc create mode 100644 test/types/__pycache__/query_response_stub.cpython-311.pyc create mode 100644 test/types/__pycache__/query_result_stub.cpython-311.pyc create mode 100644 test/types/__pycache__/render1_stub.cpython-311.pyc create mode 100644 test/types/__pycache__/window_override_stub.cpython-311.pyc create mode 100644 test/types/aggregation_by_resource_and_metric_stub.py create mode 100644 test/types/aggregation_by_resource_or_metric_stub.py create mode 100644 test/types/aggregation_method_one_of1_stub.py create mode 100644 test/types/aggregation_method_one_of2_stub.py create mode 100644 test/types/aggregation_method_one_of3_stub.py create mode 100644 test/types/aggregation_method_one_of4_stub.py create mode 100644 test/types/aggregation_method_one_of5_stub.py create mode 100644 test/types/aggregation_method_one_of6_stub.py create mode 100644 test/types/aggregation_method_one_of7_stub.py create mode 100644 test/types/aggregation_method_one_of8_stub.py create mode 100644 test/types/aggregation_method_one_of_stub.py create mode 100644 test/types/aggregation_method_stub.py create mode 100644 test/types/aggregations_inner_stub.py create mode 100644 test/types/align_at_stub.py create mode 100644 test/types/align_shift_stub.py create mode 100644 test/types/alignment_grid_interval_stub.py create mode 100644 test/types/alignment_stub.py create mode 100644 test/types/alignment_timezone_stub.py create mode 100644 test/types/cause_exception_stub.py create mode 100644 test/types/column_data_set_data_axis_stub.py create mode 100644 test/types/column_data_set_stub.py create mode 100644 test/types/column_header_stub.py create mode 100644 test/types/column_headers_inner_stub.py create mode 100644 test/types/data_axis_option_stub.py create mode 100644 test/types/data_set_attributes_stub.py create mode 100644 test/types/data_set_window_stub.py create mode 100644 test/types/datum_stub.py create mode 100644 test/types/default_aggregation_stub.py create mode 100644 test/types/default_interpolation_stub.py create mode 100644 test/types/delete_response_stub.py create mode 100644 test/types/embeddings_stub.py create mode 100644 test/types/from_override_stub.py create mode 100644 test/types/grouping_interval_override_one_of_stub.py create mode 100644 test/types/grouping_interval_override_stub.py create mode 100644 test/types/grouping_interval_stub.py create mode 100644 test/types/hal_link_method_stub.py create mode 100644 test/types/hal_link_role_stub.py create mode 100644 test/types/hal_link_stub.py create mode 100644 test/types/header_array_option_stub.py create mode 100644 test/types/hierarchical_stub.py create mode 100644 test/types/http_validation_error_stub.py create mode 100644 test/types/interpolation_method_one_of10_stub.py create mode 100644 test/types/interpolation_method_one_of11_stub.py create mode 100644 test/types/interpolation_method_one_of12_stub.py create mode 100644 test/types/interpolation_method_one_of13_stub.py create mode 100644 test/types/interpolation_method_one_of1_stub.py create mode 100644 test/types/interpolation_method_one_of2_stub.py create mode 100644 test/types/interpolation_method_one_of3_stub.py create mode 100644 test/types/interpolation_method_one_of4_stub.py create mode 100644 test/types/interpolation_method_one_of5_stub.py create mode 100644 test/types/interpolation_method_one_of6_stub.py create mode 100644 test/types/interpolation_method_one_of7_stub.py create mode 100644 test/types/interpolation_method_one_of8_stub.py create mode 100644 test/types/interpolation_method_one_of9_stub.py create mode 100644 test/types/interpolation_method_one_of_stub.py create mode 100644 test/types/interpolation_method_stub.py create mode 100644 test/types/interpolation_spec_stub.py create mode 100644 test/types/interpolation_stub.py create mode 100644 test/types/links_stub.py create mode 100644 test/types/location_inner_stub.py create mode 100644 test/types/message_arguments_stub.py create mode 100644 test/types/message_level_stub.py create mode 100644 test/types/message_properties_stub.py create mode 100644 test/types/message_stub.py create mode 100644 test/types/object_data_set_stub.py create mode 100644 test/types/object_data_stub.py create mode 100644 test/types/object_data_value_stub.py create mode 100644 test/types/queries_list_response_stub.py create mode 100644 test/types/query_definition_stub.py create mode 100644 test/types/query_entity_input_stub.py create mode 100644 test/types/query_execution_message_level_stub.py create mode 100644 test/types/query_execution_message_stub.py create mode 100644 test/types/query_hal_links_stub.py create mode 100644 test/types/query_input_stub.py create mode 100644 test/types/query_list_hal_links_stub.py create mode 100644 test/types/query_list_item_stub.py create mode 100644 test/types/query_output_stub.py create mode 100644 test/types/query_response_stub.py create mode 100644 test/types/query_result_stub.py create mode 100644 test/types/query_update_input_stub.py create mode 100644 test/types/render1_stub.py create mode 100644 test/types/render_mode_one_of1_stub.py create mode 100644 test/types/render_mode_one_of2_stub.py create mode 100644 test/types/render_mode_one_of3_stub.py create mode 100644 test/types/render_mode_one_of4_stub.py create mode 100644 test/types/render_mode_one_of5_stub.py create mode 100644 test/types/render_mode_one_of6_stub.py create mode 100644 test/types/render_mode_one_of7_stub.py create mode 100644 test/types/render_mode_one_of8_stub.py create mode 100644 test/types/render_mode_one_of9_stub.py create mode 100644 test/types/render_mode_one_of_stub.py create mode 100644 test/types/render_mode_stub.py create mode 100644 test/types/render_stub.py create mode 100644 test/types/response_data_set_stub.py create mode 100644 test/types/row_data_set_data_axis_stub.py create mode 100644 test/types/row_data_set_stub.py create mode 100644 test/types/row_header_stub.py create mode 100644 test/types/row_headers_inner_stub.py create mode 100644 test/types/series_data_set_stub.py create mode 100644 test/types/series_spec_stub.py create mode 100644 test/types/time_window_from_stub.py create mode 100644 test/types/time_window_until_stub.py create mode 100644 test/types/validation_error_stub.py create mode 100644 test/types/window_override_stub.py create mode 100644 test/types/window_stub.py create mode 100644 waylay-sdk-queries-types/.openapi-generator/FILES create mode 100644 waylay-sdk-queries-types/.openapi-generator/VERSION create mode 100644 waylay-sdk-queries-types/LICENSE.txt create mode 100644 waylay-sdk-queries-types/README.md create mode 100644 waylay-sdk-queries-types/pyproject.toml create mode 100644 waylay-sdk-queries-types/src/waylay/services/queries/models/__init__.py create mode 100644 waylay-sdk-queries-types/src/waylay/services/queries/models/__pycache__/__init__.cpython-311.pyc create mode 100644 waylay-sdk-queries-types/src/waylay/services/queries/models/__pycache__/aggregation_by_resource_and_metric.cpython-311.pyc create mode 100644 waylay-sdk-queries-types/src/waylay/services/queries/models/__pycache__/aggregation_by_resource_or_metric.cpython-311.pyc create mode 100644 waylay-sdk-queries-types/src/waylay/services/queries/models/__pycache__/aggregation_method.cpython-311.pyc create mode 100644 waylay-sdk-queries-types/src/waylay/services/queries/models/__pycache__/aggregation_method_one_of.cpython-311.pyc create mode 100644 waylay-sdk-queries-types/src/waylay/services/queries/models/__pycache__/aggregation_method_one_of1.cpython-311.pyc create mode 100644 waylay-sdk-queries-types/src/waylay/services/queries/models/__pycache__/aggregation_method_one_of2.cpython-311.pyc create mode 100644 waylay-sdk-queries-types/src/waylay/services/queries/models/__pycache__/aggregation_method_one_of3.cpython-311.pyc create mode 100644 waylay-sdk-queries-types/src/waylay/services/queries/models/__pycache__/aggregation_method_one_of4.cpython-311.pyc create mode 100644 waylay-sdk-queries-types/src/waylay/services/queries/models/__pycache__/aggregation_method_one_of5.cpython-311.pyc create mode 100644 waylay-sdk-queries-types/src/waylay/services/queries/models/__pycache__/aggregation_method_one_of6.cpython-311.pyc create mode 100644 waylay-sdk-queries-types/src/waylay/services/queries/models/__pycache__/aggregation_method_one_of7.cpython-311.pyc create mode 100644 waylay-sdk-queries-types/src/waylay/services/queries/models/__pycache__/aggregation_method_one_of8.cpython-311.pyc create mode 100644 waylay-sdk-queries-types/src/waylay/services/queries/models/__pycache__/aggregations_inner.cpython-311.pyc create mode 100644 waylay-sdk-queries-types/src/waylay/services/queries/models/__pycache__/align_at.cpython-311.pyc create mode 100644 waylay-sdk-queries-types/src/waylay/services/queries/models/__pycache__/align_shift.cpython-311.pyc create mode 100644 waylay-sdk-queries-types/src/waylay/services/queries/models/__pycache__/alignment.cpython-311.pyc create mode 100644 waylay-sdk-queries-types/src/waylay/services/queries/models/__pycache__/alignment_grid_interval.cpython-311.pyc create mode 100644 waylay-sdk-queries-types/src/waylay/services/queries/models/__pycache__/alignment_timezone.cpython-311.pyc create mode 100644 waylay-sdk-queries-types/src/waylay/services/queries/models/__pycache__/cause_exception.cpython-311.pyc create mode 100644 waylay-sdk-queries-types/src/waylay/services/queries/models/__pycache__/column_data_set.cpython-311.pyc create mode 100644 waylay-sdk-queries-types/src/waylay/services/queries/models/__pycache__/column_data_set_data_axis.cpython-311.pyc create mode 100644 waylay-sdk-queries-types/src/waylay/services/queries/models/__pycache__/column_header.cpython-311.pyc create mode 100644 waylay-sdk-queries-types/src/waylay/services/queries/models/__pycache__/column_headers_inner.cpython-311.pyc create mode 100644 waylay-sdk-queries-types/src/waylay/services/queries/models/__pycache__/data_axis_option.cpython-311.pyc create mode 100644 waylay-sdk-queries-types/src/waylay/services/queries/models/__pycache__/data_set_attributes.cpython-311.pyc create mode 100644 waylay-sdk-queries-types/src/waylay/services/queries/models/__pycache__/data_set_window.cpython-311.pyc create mode 100644 waylay-sdk-queries-types/src/waylay/services/queries/models/__pycache__/datum.cpython-311.pyc create mode 100644 waylay-sdk-queries-types/src/waylay/services/queries/models/__pycache__/default_aggregation.cpython-311.pyc create mode 100644 waylay-sdk-queries-types/src/waylay/services/queries/models/__pycache__/default_interpolation.cpython-311.pyc create mode 100644 waylay-sdk-queries-types/src/waylay/services/queries/models/__pycache__/delete_response.cpython-311.pyc create mode 100644 waylay-sdk-queries-types/src/waylay/services/queries/models/__pycache__/embeddings.cpython-311.pyc create mode 100644 waylay-sdk-queries-types/src/waylay/services/queries/models/__pycache__/from_override.cpython-311.pyc create mode 100644 waylay-sdk-queries-types/src/waylay/services/queries/models/__pycache__/grouping_interval.cpython-311.pyc create mode 100644 waylay-sdk-queries-types/src/waylay/services/queries/models/__pycache__/grouping_interval_override.cpython-311.pyc create mode 100644 waylay-sdk-queries-types/src/waylay/services/queries/models/__pycache__/grouping_interval_override_one_of.cpython-311.pyc create mode 100644 waylay-sdk-queries-types/src/waylay/services/queries/models/__pycache__/hal_link.cpython-311.pyc create mode 100644 waylay-sdk-queries-types/src/waylay/services/queries/models/__pycache__/hal_link_method.cpython-311.pyc create mode 100644 waylay-sdk-queries-types/src/waylay/services/queries/models/__pycache__/hal_link_role.cpython-311.pyc create mode 100644 waylay-sdk-queries-types/src/waylay/services/queries/models/__pycache__/header_array_option.cpython-311.pyc create mode 100644 waylay-sdk-queries-types/src/waylay/services/queries/models/__pycache__/hierarchical.cpython-311.pyc create mode 100644 waylay-sdk-queries-types/src/waylay/services/queries/models/__pycache__/http_validation_error.cpython-311.pyc create mode 100644 waylay-sdk-queries-types/src/waylay/services/queries/models/__pycache__/interpolation.cpython-311.pyc create mode 100644 waylay-sdk-queries-types/src/waylay/services/queries/models/__pycache__/interpolation_method.cpython-311.pyc create mode 100644 waylay-sdk-queries-types/src/waylay/services/queries/models/__pycache__/interpolation_method_one_of.cpython-311.pyc create mode 100644 waylay-sdk-queries-types/src/waylay/services/queries/models/__pycache__/interpolation_method_one_of1.cpython-311.pyc create mode 100644 waylay-sdk-queries-types/src/waylay/services/queries/models/__pycache__/interpolation_method_one_of10.cpython-311.pyc create mode 100644 waylay-sdk-queries-types/src/waylay/services/queries/models/__pycache__/interpolation_method_one_of11.cpython-311.pyc create mode 100644 waylay-sdk-queries-types/src/waylay/services/queries/models/__pycache__/interpolation_method_one_of12.cpython-311.pyc create mode 100644 waylay-sdk-queries-types/src/waylay/services/queries/models/__pycache__/interpolation_method_one_of13.cpython-311.pyc create mode 100644 waylay-sdk-queries-types/src/waylay/services/queries/models/__pycache__/interpolation_method_one_of2.cpython-311.pyc create mode 100644 waylay-sdk-queries-types/src/waylay/services/queries/models/__pycache__/interpolation_method_one_of3.cpython-311.pyc create mode 100644 waylay-sdk-queries-types/src/waylay/services/queries/models/__pycache__/interpolation_method_one_of4.cpython-311.pyc create mode 100644 waylay-sdk-queries-types/src/waylay/services/queries/models/__pycache__/interpolation_method_one_of5.cpython-311.pyc create mode 100644 waylay-sdk-queries-types/src/waylay/services/queries/models/__pycache__/interpolation_method_one_of6.cpython-311.pyc create mode 100644 waylay-sdk-queries-types/src/waylay/services/queries/models/__pycache__/interpolation_method_one_of7.cpython-311.pyc create mode 100644 waylay-sdk-queries-types/src/waylay/services/queries/models/__pycache__/interpolation_method_one_of8.cpython-311.pyc create mode 100644 waylay-sdk-queries-types/src/waylay/services/queries/models/__pycache__/interpolation_method_one_of9.cpython-311.pyc create mode 100644 waylay-sdk-queries-types/src/waylay/services/queries/models/__pycache__/interpolation_spec.cpython-311.pyc create mode 100644 waylay-sdk-queries-types/src/waylay/services/queries/models/__pycache__/links.cpython-311.pyc create mode 100644 waylay-sdk-queries-types/src/waylay/services/queries/models/__pycache__/location_inner.cpython-311.pyc create mode 100644 waylay-sdk-queries-types/src/waylay/services/queries/models/__pycache__/message.cpython-311.pyc create mode 100644 waylay-sdk-queries-types/src/waylay/services/queries/models/__pycache__/message_arguments.cpython-311.pyc create mode 100644 waylay-sdk-queries-types/src/waylay/services/queries/models/__pycache__/message_level.cpython-311.pyc create mode 100644 waylay-sdk-queries-types/src/waylay/services/queries/models/__pycache__/message_properties.cpython-311.pyc create mode 100644 waylay-sdk-queries-types/src/waylay/services/queries/models/__pycache__/object_data.cpython-311.pyc create mode 100644 waylay-sdk-queries-types/src/waylay/services/queries/models/__pycache__/object_data_set.cpython-311.pyc create mode 100644 waylay-sdk-queries-types/src/waylay/services/queries/models/__pycache__/object_data_value.cpython-311.pyc create mode 100644 waylay-sdk-queries-types/src/waylay/services/queries/models/__pycache__/queries_list_response.cpython-311.pyc create mode 100644 waylay-sdk-queries-types/src/waylay/services/queries/models/__pycache__/query_definition.cpython-311.pyc create mode 100644 waylay-sdk-queries-types/src/waylay/services/queries/models/__pycache__/query_entity_input.cpython-311.pyc create mode 100644 waylay-sdk-queries-types/src/waylay/services/queries/models/__pycache__/query_execution_message.cpython-311.pyc create mode 100644 waylay-sdk-queries-types/src/waylay/services/queries/models/__pycache__/query_execution_message_level.cpython-311.pyc create mode 100644 waylay-sdk-queries-types/src/waylay/services/queries/models/__pycache__/query_hal_links.cpython-311.pyc create mode 100644 waylay-sdk-queries-types/src/waylay/services/queries/models/__pycache__/query_input.cpython-311.pyc create mode 100644 waylay-sdk-queries-types/src/waylay/services/queries/models/__pycache__/query_list_hal_links.cpython-311.pyc create mode 100644 waylay-sdk-queries-types/src/waylay/services/queries/models/__pycache__/query_list_item.cpython-311.pyc create mode 100644 waylay-sdk-queries-types/src/waylay/services/queries/models/__pycache__/query_output.cpython-311.pyc create mode 100644 waylay-sdk-queries-types/src/waylay/services/queries/models/__pycache__/query_response.cpython-311.pyc create mode 100644 waylay-sdk-queries-types/src/waylay/services/queries/models/__pycache__/query_result.cpython-311.pyc create mode 100644 waylay-sdk-queries-types/src/waylay/services/queries/models/__pycache__/query_update_input.cpython-311.pyc create mode 100644 waylay-sdk-queries-types/src/waylay/services/queries/models/__pycache__/render.cpython-311.pyc create mode 100644 waylay-sdk-queries-types/src/waylay/services/queries/models/__pycache__/render1.cpython-311.pyc create mode 100644 waylay-sdk-queries-types/src/waylay/services/queries/models/__pycache__/render_mode.cpython-311.pyc create mode 100644 waylay-sdk-queries-types/src/waylay/services/queries/models/__pycache__/render_mode_one_of.cpython-311.pyc create mode 100644 waylay-sdk-queries-types/src/waylay/services/queries/models/__pycache__/render_mode_one_of1.cpython-311.pyc create mode 100644 waylay-sdk-queries-types/src/waylay/services/queries/models/__pycache__/render_mode_one_of2.cpython-311.pyc create mode 100644 waylay-sdk-queries-types/src/waylay/services/queries/models/__pycache__/render_mode_one_of3.cpython-311.pyc create mode 100644 waylay-sdk-queries-types/src/waylay/services/queries/models/__pycache__/render_mode_one_of4.cpython-311.pyc create mode 100644 waylay-sdk-queries-types/src/waylay/services/queries/models/__pycache__/render_mode_one_of5.cpython-311.pyc create mode 100644 waylay-sdk-queries-types/src/waylay/services/queries/models/__pycache__/render_mode_one_of6.cpython-311.pyc create mode 100644 waylay-sdk-queries-types/src/waylay/services/queries/models/__pycache__/render_mode_one_of7.cpython-311.pyc create mode 100644 waylay-sdk-queries-types/src/waylay/services/queries/models/__pycache__/render_mode_one_of8.cpython-311.pyc create mode 100644 waylay-sdk-queries-types/src/waylay/services/queries/models/__pycache__/render_mode_one_of9.cpython-311.pyc create mode 100644 waylay-sdk-queries-types/src/waylay/services/queries/models/__pycache__/response_data_set.cpython-311.pyc create mode 100644 waylay-sdk-queries-types/src/waylay/services/queries/models/__pycache__/row_data_set.cpython-311.pyc create mode 100644 waylay-sdk-queries-types/src/waylay/services/queries/models/__pycache__/row_data_set_data_axis.cpython-311.pyc create mode 100644 waylay-sdk-queries-types/src/waylay/services/queries/models/__pycache__/row_header.cpython-311.pyc create mode 100644 waylay-sdk-queries-types/src/waylay/services/queries/models/__pycache__/row_headers_inner.cpython-311.pyc create mode 100644 waylay-sdk-queries-types/src/waylay/services/queries/models/__pycache__/series_data_set.cpython-311.pyc create mode 100644 waylay-sdk-queries-types/src/waylay/services/queries/models/__pycache__/series_spec.cpython-311.pyc create mode 100644 waylay-sdk-queries-types/src/waylay/services/queries/models/__pycache__/time_window_from.cpython-311.pyc create mode 100644 waylay-sdk-queries-types/src/waylay/services/queries/models/__pycache__/time_window_until.cpython-311.pyc create mode 100644 waylay-sdk-queries-types/src/waylay/services/queries/models/__pycache__/validation_error.cpython-311.pyc create mode 100644 waylay-sdk-queries-types/src/waylay/services/queries/models/__pycache__/window.cpython-311.pyc create mode 100644 waylay-sdk-queries-types/src/waylay/services/queries/models/__pycache__/window_override.cpython-311.pyc create mode 100644 waylay-sdk-queries-types/src/waylay/services/queries/models/aggregation_by_resource_and_metric.py create mode 100644 waylay-sdk-queries-types/src/waylay/services/queries/models/aggregation_by_resource_or_metric.py create mode 100644 waylay-sdk-queries-types/src/waylay/services/queries/models/aggregation_method.py create mode 100644 waylay-sdk-queries-types/src/waylay/services/queries/models/aggregation_method_one_of.py create mode 100644 waylay-sdk-queries-types/src/waylay/services/queries/models/aggregation_method_one_of1.py create mode 100644 waylay-sdk-queries-types/src/waylay/services/queries/models/aggregation_method_one_of2.py create mode 100644 waylay-sdk-queries-types/src/waylay/services/queries/models/aggregation_method_one_of3.py create mode 100644 waylay-sdk-queries-types/src/waylay/services/queries/models/aggregation_method_one_of4.py create mode 100644 waylay-sdk-queries-types/src/waylay/services/queries/models/aggregation_method_one_of5.py create mode 100644 waylay-sdk-queries-types/src/waylay/services/queries/models/aggregation_method_one_of6.py create mode 100644 waylay-sdk-queries-types/src/waylay/services/queries/models/aggregation_method_one_of7.py create mode 100644 waylay-sdk-queries-types/src/waylay/services/queries/models/aggregation_method_one_of8.py create mode 100644 waylay-sdk-queries-types/src/waylay/services/queries/models/aggregations_inner.py create mode 100644 waylay-sdk-queries-types/src/waylay/services/queries/models/align_at.py create mode 100644 waylay-sdk-queries-types/src/waylay/services/queries/models/align_shift.py create mode 100644 waylay-sdk-queries-types/src/waylay/services/queries/models/alignment.py create mode 100644 waylay-sdk-queries-types/src/waylay/services/queries/models/alignment_grid_interval.py create mode 100644 waylay-sdk-queries-types/src/waylay/services/queries/models/alignment_timezone.py create mode 100644 waylay-sdk-queries-types/src/waylay/services/queries/models/cause_exception.py create mode 100644 waylay-sdk-queries-types/src/waylay/services/queries/models/column_data_set.py create mode 100644 waylay-sdk-queries-types/src/waylay/services/queries/models/column_data_set_data_axis.py create mode 100644 waylay-sdk-queries-types/src/waylay/services/queries/models/column_header.py create mode 100644 waylay-sdk-queries-types/src/waylay/services/queries/models/column_headers_inner.py create mode 100644 waylay-sdk-queries-types/src/waylay/services/queries/models/data_axis_option.py create mode 100644 waylay-sdk-queries-types/src/waylay/services/queries/models/data_set_attributes.py create mode 100644 waylay-sdk-queries-types/src/waylay/services/queries/models/data_set_window.py create mode 100644 waylay-sdk-queries-types/src/waylay/services/queries/models/datum.py create mode 100644 waylay-sdk-queries-types/src/waylay/services/queries/models/default_aggregation.py create mode 100644 waylay-sdk-queries-types/src/waylay/services/queries/models/default_interpolation.py create mode 100644 waylay-sdk-queries-types/src/waylay/services/queries/models/delete_response.py create mode 100644 waylay-sdk-queries-types/src/waylay/services/queries/models/embeddings.py create mode 100644 waylay-sdk-queries-types/src/waylay/services/queries/models/from_override.py create mode 100644 waylay-sdk-queries-types/src/waylay/services/queries/models/grouping_interval.py create mode 100644 waylay-sdk-queries-types/src/waylay/services/queries/models/grouping_interval_override.py create mode 100644 waylay-sdk-queries-types/src/waylay/services/queries/models/grouping_interval_override_one_of.py create mode 100644 waylay-sdk-queries-types/src/waylay/services/queries/models/hal_link.py create mode 100644 waylay-sdk-queries-types/src/waylay/services/queries/models/hal_link_method.py create mode 100644 waylay-sdk-queries-types/src/waylay/services/queries/models/hal_link_role.py create mode 100644 waylay-sdk-queries-types/src/waylay/services/queries/models/header_array_option.py create mode 100644 waylay-sdk-queries-types/src/waylay/services/queries/models/hierarchical.py create mode 100644 waylay-sdk-queries-types/src/waylay/services/queries/models/http_validation_error.py create mode 100644 waylay-sdk-queries-types/src/waylay/services/queries/models/interpolation.py create mode 100644 waylay-sdk-queries-types/src/waylay/services/queries/models/interpolation_method.py create mode 100644 waylay-sdk-queries-types/src/waylay/services/queries/models/interpolation_method_one_of.py create mode 100644 waylay-sdk-queries-types/src/waylay/services/queries/models/interpolation_method_one_of1.py create mode 100644 waylay-sdk-queries-types/src/waylay/services/queries/models/interpolation_method_one_of10.py create mode 100644 waylay-sdk-queries-types/src/waylay/services/queries/models/interpolation_method_one_of11.py create mode 100644 waylay-sdk-queries-types/src/waylay/services/queries/models/interpolation_method_one_of12.py create mode 100644 waylay-sdk-queries-types/src/waylay/services/queries/models/interpolation_method_one_of13.py create mode 100644 waylay-sdk-queries-types/src/waylay/services/queries/models/interpolation_method_one_of2.py create mode 100644 waylay-sdk-queries-types/src/waylay/services/queries/models/interpolation_method_one_of3.py create mode 100644 waylay-sdk-queries-types/src/waylay/services/queries/models/interpolation_method_one_of4.py create mode 100644 waylay-sdk-queries-types/src/waylay/services/queries/models/interpolation_method_one_of5.py create mode 100644 waylay-sdk-queries-types/src/waylay/services/queries/models/interpolation_method_one_of6.py create mode 100644 waylay-sdk-queries-types/src/waylay/services/queries/models/interpolation_method_one_of7.py create mode 100644 waylay-sdk-queries-types/src/waylay/services/queries/models/interpolation_method_one_of8.py create mode 100644 waylay-sdk-queries-types/src/waylay/services/queries/models/interpolation_method_one_of9.py create mode 100644 waylay-sdk-queries-types/src/waylay/services/queries/models/interpolation_spec.py create mode 100644 waylay-sdk-queries-types/src/waylay/services/queries/models/links.py create mode 100644 waylay-sdk-queries-types/src/waylay/services/queries/models/location_inner.py create mode 100644 waylay-sdk-queries-types/src/waylay/services/queries/models/message.py create mode 100644 waylay-sdk-queries-types/src/waylay/services/queries/models/message_arguments.py create mode 100644 waylay-sdk-queries-types/src/waylay/services/queries/models/message_level.py create mode 100644 waylay-sdk-queries-types/src/waylay/services/queries/models/message_properties.py create mode 100644 waylay-sdk-queries-types/src/waylay/services/queries/models/object.py create mode 100644 waylay-sdk-queries-types/src/waylay/services/queries/models/object_data.py create mode 100644 waylay-sdk-queries-types/src/waylay/services/queries/models/object_data_set.py create mode 100644 waylay-sdk-queries-types/src/waylay/services/queries/models/object_data_value.py create mode 100644 waylay-sdk-queries-types/src/waylay/services/queries/models/py.typed create mode 100644 waylay-sdk-queries-types/src/waylay/services/queries/models/queries_list_response.py create mode 100644 waylay-sdk-queries-types/src/waylay/services/queries/models/query_definition.py create mode 100644 waylay-sdk-queries-types/src/waylay/services/queries/models/query_entity_input.py create mode 100644 waylay-sdk-queries-types/src/waylay/services/queries/models/query_execution_message.py create mode 100644 waylay-sdk-queries-types/src/waylay/services/queries/models/query_execution_message_level.py create mode 100644 waylay-sdk-queries-types/src/waylay/services/queries/models/query_hal_links.py create mode 100644 waylay-sdk-queries-types/src/waylay/services/queries/models/query_input.py create mode 100644 waylay-sdk-queries-types/src/waylay/services/queries/models/query_list_hal_links.py create mode 100644 waylay-sdk-queries-types/src/waylay/services/queries/models/query_list_item.py create mode 100644 waylay-sdk-queries-types/src/waylay/services/queries/models/query_output.py create mode 100644 waylay-sdk-queries-types/src/waylay/services/queries/models/query_response.py create mode 100644 waylay-sdk-queries-types/src/waylay/services/queries/models/query_result.py create mode 100644 waylay-sdk-queries-types/src/waylay/services/queries/models/query_update_input.py create mode 100644 waylay-sdk-queries-types/src/waylay/services/queries/models/render.py create mode 100644 waylay-sdk-queries-types/src/waylay/services/queries/models/render1.py create mode 100644 waylay-sdk-queries-types/src/waylay/services/queries/models/render_mode.py create mode 100644 waylay-sdk-queries-types/src/waylay/services/queries/models/render_mode_one_of.py create mode 100644 waylay-sdk-queries-types/src/waylay/services/queries/models/render_mode_one_of1.py create mode 100644 waylay-sdk-queries-types/src/waylay/services/queries/models/render_mode_one_of2.py create mode 100644 waylay-sdk-queries-types/src/waylay/services/queries/models/render_mode_one_of3.py create mode 100644 waylay-sdk-queries-types/src/waylay/services/queries/models/render_mode_one_of4.py create mode 100644 waylay-sdk-queries-types/src/waylay/services/queries/models/render_mode_one_of5.py create mode 100644 waylay-sdk-queries-types/src/waylay/services/queries/models/render_mode_one_of6.py create mode 100644 waylay-sdk-queries-types/src/waylay/services/queries/models/render_mode_one_of7.py create mode 100644 waylay-sdk-queries-types/src/waylay/services/queries/models/render_mode_one_of8.py create mode 100644 waylay-sdk-queries-types/src/waylay/services/queries/models/render_mode_one_of9.py create mode 100644 waylay-sdk-queries-types/src/waylay/services/queries/models/response_data_set.py create mode 100644 waylay-sdk-queries-types/src/waylay/services/queries/models/row_data_set.py create mode 100644 waylay-sdk-queries-types/src/waylay/services/queries/models/row_data_set_data_axis.py create mode 100644 waylay-sdk-queries-types/src/waylay/services/queries/models/row_header.py create mode 100644 waylay-sdk-queries-types/src/waylay/services/queries/models/row_headers_inner.py create mode 100644 waylay-sdk-queries-types/src/waylay/services/queries/models/series_data_set.py create mode 100644 waylay-sdk-queries-types/src/waylay/services/queries/models/series_spec.py create mode 100644 waylay-sdk-queries-types/src/waylay/services/queries/models/time_window_from.py create mode 100644 waylay-sdk-queries-types/src/waylay/services/queries/models/time_window_until.py create mode 100644 waylay-sdk-queries-types/src/waylay/services/queries/models/validation_error.py create mode 100644 waylay-sdk-queries-types/src/waylay/services/queries/models/window.py create mode 100644 waylay-sdk-queries-types/src/waylay/services/queries/models/window_override.py create mode 100644 waylay-sdk-queries-types/src/waylay/services/queries/queries/__init__.py create mode 100644 waylay-sdk-queries-types/src/waylay/services/queries/queries/__pycache__/__init__.cpython-311.pyc create mode 100644 waylay-sdk-queries-types/src/waylay/services/queries/queries/__pycache__/execute_api.cpython-311.pyc create mode 100644 waylay-sdk-queries-types/src/waylay/services/queries/queries/__pycache__/manage_api.cpython-311.pyc create mode 100644 waylay-sdk-queries-types/src/waylay/services/queries/queries/__pycache__/status_api.cpython-311.pyc create mode 100644 waylay-sdk-queries-types/src/waylay/services/queries/queries/execute_api.py create mode 100644 waylay-sdk-queries-types/src/waylay/services/queries/queries/manage_api.py create mode 100644 waylay-sdk-queries-types/src/waylay/services/queries/queries/py.typed create mode 100644 waylay-sdk-queries-types/src/waylay/services/queries/queries/status_api.py create mode 100644 waylay-sdk-queries/.openapi-generator/FILES create mode 100644 waylay-sdk-queries/.openapi-generator/VERSION create mode 100644 waylay-sdk-queries/LICENSE.txt create mode 100644 waylay-sdk-queries/README.md create mode 100644 waylay-sdk-queries/pyproject.toml create mode 100644 waylay-sdk-queries/src/waylay/services/queries/api/__init__.py create mode 100644 waylay-sdk-queries/src/waylay/services/queries/api/__pycache__/__init__.cpython-311.pyc create mode 100644 waylay-sdk-queries/src/waylay/services/queries/api/__pycache__/execute_api.cpython-311.pyc create mode 100644 waylay-sdk-queries/src/waylay/services/queries/api/__pycache__/manage_api.cpython-311.pyc create mode 100644 waylay-sdk-queries/src/waylay/services/queries/api/__pycache__/status_api.cpython-311.pyc create mode 100644 waylay-sdk-queries/src/waylay/services/queries/api/execute_api.py create mode 100644 waylay-sdk-queries/src/waylay/services/queries/api/manage_api.py create mode 100644 waylay-sdk-queries/src/waylay/services/queries/api/py.typed create mode 100644 waylay-sdk-queries/src/waylay/services/queries/api/status_api.py create mode 100644 waylay-sdk-queries/src/waylay/services/queries/service/__init__.py create mode 100644 waylay-sdk-queries/src/waylay/services/queries/service/__pycache__/__init__.cpython-311.pyc create mode 100644 waylay-sdk-queries/src/waylay/services/queries/service/__pycache__/service.cpython-311.pyc create mode 100644 waylay-sdk-queries/src/waylay/services/queries/service/py.typed create mode 100644 waylay-sdk-queries/src/waylay/services/queries/service/service.py diff --git a/.github/workflows/python.yml b/.github/workflows/python.yml new file mode 100644 index 0000000..2e7e23c --- /dev/null +++ b/.github/workflows/python.yml @@ -0,0 +1,136 @@ +name: Waylay Queries CI + +on: + push: + branches: [ "main", "staging", "release/**" ] + tags: + - '**' + pull_request: + branches: [ "main", "staging", "release/**" ] + +jobs: + test: + runs-on: ubuntu-latest + strategy: + matrix: + python-version: ["3.9", "3.10", "3.11", "3.12"] + + steps: + - uses: actions/checkout@v4 + - name: Set up Git with token to access other private repositories + run: git config --global url."https://${{ secrets.OTOMATOR_PAT }}@github".insteadOf https://github + - name: Setup Python ${{ matrix.python-version }} + uses: actions/setup-python@v5 + with: + python-version: ${{ matrix.python-version }} + cache: 'pip' + cache-dependency-path: '**/*requirements*.txt' + - name: install dependencies + run: make ci-install-types + - name: code qa + run: make ci-code-qa + - name: unit tests + run: make ci-test + + test-minimal: + runs-on: ubuntu-latest + strategy: + matrix: + python-version: ["3.9", "3.10", "3.11", "3.12"] + steps: + - uses: actions/checkout@v4 + - name: Set up Git with token to access other private repositories + run: git config --global url."https://${{ secrets.OTOMATOR_PAT }}@github".insteadOf https://github + - name: Setup Python ${{ matrix.python-version }} + uses: actions/setup-python@v5 + with: + python-version: ${{ matrix.python-version }} + cache: 'pip' + cache-dependency-path: '**/*requirements*.txt' + - name: install dependencies + run: make ci-install-api + - name: unit tests + run: make ci-test + + publish-api: + needs: + - test + - test-minimal + if: github.event_name == 'push' && startsWith(github.ref, 'refs/tags') + + defaults: + run: + working-directory: ./waylay-sdk-queries + + name: Publish api package to PyPI + runs-on: ubuntu-latest + environment: + name: pypi + url: https://pypi.org/p/waylay-sdk-queries + + permissions: + actions: read + contents: read + id-token: write # IMPORTANT: mandatory for trusted publishing + + steps: + - uses: actions/checkout@v4 + - name: Set up Python + uses: actions/setup-python@v5 + with: + python-version: "3.11" + - name: Install pypa/build + run: pip install build + - name: check version + id: check-tag + uses: samuelcolvin/check-python-version@v4.1 + with: + version_file_path: waylay-sdk-queries/src/waylay/services/queries/service/__init__.py + - name: Build + run: python3 -m build + - name: Publish to PyPI + uses: pypa/gh-action-pypi-publish@release/v1 + with: + packages-dir: waylay-sdk-queries/dist + + publish-types: + needs: + - test + - test-minimal + if: github.event_name == 'push' && startsWith(github.ref, 'refs/tags') + + defaults: + run: + working-directory: ./waylay-sdk-queries-types + + name: Publish types package to PyPI + runs-on: ubuntu-latest + environment: + name: pypi + url: https://pypi.org/p/waylay-sdk-queries-types + + + permissions: + actions: read + contents: read + id-token: write # IMPORTANT: mandatory for trusted publishing + + steps: + - uses: actions/checkout@v4 + - name: Set up Python + uses: actions/setup-python@v5 + with: + python-version: "3.11" + - name: Install pypa/build + run: pip install build + - name: check version + id: check-tag + uses: samuelcolvin/check-python-version@v4.1 + with: + version_file_path: waylay-sdk-queries-types/src/waylay/services/queries/models/__init__.py + - name: Build + run: python3 -m build + - name: Publish to PyPI + uses: pypa/gh-action-pypi-publish@release/v1 + with: + packages-dir: waylay-sdk-queries-types/dist \ No newline at end of file diff --git a/.openapi-generator-ignore b/.openapi-generator-ignore new file mode 100644 index 0000000..7484ee5 --- /dev/null +++ b/.openapi-generator-ignore @@ -0,0 +1,23 @@ +# OpenAPI Generator Ignore +# Generated by openapi-generator https://github.com/openapitools/openapi-generator + +# Use this file to prevent files from being overwritten by the generator. +# The patterns follow closely to .gitignore or .dockerignore. + +# As an example, the C# client generator defines ApiClient.cs. +# You can make changes and tell OpenAPI Generator to ignore just this file by uncommenting the following line: +#ApiClient.cs + +# You can match any string of characters against a directory, file or extension with a single asterisk (*): +#foo/*/qux +# The above matches foo/bar/qux and foo/baz/qux, but not foo/bar/baz/qux + +# You can recursively match patterns against a directory, file or extension with a double asterisk (**): +#foo/**/qux +# This matches foo/bar/qux, foo/baz/qux, and foo/bar/baz/qux + +# You can also negate patterns with an exclamation (!). +# For example, you can ignore all files in a docs folder with the file extension .md: +#docs/*.md +# Then explicitly reverse the ignore rule for a single file: +#!docs/README.md diff --git a/.openapi-generator/FILES b/.openapi-generator/FILES new file mode 100644 index 0000000..10e55f6 --- /dev/null +++ b/.openapi-generator/FILES @@ -0,0 +1,231 @@ +.github/workflows/python.yml +.openapi-generator-ignore +LICENSE.txt +Makefile +README.md +docs/AggregationByResourceAndMetric.md +docs/AggregationByResourceOrMetric.md +docs/AggregationMethod.md +docs/AggregationMethodOneOf.md +docs/AggregationMethodOneOf1.md +docs/AggregationMethodOneOf2.md +docs/AggregationMethodOneOf3.md +docs/AggregationMethodOneOf4.md +docs/AggregationMethodOneOf5.md +docs/AggregationMethodOneOf6.md +docs/AggregationMethodOneOf7.md +docs/AggregationMethodOneOf8.md +docs/AggregationsInner.md +docs/AlignAt.md +docs/AlignShift.md +docs/Alignment.md +docs/AlignmentGridInterval.md +docs/AlignmentTimezone.md +docs/CauseException.md +docs/ColumnDataSet.md +docs/ColumnDataSetDataAxis.md +docs/ColumnHeader.md +docs/ColumnHeadersInner.md +docs/DataAxisOption.md +docs/DataSetAttributes.md +docs/DataSetWindow.md +docs/Datum.md +docs/DefaultAggregation.md +docs/DefaultInterpolation.md +docs/DeleteResponse.md +docs/Embeddings.md +docs/ExecuteApi.md +docs/FromOverride.md +docs/GroupingInterval.md +docs/GroupingIntervalOverride.md +docs/GroupingIntervalOverrideOneOf.md +docs/HALLink.md +docs/HALLinkMethod.md +docs/HALLinkRole.md +docs/HTTPValidationError.md +docs/HeaderArrayOption.md +docs/Hierarchical.md +docs/Interpolation.md +docs/InterpolationMethod.md +docs/InterpolationMethodOneOf.md +docs/InterpolationMethodOneOf1.md +docs/InterpolationMethodOneOf10.md +docs/InterpolationMethodOneOf11.md +docs/InterpolationMethodOneOf12.md +docs/InterpolationMethodOneOf13.md +docs/InterpolationMethodOneOf2.md +docs/InterpolationMethodOneOf3.md +docs/InterpolationMethodOneOf4.md +docs/InterpolationMethodOneOf5.md +docs/InterpolationMethodOneOf6.md +docs/InterpolationMethodOneOf7.md +docs/InterpolationMethodOneOf8.md +docs/InterpolationMethodOneOf9.md +docs/InterpolationSpec.md +docs/Links.md +docs/LocationInner.md +docs/ManageApi.md +docs/Message.md +docs/MessageArguments.md +docs/MessageLevel.md +docs/MessageProperties.md +docs/ObjectData.md +docs/ObjectDataSet.md +docs/ObjectDataValue.md +docs/Operation.md +docs/QueriesListResponse.md +docs/QueryDefinition.md +docs/QueryEntityInput.md +docs/QueryExecutionMessage.md +docs/QueryExecutionMessageLevel.md +docs/QueryHALLinks.md +docs/QueryInput.md +docs/QueryListHALLinks.md +docs/QueryListItem.md +docs/QueryOutput.md +docs/QueryResponse.md +docs/QueryResult.md +docs/QueryUpdateInput.md +docs/Render.md +docs/Render1.md +docs/RenderMode.md +docs/RenderModeOneOf.md +docs/RenderModeOneOf1.md +docs/RenderModeOneOf2.md +docs/RenderModeOneOf3.md +docs/RenderModeOneOf4.md +docs/RenderModeOneOf5.md +docs/RenderModeOneOf6.md +docs/RenderModeOneOf7.md +docs/RenderModeOneOf8.md +docs/RenderModeOneOf9.md +docs/ResponseDataSet.md +docs/RowDataSet.md +docs/RowDataSetDataAxis.md +docs/RowHeader.md +docs/RowHeadersInner.md +docs/SeriesDataSet.md +docs/SeriesSpec.md +docs/StatusApi.md +docs/TimeWindowFrom.md +docs/TimeWindowUntil.md +docs/ValidationError.md +docs/Window.md +docs/WindowOverride.md +pyproject.toml +requirements.txt +test/__init__.py +test/api/__init__.py +test/api/execute_api_test.py +test/api/manage_api_test.py +test/api/status_api_test.py +test/conftest.py +test/openapi.py +test/types/__init__.py +test/types/aggregation_by_resource_and_metric_stub.py +test/types/aggregation_by_resource_or_metric_stub.py +test/types/aggregation_method_one_of1_stub.py +test/types/aggregation_method_one_of2_stub.py +test/types/aggregation_method_one_of3_stub.py +test/types/aggregation_method_one_of4_stub.py +test/types/aggregation_method_one_of5_stub.py +test/types/aggregation_method_one_of6_stub.py +test/types/aggregation_method_one_of7_stub.py +test/types/aggregation_method_one_of8_stub.py +test/types/aggregation_method_one_of_stub.py +test/types/aggregation_method_stub.py +test/types/aggregations_inner_stub.py +test/types/align_at_stub.py +test/types/align_shift_stub.py +test/types/alignment_grid_interval_stub.py +test/types/alignment_stub.py +test/types/alignment_timezone_stub.py +test/types/cause_exception_stub.py +test/types/column_data_set_data_axis_stub.py +test/types/column_data_set_stub.py +test/types/column_header_stub.py +test/types/column_headers_inner_stub.py +test/types/data_axis_option_stub.py +test/types/data_set_attributes_stub.py +test/types/data_set_window_stub.py +test/types/datum_stub.py +test/types/default_aggregation_stub.py +test/types/default_interpolation_stub.py +test/types/delete_response_stub.py +test/types/embeddings_stub.py +test/types/from_override_stub.py +test/types/grouping_interval_override_one_of_stub.py +test/types/grouping_interval_override_stub.py +test/types/grouping_interval_stub.py +test/types/hal_link_method_stub.py +test/types/hal_link_role_stub.py +test/types/hal_link_stub.py +test/types/header_array_option_stub.py +test/types/hierarchical_stub.py +test/types/http_validation_error_stub.py +test/types/interpolation_method_one_of10_stub.py +test/types/interpolation_method_one_of11_stub.py +test/types/interpolation_method_one_of12_stub.py +test/types/interpolation_method_one_of13_stub.py +test/types/interpolation_method_one_of1_stub.py +test/types/interpolation_method_one_of2_stub.py +test/types/interpolation_method_one_of3_stub.py +test/types/interpolation_method_one_of4_stub.py +test/types/interpolation_method_one_of5_stub.py +test/types/interpolation_method_one_of6_stub.py +test/types/interpolation_method_one_of7_stub.py +test/types/interpolation_method_one_of8_stub.py +test/types/interpolation_method_one_of9_stub.py +test/types/interpolation_method_one_of_stub.py +test/types/interpolation_method_stub.py +test/types/interpolation_spec_stub.py +test/types/interpolation_stub.py +test/types/links_stub.py +test/types/location_inner_stub.py +test/types/message_arguments_stub.py +test/types/message_level_stub.py +test/types/message_properties_stub.py +test/types/message_stub.py +test/types/object_data_set_stub.py +test/types/object_data_stub.py +test/types/object_data_value_stub.py +test/types/queries_list_response_stub.py +test/types/query_definition_stub.py +test/types/query_entity_input_stub.py +test/types/query_execution_message_level_stub.py +test/types/query_execution_message_stub.py +test/types/query_hal_links_stub.py +test/types/query_input_stub.py +test/types/query_list_hal_links_stub.py +test/types/query_list_item_stub.py +test/types/query_output_stub.py +test/types/query_response_stub.py +test/types/query_result_stub.py +test/types/query_update_input_stub.py +test/types/render1_stub.py +test/types/render_mode_one_of1_stub.py +test/types/render_mode_one_of2_stub.py +test/types/render_mode_one_of3_stub.py +test/types/render_mode_one_of4_stub.py +test/types/render_mode_one_of5_stub.py +test/types/render_mode_one_of6_stub.py +test/types/render_mode_one_of7_stub.py +test/types/render_mode_one_of8_stub.py +test/types/render_mode_one_of9_stub.py +test/types/render_mode_one_of_stub.py +test/types/render_mode_stub.py +test/types/render_stub.py +test/types/response_data_set_stub.py +test/types/row_data_set_data_axis_stub.py +test/types/row_data_set_stub.py +test/types/row_header_stub.py +test/types/row_headers_inner_stub.py +test/types/series_data_set_stub.py +test/types/series_spec_stub.py +test/types/time_window_from_stub.py +test/types/time_window_until_stub.py +test/types/validation_error_stub.py +test/types/window_override_stub.py +test/types/window_stub.py +waylay-sdk-queries-types/README.md +waylay-sdk-queries/README.md diff --git a/.openapi-generator/VERSION b/.openapi-generator/VERSION new file mode 100644 index 0000000..1985849 --- /dev/null +++ b/.openapi-generator/VERSION @@ -0,0 +1 @@ +7.7.0 diff --git a/LICENSE.txt b/LICENSE.txt new file mode 100644 index 0000000..2796771 --- /dev/null +++ b/LICENSE.txt @@ -0,0 +1,13 @@ +ISC License (ISC) +Copyright 2024, Waylay + +Permission to use, copy, modify, and/or distribute this software for any purpose +with or without fee is hereby granted, provided that the above copyright notice +and this permission notice appear in all copies. + +THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH +REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND +FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, +OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS +ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. \ No newline at end of file diff --git a/Makefile b/Makefile new file mode 100644 index 0000000..9ad819a --- /dev/null +++ b/Makefile @@ -0,0 +1,158 @@ +printMsg=printf "\033[36m\033[1m%-15s\033[0m\033[36m %-30s\033[0m\n" + +.PHONY: help test +## use triple hashes ### to indicate main build targets +help: + @awk 'BEGIN {FS = ":[^#]*? ### "} /^[a-zA-Z0-9_\-\.]+:[^#]* ### / {printf "\033[1m\033[36m%-30s\033[0m %s\n", $$1, $$2}' $(MAKEFILE_LIST) + @awk 'BEGIN {FS = ":[^#]*? ## "} /^[a-zA-Z0-9_\-\.]+:[^#]* ## / {printf "\033[36m%-30s\033[0m %s\n", $$1, $$2}' $(MAKEFILE_LIST) +.DEFAULT_GOAL := help + +SERVICE_NAME=queries + +API_FOLDER=waylay-sdk-${SERVICE_NAME} +API_SRC=${API_FOLDER}/src +TYPES_FOLDER=waylay-sdk-${SERVICE_NAME}-types +TYPES_SRC=${TYPES_FOLDER}/src +TEST_FOLDER=test +TEST_RUN_FOLDER=${TEST_FOLDER}/_run + +CMD_FORMAT=ruff format --no-respect-gitignore --preview +CMD_FIX=ruff check --fix --unsafe-fixes --no-respect-gitignore --preview +CMD_CHECK=ruff check --no-respect-gitignore --preview + +# disables test QA unless set to empty string +TEST_QA_PREFIX?=echo DISABLED + +VENV_DIR=.venv +VENV_TYPES_DIR=.venv/types +VENV_TYPES_ACTIVATE_CMD=${VENV_TYPES_DIR}/bin/activate +VENV_TYPES_ACTIVATE=. ${VENV_TYPES_ACTIVATE_CMD} + +${VENV_TYPES_ACTIVATE_CMD}: + python3 -m venv ${VENV_TYPES_DIR} + ${VENV_TYPES_ACTIVATE} && make exec-dev-install-types + +VENV_NOTYPES_DIR=.venv/notypes +VENV_NOTYPES_ACTIVATE_CMD=${VENV_NOTYPES_DIR}/bin/activate +VENV_NOTYPES_ACTIVATE=. ${VENV_NOTYPES_ACTIVATE_CMD} + +${VENV_NOTYPES_ACTIVATE_CMD}: + python3 -m venv ${VENV_NOTYPES_DIR} + ${VENV_NOTYPES_ACTIVATE} && make exec-dev-install-api + + +install-types: ${VENV_TYPES_ACTIVATE_CMD} + +install-notypes: ${VENV_NOTYPES_ACTIVATE_CMD} + +install: install-types + +clean: + rm -fr ${VENV_DIR} + rm -fr .*_cache + rm -fr */.*_cache + rm -fr */src/*.egg-info + rm -fr **/__pycache__ + rm -rf ${TEST_RUN_FOLDER} + +lint: install ### Run linting checks + @${VENV_TYPES_ACTIVATE} && make exec-lint + +typecheck: install ### Run type checks + @${VENV_TYPES_ACTIVATE} && make exec-typecheck + +code-qa: install ### perform code quality checks + @${VENV_TYPES_ACTIVATE} && make exec-code-qa + +test: test-notypes test-types ### Run unit tests with and without types installed + +test-types: install-types ### Run unit tests with types installed + @${VENV_TYPES_ACTIVATE} && make exec-test + @${printMsg} 'tests with types package installed' 'OK' + +test-notypes: install-notypes ### Run unit tests with types installed + @${VENV_NOTYPES_ACTIVATE} && make exec-test + @${printMsg} 'tests without types package installed' 'OK' + +format: install ### Format code + @${VENV_TYPES_ACTIVATE} && make exec-format + +exec-lint: ### Run linting checks + cd ${API_FOLDER} && ${CMD_CHECK} + @${printMsg} 'lint ${API_FOLDER}' 'OK' + cd ${TYPES_FOLDER} && ${CMD_CHECK} + @${printMsg} 'lint ${TYPES_FOLDER}' 'OK' + ${CMD_CHECK} + @${printMsg} 'lint test' 'OK' + +exec-typecheck: ### Run type checks + cd ${API_SRC}/ && mypy --namespace-packages -p waylay + @${printMsg} 'typecheck api' 'OK' + cd ${TYPES_SRC}/ && mypy --namespace-packages -p waylay + @${printMsg} 'typecheck types' 'OK' + ${TEST_QA_PREFIX} mypy ${TEST_FOLDER} + @${printMsg} 'typecheck test' '${TEST_QA_PREFIX} OK' + +${TEST_RUN_FOLDER}: # workaround for JSF schema resolution + mkdir -p ${TEST_RUN_FOLDER} + cp -r openapi ${TEST_RUN_FOLDER}/openapi + # let JSF loader resolve './xx.yaml' to 'openapi/xx.yaml.json' + # and make contentEncoding=base64 work + cd ${TEST_RUN_FOLDER}/openapi && for f in `ls *.yaml`; \ + do \ + cat $$f | yq 'tojson' | sed -e 's/"base64"/"base-64"/' > $$f.json; \ + cd .. && ln -s openapi/$$f.json $$f; cd openapi; \ + done + +exec-test: ${TEST_RUN_FOLDER} ### Run unit tests + cd ${TEST_RUN_FOLDER} && pytest .. + +exec-format: ### Format code + ${CMD_FIX} ${API_FOLDER} + ${CMD_FORMAT} ${API_FOLDER} + @${printMsg} 'format api' 'OK' + ${CMD_FIX} ${TYPES_FOLDER} + ${CMD_FORMAT} ${TYPES_FOLDER} + @${printMsg} 'format types' 'OK' + ${CMD_FIX} ${TEST_FOLDER} + ${CMD_FORMAT} ${TEST_FOLDER} + @${printMsg} 'format test' 'OK' + +exec-code-qa: exec-lint exec-typecheck ### perform code quality checks + +ci-code-qa: exec-code-qa ### perform ci code quality checks + +exec-dev-install-types: exec-dev-install-api ### Install the development environment including types + pip install -e ${TYPES_FOLDER}[dev] + +exec-dev-install-api: _install_requirements ### Install the minimal development environment + pip install -e ${API_FOLDER}[dev] + +ci-install-types: ci-install-api ### Install the environment including types with frozen requirements + pip install './${TYPES_FOLDER}[dev]' + +ci-install-api: _install_requirements ### Install the minimal environment with frozen requirements + pip install './${API_FOLDER}[dev]' + +ci-test: exec-test ### perform ci unit tests + +_install_requirements: + pip install --upgrade pip + pip install -r requirements.txt + +_GENERATED_FOLDER?=. +_GENERATED_FILES=.openapi-generator/FILES + +_clean_gen: ### Removes all code-generated files + @test -s ${_GENERATED_FOLDER}/${_GENERATED_FILES} || ( \ + ${printMsg} 'clean-generated ${_GENERATED_FOLDER}' 'FAILED (no ${_GENERATED_FILES}).' \ + && exit -1 \ + ) + cd ${_GENERATED_FOLDER} && xargs rm -f < ${_GENERATED_FILES} && find . -empty -type d -delete + @${printMsg} 'clean-generated ${_GENERATED_FOLDER}' 'OK' + +clean-generated: ### Removes all code-generated files + @make clean + @_GENERATED_FOLDER=${TYPES_FOLDER} make _clean_gen + @_GENERATED_FOLDER=${API_FOLDER} make _clean_gen + @_GENERATED_FOLDER='.' make _clean_gen diff --git a/README.md b/README.md index e69de29..48f1c50 100644 --- a/README.md +++ b/README.md @@ -0,0 +1,192 @@ +# Waylay Queries Service + +Execute and store queries on the Waylay timeseries. + +Protocol version: v1. + +This Python package is automatically generated based on the +Waylay Queries OpenAPI specification (API version: 0.5.0) +For more information, please visit [the openapi specification](https://docs.waylay.io/openapi/public/redocly/queries.html). + +It consists of two sub-packages that are both plugins for the waylay-sdk-core package. +- The `waylay-sdk-queries` sub-package contains the Queries api methods. +- The `waylay-sdk-queries-types` sub-package is an extension that contains the typed model classes for all path params, query params, body params and responses for each of the api methods in `waylay-sdk-queries`. + +## Requirements. +This package requires Python 3.9+. + +## Installation + +Normally this package is installed together with support for other services using the [waylay-sdk](https://pypi.org/project/waylay-sdk/) umbrella package: +* `pip install waylay-sdk` will install `waylay-sdk-queries` together with the SDK api packages for other services. +* `pip install waylay-sdk[types-queries]` will additionally install the types package `waylay-sdk-queries-types`. +* `pip install waylay-sdk[types]` will install the types packages for this and all other services. + +Alternatively, you can install support for this _queries_ service only, installing or extending an existing [waylay-sdk-core](https://pypi.org/project/waylay-sdk-core/): + +- `pip install waylay-sdk-queries` to only install api support for _queries_. +- `pip install waylay-sdk-queries[types]` to additionally install type support for _queries_. + +## Usage + +```python +from pprint import pprint + +# Import the waylay-client from the waylay-sdk-core package +from waylay.sdk.client import WaylayClient +from waylay.sdk.api.api_exceptions import ApiError + +# Intialize a waylay client instance +waylay_client = WaylayClient.from_profile() + +# Note that the typed model classes for responses/parameters/... are only available when `waylay-sdk-queries-types` is installed +from waylay.services.queries.models.query_input import QueryInput +from waylay.services.queries.models.query_result import QueryResult +try: + # Execute Query + # calls `POST /queries/v1/queries/v1/data` + api_response = await waylay_client.queries.execute.execute( + # query parameters: + query = { + 'resource': '13efb488-75ac-4dac-828a-d49c5c2ebbfc' + 'metric': 'temperature' + }, + # json data: use a generated model or a json-serializable python data structure (dict, list) + json = waylay.services.queries.QueryInput() # QueryInput | + headers = { + 'accept': 'accept_example', + }, + ) + print("The response of queries.execute.execute:\n") + pprint(api_response) +except ApiError as e: + print("Exception when calling queries.execute.execute: %s\n" % e) +``` + + +For more information, please visit the [Waylay API documentation](https://docs.waylay.io/#/api/?id=software-development-kits). + +## Documentation for API Endpoints + +All URIs are relative to *https://api.waylay.io* + +Class | Method | HTTP request | Description +------------ | ------------- | ------------- | ------------- +*ExecuteApi* | [**execute_by_name**](docs/ExecuteApi.md#execute_by_name) | **GET** /queries/v1/queries/v1/data/{query_name} | Execute Named Query +*ExecuteApi* | [**execute**](docs/ExecuteApi.md#execute) | **POST** /queries/v1/queries/v1/data | Execute Query +*ManageApi* | [**create**](docs/ManageApi.md#create) | **POST** /queries/v1/queries/v1/query | Post Query +*ManageApi* | [**get**](docs/ManageApi.md#get) | **GET** /queries/v1/queries/v1/query/{query_name} | Get Query +*ManageApi* | [**list**](docs/ManageApi.md#list) | **GET** /queries/v1/queries/v1/query | List Queries +*ManageApi* | [**remove**](docs/ManageApi.md#remove) | **DELETE** /queries/v1/queries/v1/query/{query_name} | Remove Query +*ManageApi* | [**update**](docs/ManageApi.md#update) | **PUT** /queries/v1/queries/v1/query/{query_name} | Update Query +*StatusApi* | [**get**](docs/StatusApi.md#get) | **GET** /queries/v1/queries/v1 | Get Version And Health + + +## Documentation For Models + + - [AggregationByResourceAndMetric](docs/AggregationByResourceAndMetric.md) + - [AggregationByResourceOrMetric](docs/AggregationByResourceOrMetric.md) + - [AggregationMethod](docs/AggregationMethod.md) + - [AggregationMethodOneOf](docs/AggregationMethodOneOf.md) + - [AggregationMethodOneOf1](docs/AggregationMethodOneOf1.md) + - [AggregationMethodOneOf2](docs/AggregationMethodOneOf2.md) + - [AggregationMethodOneOf3](docs/AggregationMethodOneOf3.md) + - [AggregationMethodOneOf4](docs/AggregationMethodOneOf4.md) + - [AggregationMethodOneOf5](docs/AggregationMethodOneOf5.md) + - [AggregationMethodOneOf6](docs/AggregationMethodOneOf6.md) + - [AggregationMethodOneOf7](docs/AggregationMethodOneOf7.md) + - [AggregationMethodOneOf8](docs/AggregationMethodOneOf8.md) + - [AggregationsInner](docs/AggregationsInner.md) + - [AlignAt](docs/AlignAt.md) + - [AlignShift](docs/AlignShift.md) + - [Alignment](docs/Alignment.md) + - [AlignmentGridInterval](docs/AlignmentGridInterval.md) + - [AlignmentTimezone](docs/AlignmentTimezone.md) + - [CauseException](docs/CauseException.md) + - [ColumnDataSet](docs/ColumnDataSet.md) + - [ColumnDataSetDataAxis](docs/ColumnDataSetDataAxis.md) + - [ColumnHeader](docs/ColumnHeader.md) + - [ColumnHeadersInner](docs/ColumnHeadersInner.md) + - [DataAxisOption](docs/DataAxisOption.md) + - [DataSetAttributes](docs/DataSetAttributes.md) + - [DataSetWindow](docs/DataSetWindow.md) + - [Datum](docs/Datum.md) + - [DefaultAggregation](docs/DefaultAggregation.md) + - [DefaultInterpolation](docs/DefaultInterpolation.md) + - [DeleteResponse](docs/DeleteResponse.md) + - [Embeddings](docs/Embeddings.md) + - [FromOverride](docs/FromOverride.md) + - [GroupingInterval](docs/GroupingInterval.md) + - [GroupingIntervalOverride](docs/GroupingIntervalOverride.md) + - [GroupingIntervalOverrideOneOf](docs/GroupingIntervalOverrideOneOf.md) + - [HALLink](docs/HALLink.md) + - [HALLinkMethod](docs/HALLinkMethod.md) + - [HALLinkRole](docs/HALLinkRole.md) + - [HTTPValidationError](docs/HTTPValidationError.md) + - [HeaderArrayOption](docs/HeaderArrayOption.md) + - [Hierarchical](docs/Hierarchical.md) + - [Interpolation](docs/Interpolation.md) + - [InterpolationMethod](docs/InterpolationMethod.md) + - [InterpolationMethodOneOf](docs/InterpolationMethodOneOf.md) + - [InterpolationMethodOneOf1](docs/InterpolationMethodOneOf1.md) + - [InterpolationMethodOneOf10](docs/InterpolationMethodOneOf10.md) + - [InterpolationMethodOneOf11](docs/InterpolationMethodOneOf11.md) + - [InterpolationMethodOneOf12](docs/InterpolationMethodOneOf12.md) + - [InterpolationMethodOneOf13](docs/InterpolationMethodOneOf13.md) + - [InterpolationMethodOneOf2](docs/InterpolationMethodOneOf2.md) + - [InterpolationMethodOneOf3](docs/InterpolationMethodOneOf3.md) + - [InterpolationMethodOneOf4](docs/InterpolationMethodOneOf4.md) + - [InterpolationMethodOneOf5](docs/InterpolationMethodOneOf5.md) + - [InterpolationMethodOneOf6](docs/InterpolationMethodOneOf6.md) + - [InterpolationMethodOneOf7](docs/InterpolationMethodOneOf7.md) + - [InterpolationMethodOneOf8](docs/InterpolationMethodOneOf8.md) + - [InterpolationMethodOneOf9](docs/InterpolationMethodOneOf9.md) + - [InterpolationSpec](docs/InterpolationSpec.md) + - [Links](docs/Links.md) + - [LocationInner](docs/LocationInner.md) + - [Message](docs/Message.md) + - [MessageArguments](docs/MessageArguments.md) + - [MessageLevel](docs/MessageLevel.md) + - [MessageProperties](docs/MessageProperties.md) + - [ObjectData](docs/ObjectData.md) + - [ObjectDataSet](docs/ObjectDataSet.md) + - [ObjectDataValue](docs/ObjectDataValue.md) + - [QueriesListResponse](docs/QueriesListResponse.md) + - [QueryDefinition](docs/QueryDefinition.md) + - [QueryEntityInput](docs/QueryEntityInput.md) + - [QueryExecutionMessage](docs/QueryExecutionMessage.md) + - [QueryExecutionMessageLevel](docs/QueryExecutionMessageLevel.md) + - [QueryHALLinks](docs/QueryHALLinks.md) + - [QueryInput](docs/QueryInput.md) + - [QueryListHALLinks](docs/QueryListHALLinks.md) + - [QueryListItem](docs/QueryListItem.md) + - [QueryOutput](docs/QueryOutput.md) + - [QueryResponse](docs/QueryResponse.md) + - [QueryResult](docs/QueryResult.md) + - [QueryUpdateInput](docs/QueryUpdateInput.md) + - [Render](docs/Render.md) + - [Render1](docs/Render1.md) + - [RenderMode](docs/RenderMode.md) + - [RenderModeOneOf](docs/RenderModeOneOf.md) + - [RenderModeOneOf1](docs/RenderModeOneOf1.md) + - [RenderModeOneOf2](docs/RenderModeOneOf2.md) + - [RenderModeOneOf3](docs/RenderModeOneOf3.md) + - [RenderModeOneOf4](docs/RenderModeOneOf4.md) + - [RenderModeOneOf5](docs/RenderModeOneOf5.md) + - [RenderModeOneOf6](docs/RenderModeOneOf6.md) + - [RenderModeOneOf7](docs/RenderModeOneOf7.md) + - [RenderModeOneOf8](docs/RenderModeOneOf8.md) + - [RenderModeOneOf9](docs/RenderModeOneOf9.md) + - [ResponseDataSet](docs/ResponseDataSet.md) + - [RowDataSet](docs/RowDataSet.md) + - [RowDataSetDataAxis](docs/RowDataSetDataAxis.md) + - [RowHeader](docs/RowHeader.md) + - [RowHeadersInner](docs/RowHeadersInner.md) + - [SeriesDataSet](docs/SeriesDataSet.md) + - [SeriesSpec](docs/SeriesSpec.md) + - [TimeWindowFrom](docs/TimeWindowFrom.md) + - [TimeWindowUntil](docs/TimeWindowUntil.md) + - [ValidationError](docs/ValidationError.md) + - [Window](docs/Window.md) + - [WindowOverride](docs/WindowOverride.md) + diff --git a/docs/AggregationByResourceAndMetric.md b/docs/AggregationByResourceAndMetric.md new file mode 100644 index 0000000..573a1fb --- /dev/null +++ b/docs/AggregationByResourceAndMetric.md @@ -0,0 +1,28 @@ +# AggregationByResourceAndMetric + + +## Properties + +Name | Type | Description | Notes +------------ | ------------- | ------------- | ------------- + +## Example + +```python +from waylay.services.queries.models.aggregation_by_resource_and_metric import AggregationByResourceAndMetric + +# TODO update the JSON string below +json = "{}" +# create an instance of AggregationByResourceAndMetric from a JSON string +aggregation_by_resource_and_metric_instance = AggregationByResourceAndMetric.from_json(json) +# print the JSON string representation of the object +print AggregationByResourceAndMetric.to_json() + +# convert the object into a dict +aggregation_by_resource_and_metric_dict = aggregation_by_resource_and_metric_instance.to_dict() +# create an instance of AggregationByResourceAndMetric from a dict +aggregation_by_resource_and_metric_form_dict = aggregation_by_resource_and_metric.from_dict(aggregation_by_resource_and_metric_dict) +``` +[[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/AggregationByResourceOrMetric.md b/docs/AggregationByResourceOrMetric.md new file mode 100644 index 0000000..61fc31a --- /dev/null +++ b/docs/AggregationByResourceOrMetric.md @@ -0,0 +1,28 @@ +# AggregationByResourceOrMetric + + +## Properties + +Name | Type | Description | Notes +------------ | ------------- | ------------- | ------------- + +## Example + +```python +from waylay.services.queries.models.aggregation_by_resource_or_metric import AggregationByResourceOrMetric + +# TODO update the JSON string below +json = "{}" +# create an instance of AggregationByResourceOrMetric from a JSON string +aggregation_by_resource_or_metric_instance = AggregationByResourceOrMetric.from_json(json) +# print the JSON string representation of the object +print AggregationByResourceOrMetric.to_json() + +# convert the object into a dict +aggregation_by_resource_or_metric_dict = aggregation_by_resource_or_metric_instance.to_dict() +# create an instance of AggregationByResourceOrMetric from a dict +aggregation_by_resource_or_metric_form_dict = aggregation_by_resource_or_metric.from_dict(aggregation_by_resource_or_metric_dict) +``` +[[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/AggregationMethod.md b/docs/AggregationMethod.md new file mode 100644 index 0000000..3d29661 --- /dev/null +++ b/docs/AggregationMethod.md @@ -0,0 +1,28 @@ +# AggregationMethod + + +## Properties + +Name | Type | Description | Notes +------------ | ------------- | ------------- | ------------- + +## Example + +```python +from waylay.services.queries.models.aggregation_method import AggregationMethod + +# TODO update the JSON string below +json = "{}" +# create an instance of AggregationMethod from a JSON string +aggregation_method_instance = AggregationMethod.from_json(json) +# print the JSON string representation of the object +print AggregationMethod.to_json() + +# convert the object into a dict +aggregation_method_dict = aggregation_method_instance.to_dict() +# create an instance of AggregationMethod from a dict +aggregation_method_form_dict = aggregation_method.from_dict(aggregation_method_dict) +``` +[[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/AggregationMethodOneOf.md b/docs/AggregationMethodOneOf.md new file mode 100644 index 0000000..61e943b --- /dev/null +++ b/docs/AggregationMethodOneOf.md @@ -0,0 +1,12 @@ +# AggregationMethodOneOf + +Use the first value (in time) to represent all data for the sample interval. + +## Properties + +Name | Type | Description | Notes +------------ | ------------- | ------------- | ------------- + +[[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/AggregationMethodOneOf1.md b/docs/AggregationMethodOneOf1.md new file mode 100644 index 0000000..93ce2ac --- /dev/null +++ b/docs/AggregationMethodOneOf1.md @@ -0,0 +1,12 @@ +# AggregationMethodOneOf1 + +Use the last value (in time) to represent all data for the sample interval. + +## Properties + +Name | Type | Description | Notes +------------ | ------------- | ------------- | ------------- + +[[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/AggregationMethodOneOf2.md b/docs/AggregationMethodOneOf2.md new file mode 100644 index 0000000..8e042ed --- /dev/null +++ b/docs/AggregationMethodOneOf2.md @@ -0,0 +1,12 @@ +# AggregationMethodOneOf2 + +Aggregate data by the mean value: The sum of values divided by number of observations. + +## Properties + +Name | Type | Description | Notes +------------ | ------------- | ------------- | ------------- + +[[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/AggregationMethodOneOf3.md b/docs/AggregationMethodOneOf3.md new file mode 100644 index 0000000..c785572 --- /dev/null +++ b/docs/AggregationMethodOneOf3.md @@ -0,0 +1,12 @@ +# AggregationMethodOneOf3 + +Aggregate data by the median value: The n/2-th value when ordered, the average of the (n-1)/2-th and (n+1)/2-th value when n is uneven. + +## Properties + +Name | Type | Description | Notes +------------ | ------------- | ------------- | ------------- + +[[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/AggregationMethodOneOf4.md b/docs/AggregationMethodOneOf4.md new file mode 100644 index 0000000..145f0ca --- /dev/null +++ b/docs/AggregationMethodOneOf4.md @@ -0,0 +1,12 @@ +# AggregationMethodOneOf4 + +The sum of all values summarizes the data for the sample interval. + +## Properties + +Name | Type | Description | Notes +------------ | ------------- | ------------- | ------------- + +[[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/AggregationMethodOneOf5.md b/docs/AggregationMethodOneOf5.md new file mode 100644 index 0000000..fde1eca --- /dev/null +++ b/docs/AggregationMethodOneOf5.md @@ -0,0 +1,12 @@ +# AggregationMethodOneOf5 + +Use the count of observations in the sample interval. + +## Properties + +Name | Type | Description | Notes +------------ | ------------- | ------------- | ------------- + +[[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/AggregationMethodOneOf6.md b/docs/AggregationMethodOneOf6.md new file mode 100644 index 0000000..b1f0085 --- /dev/null +++ b/docs/AggregationMethodOneOf6.md @@ -0,0 +1,12 @@ +# AggregationMethodOneOf6 + +Use the standard deviation of all observations in the sample interval. + +## Properties + +Name | Type | Description | Notes +------------ | ------------- | ------------- | ------------- + +[[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/AggregationMethodOneOf7.md b/docs/AggregationMethodOneOf7.md new file mode 100644 index 0000000..0e2d819 --- /dev/null +++ b/docs/AggregationMethodOneOf7.md @@ -0,0 +1,12 @@ +# AggregationMethodOneOf7 + +Use the maximum of all values in the sample interval. + +## Properties + +Name | Type | Description | Notes +------------ | ------------- | ------------- | ------------- + +[[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/AggregationMethodOneOf8.md b/docs/AggregationMethodOneOf8.md new file mode 100644 index 0000000..aec74fa --- /dev/null +++ b/docs/AggregationMethodOneOf8.md @@ -0,0 +1,12 @@ +# AggregationMethodOneOf8 + +Use the minimum of all values in the sample interval. + +## Properties + +Name | Type | Description | Notes +------------ | ------------- | ------------- | ------------- + +[[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/AggregationsInner.md b/docs/AggregationsInner.md new file mode 100644 index 0000000..02e4769 --- /dev/null +++ b/docs/AggregationsInner.md @@ -0,0 +1,28 @@ +# AggregationsInner + + +## Properties + +Name | Type | Description | Notes +------------ | ------------- | ------------- | ------------- + +## Example + +```python +from waylay.services.queries.models.aggregations_inner import AggregationsInner + +# TODO update the JSON string below +json = "{}" +# create an instance of AggregationsInner from a JSON string +aggregations_inner_instance = AggregationsInner.from_json(json) +# print the JSON string representation of the object +print AggregationsInner.to_json() + +# convert the object into a dict +aggregations_inner_dict = aggregations_inner_instance.to_dict() +# create an instance of AggregationsInner from a dict +aggregations_inner_form_dict = aggregations_inner.from_dict(aggregations_inner_dict) +``` +[[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/AlignAt.md b/docs/AlignAt.md new file mode 100644 index 0000000..26d2498 --- /dev/null +++ b/docs/AlignAt.md @@ -0,0 +1,12 @@ +# AlignAt + +Possible values for `align.at`. * 'grid' Align to a fixed grid (possibly using timezone information) * 'from' Align a the `from` boundary * 'until' Align a the `until` boundary * 'boundary' Align a the `from` boundary if specified, otherwise the `until` boundary. When not specified, 'grid' is used. + +## Properties + +Name | Type | Description | Notes +------------ | ------------- | ------------- | ------------- + +[[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/AlignShift.md b/docs/AlignShift.md new file mode 100644 index 0000000..11dded5 --- /dev/null +++ b/docs/AlignShift.md @@ -0,0 +1,12 @@ +# AlignShift + +Possible values for `align.shift`. * 'backward': keep the window size of the original interval specification, shifting back. * 'forward': keep the window size of the original interval specification, shifting forward. * 'wrap': enlarge the window size to include all of the original interval. When not specified, 'backward' is used. + +## Properties + +Name | Type | Description | Notes +------------ | ------------- | ------------- | ------------- + +[[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/Alignment.md b/docs/Alignment.md new file mode 100644 index 0000000..142a7cd --- /dev/null +++ b/docs/Alignment.md @@ -0,0 +1,33 @@ +# Alignment + +Aggregation Alignment Options. Specifies how the aggregation grid is aligned. + +## Properties + +Name | Type | Description | Notes +------------ | ------------- | ------------- | ------------- +**at** | [**AlignAt**](AlignAt.md) | | [optional] +**shift** | [**AlignShift**](AlignShift.md) | | [optional] +**freq** | [**AlignmentGridInterval**](AlignmentGridInterval.md) | | [optional] +**timezone** | [**AlignmentTimezone**](AlignmentTimezone.md) | | [optional] + +## Example + +```python +from waylay.services.queries.models.alignment import Alignment + +# TODO update the JSON string below +json = "{}" +# create an instance of Alignment from a JSON string +alignment_instance = Alignment.from_json(json) +# print the JSON string representation of the object +print Alignment.to_json() + +# convert the object into a dict +alignment_dict = alignment_instance.to_dict() +# create an instance of Alignment from a dict +alignment_form_dict = alignment.from_dict(alignment_dict) +``` +[[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/AlignmentGridInterval.md b/docs/AlignmentGridInterval.md new file mode 100644 index 0000000..0fc004d --- /dev/null +++ b/docs/AlignmentGridInterval.md @@ -0,0 +1,29 @@ +# AlignmentGridInterval + + Defines the grid used to align the aggregation window. The window will align at whole-unit multiples of this interval. For intervals like `PT1D`, that are timezone-dependent, use the `align.timezone` to fix the absolute timestamp of the grid boundaries. If not specified, defaults to the `freq` aggregation interval. + +## Properties + +Name | Type | Description | Notes +------------ | ------------- | ------------- | ------------- + +## Example + +```python +from waylay.services.queries.models.alignment_grid_interval import AlignmentGridInterval + +# TODO update the JSON string below +json = "{}" +# create an instance of AlignmentGridInterval from a JSON string +alignment_grid_interval_instance = AlignmentGridInterval.from_json(json) +# print the JSON string representation of the object +print AlignmentGridInterval.to_json() + +# convert the object into a dict +alignment_grid_interval_dict = alignment_grid_interval_instance.to_dict() +# create an instance of AlignmentGridInterval from a dict +alignment_grid_interval_form_dict = alignment_grid_interval.from_dict(alignment_grid_interval_dict) +``` +[[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/AlignmentTimezone.md b/docs/AlignmentTimezone.md new file mode 100644 index 0000000..072d0ba --- /dev/null +++ b/docs/AlignmentTimezone.md @@ -0,0 +1,29 @@ +# AlignmentTimezone + + The timezone to use when shifting boundaries, especially at day granularity. Also affects the rendering of timestamps when `render.iso_timestamp` is enabled. When not specified, the `UTC` timezone is used. + +## Properties + +Name | Type | Description | Notes +------------ | ------------- | ------------- | ------------- + +## Example + +```python +from waylay.services.queries.models.alignment_timezone import AlignmentTimezone + +# TODO update the JSON string below +json = "{}" +# create an instance of AlignmentTimezone from a JSON string +alignment_timezone_instance = AlignmentTimezone.from_json(json) +# print the JSON string representation of the object +print AlignmentTimezone.to_json() + +# convert the object into a dict +alignment_timezone_dict = alignment_timezone_instance.to_dict() +# create an instance of AlignmentTimezone from a dict +alignment_timezone_form_dict = alignment_timezone.from_dict(alignment_timezone_dict) +``` +[[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/CauseException.md b/docs/CauseException.md new file mode 100644 index 0000000..3f65c44 --- /dev/null +++ b/docs/CauseException.md @@ -0,0 +1,32 @@ +# CauseException + +Describes the exception that caused a message. + +## Properties + +Name | Type | Description | Notes +------------ | ------------- | ------------- | ------------- +**type** | **str** | | +**message** | **str** | | +**stacktrace** | **List[str]** | | + +## Example + +```python +from waylay.services.queries.models.cause_exception import CauseException + +# TODO update the JSON string below +json = "{}" +# create an instance of CauseException from a JSON string +cause_exception_instance = CauseException.from_json(json) +# print the JSON string representation of the object +print CauseException.to_json() + +# convert the object into a dict +cause_exception_dict = cause_exception_instance.to_dict() +# create an instance of CauseException from a dict +cause_exception_form_dict = cause_exception.from_dict(cause_exception_dict) +``` +[[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/ColumnDataSet.md b/docs/ColumnDataSet.md new file mode 100644 index 0000000..da94190 --- /dev/null +++ b/docs/ColumnDataSet.md @@ -0,0 +1,34 @@ +# ColumnDataSet + +Column-oriented dataset with rows header. Timeseries data layout with a rows header containing the index data. The data array contains series data prefixed by series attributes. The `rows` index is prefix by the names of these series attributes. Result for render options `data_axis=row` and `header_array=column`. + +## Properties + +Name | Type | Description | Notes +------------ | ------------- | ------------- | ------------- +**attributes** | [**DataSetAttributes**](DataSetAttributes.md) | | [optional] +**window_spec** | [**DataSetWindow**](DataSetWindow.md) | | [optional] +**data_axis** | [**ColumnDataSetDataAxis**](ColumnDataSetDataAxis.md) | | [optional] [default to ColumnDataSetDataAxis.ROW] +**rows** | [**List[RowHeadersInner]**](RowHeadersInner.md) | Header Attributes for the index data. The initial string-valued headers (normally `resource`, `metric`,`aggregation`) indicate that row to contain series attributes. The remaining object-valued row headers contain the index data. | +**data** | **List[List[Datum]]** | All metric observation values for a single series. Prefixed by the series attributes. | + +## Example + +```python +from waylay.services.queries.models.column_data_set import ColumnDataSet + +# TODO update the JSON string below +json = "{}" +# create an instance of ColumnDataSet from a JSON string +column_data_set_instance = ColumnDataSet.from_json(json) +# print the JSON string representation of the object +print ColumnDataSet.to_json() + +# convert the object into a dict +column_data_set_dict = column_data_set_instance.to_dict() +# create an instance of ColumnDataSet from a dict +column_data_set_form_dict = column_data_set.from_dict(column_data_set_dict) +``` +[[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/ColumnDataSetDataAxis.md b/docs/ColumnDataSetDataAxis.md new file mode 100644 index 0000000..c3c836b --- /dev/null +++ b/docs/ColumnDataSetDataAxis.md @@ -0,0 +1,11 @@ +# ColumnDataSetDataAxis + + +## Properties + +Name | Type | Description | Notes +------------ | ------------- | ------------- | ------------- + +[[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/ColumnHeader.md b/docs/ColumnHeader.md new file mode 100644 index 0000000..3709673 --- /dev/null +++ b/docs/ColumnHeader.md @@ -0,0 +1,32 @@ +# ColumnHeader + +Column attributes. Attributes that identify and describe the data in this column. + +## Properties + +Name | Type | Description | Notes +------------ | ------------- | ------------- | ------------- +**resource** | **str** | | +**metric** | **str** | | +**aggregation** | **str** | | [optional] + +## Example + +```python +from waylay.services.queries.models.column_header import ColumnHeader + +# TODO update the JSON string below +json = "{}" +# create an instance of ColumnHeader from a JSON string +column_header_instance = ColumnHeader.from_json(json) +# print the JSON string representation of the object +print ColumnHeader.to_json() + +# convert the object into a dict +column_header_dict = column_header_instance.to_dict() +# create an instance of ColumnHeader from a dict +column_header_form_dict = column_header.from_dict(column_header_dict) +``` +[[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/ColumnHeadersInner.md b/docs/ColumnHeadersInner.md new file mode 100644 index 0000000..2331b3e --- /dev/null +++ b/docs/ColumnHeadersInner.md @@ -0,0 +1,31 @@ +# ColumnHeadersInner + + +## Properties + +Name | Type | Description | Notes +------------ | ------------- | ------------- | ------------- +**resource** | **str** | | +**metric** | **str** | | +**aggregation** | **str** | | [optional] + +## Example + +```python +from waylay.services.queries.models.column_headers_inner import ColumnHeadersInner + +# TODO update the JSON string below +json = "{}" +# create an instance of ColumnHeadersInner from a JSON string +column_headers_inner_instance = ColumnHeadersInner.from_json(json) +# print the JSON string representation of the object +print ColumnHeadersInner.to_json() + +# convert the object into a dict +column_headers_inner_dict = column_headers_inner_instance.to_dict() +# create an instance of ColumnHeadersInner from a dict +column_headers_inner_form_dict = column_headers_inner.from_dict(column_headers_inner_dict) +``` +[[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/DataAxisOption.md b/docs/DataAxisOption.md new file mode 100644 index 0000000..9253dcb --- /dev/null +++ b/docs/DataAxisOption.md @@ -0,0 +1,12 @@ +# DataAxisOption + +Allowed values for the render.data_axis option. + +## Properties + +Name | Type | Description | Notes +------------ | ------------- | ------------- | ------------- + +[[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/DataSetAttributes.md b/docs/DataSetAttributes.md new file mode 100644 index 0000000..7919f8b --- /dev/null +++ b/docs/DataSetAttributes.md @@ -0,0 +1,30 @@ +# DataSetAttributes + +Data Set Attributes. Data attributes that apply to all data in this set. + +## Properties + +Name | Type | Description | Notes +------------ | ------------- | ------------- | ------------- +**role** | **str** | The role of series specification that was used to compile this data set. | [optional] + +## Example + +```python +from waylay.services.queries.models.data_set_attributes import DataSetAttributes + +# TODO update the JSON string below +json = "{}" +# create an instance of DataSetAttributes from a JSON string +data_set_attributes_instance = DataSetAttributes.from_json(json) +# print the JSON string representation of the object +print DataSetAttributes.to_json() + +# convert the object into a dict +data_set_attributes_dict = data_set_attributes_instance.to_dict() +# create an instance of DataSetAttributes from a dict +data_set_attributes_form_dict = data_set_attributes.from_dict(data_set_attributes_dict) +``` +[[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/DataSetWindow.md b/docs/DataSetWindow.md new file mode 100644 index 0000000..85e71f9 --- /dev/null +++ b/docs/DataSetWindow.md @@ -0,0 +1,32 @@ +# DataSetWindow + +Data Window. Statistics of the time axis of a data set. Present with render option `include_window_spec=true`.\", + +## Properties + +Name | Type | Description | Notes +------------ | ------------- | ------------- | ------------- +**until** | **int** | Exclusive higher bound of the time axis in unix epoch milliseconds. | +**window** | **str** | Time axis length as ISO8601 period. | +**freq** | **str** | Time axis aggregation interval as an ISO8601 period . | + +## Example + +```python +from waylay.services.queries.models.data_set_window import DataSetWindow + +# TODO update the JSON string below +json = "{}" +# create an instance of DataSetWindow from a JSON string +data_set_window_instance = DataSetWindow.from_json(json) +# print the JSON string representation of the object +print DataSetWindow.to_json() + +# convert the object into a dict +data_set_window_dict = data_set_window_instance.to_dict() +# create an instance of DataSetWindow from a dict +data_set_window_form_dict = data_set_window.from_dict(data_set_window_dict) +``` +[[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/Datum.md b/docs/Datum.md new file mode 100644 index 0000000..aff6df6 --- /dev/null +++ b/docs/Datum.md @@ -0,0 +1,29 @@ +# Datum + +A single metric value for a timeseries. A null value indicates that no (aggregated/interpolated) value exists for the corresponding timestamp. + +## Properties + +Name | Type | Description | Notes +------------ | ------------- | ------------- | ------------- + +## Example + +```python +from waylay.services.queries.models.datum import Datum + +# TODO update the JSON string below +json = "{}" +# create an instance of Datum from a JSON string +datum_instance = Datum.from_json(json) +# print the JSON string representation of the object +print Datum.to_json() + +# convert the object into a dict +datum_dict = datum_instance.to_dict() +# create an instance of Datum from a dict +datum_form_dict = datum.from_dict(datum_dict) +``` +[[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/DefaultAggregation.md b/docs/DefaultAggregation.md new file mode 100644 index 0000000..890a87d --- /dev/null +++ b/docs/DefaultAggregation.md @@ -0,0 +1,29 @@ +# DefaultAggregation + +Default aggregation method(s) for the series in the query. + +## Properties + +Name | Type | Description | Notes +------------ | ------------- | ------------- | ------------- + +## Example + +```python +from waylay.services.queries.models.default_aggregation import DefaultAggregation + +# TODO update the JSON string below +json = "{}" +# create an instance of DefaultAggregation from a JSON string +default_aggregation_instance = DefaultAggregation.from_json(json) +# print the JSON string representation of the object +print DefaultAggregation.to_json() + +# convert the object into a dict +default_aggregation_dict = default_aggregation_instance.to_dict() +# create an instance of DefaultAggregation from a dict +default_aggregation_form_dict = default_aggregation.from_dict(default_aggregation_dict) +``` +[[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/DefaultInterpolation.md b/docs/DefaultInterpolation.md new file mode 100644 index 0000000..6c19e55 --- /dev/null +++ b/docs/DefaultInterpolation.md @@ -0,0 +1,32 @@ +# DefaultInterpolation + +Default Interpolation method for the series (if aggregated). + +## Properties + +Name | Type | Description | Notes +------------ | ------------- | ------------- | ------------- +**method** | [**InterpolationMethod**](InterpolationMethod.md) | | +**value** | **int** | Optional parameter value for the interpolation method (see method description). | [optional] +**order** | **int** | Optional order parameter for the interpolation method (see method description). | [optional] + +## Example + +```python +from waylay.services.queries.models.default_interpolation import DefaultInterpolation + +# TODO update the JSON string below +json = "{}" +# create an instance of DefaultInterpolation from a JSON string +default_interpolation_instance = DefaultInterpolation.from_json(json) +# print the JSON string representation of the object +print DefaultInterpolation.to_json() + +# convert the object into a dict +default_interpolation_dict = default_interpolation_instance.to_dict() +# create an instance of DefaultInterpolation from a dict +default_interpolation_form_dict = default_interpolation.from_dict(default_interpolation_dict) +``` +[[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/DeleteResponse.md b/docs/DeleteResponse.md new file mode 100644 index 0000000..6d43743 --- /dev/null +++ b/docs/DeleteResponse.md @@ -0,0 +1,32 @@ +# DeleteResponse + +Confirmation of a delete request. + +## Properties + +Name | Type | Description | Notes +------------ | ------------- | ------------- | ------------- +**messages** | [**List[Message]**](Message.md) | | [optional] +**links** | [**Dict[str, Links]**](Links.md) | HAL links, indexed by link relation. | [optional] +**embeddings** | [**Dict[str, Embeddings]**](Embeddings.md) | Hal embeddings, indexed by relation. | [optional] + +## Example + +```python +from waylay.services.queries.models.delete_response import DeleteResponse + +# TODO update the JSON string below +json = "{}" +# create an instance of DeleteResponse from a JSON string +delete_response_instance = DeleteResponse.from_json(json) +# print the JSON string representation of the object +print DeleteResponse.to_json() + +# convert the object into a dict +delete_response_dict = delete_response_instance.to_dict() +# create an instance of DeleteResponse from a dict +delete_response_form_dict = delete_response.from_dict(delete_response_dict) +``` +[[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/Embeddings.md b/docs/Embeddings.md new file mode 100644 index 0000000..b6b3869 --- /dev/null +++ b/docs/Embeddings.md @@ -0,0 +1,28 @@ +# Embeddings + + +## Properties + +Name | Type | Description | Notes +------------ | ------------- | ------------- | ------------- + +## Example + +```python +from waylay.services.queries.models.embeddings import Embeddings + +# TODO update the JSON string below +json = "{}" +# create an instance of Embeddings from a JSON string +embeddings_instance = Embeddings.from_json(json) +# print the JSON string representation of the object +print Embeddings.to_json() + +# convert the object into a dict +embeddings_dict = embeddings_instance.to_dict() +# create an instance of Embeddings from a dict +embeddings_form_dict = embeddings.from_dict(embeddings_dict) +``` +[[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/ExecuteApi.md b/docs/ExecuteApi.md new file mode 100644 index 0000000..fd8b576 --- /dev/null +++ b/docs/ExecuteApi.md @@ -0,0 +1,190 @@ +# waylay.services.queries.ExecuteApi + +All URIs are relative to *https://api.waylay.io* + +Method | HTTP request | Description +------------- | ------------- | ------------- +[**execute_by_name**](ExecuteApi.md#execute_by_name) | **GET** /queries/v1/queries/v1/data/{query_name} | Execute Named Query +[**execute**](ExecuteApi.md#execute) | **POST** /queries/v1/queries/v1/data | Execute Query + +# **execute_by_name** +> execute_by_name( +> query_name: str, +> query: ExecuteByNameQuery, +> headers +> ) -> QueryResult + +Execute Named Query + +Execute a named timeseries query. Retrieves a stored query definition by name, applies overrides from the url parameters, and executes it. + +### Example + +```python +from pprint import pprint + +# Import the waylay-client from the waylay-sdk-core package +from waylay.sdk.client import WaylayClient +from waylay.sdk.api.api_exceptions import ApiError + +# Intialize a waylay client instance +waylay_client = WaylayClient.from_profile() + +# Note that the typed model classes for responses/parameters/... are only available when `waylay-sdk-queries-types` is installed +from waylay.services.queries.models.query_result import QueryResult +try: + # Execute Named Query + # calls `GET /queries/v1/queries/v1/data/{query_name}` + api_response = await waylay_client.queries.execute.execute_by_name( + 'query_name_example', # query_name | path param "query_name" + # query parameters: + query = { + 'resource': '13efb488-75ac-4dac-828a-d49c5c2ebbfc' + 'metric': 'temperature' + }, + headers = { + 'accept': 'accept_example', + }, + ) + print("The response of queries.execute.execute_by_name:\n") + pprint(api_response) +except ApiError as e: + print("Exception when calling queries.execute.execute_by_name: %s\n" % e) +``` + +### Endpoint +``` +GET /queries/v1/queries/v1/data/{query_name} +``` +### Parameters + +Name | Type | API binding | Description | Notes +-------- | ----- | ------------- | ------------- | ------------- +**query_name** | **str** | path parameter `"query_name"` | | +**query** | [QueryParamTypes](Operation.md#req_arg_query) \| **None** | URL query parameter | | +**query['resource']** (dict)
**query.resource** (Query) | **str** | query parameter `"resource"` | Default Resource Override. | [optional] +**query['metric']** (dict)
**query.metric** (Query) | **str** | query parameter `"metric"` | Default Metric Override. | [optional] +**query['aggregation']** (dict)
**query.aggregation** (Query) | **AggregationMethod** | query parameter `"aggregation"` | | [optional] +**query['interpolation']** (dict)
**query.interpolation** (Query) | [**Interpolation**](.md) | query parameter `"interpolation"` | | [optional] +**query['freq']** (dict)
**query.freq** (Query) | **GroupingIntervalOverride** | query parameter `"freq"` | Override for the `freq` query attribute. | [optional] +**query['from']** (dict)
**query.var_from** (Query) | **FromOverride** | query parameter `"from"` | | [optional] +**query['until']** (dict)
**query.until** (Query) | **FromOverride** | query parameter `"until"` | | [optional] +**query['window']** (dict)
**query.window** (Query) | **WindowOverride** | query parameter `"window"` | | [optional] +**query['periods']** (dict)
**query.periods** (Query) | **int** | query parameter `"periods"` | | [optional] +**query['render']** (dict)
**query.render** (Query) | [**Render1**](.md) | query parameter `"render"` | | [optional] +**headers** | [HeaderTypes](Operation.md#req_headers) | request headers | | +**headers['accept']** | **str** | request header `"accept"` | Use a 'text/csv' accept header to get CSV formatted results. | [optional] + +### Return type + +Selected path param | Raw response param | Return Type | Description | Links +------------------- | ------------------ | ------------ | ----------- | ----- +Literal[""] _(default)_ | False _(default)_ | **`QueryResult`** | | [QueryResult](QueryResult.md) +str | False _(default)_ | **`Any`** | If any other string value for the selected path is provided, the exact type of the response will only be known at runtime. | +/ | True | `Response` | The raw http response object. + +### HTTP request headers + + - **Content-Type**: Not defined + - **Accept**: application/json, text/csv + +### HTTP response details + +| Status code | Description | Response headers | +|-------------|-------------|------------------| +**200** | Successful Response | - | +**422** | Validation Error | - | + +[[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md) + +# **execute** +> execute( +> query: ExecuteQuery, +> headers +> ) -> QueryResult + +Execute Query + +Execute a timeseries query. Executes the timeseries query specified in the request body, after applying any overrides from the url parameters. + +### Example + +```python +from pprint import pprint + +# Import the waylay-client from the waylay-sdk-core package +from waylay.sdk.client import WaylayClient +from waylay.sdk.api.api_exceptions import ApiError + +# Intialize a waylay client instance +waylay_client = WaylayClient.from_profile() + +# Note that the typed model classes for responses/parameters/... are only available when `waylay-sdk-queries-types` is installed +from waylay.services.queries.models.query_input import QueryInput +from waylay.services.queries.models.query_result import QueryResult +try: + # Execute Query + # calls `POST /queries/v1/queries/v1/data` + api_response = await waylay_client.queries.execute.execute( + # query parameters: + query = { + 'resource': '13efb488-75ac-4dac-828a-d49c5c2ebbfc' + 'metric': 'temperature' + }, + # json data: use a generated model or a json-serializable python data structure (dict, list) + json = waylay.services.queries.QueryInput() # QueryInput | + headers = { + 'accept': 'accept_example', + }, + ) + print("The response of queries.execute.execute:\n") + pprint(api_response) +except ApiError as e: + print("Exception when calling queries.execute.execute: %s\n" % e) +``` + +### Endpoint +``` +POST /queries/v1/queries/v1/data +``` +### Parameters + +Name | Type | API binding | Description | Notes +-------- | ----- | ------------- | ------------- | ------------- +**json** | [**QueryInput**](QueryInput.md) | json request body | | +**query** | [QueryParamTypes](Operation.md#req_arg_query) \| **None** | URL query parameter | | +**query['resource']** (dict)
**query.resource** (Query) | **str** | query parameter `"resource"` | Default Resource Override. | [optional] +**query['metric']** (dict)
**query.metric** (Query) | **str** | query parameter `"metric"` | Default Metric Override. | [optional] +**query['aggregation']** (dict)
**query.aggregation** (Query) | **AggregationMethod** | query parameter `"aggregation"` | | [optional] +**query['interpolation']** (dict)
**query.interpolation** (Query) | [**Interpolation**](.md) | query parameter `"interpolation"` | | [optional] +**query['freq']** (dict)
**query.freq** (Query) | **GroupingIntervalOverride** | query parameter `"freq"` | Override for the `freq` query attribute. | [optional] +**query['from']** (dict)
**query.var_from** (Query) | **FromOverride** | query parameter `"from"` | | [optional] +**query['until']** (dict)
**query.until** (Query) | **FromOverride** | query parameter `"until"` | | [optional] +**query['window']** (dict)
**query.window** (Query) | **WindowOverride** | query parameter `"window"` | | [optional] +**query['periods']** (dict)
**query.periods** (Query) | **int** | query parameter `"periods"` | | [optional] +**query['render']** (dict)
**query.render** (Query) | [**Render1**](.md) | query parameter `"render"` | | [optional] +**headers** | [HeaderTypes](Operation.md#req_headers) | request headers | | +**headers['accept']** | **str** | request header `"accept"` | Use a 'text/csv' accept header to get CSV formatted results. | [optional] + +### Return type + +Selected path param | Raw response param | Return Type | Description | Links +------------------- | ------------------ | ------------ | ----------- | ----- +Literal[""] _(default)_ | False _(default)_ | **`QueryResult`** | | [QueryResult](QueryResult.md) +str | False _(default)_ | **`Any`** | If any other string value for the selected path is provided, the exact type of the response will only be known at runtime. | +/ | True | `Response` | The raw http response object. + +### HTTP request headers + + - **Content-Type**: application/json + - **Accept**: application/json, text/csv + +### HTTP response details + +| Status code | Description | Response headers | +|-------------|-------------|------------------| +**200** | Successful Response | - | +**422** | Validation Error | - | + +[[Back to top]](#) [[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/FromOverride.md b/docs/FromOverride.md new file mode 100644 index 0000000..0e5dc4b --- /dev/null +++ b/docs/FromOverride.md @@ -0,0 +1,28 @@ +# FromOverride + + +## Properties + +Name | Type | Description | Notes +------------ | ------------- | ------------- | ------------- + +## Example + +```python +from waylay.services.queries.models.from_override import FromOverride + +# TODO update the JSON string below +json = "{}" +# create an instance of FromOverride from a JSON string +from_override_instance = FromOverride.from_json(json) +# print the JSON string representation of the object +print FromOverride.to_json() + +# convert the object into a dict +from_override_dict = from_override_instance.to_dict() +# create an instance of FromOverride from a dict +from_override_form_dict = from_override.from_dict(from_override_dict) +``` +[[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/GroupingInterval.md b/docs/GroupingInterval.md new file mode 100644 index 0000000..6b21816 --- /dev/null +++ b/docs/GroupingInterval.md @@ -0,0 +1,29 @@ +# GroupingInterval + +Interval used to aggregate or regularize data. One of the [time line](https://docs.waylay.io/#/api/query/?id=time-line-properties) specifiers. + +## Properties + +Name | Type | Description | Notes +------------ | ------------- | ------------- | ------------- + +## Example + +```python +from waylay.services.queries.models.grouping_interval import GroupingInterval + +# TODO update the JSON string below +json = "{}" +# create an instance of GroupingInterval from a JSON string +grouping_interval_instance = GroupingInterval.from_json(json) +# print the JSON string representation of the object +print GroupingInterval.to_json() + +# convert the object into a dict +grouping_interval_dict = grouping_interval_instance.to_dict() +# create an instance of GroupingInterval from a dict +grouping_interval_form_dict = grouping_interval.from_dict(grouping_interval_dict) +``` +[[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/GroupingIntervalOverride.md b/docs/GroupingIntervalOverride.md new file mode 100644 index 0000000..209ba19 --- /dev/null +++ b/docs/GroupingIntervalOverride.md @@ -0,0 +1,29 @@ +# GroupingIntervalOverride + +Override for the `freq` query attribute. + +## Properties + +Name | Type | Description | Notes +------------ | ------------- | ------------- | ------------- + +## Example + +```python +from waylay.services.queries.models.grouping_interval_override import GroupingIntervalOverride + +# TODO update the JSON string below +json = "{}" +# create an instance of GroupingIntervalOverride from a JSON string +grouping_interval_override_instance = GroupingIntervalOverride.from_json(json) +# print the JSON string representation of the object +print GroupingIntervalOverride.to_json() + +# convert the object into a dict +grouping_interval_override_dict = grouping_interval_override_instance.to_dict() +# create an instance of GroupingIntervalOverride from a dict +grouping_interval_override_form_dict = grouping_interval_override.from_dict(grouping_interval_override_dict) +``` +[[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/GroupingIntervalOverrideOneOf.md b/docs/GroupingIntervalOverrideOneOf.md new file mode 100644 index 0000000..90ae709 --- /dev/null +++ b/docs/GroupingIntervalOverrideOneOf.md @@ -0,0 +1,12 @@ +# GroupingIntervalOverrideOneOf + +When `inferred` is specified, the frequency of aggregation will be inferred from the main/first time series. This can be used to regularize the time series + +## Properties + +Name | Type | Description | Notes +------------ | ------------- | ------------- | ------------- + +[[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/HALLink.md b/docs/HALLink.md new file mode 100644 index 0000000..c9997a6 --- /dev/null +++ b/docs/HALLink.md @@ -0,0 +1,32 @@ +# HALLink + +A link target in a HAL response. + +## Properties + +Name | Type | Description | Notes +------------ | ------------- | ------------- | ------------- +**href** | **str** | Target url for this link. | +**type** | **str** | Type of the resource referenced by this link. | [optional] +**method** | [**HALLinkMethod**](HALLinkMethod.md) | | [optional] + +## Example + +```python +from waylay.services.queries.models.hal_link import HALLink + +# TODO update the JSON string below +json = "{}" +# create an instance of HALLink from a JSON string +hal_link_instance = HALLink.from_json(json) +# print the JSON string representation of the object +print HALLink.to_json() + +# convert the object into a dict +hal_link_dict = hal_link_instance.to_dict() +# create an instance of HALLink from a dict +hal_link_form_dict = hal_link.from_dict(hal_link_dict) +``` +[[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/HALLinkMethod.md b/docs/HALLinkMethod.md new file mode 100644 index 0000000..3bb6158 --- /dev/null +++ b/docs/HALLinkMethod.md @@ -0,0 +1,12 @@ +# HALLinkMethod + +An http method that can be specified in a HAL link. + +## Properties + +Name | Type | Description | Notes +------------ | ------------- | ------------- | ------------- + +[[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/HALLinkRole.md b/docs/HALLinkRole.md new file mode 100644 index 0000000..2011dea --- /dev/null +++ b/docs/HALLinkRole.md @@ -0,0 +1,12 @@ +# HALLinkRole + +Supported link and embedding roles in HAL representations. + +## Properties + +Name | Type | Description | Notes +------------ | ------------- | ------------- | ------------- + +[[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/HTTPValidationError.md b/docs/HTTPValidationError.md new file mode 100644 index 0000000..7b21a31 --- /dev/null +++ b/docs/HTTPValidationError.md @@ -0,0 +1,29 @@ +# HTTPValidationError + + +## Properties + +Name | Type | Description | Notes +------------ | ------------- | ------------- | ------------- +**detail** | [**List[ValidationError]**](ValidationError.md) | | [optional] + +## Example + +```python +from waylay.services.queries.models.http_validation_error import HTTPValidationError + +# TODO update the JSON string below +json = "{}" +# create an instance of HTTPValidationError from a JSON string +http_validation_error_instance = HTTPValidationError.from_json(json) +# print the JSON string representation of the object +print HTTPValidationError.to_json() + +# convert the object into a dict +http_validation_error_dict = http_validation_error_instance.to_dict() +# create an instance of HTTPValidationError from a dict +http_validation_error_form_dict = http_validation_error.from_dict(http_validation_error_dict) +``` +[[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/HeaderArrayOption.md b/docs/HeaderArrayOption.md new file mode 100644 index 0000000..e585de3 --- /dev/null +++ b/docs/HeaderArrayOption.md @@ -0,0 +1,12 @@ +# HeaderArrayOption + +Allowed values for the render.header_array option. + +## Properties + +Name | Type | Description | Notes +------------ | ------------- | ------------- | ------------- + +[[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/Hierarchical.md b/docs/Hierarchical.md new file mode 100644 index 0000000..6b78e6e --- /dev/null +++ b/docs/Hierarchical.md @@ -0,0 +1,29 @@ +# Hierarchical + +if true, use hierarchical objects to represent multiple row (or column) dimensions, otherwise multi-keys get concatenated with a dot-delimiter. If the value is a list, only these levels are kept as separate levels, while remaining levels get concatenated keys + +## Properties + +Name | Type | Description | Notes +------------ | ------------- | ------------- | ------------- + +## Example + +```python +from waylay.services.queries.models.hierarchical import Hierarchical + +# TODO update the JSON string below +json = "{}" +# create an instance of Hierarchical from a JSON string +hierarchical_instance = Hierarchical.from_json(json) +# print the JSON string representation of the object +print Hierarchical.to_json() + +# convert the object into a dict +hierarchical_dict = hierarchical_instance.to_dict() +# create an instance of Hierarchical from a dict +hierarchical_form_dict = hierarchical.from_dict(hierarchical_dict) +``` +[[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/Interpolation.md b/docs/Interpolation.md new file mode 100644 index 0000000..caef36d --- /dev/null +++ b/docs/Interpolation.md @@ -0,0 +1,31 @@ +# Interpolation + + +## Properties + +Name | Type | Description | Notes +------------ | ------------- | ------------- | ------------- +**method** | [**InterpolationMethod**](InterpolationMethod.md) | | +**value** | **int** | Optional parameter value for the interpolation method (see method description). | [optional] +**order** | **int** | Optional order parameter for the interpolation method (see method description). | [optional] + +## Example + +```python +from waylay.services.queries.models.interpolation import Interpolation + +# TODO update the JSON string below +json = "{}" +# create an instance of Interpolation from a JSON string +interpolation_instance = Interpolation.from_json(json) +# print the JSON string representation of the object +print Interpolation.to_json() + +# convert the object into a dict +interpolation_dict = interpolation_instance.to_dict() +# create an instance of Interpolation from a dict +interpolation_form_dict = interpolation.from_dict(interpolation_dict) +``` +[[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/InterpolationMethod.md b/docs/InterpolationMethod.md new file mode 100644 index 0000000..9a3ad8e --- /dev/null +++ b/docs/InterpolationMethod.md @@ -0,0 +1,28 @@ +# InterpolationMethod + + +## Properties + +Name | Type | Description | Notes +------------ | ------------- | ------------- | ------------- + +## Example + +```python +from waylay.services.queries.models.interpolation_method import InterpolationMethod + +# TODO update the JSON string below +json = "{}" +# create an instance of InterpolationMethod from a JSON string +interpolation_method_instance = InterpolationMethod.from_json(json) +# print the JSON string representation of the object +print InterpolationMethod.to_json() + +# convert the object into a dict +interpolation_method_dict = interpolation_method_instance.to_dict() +# create an instance of InterpolationMethod from a dict +interpolation_method_form_dict = interpolation_method.from_dict(interpolation_method_dict) +``` +[[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/InterpolationMethodOneOf.md b/docs/InterpolationMethodOneOf.md new file mode 100644 index 0000000..33ddb1f --- /dev/null +++ b/docs/InterpolationMethodOneOf.md @@ -0,0 +1,12 @@ +# InterpolationMethodOneOf + +Interpolate with the value of the first observed point. This method also extrapolates. + +## Properties + +Name | Type | Description | Notes +------------ | ------------- | ------------- | ------------- + +[[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/InterpolationMethodOneOf1.md b/docs/InterpolationMethodOneOf1.md new file mode 100644 index 0000000..2a4f086 --- /dev/null +++ b/docs/InterpolationMethodOneOf1.md @@ -0,0 +1,12 @@ +# InterpolationMethodOneOf1 + +Interpolate with a fixed, user-specified value. This method also extrapolates. + +## Properties + +Name | Type | Description | Notes +------------ | ------------- | ------------- | ------------- + +[[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/InterpolationMethodOneOf10.md b/docs/InterpolationMethodOneOf10.md new file mode 100644 index 0000000..b0ec73d --- /dev/null +++ b/docs/InterpolationMethodOneOf10.md @@ -0,0 +1,12 @@ +# InterpolationMethodOneOf10 + +Interpolate with a spline function of a user-specified order. + +## Properties + +Name | Type | Description | Notes +------------ | ------------- | ------------- | ------------- + +[[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/InterpolationMethodOneOf11.md b/docs/InterpolationMethodOneOf11.md new file mode 100644 index 0000000..412bb52 --- /dev/null +++ b/docs/InterpolationMethodOneOf11.md @@ -0,0 +1,12 @@ +# InterpolationMethodOneOf11 + +Interpolate with the derivative of order 1. + +## Properties + +Name | Type | Description | Notes +------------ | ------------- | ------------- | ------------- + +[[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/InterpolationMethodOneOf12.md b/docs/InterpolationMethodOneOf12.md new file mode 100644 index 0000000..9bc6a73 --- /dev/null +++ b/docs/InterpolationMethodOneOf12.md @@ -0,0 +1,12 @@ +# InterpolationMethodOneOf12 + +Interpolate with a piecewise cubic spline function. + +## Properties + +Name | Type | Description | Notes +------------ | ------------- | ------------- | ------------- + +[[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/InterpolationMethodOneOf13.md b/docs/InterpolationMethodOneOf13.md new file mode 100644 index 0000000..25e52fd --- /dev/null +++ b/docs/InterpolationMethodOneOf13.md @@ -0,0 +1,12 @@ +# InterpolationMethodOneOf13 + +Interpolate with a non-smoothing spline of order 2, called Akima interpolation. + +## Properties + +Name | Type | Description | Notes +------------ | ------------- | ------------- | ------------- + +[[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/InterpolationMethodOneOf2.md b/docs/InterpolationMethodOneOf2.md new file mode 100644 index 0000000..d6f08e4 --- /dev/null +++ b/docs/InterpolationMethodOneOf2.md @@ -0,0 +1,12 @@ +# InterpolationMethodOneOf2 + +Same as pad, but using the last observed value. This method also extrapolates + +## Properties + +Name | Type | Description | Notes +------------ | ------------- | ------------- | ------------- + +[[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/InterpolationMethodOneOf3.md b/docs/InterpolationMethodOneOf3.md new file mode 100644 index 0000000..21a20e0 --- /dev/null +++ b/docs/InterpolationMethodOneOf3.md @@ -0,0 +1,12 @@ +# InterpolationMethodOneOf3 + +Linearly go from the first observed value of the gap to the last observed oneThis method also extrapolates + +## Properties + +Name | Type | Description | Notes +------------ | ------------- | ------------- | ------------- + +[[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/InterpolationMethodOneOf4.md b/docs/InterpolationMethodOneOf4.md new file mode 100644 index 0000000..c18a07b --- /dev/null +++ b/docs/InterpolationMethodOneOf4.md @@ -0,0 +1,12 @@ +# InterpolationMethodOneOf4 + +Use the value that is closest in time. + +## Properties + +Name | Type | Description | Notes +------------ | ------------- | ------------- | ------------- + +[[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/InterpolationMethodOneOf5.md b/docs/InterpolationMethodOneOf5.md new file mode 100644 index 0000000..a538ab9 --- /dev/null +++ b/docs/InterpolationMethodOneOf5.md @@ -0,0 +1,12 @@ +# InterpolationMethodOneOf5 + +Interpolate with a spline function of order 0, which is a piecewise polynomial. + +## Properties + +Name | Type | Description | Notes +------------ | ------------- | ------------- | ------------- + +[[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/InterpolationMethodOneOf6.md b/docs/InterpolationMethodOneOf6.md new file mode 100644 index 0000000..fe547ed --- /dev/null +++ b/docs/InterpolationMethodOneOf6.md @@ -0,0 +1,12 @@ +# InterpolationMethodOneOf6 + +Interpolate with a spline function of order 1, which is a piecewise polynomial. + +## Properties + +Name | Type | Description | Notes +------------ | ------------- | ------------- | ------------- + +[[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/InterpolationMethodOneOf7.md b/docs/InterpolationMethodOneOf7.md new file mode 100644 index 0000000..cee1408 --- /dev/null +++ b/docs/InterpolationMethodOneOf7.md @@ -0,0 +1,12 @@ +# InterpolationMethodOneOf7 + +Interpolate with a spline function of order 2, which is a piecewise polynomial. + +## Properties + +Name | Type | Description | Notes +------------ | ------------- | ------------- | ------------- + +[[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/InterpolationMethodOneOf8.md b/docs/InterpolationMethodOneOf8.md new file mode 100644 index 0000000..8976ec3 --- /dev/null +++ b/docs/InterpolationMethodOneOf8.md @@ -0,0 +1,12 @@ +# InterpolationMethodOneOf8 + +Interpolate with a spline function of order 3, which is a piecewise polynomial. + +## Properties + +Name | Type | Description | Notes +------------ | ------------- | ------------- | ------------- + +[[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/InterpolationMethodOneOf9.md b/docs/InterpolationMethodOneOf9.md new file mode 100644 index 0000000..d3a3fd2 --- /dev/null +++ b/docs/InterpolationMethodOneOf9.md @@ -0,0 +1,12 @@ +# InterpolationMethodOneOf9 + +Interpolate with a polynomial of the lowest possible degree passing trough the data points. + +## Properties + +Name | Type | Description | Notes +------------ | ------------- | ------------- | ------------- + +[[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/InterpolationSpec.md b/docs/InterpolationSpec.md new file mode 100644 index 0000000..5ac6228 --- /dev/null +++ b/docs/InterpolationSpec.md @@ -0,0 +1,32 @@ +# InterpolationSpec + +Defines whether, and how to treat missing values. This can occur in two circumstances when aggregating (setting a sample frequency): * missing values: if there are missing (or invalid) values stored for a given freq-interval, \"interpolation\" specifies how to compute these. * down-sampling: when the specified freq is smaller than the series’ actual frequency. \"interpolation\" specifies how to compute intermediate values. + +## Properties + +Name | Type | Description | Notes +------------ | ------------- | ------------- | ------------- +**method** | [**InterpolationMethod**](InterpolationMethod.md) | | +**value** | **int** | Optional parameter value for the interpolation method (see method description). | [optional] +**order** | **int** | Optional order parameter for the interpolation method (see method description). | [optional] + +## Example + +```python +from waylay.services.queries.models.interpolation_spec import InterpolationSpec + +# TODO update the JSON string below +json = "{}" +# create an instance of InterpolationSpec from a JSON string +interpolation_spec_instance = InterpolationSpec.from_json(json) +# print the JSON string representation of the object +print InterpolationSpec.to_json() + +# convert the object into a dict +interpolation_spec_dict = interpolation_spec_instance.to_dict() +# create an instance of InterpolationSpec from a dict +interpolation_spec_form_dict = interpolation_spec.from_dict(interpolation_spec_dict) +``` +[[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/Links.md b/docs/Links.md new file mode 100644 index 0000000..ca4fe11 --- /dev/null +++ b/docs/Links.md @@ -0,0 +1,31 @@ +# Links + + +## Properties + +Name | Type | Description | Notes +------------ | ------------- | ------------- | ------------- +**href** | **str** | Target url for this link. | +**type** | **str** | Type of the resource referenced by this link. | [optional] +**method** | [**HALLinkMethod**](HALLinkMethod.md) | | [optional] + +## Example + +```python +from waylay.services.queries.models.links import Links + +# TODO update the JSON string below +json = "{}" +# create an instance of Links from a JSON string +links_instance = Links.from_json(json) +# print the JSON string representation of the object +print Links.to_json() + +# convert the object into a dict +links_dict = links_instance.to_dict() +# create an instance of Links from a dict +links_form_dict = links.from_dict(links_dict) +``` +[[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/LocationInner.md b/docs/LocationInner.md new file mode 100644 index 0000000..c44e8a0 --- /dev/null +++ b/docs/LocationInner.md @@ -0,0 +1,28 @@ +# LocationInner + + +## Properties + +Name | Type | Description | Notes +------------ | ------------- | ------------- | ------------- + +## Example + +```python +from waylay.services.queries.models.location_inner import LocationInner + +# TODO update the JSON string below +json = "{}" +# create an instance of LocationInner from a JSON string +location_inner_instance = LocationInner.from_json(json) +# print the JSON string representation of the object +print LocationInner.to_json() + +# convert the object into a dict +location_inner_dict = location_inner_instance.to_dict() +# create an instance of LocationInner from a dict +location_inner_form_dict = location_inner.from_dict(location_inner_dict) +``` +[[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/ManageApi.md b/docs/ManageApi.md new file mode 100644 index 0000000..e008943 --- /dev/null +++ b/docs/ManageApi.md @@ -0,0 +1,370 @@ +# waylay.services.queries.ManageApi + +All URIs are relative to *https://api.waylay.io* + +Method | HTTP request | Description +------------- | ------------- | ------------- +[**create**](ManageApi.md#create) | **POST** /queries/v1/queries/v1/query | Post Query +[**get**](ManageApi.md#get) | **GET** /queries/v1/queries/v1/query/{query_name} | Get Query +[**list**](ManageApi.md#list) | **GET** /queries/v1/queries/v1/query | List Queries +[**remove**](ManageApi.md#remove) | **DELETE** /queries/v1/queries/v1/query/{query_name} | Remove Query +[**update**](ManageApi.md#update) | **PUT** /queries/v1/queries/v1/query/{query_name} | Update Query + +# **create** +> create( +> headers +> ) -> QueryResponse + +Post Query + +Create a new named query. + +### Example + +```python +from pprint import pprint + +# Import the waylay-client from the waylay-sdk-core package +from waylay.sdk.client import WaylayClient +from waylay.sdk.api.api_exceptions import ApiError + +# Intialize a waylay client instance +waylay_client = WaylayClient.from_profile() + +# Note that the typed model classes for responses/parameters/... are only available when `waylay-sdk-queries-types` is installed +from waylay.services.queries.models.query_entity_input import QueryEntityInput +from waylay.services.queries.models.query_response import QueryResponse +try: + # Post Query + # calls `POST /queries/v1/queries/v1/query` + api_response = await waylay_client.queries.manage.create( + # json data: use a generated model or a json-serializable python data structure (dict, list) + json = waylay.services.queries.QueryEntityInput() # QueryEntityInput | + ) + print("The response of queries.manage.create:\n") + pprint(api_response) +except ApiError as e: + print("Exception when calling queries.manage.create: %s\n" % e) +``` + +### Endpoint +``` +POST /queries/v1/queries/v1/query +``` +### Parameters + +Name | Type | API binding | Description | Notes +-------- | ----- | ------------- | ------------- | ------------- +**json** | [**QueryEntityInput**](QueryEntityInput.md) | json request body | | +**headers** | [HeaderTypes](Operation.md#req_headers) | request headers | | + +### Return type + +Selected path param | Raw response param | Return Type | Description | Links +------------------- | ------------------ | ------------ | ----------- | ----- +Literal[""] _(default)_ | False _(default)_ | **`QueryResponse`** | | [QueryResponse](QueryResponse.md) +str | False _(default)_ | **`Any`** | If any other string value for the selected path is provided, the exact type of the response will only be known at runtime. | +/ | True | `Response` | The raw http response object. + +### HTTP request headers + + - **Content-Type**: application/json + - **Accept**: application/json + +### HTTP response details + +| Status code | Description | Response headers | +|-------------|-------------|------------------| +**200** | Successful Response | - | +**422** | Validation Error | - | + +[[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md) + +# **get** +> get( +> query_name: str, +> headers +> ) -> QueryResponse + +Get Query + +Get the definition of a named query. + +### Example + +```python +from pprint import pprint + +# Import the waylay-client from the waylay-sdk-core package +from waylay.sdk.client import WaylayClient +from waylay.sdk.api.api_exceptions import ApiError + +# Intialize a waylay client instance +waylay_client = WaylayClient.from_profile() + +# Note that the typed model classes for responses/parameters/... are only available when `waylay-sdk-queries-types` is installed +from waylay.services.queries.models.query_response import QueryResponse +try: + # Get Query + # calls `GET /queries/v1/queries/v1/query/{query_name}` + api_response = await waylay_client.queries.manage.get( + 'query_name_example', # query_name | path param "query_name" + ) + print("The response of queries.manage.get:\n") + pprint(api_response) +except ApiError as e: + print("Exception when calling queries.manage.get: %s\n" % e) +``` + +### Endpoint +``` +GET /queries/v1/queries/v1/query/{query_name} +``` +### Parameters + +Name | Type | API binding | Description | Notes +-------- | ----- | ------------- | ------------- | ------------- +**query_name** | **str** | path parameter `"query_name"` | Name of the stored query. | +**headers** | [HeaderTypes](Operation.md#req_headers) | request headers | | + +### Return type + +Selected path param | Raw response param | Return Type | Description | Links +------------------- | ------------------ | ------------ | ----------- | ----- +Literal[""] _(default)_ | False _(default)_ | **`QueryResponse`** | | [QueryResponse](QueryResponse.md) +str | False _(default)_ | **`Any`** | If any other string value for the selected path is provided, the exact type of the response will only be known at runtime. | +/ | True | `Response` | The raw http response object. + +### HTTP request headers + + - **Content-Type**: Not defined + - **Accept**: application/json + +### HTTP response details + +| Status code | Description | Response headers | +|-------------|-------------|------------------| +**200** | Successful Response | - | +**422** | Validation Error | - | + +[[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md) + +# **list** +> list( +> query: ListQuery, +> headers +> ) -> QueriesListResponse + +List Queries + +List named queries. + +### Example + +```python +from pprint import pprint + +# Import the waylay-client from the waylay-sdk-core package +from waylay.sdk.client import WaylayClient +from waylay.sdk.api.api_exceptions import ApiError + +# Intialize a waylay client instance +waylay_client = WaylayClient.from_profile() + +# Note that the typed model classes for responses/parameters/... are only available when `waylay-sdk-queries-types` is installed +from waylay.services.queries.models.queries_list_response import QueriesListResponse +try: + # List Queries + # calls `GET /queries/v1/queries/v1/query` + api_response = await waylay_client.queries.manage.list( + # query parameters: + query = { + 'q': '' + 'limit': 10 + 'offset': 0 + }, + ) + print("The response of queries.manage.list:\n") + pprint(api_response) +except ApiError as e: + print("Exception when calling queries.manage.list: %s\n" % e) +``` + +### Endpoint +``` +GET /queries/v1/queries/v1/query +``` +### Parameters + +Name | Type | API binding | Description | Notes +-------- | ----- | ------------- | ------------- | ------------- +**query** | [QueryParamTypes](Operation.md#req_arg_query) \| **None** | URL query parameter | | +**query['q']** (dict)
**query.q** (Query) | **str** | query parameter `"q"` | The QDSL filter condition for the stored queries. Note that this value needs to be escaped when passed as an url paramater. | [optional] [default ''] +**query['limit']** (dict)
**query.limit** (Query) | **int** | query parameter `"limit"` | Maximal number of items return in one response. | [optional] [default 10] +**query['offset']** (dict)
**query.offset** (Query) | **int** | query parameter `"offset"` | Numbers of items to skip before listing results in the response page. | [optional] [default 0] +**headers** | [HeaderTypes](Operation.md#req_headers) | request headers | | + +### Return type + +Selected path param | Raw response param | Return Type | Description | Links +------------------- | ------------------ | ------------ | ----------- | ----- +Literal[""] _(default)_ | False _(default)_ | **`QueriesListResponse`** | | [QueriesListResponse](QueriesListResponse.md) +str | False _(default)_ | **`Any`** | If any other string value for the selected path is provided, the exact type of the response will only be known at runtime. | +/ | True | `Response` | The raw http response object. + +### HTTP request headers + + - **Content-Type**: Not defined + - **Accept**: application/json + +### HTTP response details + +| Status code | Description | Response headers | +|-------------|-------------|------------------| +**200** | Successful Response | - | +**422** | Validation Error | - | + +[[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md) + +# **remove** +> remove( +> query_name: str, +> headers +> ) -> DeleteResponse + +Remove Query + +Remove definition of a named query. + +### Example + +```python +from pprint import pprint + +# Import the waylay-client from the waylay-sdk-core package +from waylay.sdk.client import WaylayClient +from waylay.sdk.api.api_exceptions import ApiError + +# Intialize a waylay client instance +waylay_client = WaylayClient.from_profile() + +# Note that the typed model classes for responses/parameters/... are only available when `waylay-sdk-queries-types` is installed +from waylay.services.queries.models.delete_response import DeleteResponse +try: + # Remove Query + # calls `DELETE /queries/v1/queries/v1/query/{query_name}` + api_response = await waylay_client.queries.manage.remove( + 'query_name_example', # query_name | path param "query_name" + ) + print("The response of queries.manage.remove:\n") + pprint(api_response) +except ApiError as e: + print("Exception when calling queries.manage.remove: %s\n" % e) +``` + +### Endpoint +``` +DELETE /queries/v1/queries/v1/query/{query_name} +``` +### Parameters + +Name | Type | API binding | Description | Notes +-------- | ----- | ------------- | ------------- | ------------- +**query_name** | **str** | path parameter `"query_name"` | Name of the stored query. | +**headers** | [HeaderTypes](Operation.md#req_headers) | request headers | | + +### Return type + +Selected path param | Raw response param | Return Type | Description | Links +------------------- | ------------------ | ------------ | ----------- | ----- +Literal[""] _(default)_ | False _(default)_ | **`DeleteResponse`** | | [DeleteResponse](DeleteResponse.md) +str | False _(default)_ | **`Any`** | If any other string value for the selected path is provided, the exact type of the response will only be known at runtime. | +/ | True | `Response` | The raw http response object. + +### HTTP request headers + + - **Content-Type**: Not defined + - **Accept**: application/json + +### HTTP response details + +| Status code | Description | Response headers | +|-------------|-------------|------------------| +**200** | Successful Response | - | +**422** | Validation Error | - | + +[[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md) + +# **update** +> update( +> query_name: str, +> headers +> ) -> QueryResponse + +Update Query + +Create or update a named query definition. + +### Example + +```python +from pprint import pprint + +# Import the waylay-client from the waylay-sdk-core package +from waylay.sdk.client import WaylayClient +from waylay.sdk.api.api_exceptions import ApiError + +# Intialize a waylay client instance +waylay_client = WaylayClient.from_profile() + +# Note that the typed model classes for responses/parameters/... are only available when `waylay-sdk-queries-types` is installed +from waylay.services.queries.models.query_definition import QueryDefinition +from waylay.services.queries.models.query_response import QueryResponse +try: + # Update Query + # calls `PUT /queries/v1/queries/v1/query/{query_name}` + api_response = await waylay_client.queries.manage.update( + 'query_name_example', # query_name | path param "query_name" + # json data: use a generated model or a json-serializable python data structure (dict, list) + json = waylay.services.queries.QueryDefinition() # QueryDefinition | + ) + print("The response of queries.manage.update:\n") + pprint(api_response) +except ApiError as e: + print("Exception when calling queries.manage.update: %s\n" % e) +``` + +### Endpoint +``` +PUT /queries/v1/queries/v1/query/{query_name} +``` +### Parameters + +Name | Type | API binding | Description | Notes +-------- | ----- | ------------- | ------------- | ------------- +**query_name** | **str** | path parameter `"query_name"` | Name of the stored query. | +**json** | [**QueryDefinition**](QueryDefinition.md) | json request body | | +**headers** | [HeaderTypes](Operation.md#req_headers) | request headers | | + +### Return type + +Selected path param | Raw response param | Return Type | Description | Links +------------------- | ------------------ | ------------ | ----------- | ----- +Literal[""] _(default)_ | False _(default)_ | **`QueryResponse`** | | [QueryResponse](QueryResponse.md) +str | False _(default)_ | **`Any`** | If any other string value for the selected path is provided, the exact type of the response will only be known at runtime. | +/ | True | `Response` | The raw http response object. + +### HTTP request headers + + - **Content-Type**: application/json + - **Accept**: application/json + +### HTTP response details + +| Status code | Description | Response headers | +|-------------|-------------|------------------| +**200** | Successful Response | - | +**422** | Validation Error | - | + +[[Back to top]](#) [[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/Message.md b/docs/Message.md new file mode 100644 index 0000000..0a9dac2 --- /dev/null +++ b/docs/Message.md @@ -0,0 +1,33 @@ +# Message + +Individual (info/warning/error) message in a response. + +## Properties + +Name | Type | Description | Notes +------------ | ------------- | ------------- | ------------- +**code** | **str** | | [optional] +**message** | **str** | | +**level** | [**MessageLevel**](MessageLevel.md) | | [optional] [default to MessageLevel.INFO] +**args** | **object** | | [optional] + +## Example + +```python +from waylay.services.queries.models.message import Message + +# TODO update the JSON string below +json = "{}" +# create an instance of Message from a JSON string +message_instance = Message.from_json(json) +# print the JSON string representation of the object +print Message.to_json() + +# convert the object into a dict +message_dict = message_instance.to_dict() +# create an instance of Message from a dict +message_form_dict = message.from_dict(message_dict) +``` +[[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/MessageArguments.md b/docs/MessageArguments.md new file mode 100644 index 0000000..4517bee --- /dev/null +++ b/docs/MessageArguments.md @@ -0,0 +1,30 @@ +# MessageArguments + + +## Properties + +Name | Type | Description | Notes +------------ | ------------- | ------------- | ------------- +**resource** | **str** | | [optional] +**metric** | **str** | | [optional] + +## Example + +```python +from waylay.services.queries.models.message_arguments import MessageArguments + +# TODO update the JSON string below +json = "{}" +# create an instance of MessageArguments from a JSON string +message_arguments_instance = MessageArguments.from_json(json) +# print the JSON string representation of the object +print MessageArguments.to_json() + +# convert the object into a dict +message_arguments_dict = message_arguments_instance.to_dict() +# create an instance of MessageArguments from a dict +message_arguments_form_dict = message_arguments.from_dict(message_arguments_dict) +``` +[[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/MessageLevel.md b/docs/MessageLevel.md new file mode 100644 index 0000000..b8043e8 --- /dev/null +++ b/docs/MessageLevel.md @@ -0,0 +1,11 @@ +# MessageLevel + + +## Properties + +Name | Type | Description | Notes +------------ | ------------- | ------------- | ------------- + +[[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/MessageProperties.md b/docs/MessageProperties.md new file mode 100644 index 0000000..a24f558 --- /dev/null +++ b/docs/MessageProperties.md @@ -0,0 +1,31 @@ +# MessageProperties + +Additional message arguments. + +## Properties + +Name | Type | Description | Notes +------------ | ------------- | ------------- | ------------- +**resource** | **str** | | [optional] +**metric** | **str** | | [optional] + +## Example + +```python +from waylay.services.queries.models.message_properties import MessageProperties + +# TODO update the JSON string below +json = "{}" +# create an instance of MessageProperties from a JSON string +message_properties_instance = MessageProperties.from_json(json) +# print the JSON string representation of the object +print MessageProperties.to_json() + +# convert the object into a dict +message_properties_dict = message_properties_instance.to_dict() +# create an instance of MessageProperties from a dict +message_properties_form_dict = message_properties.from_dict(message_properties_dict) +``` +[[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/ObjectData.md b/docs/ObjectData.md new file mode 100644 index 0000000..fd978f6 --- /dev/null +++ b/docs/ObjectData.md @@ -0,0 +1,36 @@ +# ObjectData + +Result data for a timestamp in object format. + +## Properties + +Name | Type | Description | Notes +------------ | ------------- | ------------- | ------------- +**timestamp** | **int** | Unix epoch milliseconds timestamp. | +**timestamp_iso** | **datetime** | ISO8601 rendering of the timestamp, present when `render.iso_timestamp=true` | [optional] +**role** | **str** | The role of series specification that was used to compile this data set. | [optional] +**resource** | **str** | Series resource id, if applicable for all values. | [optional] +**metric** | **str** | Series metric, if applicable for all values. | [optional] +**aggregation** | **str** | Series aggregation, if applicable for all values. | [optional] +**levels** | **List[str]** | Attribute level names used to key the values for this observation. Levels that are flattened have a dot-separated key. If all observations have the same attribute for a level, that level might be omitted. | [optional] + +## Example + +```python +from waylay.services.queries.models.object_data import ObjectData + +# TODO update the JSON string below +json = "{}" +# create an instance of ObjectData from a JSON string +object_data_instance = ObjectData.from_json(json) +# print the JSON string representation of the object +print ObjectData.to_json() + +# convert the object into a dict +object_data_dict = object_data_instance.to_dict() +# create an instance of ObjectData from a dict +object_data_form_dict = object_data.from_dict(object_data_dict) +``` +[[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/ObjectDataSet.md b/docs/ObjectDataSet.md new file mode 100644 index 0000000..d42369c --- /dev/null +++ b/docs/ObjectDataSet.md @@ -0,0 +1,32 @@ +# ObjectDataSet + +Data result in object format. Result item when render option `render.header_array` is not set. The data values are keyed by their attributes (`resource`, `metric`, `aggregation`), according to the render options: * _hierachical_: for each level, a sub-object is created (e.g. `render.mode=hier_dict`) * _flattened_: the attributes are '.'-separated concatenation of the attributes (e.g `render.mode=flat_dict`) * _mixed_: (.e.g. `render.mode=metric_flat_dict`) a single level (e.g. `metric`) is used as main key, any remaining levels (`resource`,`aggregation`) are indicated with a flattened subkey. When `render.rollup=true`, the attribute levels that are the same for all series are not used as key, but reported as a data or table attribute. + +## Properties + +Name | Type | Description | Notes +------------ | ------------- | ------------- | ------------- +**attributes** | [**DataSetAttributes**](DataSetAttributes.md) | | [optional] +**window_spec** | [**DataSetWindow**](DataSetWindow.md) | | [optional] +**data** | [**List[ObjectData]**](ObjectData.md) | | + +## Example + +```python +from waylay.services.queries.models.object_data_set import ObjectDataSet + +# TODO update the JSON string below +json = "{}" +# create an instance of ObjectDataSet from a JSON string +object_data_set_instance = ObjectDataSet.from_json(json) +# print the JSON string representation of the object +print ObjectDataSet.to_json() + +# convert the object into a dict +object_data_set_dict = object_data_set_instance.to_dict() +# create an instance of ObjectDataSet from a dict +object_data_set_form_dict = object_data_set.from_dict(object_data_set_dict) +``` +[[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/ObjectDataValue.md b/docs/ObjectDataValue.md new file mode 100644 index 0000000..639218d --- /dev/null +++ b/docs/ObjectDataValue.md @@ -0,0 +1,28 @@ +# ObjectDataValue + + +## Properties + +Name | Type | Description | Notes +------------ | ------------- | ------------- | ------------- + +## Example + +```python +from waylay.services.queries.models.object_data_value import ObjectDataValue + +# TODO update the JSON string below +json = "{}" +# create an instance of ObjectDataValue from a JSON string +object_data_value_instance = ObjectDataValue.from_json(json) +# print the JSON string representation of the object +print ObjectDataValue.to_json() + +# convert the object into a dict +object_data_value_dict = object_data_value_instance.to_dict() +# create an instance of ObjectDataValue from a dict +object_data_value_form_dict = object_data_value.from_dict(object_data_value_dict) +``` +[[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/Operation.md b/docs/Operation.md new file mode 100644 index 0000000..dcba35d --- /dev/null +++ b/docs/Operation.md @@ -0,0 +1,336 @@ + + +# REST _operation methods_ + +The SDK service module `waylay.services.queries.service` is a generated +plugin for the Waylay Python SDK. + +For each of the operations described in the +[OpenAPI specification](https://docs.waylay.io/openapi/sdk/redocly/queries.html) +of the service, a python _operation_ method is generated. + +These _operation methods_ have a standard sequence of (_positional_ and _named_) arguments, + as illustrated by this example REST operation +`POST /demo/v5/gadgets/{id}/trinkets/combatulate` with _operationId_ `combatulateTrinket` + +## Example request + +```python +response = await waylay_client.demo.gadgets.combatulate_trinket( + # required path parameters (positional), for the `id` path parameter + '23456', + # required or optional query parameters (named) + query={ + 'compression_level': 15 + }, + # request body named arguments (named) + # in this case using generated model for an `application/json` request + json=CombatulationRecipe(mode='traditional', decoration='minimal'), + # optional http headers (named) + headers: { + 'accept' : 'text/csv' + }, + # optional named arguments that specify how the response should be rendered (named) + raw_response=False, + select_path=None, + response_type=None, + # optional flag to disable the validation of the request arguments when using typed requests + validate_request=True, + # optional named arguments passed to the http client (named) + timeout=10.0, +) +``` + +# Supported request arguments + +Each _operation method_ of this SDK uses the following arguments: + +## Argument overview +* [`*path_args: str`](#req_arg_path) required positional path parameters +* [`query: QueryRequest`](#req_arg_query) url query parameters +* [request body](#req_arg_body) arguments + * [`json: Any`](#req_arg_json) a model instance or python data structure for a json request (`application/json`) + * [`content: ContentRequest`](#req_arg_content) raw bytes of any content type + * [`files: FilesRequest`](#req_arg_files) a multi-part request (`multipart/form-data`) + * [`data: DataRequest`](#req_arg_data) an url-encoded form (`application/x-www-form-urlencoded`), or additional non-file parts of a multi-part request. +* [`headers: HeadersRequest`](#req_arg_headers) http request headers +* [response rendering](#req_arg_render) arguments that specify how the response is presented + * [`raw_response: bool`](#req_arg_raw): if `True` returns a http `Response` object + * [`select_path: str`](#req_arg_select): used on a `json` `dict` response to select the relevant part of the response. + * [`response_type: Type | None`](#req_arg_response_type): parse the response as an instance of specified type. +* [http client](#req_arg_client) arguments that influence the handling of the http call. + +## Typing of arguments +The generated methods of this SDK will include additional type information, including +* the actual names of the the path arguments +* model types for the `json` request argument +* keys and values for documented `query`, `header` and `data` + +The most relevant request body arguments (of `json`, `files`, `data`, `content`) +are explicitly documented, leaving the others as optional `**kwargs` named parameters. + +But even if not explicitly documented in the typed signature, you can use the other request body arguments, +assuming the server supports it. + +## Using `content` to send a request body. +The `content` argument is always available as named argument. +Even if e.g. the typing of `combatulate_trinket` method suggests to use a `json` argument, +you can alternatively specify a binary `content` request to stream an already json-encoded request from file. + +```python +binary_req_body = b'{"mode":"traditional","decoration":"minimal"}' +response = await waylay_client.demo.gadgets.combatulate_trinket( + '23456', + content=binary_req_body, + headers={'content-type' : 'application/json'} +) +``` + +## Path parameter arguments +In case the REST operation supports path parameters that configure the request URL, +they are presented as required (positional) initial parameters of type `str`. + +In the example above, the first `'23456'` corresponds to the `id` path parameter, +and leads to a call with url +``` +POST /demo/v5/gadgets/23456/trinkets/combatulate +``` + +## Query parameter arguments +```python +query: QueryRequest +``` +with types +```python +QueryRequest = QueryMap | QueryEntries | QueryString | Model +PrimitiveData = str | int | float | bool | None +# a mapping of query keys to values or list of values +QueryMap = Mapping[str, Union[PrimitiveData, Sequence[PrimitiveData]]] +# a list of query tuples, with repeated keys +QueryEntries = List[Tuple[str, PrimitiveData]] | Tuple[Tuple[str, PrimitiveData], ...] +# a query string, to be used as is on the request +QueryString = str | bytes +``` + +The named `query` argument holds all url query parameters. +Any query arguments described in the OpenAPI document will typed, but undocumented +query parameters will be forwarded. E.g. using +``` +query={ 'compression_level': 15, 'debug': True } +``` +Will lead to a request with url query parameters +``` +POST /demo/v5/gadgets/23456/trinkets/combatulate?compression_level=15&debug=true +``` + +Any model instance specified as an argument will be converted to its `dict` representation first, +which has to be compatible with a `QueryMap` + +## Request body arguments +The following cases are supported for request body arguments +* [`json: Any`](#req_arg_json) a model instance or python data structure for a json request (`application/json`) +* [`content: ContentRequest`](#req_arg_content) raw bytes of any content type +* [`files: FilesRequest`](#req_arg_files) a multi-part request (`multipart/form-data`) +* [`data: DataRequest`](#req_arg_data) an url-encoded form (`application/x-www-form-urlencoded`), or additional non-file parts of a multi-part request. + +### JSON request argument `json` +The `json` argument allows the user to specify a `application/json` request body, using a +generated instance of a generated _Model_ class, or as a python data structure. + +```python +json: Any +``` + +Most REST operations use a JSON (`application/json`) request body, and the SDK service module +will provide typed _model_ classes for them. + +These requests can be passed as a `json` named parameter, either as _model instances_ or as plain +python `dict`, `array` or primitive types that are JSON-serializable. + +#### Example +The following examples assume that the server supports `application/json` requests. + +```python +response = await waylay_client.demo.gadgets.combatulate_trinket( + '43466', + json=CombatulationRecipe(mode='traditional', decoration='minimal') +) +``` +```python +response = await waylay_client.demo.gadgets.combatulate_trinket( + '43466', + json={'mode':'traditional', 'decoration':'minimal'} +) +``` +Will both send a json request with payload `{"mode":"traditional","decoration":"minimal"}` to the server, + +assuming that `CombatulationRecipe` is a model class that does not include additional default attributes. + +### Binary request argument `content` +The `content` argument allows the user to specify a raw binary request of any content type. + +```python +content: ContentRequest +``` +with types +```python +ContentRequest = bytes | str | Iterable[bytes] | AsyncIterable[bytes] | IO[bytes] +``` + +For operations with non-JSON request bodies, the request body must be specified in its binary form +using the `content` argument. + +Unless a default `content-type` is defined in the OpenAPI specification, or at the server, you need +to specify a `content-type` header. + +Supported values for the `content` argument are: +* a `bytes` instance such as `b'abc'` +* `str` instances will be converted to `bytes` using the `utf-8` encoding. +* an `Iterable` that produces `bytes` +* an `AsyncIterable` that produces bytes +* a `IO[bytes]` object that is converted to a `Iterable[bytes]` (if it not yet is). + +When the SDK can infer a total length of the bytes stream (e.g. when attached to a file), +the request will be uploaded as one stream with a `content-length` header indicating the length. + +Otherwise, the content is sent in chuncks (using `"Transfer-Encoding": "chunked"`), +looping over the iterable or buffered reads from the stream. + +#### examples +Using a bytes string: +```python +response = await waylay_client.demo.gadgets.combatulate_trinket( + '23456', + content=b'{"mode":"traditional","decoration":"minimal"}', + headers={'content-type' : 'application/json'} +) +``` +Using an iterator with `bytes` chunks: +```python +def generate_chunks(): + yield b'{"mode":' + yield b'"traditional",' + yield b'"decoration":"minimal"' + yield b'}' +response = await waylay_client.demo.gadgets.combatulate_trinket( + '23456', + content=generate_chunks(), + headers={'content-type' : 'application/json'} +) +``` + +From file, assuming the server supports xml requests: +```python +with open('~/combatulation_requests/example_23456.xml') as xml_file: + response = await waylay_client.demo.gadgets.combatulate_trinket( + '23456', + content=xml_file, + headers={'content-type' : 'text/xml'} + ) +``` + +### Multipart file request argument `files` (and `data`) +The `files` argument triggers the composition of a `multipart/form-data` request. +```python +files: FilesRequest +data: DataRequest +``` +with types +```python +FilesRequest = Mapping[str, FileTypes] | Sequence[Tuple[str, FileTypes]] +DataRequest = Optional[Mapping[str, bytes | PrimitiveData]] + +FileTypes = FileContent | FileNameContent | FileNameContentType | FileNameContentTypeHeaders + +# the raw content as bytes (stream) +FileContent = Union[IO[bytes], bytes, str] +# a file name and content +FileNameContent = [Optional[str], FileContent] +# a file name, content and mediatype string +FileNameContentType = [Optional[str], FileContent, Optional[str]] +# a file name, content, mediatype and additional headers +FileNameContentTypeHeaders = [Optional[str], FileContent, Optional[str], Mapping[str, str]] + +PrimitiveData = str | int | float | bool | None +``` + +When the REST operation supports a multipart file request (content type `multipart/form-data`), +use the `files` named argument to construct such request. +Each entry in the `files` argument ends up as one part of a multipart request, using the specified +part name. + +You can provide the raw bytes (stream) only, +or optionally specify the `filename`, `content-type` or additional `headers` for each part. + +When a `data` argument is specified, these will be added as additional non-file parts, + +#### Example +The following examples assume that the server supports `multipart/form-data` requests. +```python +response = await waylay_client.demo.gadgets.combatulate_trinket( + '43466', + files={'background': open('~/images/deepblue.png)}, + data={'mode':'traditional', 'decoration':'minimal'} +) +``` + +Will send the data as `multipart/form-data`, with three sections `background`, `mode` and `decoration`. + +```python +response = await waylay_client.demo.gadgets.combatulate_trinket( + '43466', + files={ + 'background': ['deepblue.png', open('~/images/deepblue.png),'image/png'] + }, + data={'mode':'traditional', 'decoration':'minimal'} +) +``` +sends the same data, but a filename and content type is added to the `background` part. + + + + +### Url-encoded form data `data` +The `data` argument triggers the composition of an `application/x-www-form-urlencoded` html form request. + +```python +data: Optional[Mapping[str, bytes | PrimitiveData]] +``` + +For operations that use url-encoded form data (content type `application/x-www-form-urlencoded`), +use the `data` named argument (without a `files` argument). + +The http client will in that case use that content-type and encode the using that style. + +These type of operations are normally meant to support [simple html forms](https://developer.mozilla.org/en-US/docs/Web/HTTP/Methods/POST#example). + +#### Example +The following example assumes that the server supports `application/x-www-form-urlencoded` requests. + +```python +response = await waylay_client.demo.gadgets.combatulate_trinket( + '43466', + data={'mode':'traditional', 'decoration':'minimal'} +) +``` +Will send the data with content-type `application/x-www-form-urlencoded`, as if an html form submitted +this request with form inputs `mode` and `decoration`. + +## Request `headers` argument + +TODO + +## Response rendering arguments + +### Render a raw http response: `raw_response` +TODO + +### Select a part of the response: `select_path` +TODO + +### Parse the 2XX response as an instance of type: `response_type` +TODO + +## Http client arguments + +TODO diff --git a/docs/QueriesListResponse.md b/docs/QueriesListResponse.md new file mode 100644 index 0000000..5ebd7a7 --- /dev/null +++ b/docs/QueriesListResponse.md @@ -0,0 +1,36 @@ +# QueriesListResponse + +Listing of named queries, with paging links. + +## Properties + +Name | Type | Description | Notes +------------ | ------------- | ------------- | ------------- +**messages** | [**List[Message]**](Message.md) | | [optional] +**queries** | [**List[QueryListItem]**](QueryListItem.md) | One page of matching query definitions. | +**count** | **int** | Number of query definitions returned in the current response. | +**offset** | **int** | Offset in the full listing (skipped definitions). | +**limit** | **int** | Maximal number of query definitions returned in one response. | +**total_count** | **int** | Total number of query definitions matching the filter. | [optional] +**links** | [**QueryListHALLinks**](QueryListHALLinks.md) | | + +## Example + +```python +from waylay.services.queries.models.queries_list_response import QueriesListResponse + +# TODO update the JSON string below +json = "{}" +# create an instance of QueriesListResponse from a JSON string +queries_list_response_instance = QueriesListResponse.from_json(json) +# print the JSON string representation of the object +print QueriesListResponse.to_json() + +# convert the object into a dict +queries_list_response_dict = queries_list_response_instance.to_dict() +# create an instance of QueriesListResponse from a dict +queries_list_response_form_dict = queries_list_response.from_dict(queries_list_response_dict) +``` +[[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/QueryDefinition.md b/docs/QueryDefinition.md new file mode 100644 index 0000000..e84c17a --- /dev/null +++ b/docs/QueryDefinition.md @@ -0,0 +1,42 @@ +# QueryDefinition + + +## Properties + +Name | Type | Description | Notes +------------ | ------------- | ------------- | ------------- +**meta** | **object** | User metadata for the query definition. | [optional] +**query** | [**QueryInput**](QueryInput.md) | | [optional] +**resource** | **str** | Default resource for the series in the query. | [optional] +**metric** | **str** | Default metric for the series in the query. | [optional] +**aggregation** | [**DefaultAggregation**](DefaultAggregation.md) | | [optional] +**interpolation** | [**DefaultInterpolation**](DefaultInterpolation.md) | | [optional] +**freq** | [**GroupingInterval**](GroupingInterval.md) | | [optional] +**var_from** | [**TimeWindowFrom**](TimeWindowFrom.md) | | [optional] +**until** | [**TimeWindowUntil**](TimeWindowUntil.md) | | [optional] +**window** | [**Window**](Window.md) | | [optional] +**periods** | **int** | The size of the time window in number of `freq` units. One of the [time line](https://docs.waylay.io/#/api/query/?id=time-line-properties) specifiers. | [optional] +**align** | [**Alignment**](Alignment.md) | | [optional] +**data** | [**List[SeriesSpec]**](SeriesSpec.md) | List of series specifications. When not specified, a single default series specification is assumed(`[{}]`, using the default `metric`,`resource`, ... ). | [optional] +**render** | [**Render**](Render.md) | | [optional] + +## Example + +```python +from waylay.services.queries.models.query_definition import QueryDefinition + +# TODO update the JSON string below +json = "{}" +# create an instance of QueryDefinition from a JSON string +query_definition_instance = QueryDefinition.from_json(json) +# print the JSON string representation of the object +print QueryDefinition.to_json() + +# convert the object into a dict +query_definition_dict = query_definition_instance.to_dict() +# create an instance of QueryDefinition from a dict +query_definition_form_dict = query_definition.from_dict(query_definition_dict) +``` +[[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/QueryEntityInput.md b/docs/QueryEntityInput.md new file mode 100644 index 0000000..2670f25 --- /dev/null +++ b/docs/QueryEntityInput.md @@ -0,0 +1,32 @@ +# QueryEntityInput + +Input data to create a query definition. + +## Properties + +Name | Type | Description | Notes +------------ | ------------- | ------------- | ------------- +**name** | **str** | Name of the stored query definition. | +**meta** | **object** | User metadata for the query definition. | [optional] +**query** | [**QueryInput**](QueryInput.md) | | + +## Example + +```python +from waylay.services.queries.models.query_entity_input import QueryEntityInput + +# TODO update the JSON string below +json = "{}" +# create an instance of QueryEntityInput from a JSON string +query_entity_input_instance = QueryEntityInput.from_json(json) +# print the JSON string representation of the object +print QueryEntityInput.to_json() + +# convert the object into a dict +query_entity_input_dict = query_entity_input_instance.to_dict() +# create an instance of QueryEntityInput from a dict +query_entity_input_form_dict = query_entity_input.from_dict(query_entity_input_dict) +``` +[[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/QueryExecutionMessage.md b/docs/QueryExecutionMessage.md new file mode 100644 index 0000000..60a1a6c --- /dev/null +++ b/docs/QueryExecutionMessage.md @@ -0,0 +1,36 @@ +# QueryExecutionMessage + +A message object that informs or warns about a query execution issue. + +## Properties + +Name | Type | Description | Notes +------------ | ------------- | ------------- | ------------- +**message** | **str** | A human readable message. | +**level** | [**QueryExecutionMessageLevel**](QueryExecutionMessageLevel.md) | | +**timestamp** | **datetime** | | +**action** | **str** | The request action that caused this message. | +**category** | **str** | The subsystem that issued this message. | +**properties** | [**MessageArguments**](MessageArguments.md) | | [optional] +**exception** | [**CauseException**](CauseException.md) | | [optional] + +## Example + +```python +from waylay.services.queries.models.query_execution_message import QueryExecutionMessage + +# TODO update the JSON string below +json = "{}" +# create an instance of QueryExecutionMessage from a JSON string +query_execution_message_instance = QueryExecutionMessage.from_json(json) +# print the JSON string representation of the object +print QueryExecutionMessage.to_json() + +# convert the object into a dict +query_execution_message_dict = query_execution_message_instance.to_dict() +# create an instance of QueryExecutionMessage from a dict +query_execution_message_form_dict = query_execution_message.from_dict(query_execution_message_dict) +``` +[[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/QueryExecutionMessageLevel.md b/docs/QueryExecutionMessageLevel.md new file mode 100644 index 0000000..39d2ffd --- /dev/null +++ b/docs/QueryExecutionMessageLevel.md @@ -0,0 +1,11 @@ +# QueryExecutionMessageLevel + + +## Properties + +Name | Type | Description | Notes +------------ | ------------- | ------------- | ------------- + +[[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/QueryHALLinks.md b/docs/QueryHALLinks.md new file mode 100644 index 0000000..b6cca40 --- /dev/null +++ b/docs/QueryHALLinks.md @@ -0,0 +1,31 @@ +# QueryHALLinks + +HAL Links for a query entity. + +## Properties + +Name | Type | Description | Notes +------------ | ------------- | ------------- | ------------- +**var_self** | [**HALLink**](HALLink.md) | | +**execute** | [**HALLink**](HALLink.md) | | + +## Example + +```python +from waylay.services.queries.models.query_hal_links import QueryHALLinks + +# TODO update the JSON string below +json = "{}" +# create an instance of QueryHALLinks from a JSON string +query_hal_links_instance = QueryHALLinks.from_json(json) +# print the JSON string representation of the object +print QueryHALLinks.to_json() + +# convert the object into a dict +query_hal_links_dict = query_hal_links_instance.to_dict() +# create an instance of QueryHALLinks from a dict +query_hal_links_form_dict = query_hal_links.from_dict(query_hal_links_dict) +``` +[[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/QueryInput.md b/docs/QueryInput.md new file mode 100644 index 0000000..a7ee406 --- /dev/null +++ b/docs/QueryInput.md @@ -0,0 +1,41 @@ +# QueryInput + +Query definition for a Waylay analytics query. See also [api docs](https://docs.waylay.io/#/api/query/?id=data-query-json-representation). + +## Properties + +Name | Type | Description | Notes +------------ | ------------- | ------------- | ------------- +**resource** | **str** | Default resource for the series in the query. | [optional] +**metric** | **str** | Default metric for the series in the query. | [optional] +**aggregation** | [**DefaultAggregation**](DefaultAggregation.md) | | [optional] +**interpolation** | [**DefaultInterpolation**](DefaultInterpolation.md) | | [optional] +**freq** | [**GroupingInterval**](GroupingInterval.md) | | [optional] +**var_from** | [**TimeWindowFrom**](TimeWindowFrom.md) | | [optional] +**until** | [**TimeWindowUntil**](TimeWindowUntil.md) | | [optional] +**window** | [**Window**](Window.md) | | [optional] +**periods** | **int** | The size of the time window in number of `freq` units. One of the [time line](https://docs.waylay.io/#/api/query/?id=time-line-properties) specifiers. | [optional] +**align** | [**Alignment**](Alignment.md) | | [optional] +**data** | [**List[SeriesSpec]**](SeriesSpec.md) | List of series specifications. When not specified, a single default series specification is assumed(`[{}]`, using the default `metric`,`resource`, ... ). | [optional] +**render** | [**Render**](Render.md) | | [optional] + +## Example + +```python +from waylay.services.queries.models.query_input import QueryInput + +# TODO update the JSON string below +json = "{}" +# create an instance of QueryInput from a JSON string +query_input_instance = QueryInput.from_json(json) +# print the JSON string representation of the object +print QueryInput.to_json() + +# convert the object into a dict +query_input_dict = query_input_instance.to_dict() +# create an instance of QueryInput from a dict +query_input_form_dict = query_input.from_dict(query_input_dict) +``` +[[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/QueryListHALLinks.md b/docs/QueryListHALLinks.md new file mode 100644 index 0000000..8f92b46 --- /dev/null +++ b/docs/QueryListHALLinks.md @@ -0,0 +1,34 @@ +# QueryListHALLinks + +HAL Links for a query entity. + +## Properties + +Name | Type | Description | Notes +------------ | ------------- | ------------- | ------------- +**var_self** | [**HALLink**](HALLink.md) | | +**first** | [**HALLink**](HALLink.md) | | [optional] +**prev** | [**HALLink**](HALLink.md) | | [optional] +**next** | [**HALLink**](HALLink.md) | | [optional] +**last** | [**HALLink**](HALLink.md) | | [optional] + +## Example + +```python +from waylay.services.queries.models.query_list_hal_links import QueryListHALLinks + +# TODO update the JSON string below +json = "{}" +# create an instance of QueryListHALLinks from a JSON string +query_list_hal_links_instance = QueryListHALLinks.from_json(json) +# print the JSON string representation of the object +print QueryListHALLinks.to_json() + +# convert the object into a dict +query_list_hal_links_dict = query_list_hal_links_instance.to_dict() +# create an instance of QueryListHALLinks from a dict +query_list_hal_links_form_dict = query_list_hal_links.from_dict(query_list_hal_links_dict) +``` +[[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/QueryListItem.md b/docs/QueryListItem.md new file mode 100644 index 0000000..b518de0 --- /dev/null +++ b/docs/QueryListItem.md @@ -0,0 +1,33 @@ +# QueryListItem + +Listing of a query definition item. + +## Properties + +Name | Type | Description | Notes +------------ | ------------- | ------------- | ------------- +**links** | [**QueryHALLinks**](QueryHALLinks.md) | | +**attrs** | **object** | System provided metadata for the query definition. | +**name** | **str** | Name of the stored query definition. | +**meta** | **object** | User metadata for the query definition. | [optional] + +## Example + +```python +from waylay.services.queries.models.query_list_item import QueryListItem + +# TODO update the JSON string below +json = "{}" +# create an instance of QueryListItem from a JSON string +query_list_item_instance = QueryListItem.from_json(json) +# print the JSON string representation of the object +print QueryListItem.to_json() + +# convert the object into a dict +query_list_item_dict = query_list_item_instance.to_dict() +# create an instance of QueryListItem from a dict +query_list_item_form_dict = query_list_item.from_dict(query_list_item_dict) +``` +[[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/QueryOutput.md b/docs/QueryOutput.md new file mode 100644 index 0000000..8284693 --- /dev/null +++ b/docs/QueryOutput.md @@ -0,0 +1,41 @@ +# QueryOutput + +Query definition for a Waylay analytics query. See also [api docs](https://docs.waylay.io/#/api/query/?id=data-query-json-representation). + +## Properties + +Name | Type | Description | Notes +------------ | ------------- | ------------- | ------------- +**resource** | **str** | Default resource for the series in the query. | [optional] +**metric** | **str** | Default metric for the series in the query. | [optional] +**aggregation** | [**DefaultAggregation**](DefaultAggregation.md) | | [optional] +**interpolation** | [**DefaultInterpolation**](DefaultInterpolation.md) | | [optional] +**freq** | [**GroupingInterval**](GroupingInterval.md) | | [optional] +**var_from** | [**TimeWindowFrom**](TimeWindowFrom.md) | | [optional] +**until** | [**TimeWindowUntil**](TimeWindowUntil.md) | | [optional] +**window** | [**Window**](Window.md) | | [optional] +**periods** | **int** | The size of the time window in number of `freq` units. One of the [time line](https://docs.waylay.io/#/api/query/?id=time-line-properties) specifiers. | [optional] +**align** | [**Alignment**](Alignment.md) | | [optional] +**data** | [**List[SeriesSpec]**](SeriesSpec.md) | List of series specifications. When not specified, a single default series specification is assumed(`[{}]`, using the default `metric`,`resource`, ... ). | [optional] +**render** | [**Render**](Render.md) | | [optional] + +## Example + +```python +from waylay.services.queries.models.query_output import QueryOutput + +# TODO update the JSON string below +json = "{}" +# create an instance of QueryOutput from a JSON string +query_output_instance = QueryOutput.from_json(json) +# print the JSON string representation of the object +print QueryOutput.to_json() + +# convert the object into a dict +query_output_dict = query_output_instance.to_dict() +# create an instance of QueryOutput from a dict +query_output_form_dict = query_output.from_dict(query_output_dict) +``` +[[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/QueryResponse.md b/docs/QueryResponse.md new file mode 100644 index 0000000..f61784f --- /dev/null +++ b/docs/QueryResponse.md @@ -0,0 +1,35 @@ +# QueryResponse + +Represents a single named query. + +## Properties + +Name | Type | Description | Notes +------------ | ------------- | ------------- | ------------- +**links** | [**QueryHALLinks**](QueryHALLinks.md) | | +**attrs** | **object** | System provided metadata for the query definition. | +**name** | **str** | Name of the stored query definition. | +**meta** | **object** | User metadata for the query definition. | [optional] +**query** | [**QueryOutput**](QueryOutput.md) | | +**messages** | [**List[Message]**](Message.md) | | [optional] + +## Example + +```python +from waylay.services.queries.models.query_response import QueryResponse + +# TODO update the JSON string below +json = "{}" +# create an instance of QueryResponse from a JSON string +query_response_instance = QueryResponse.from_json(json) +# print the JSON string representation of the object +print QueryResponse.to_json() + +# convert the object into a dict +query_response_dict = query_response_instance.to_dict() +# create an instance of QueryResponse from a dict +query_response_form_dict = query_response.from_dict(query_response_dict) +``` +[[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/QueryResult.md b/docs/QueryResult.md new file mode 100644 index 0000000..122776a --- /dev/null +++ b/docs/QueryResult.md @@ -0,0 +1,32 @@ +# QueryResult + +A json data response. Uses the format as specified by the `render` options of the request (defaults to `COMPACT_WS`). ' + +## Properties + +Name | Type | Description | Notes +------------ | ------------- | ------------- | ------------- +**data** | [**List[ResponseDataSet]**](ResponseDataSet.md) | A list of data sets, each with their own time axis. There will be one dataset for each `role` specified in the query (by default a single `input` role). The data is represented according to the `render` options in the query (default `COMPACT_WS`). | +**query** | [**QueryInput**](QueryInput.md) | | +**messages** | [**List[QueryExecutionMessage]**](QueryExecutionMessage.md) | | + +## Example + +```python +from waylay.services.queries.models.query_result import QueryResult + +# TODO update the JSON string below +json = "{}" +# create an instance of QueryResult from a JSON string +query_result_instance = QueryResult.from_json(json) +# print the JSON string representation of the object +print QueryResult.to_json() + +# convert the object into a dict +query_result_dict = query_result_instance.to_dict() +# create an instance of QueryResult from a dict +query_result_form_dict = query_result.from_dict(query_result_dict) +``` +[[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/QueryUpdateInput.md b/docs/QueryUpdateInput.md new file mode 100644 index 0000000..df65031 --- /dev/null +++ b/docs/QueryUpdateInput.md @@ -0,0 +1,31 @@ +# QueryUpdateInput + +Input data to update a query definition. + +## Properties + +Name | Type | Description | Notes +------------ | ------------- | ------------- | ------------- +**meta** | **object** | User metadata for the query definition. | [optional] +**query** | [**QueryInput**](QueryInput.md) | | [optional] + +## Example + +```python +from waylay.services.queries.models.query_update_input import QueryUpdateInput + +# TODO update the JSON string below +json = "{}" +# create an instance of QueryUpdateInput from a JSON string +query_update_input_instance = QueryUpdateInput.from_json(json) +# print the JSON string representation of the object +print QueryUpdateInput.to_json() + +# convert the object into a dict +query_update_input_dict = query_update_input_instance.to_dict() +# create an instance of QueryUpdateInput from a dict +query_update_input_form_dict = query_update_input.from_dict(query_update_input_dict) +``` +[[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/Render.md b/docs/Render.md new file mode 100644 index 0000000..b6a762c --- /dev/null +++ b/docs/Render.md @@ -0,0 +1,42 @@ +# Render + +Configures the representation of data sets returned by the query API. + +## Properties + +Name | Type | Description | Notes +------------ | ------------- | ------------- | ------------- +**mode** | [**RenderMode**](RenderMode.md) | | [optional] +**roll_up** | **bool** | move up attributes on rows (or columns) that are the same for all rows (or columns) to a table attribute. Levels enumerated in 'hierarchical' are excluded. | [optional] +**hierarchical** | [**Hierarchical**](Hierarchical.md) | | [optional] +**value_key** | **str** | if set, use this key in the value object to report data values | [optional] +**show_levels** | **bool** | if set, report the levels used in the data values (either hierarchical or flat) | [optional] +**iso_timestamp** | **bool** | if set, render timestamps in a row or column index with both epoch and iso representations | [optional] +**row_key** | **str** | if set, use this key as name of the row-dimension for single-dimensional rows | [optional] +**column_key** | **str** | if set, use this key as name of the column-dimension for single-dimensional columns | [optional] +**header_array** | [**HeaderArrayOption**](HeaderArrayOption.md) | | [optional] +**data_axis** | [**DataAxisOption**](DataAxisOption.md) | | [optional] +**key_seperator** | **str** | character used to concatenate multi-key columns or rows when required | [optional] +**key_skip_empty** | **bool** | skip empty values in concatenating multi-key column or row headers | [optional] +**include_window_spec** | **bool** | if set, include window specification in render modes that support it | [optional] + +## Example + +```python +from waylay.services.queries.models.render import Render + +# TODO update the JSON string below +json = "{}" +# create an instance of Render from a JSON string +render_instance = Render.from_json(json) +# print the JSON string representation of the object +print Render.to_json() + +# convert the object into a dict +render_dict = render_instance.to_dict() +# create an instance of Render from a dict +render_form_dict = render.from_dict(render_dict) +``` +[[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/Render1.md b/docs/Render1.md new file mode 100644 index 0000000..c347a7a --- /dev/null +++ b/docs/Render1.md @@ -0,0 +1,41 @@ +# Render1 + + +## Properties + +Name | Type | Description | Notes +------------ | ------------- | ------------- | ------------- +**mode** | [**RenderMode**](RenderMode.md) | | [optional] +**roll_up** | **bool** | move up attributes on rows (or columns) that are the same for all rows (or columns) to a table attribute. Levels enumerated in 'hierarchical' are excluded. | [optional] +**hierarchical** | [**Hierarchical**](Hierarchical.md) | | [optional] +**value_key** | **str** | if set, use this key in the value object to report data values | [optional] +**show_levels** | **bool** | if set, report the levels used in the data values (either hierarchical or flat) | [optional] +**iso_timestamp** | **bool** | if set, render timestamps in a row or column index with both epoch and iso representations | [optional] +**row_key** | **str** | if set, use this key as name of the row-dimension for single-dimensional rows | [optional] +**column_key** | **str** | if set, use this key as name of the column-dimension for single-dimensional columns | [optional] +**header_array** | [**HeaderArrayOption**](HeaderArrayOption.md) | | [optional] +**data_axis** | [**DataAxisOption**](DataAxisOption.md) | | [optional] +**key_seperator** | **str** | character used to concatenate multi-key columns or rows when required | [optional] +**key_skip_empty** | **bool** | skip empty values in concatenating multi-key column or row headers | [optional] +**include_window_spec** | **bool** | if set, include window specification in render modes that support it | [optional] + +## Example + +```python +from waylay.services.queries.models.render1 import Render1 + +# TODO update the JSON string below +json = "{}" +# create an instance of Render1 from a JSON string +render1_instance = Render1.from_json(json) +# print the JSON string representation of the object +print Render1.to_json() + +# convert the object into a dict +render1_dict = render1_instance.to_dict() +# create an instance of Render1 from a dict +render1_form_dict = render1.from_dict(render1_dict) +``` +[[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/RenderMode.md b/docs/RenderMode.md new file mode 100644 index 0000000..bc5ac43 --- /dev/null +++ b/docs/RenderMode.md @@ -0,0 +1,29 @@ +# RenderMode + +Render mode configuration keys. + +## Properties + +Name | Type | Description | Notes +------------ | ------------- | ------------- | ------------- + +## Example + +```python +from waylay.services.queries.models.render_mode import RenderMode + +# TODO update the JSON string below +json = "{}" +# create an instance of RenderMode from a JSON string +render_mode_instance = RenderMode.from_json(json) +# print the JSON string representation of the object +print RenderMode.to_json() + +# convert the object into a dict +render_mode_dict = render_mode_instance.to_dict() +# create an instance of RenderMode from a dict +render_mode_form_dict = render_mode.from_dict(render_mode_dict) +``` +[[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/RenderModeOneOf.md b/docs/RenderModeOneOf.md new file mode 100644 index 0000000..ccc2f18 --- /dev/null +++ b/docs/RenderModeOneOf.md @@ -0,0 +1,12 @@ +# RenderModeOneOf + +Render rows of timestamp and values. Show column headers. Includes an iso timestamp. ###### options - `iso_timestamp`: `True` - `header_array`: `row` - `roll_up`: `False` - `data_axis`: `column` + +## Properties + +Name | Type | Description | Notes +------------ | ------------- | ------------- | ------------- + +[[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/RenderModeOneOf1.md b/docs/RenderModeOneOf1.md new file mode 100644 index 0000000..0d8f830 --- /dev/null +++ b/docs/RenderModeOneOf1.md @@ -0,0 +1,12 @@ +# RenderModeOneOf1 + +Render rows of timestamp and values. Show column headers. ###### options - `iso_timestamp`: `False` - `header_array`: `row` - `roll_up`: `False` - `data_axis`: `column` + +## Properties + +Name | Type | Description | Notes +------------ | ------------- | ------------- | ------------- + +[[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/RenderModeOneOf2.md b/docs/RenderModeOneOf2.md new file mode 100644 index 0000000..1be600f --- /dev/null +++ b/docs/RenderModeOneOf2.md @@ -0,0 +1,12 @@ +# RenderModeOneOf2 + +Render rows of timestamp and values. Show column headers. Show the time window attributes. ###### options - `iso_timestamp`: `False` - `header_array`: `row` - `roll_up`: `False` - `data_axis`: `column` - `include_window_spec`: `True` + +## Properties + +Name | Type | Description | Notes +------------ | ------------- | ------------- | ------------- + +[[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/RenderModeOneOf3.md b/docs/RenderModeOneOf3.md new file mode 100644 index 0000000..d616c02 --- /dev/null +++ b/docs/RenderModeOneOf3.md @@ -0,0 +1,12 @@ +# RenderModeOneOf3 + +Render timestamps and each series (column) as a values array. Show column headers. ###### options - `iso_timestamp`: `False` - `header_array`: `row` - `data_axis`: `row` - `roll_up`: `True` - `include_window_spec`: `True` + +## Properties + +Name | Type | Description | Notes +------------ | ------------- | ------------- | ------------- + +[[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/RenderModeOneOf4.md b/docs/RenderModeOneOf4.md new file mode 100644 index 0000000..24aa212 --- /dev/null +++ b/docs/RenderModeOneOf4.md @@ -0,0 +1,12 @@ +# RenderModeOneOf4 + +Renders row index in `rows`, and each series as a values array. The series are prefixed by their series attributes.The `rows` index is prefixed by the labels for these attributes. ###### options - `iso_timestamp`: `True` - `header_array`: `column` - `roll_up`: `False` - `data_axis`: `row` + +## Properties + +Name | Type | Description | Notes +------------ | ------------- | ------------- | ------------- + +[[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/RenderModeOneOf5.md b/docs/RenderModeOneOf5.md new file mode 100644 index 0000000..2facf2d --- /dev/null +++ b/docs/RenderModeOneOf5.md @@ -0,0 +1,12 @@ +# RenderModeOneOf5 + +Render an object for each observation. Uses flattened keys. ###### options - `iso_timestamp`: `True` - `hierarchical`: `False` - `show_levels`: `True` - `roll_up`: `False` + +## Properties + +Name | Type | Description | Notes +------------ | ------------- | ------------- | ------------- + +[[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/RenderModeOneOf6.md b/docs/RenderModeOneOf6.md new file mode 100644 index 0000000..698dd38 --- /dev/null +++ b/docs/RenderModeOneOf6.md @@ -0,0 +1,12 @@ +# RenderModeOneOf6 + +Render an hierarchical object for each observation. Shows an iso timestamp. ###### options - `iso_timestamp`: `True` - `hierarchical`: `True` - `show_levels`: `True` - `roll_up`: `True` + +## Properties + +Name | Type | Description | Notes +------------ | ------------- | ------------- | ------------- + +[[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/RenderModeOneOf7.md b/docs/RenderModeOneOf7.md new file mode 100644 index 0000000..f162c67 --- /dev/null +++ b/docs/RenderModeOneOf7.md @@ -0,0 +1,12 @@ +# RenderModeOneOf7 + +Render an object with metric keys for each observation. Shows an iso timestamp. ###### options - `iso_timestamp`: `True` - `hierarchical`: `['metric']` - `show_levels`: `False` - `roll_up`: `True` - `key_skip_empty`: `True` + +## Properties + +Name | Type | Description | Notes +------------ | ------------- | ------------- | ------------- + +[[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/RenderModeOneOf8.md b/docs/RenderModeOneOf8.md new file mode 100644 index 0000000..382a718 --- /dev/null +++ b/docs/RenderModeOneOf8.md @@ -0,0 +1,12 @@ +# RenderModeOneOf8 + +Render in an object format compatible with the `/data/v1/events` upload. ###### options - `iso_timestamp`: `False` - `hierarchical`: `False` - `show_levels`: `False` - `roll_up`: `True` + +## Properties + +Name | Type | Description | Notes +------------ | ------------- | ------------- | ------------- + +[[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/RenderModeOneOf9.md b/docs/RenderModeOneOf9.md new file mode 100644 index 0000000..c3f18b8 --- /dev/null +++ b/docs/RenderModeOneOf9.md @@ -0,0 +1,12 @@ +# RenderModeOneOf9 + +Render in csv format with row headers. ###### options - `iso_timestamp`: `False` + +## Properties + +Name | Type | Description | Notes +------------ | ------------- | ------------- | ------------- + +[[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/ResponseDataSet.md b/docs/ResponseDataSet.md new file mode 100644 index 0000000..ebc7a45 --- /dev/null +++ b/docs/ResponseDataSet.md @@ -0,0 +1,35 @@ +# ResponseDataSet + +Result timeseries data set, with one time dimension. + +## Properties + +Name | Type | Description | Notes +------------ | ------------- | ------------- | ------------- +**attributes** | [**DataSetAttributes**](DataSetAttributes.md) | | [optional] +**window_spec** | [**DataSetWindow**](DataSetWindow.md) | | [optional] +**data_axis** | [**ColumnDataSetDataAxis**](ColumnDataSetDataAxis.md) | | [optional] [default to ColumnDataSetDataAxis.ROW] +**columns** | [**List[ColumnHeadersInner]**](ColumnHeadersInner.md) | Header Attributes for the column data. The initial string-valued headers (normally a single `timestamp`) indicate that column to contain row index data (i.e. timestamps). The remaining object-valued column headers identify and describe the actual series data. | +**data** | [**List[ObjectData]**](ObjectData.md) | | +**rows** | [**List[RowHeadersInner]**](RowHeadersInner.md) | Header Attributes for the index data. The initial string-valued headers (normally `resource`, `metric`,`aggregation`) indicate that row to contain series attributes. The remaining object-valued row headers contain the index data. | + +## Example + +```python +from waylay.services.queries.models.response_data_set import ResponseDataSet + +# TODO update the JSON string below +json = "{}" +# create an instance of ResponseDataSet from a JSON string +response_data_set_instance = ResponseDataSet.from_json(json) +# print the JSON string representation of the object +print ResponseDataSet.to_json() + +# convert the object into a dict +response_data_set_dict = response_data_set_instance.to_dict() +# create an instance of ResponseDataSet from a dict +response_data_set_form_dict = response_data_set.from_dict(response_data_set_dict) +``` +[[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/RowDataSet.md b/docs/RowDataSet.md new file mode 100644 index 0000000..fd835e2 --- /dev/null +++ b/docs/RowDataSet.md @@ -0,0 +1,34 @@ +# RowDataSet + +Row-oriented dataset. Timeseries data layout with a column header and a data row per timestamp. Result for render options `data_axis=column` and `header_array=row`.\", + +## Properties + +Name | Type | Description | Notes +------------ | ------------- | ------------- | ------------- +**attributes** | [**DataSetAttributes**](DataSetAttributes.md) | | [optional] +**window_spec** | [**DataSetWindow**](DataSetWindow.md) | | [optional] +**data_axis** | [**RowDataSetDataAxis**](RowDataSetDataAxis.md) | | [optional] [default to RowDataSetDataAxis.COLUMN] +**columns** | [**List[ColumnHeadersInner]**](ColumnHeadersInner.md) | Header Attributes for the column data. The initial string-valued headers (normally a single `timestamp`) indicate that column to contain row index data (i.e. timestamps). The remaining object-valued column headers identify and describe the actual series data. | +**data** | **List[List[Datum]]** | | + +## Example + +```python +from waylay.services.queries.models.row_data_set import RowDataSet + +# TODO update the JSON string below +json = "{}" +# create an instance of RowDataSet from a JSON string +row_data_set_instance = RowDataSet.from_json(json) +# print the JSON string representation of the object +print RowDataSet.to_json() + +# convert the object into a dict +row_data_set_dict = row_data_set_instance.to_dict() +# create an instance of RowDataSet from a dict +row_data_set_form_dict = row_data_set.from_dict(row_data_set_dict) +``` +[[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/RowDataSetDataAxis.md b/docs/RowDataSetDataAxis.md new file mode 100644 index 0000000..f91f0d2 --- /dev/null +++ b/docs/RowDataSetDataAxis.md @@ -0,0 +1,11 @@ +# RowDataSetDataAxis + + +## Properties + +Name | Type | Description | Notes +------------ | ------------- | ------------- | ------------- + +[[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/RowHeader.md b/docs/RowHeader.md new file mode 100644 index 0000000..8bc5660 --- /dev/null +++ b/docs/RowHeader.md @@ -0,0 +1,31 @@ +# RowHeader + +Index entry attributes. Attributes for a timestamp index entry. + +## Properties + +Name | Type | Description | Notes +------------ | ------------- | ------------- | ------------- +**timestamp** | **int** | Unix epoch milliseconds timestamp. | +**timestamp_iso** | **datetime** | ISO8601 rendering of the timestamp, present when `render.iso_timestamp=true` | [optional] + +## Example + +```python +from waylay.services.queries.models.row_header import RowHeader + +# TODO update the JSON string below +json = "{}" +# create an instance of RowHeader from a JSON string +row_header_instance = RowHeader.from_json(json) +# print the JSON string representation of the object +print RowHeader.to_json() + +# convert the object into a dict +row_header_dict = row_header_instance.to_dict() +# create an instance of RowHeader from a dict +row_header_form_dict = row_header.from_dict(row_header_dict) +``` +[[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/RowHeadersInner.md b/docs/RowHeadersInner.md new file mode 100644 index 0000000..798e419 --- /dev/null +++ b/docs/RowHeadersInner.md @@ -0,0 +1,30 @@ +# RowHeadersInner + + +## Properties + +Name | Type | Description | Notes +------------ | ------------- | ------------- | ------------- +**timestamp** | **int** | Unix epoch milliseconds timestamp. | +**timestamp_iso** | **datetime** | ISO8601 rendering of the timestamp, present when `render.iso_timestamp=true` | [optional] + +## Example + +```python +from waylay.services.queries.models.row_headers_inner import RowHeadersInner + +# TODO update the JSON string below +json = "{}" +# create an instance of RowHeadersInner from a JSON string +row_headers_inner_instance = RowHeadersInner.from_json(json) +# print the JSON string representation of the object +print RowHeadersInner.to_json() + +# convert the object into a dict +row_headers_inner_dict = row_headers_inner_instance.to_dict() +# create an instance of RowHeadersInner from a dict +row_headers_inner_form_dict = row_headers_inner.from_dict(row_headers_inner_dict) +``` +[[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/SeriesDataSet.md b/docs/SeriesDataSet.md new file mode 100644 index 0000000..c1e6e70 --- /dev/null +++ b/docs/SeriesDataSet.md @@ -0,0 +1,34 @@ +# SeriesDataSet + +Column-oriented dataset. Timeseries data layout with a column header and a seperate data array for the time index and each series. Result for render options `data_axis=row` and `header_array=row`. + +## Properties + +Name | Type | Description | Notes +------------ | ------------- | ------------- | ------------- +**attributes** | [**DataSetAttributes**](DataSetAttributes.md) | | [optional] +**window_spec** | [**DataSetWindow**](DataSetWindow.md) | | [optional] +**data_axis** | [**ColumnDataSetDataAxis**](ColumnDataSetDataAxis.md) | | [optional] [default to ColumnDataSetDataAxis.ROW] +**columns** | [**List[ColumnHeadersInner]**](ColumnHeadersInner.md) | Header Attributes for the column data. The initial string-valued headers (normally a single `timestamp`) indicate that column to contain row index data (i.e. timestamps). The remaining object-valued column headers identify and describe the actual series data. | +**data** | **List[List[Datum]]** | | + +## Example + +```python +from waylay.services.queries.models.series_data_set import SeriesDataSet + +# TODO update the JSON string below +json = "{}" +# create an instance of SeriesDataSet from a JSON string +series_data_set_instance = SeriesDataSet.from_json(json) +# print the JSON string representation of the object +print SeriesDataSet.to_json() + +# convert the object into a dict +series_data_set_dict = series_data_set_instance.to_dict() +# create an instance of SeriesDataSet from a dict +series_data_set_form_dict = series_data_set.from_dict(series_data_set_dict) +``` +[[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/SeriesSpec.md b/docs/SeriesSpec.md new file mode 100644 index 0000000..44448cb --- /dev/null +++ b/docs/SeriesSpec.md @@ -0,0 +1,34 @@ +# SeriesSpec + +Query specification for a single series. + +## Properties + +Name | Type | Description | Notes +------------ | ------------- | ------------- | ------------- +**name** | **str** | Optional alias name for the series. This name is used when exporting the dataset to CSV format. | [optional] +**resource** | **str** | Resource id for the series, required unless it is specified as a query default. | [optional] +**metric** | **str** | Metric name for the series, required unless it is specified as a query default. | [optional] +**aggregration** | [**AggregationMethod**](AggregationMethod.md) | | [optional] +**interpolation** | [**Interpolation**](Interpolation.md) | | [optional] + +## Example + +```python +from waylay.services.queries.models.series_spec import SeriesSpec + +# TODO update the JSON string below +json = "{}" +# create an instance of SeriesSpec from a JSON string +series_spec_instance = SeriesSpec.from_json(json) +# print the JSON string representation of the object +print SeriesSpec.to_json() + +# convert the object into a dict +series_spec_dict = series_spec_instance.to_dict() +# create an instance of SeriesSpec from a dict +series_spec_form_dict = series_spec.from_dict(series_spec_dict) +``` +[[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/StatusApi.md b/docs/StatusApi.md new file mode 100644 index 0000000..9c03208 --- /dev/null +++ b/docs/StatusApi.md @@ -0,0 +1,71 @@ +# waylay.services.queries.StatusApi + +All URIs are relative to *https://api.waylay.io* + +Method | HTTP request | Description +------------- | ------------- | ------------- +[**get**](StatusApi.md#get) | **GET** /queries/v1/queries/v1 | Get Version And Health + +# **get** +> get( +> headers +> ) -> Dict[str, str] + +Get Version And Health + +Get the version and health status for waylay-query. + +### Example + +```python +from pprint import pprint + +# Import the waylay-client from the waylay-sdk-core package +from waylay.sdk.client import WaylayClient +from waylay.sdk.api.api_exceptions import ApiError + +# Intialize a waylay client instance +waylay_client = WaylayClient.from_profile() + +# Note that the typed model classes for responses/parameters/... are only available when `waylay-sdk-queries-types` is installed +try: + # Get Version And Health + # calls `GET /queries/v1/queries/v1` + api_response = await waylay_client.queries.status.get( + ) + print("The response of queries.status.get:\n") + pprint(api_response) +except ApiError as e: + print("Exception when calling queries.status.get: %s\n" % e) +``` + +### Endpoint +``` +GET /queries/v1/queries/v1 +``` +### Parameters + +This endpoint does not need any parameter. +**headers** | [HeaderTypes](Operation.md#req_headers) | request headers | | + +### Return type + +Selected path param | Raw response param | Return Type | Description | Links +------------------- | ------------------ | ------------ | ----------- | ----- +Literal[""] _(default)_ | False _(default)_ | **`Dict[str, str]`** | | +str | False _(default)_ | **`Any`** | If any other string value for the selected path is provided, the exact type of the response will only be known at runtime. | +/ | True | `Response` | The raw http response object. + +### HTTP request headers + + - **Content-Type**: Not defined + - **Accept**: application/json + +### HTTP response details + +| Status code | Description | Response headers | +|-------------|-------------|------------------| +**200** | Successful Response | - | + +[[Back to top]](#) [[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/TimeWindowFrom.md b/docs/TimeWindowFrom.md new file mode 100644 index 0000000..b21f340 --- /dev/null +++ b/docs/TimeWindowFrom.md @@ -0,0 +1,29 @@ +# TimeWindowFrom + +The start of the time window for which results will be returned. One of the [time line](https://docs.waylay.io/#/api/query/?id=time-line-properties) specifiers. + +## Properties + +Name | Type | Description | Notes +------------ | ------------- | ------------- | ------------- + +## Example + +```python +from waylay.services.queries.models.time_window_from import TimeWindowFrom + +# TODO update the JSON string below +json = "{}" +# create an instance of TimeWindowFrom from a JSON string +time_window_from_instance = TimeWindowFrom.from_json(json) +# print the JSON string representation of the object +print TimeWindowFrom.to_json() + +# convert the object into a dict +time_window_from_dict = time_window_from_instance.to_dict() +# create an instance of TimeWindowFrom from a dict +time_window_from_form_dict = time_window_from.from_dict(time_window_from_dict) +``` +[[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/TimeWindowUntil.md b/docs/TimeWindowUntil.md new file mode 100644 index 0000000..a3e9cd2 --- /dev/null +++ b/docs/TimeWindowUntil.md @@ -0,0 +1,29 @@ +# TimeWindowUntil + +The end (not-inclusive) of the time window for which results will be returned. One of the [time line](https://docs.waylay.io/#/api/query/?id=time-line-properties)specifiers. + +## Properties + +Name | Type | Description | Notes +------------ | ------------- | ------------- | ------------- + +## Example + +```python +from waylay.services.queries.models.time_window_until import TimeWindowUntil + +# TODO update the JSON string below +json = "{}" +# create an instance of TimeWindowUntil from a JSON string +time_window_until_instance = TimeWindowUntil.from_json(json) +# print the JSON string representation of the object +print TimeWindowUntil.to_json() + +# convert the object into a dict +time_window_until_dict = time_window_until_instance.to_dict() +# create an instance of TimeWindowUntil from a dict +time_window_until_form_dict = time_window_until.from_dict(time_window_until_dict) +``` +[[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/ValidationError.md b/docs/ValidationError.md new file mode 100644 index 0000000..48c605c --- /dev/null +++ b/docs/ValidationError.md @@ -0,0 +1,31 @@ +# ValidationError + + +## Properties + +Name | Type | Description | Notes +------------ | ------------- | ------------- | ------------- +**loc** | [**List[LocationInner]**](LocationInner.md) | | +**msg** | **str** | | +**type** | **str** | | + +## Example + +```python +from waylay.services.queries.models.validation_error import ValidationError + +# TODO update the JSON string below +json = "{}" +# create an instance of ValidationError from a JSON string +validation_error_instance = ValidationError.from_json(json) +# print the JSON string representation of the object +print ValidationError.to_json() + +# convert the object into a dict +validation_error_dict = validation_error_instance.to_dict() +# create an instance of ValidationError from a dict +validation_error_form_dict = validation_error.from_dict(validation_error_dict) +``` +[[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/Window.md b/docs/Window.md new file mode 100644 index 0000000..f11e4da --- /dev/null +++ b/docs/Window.md @@ -0,0 +1,29 @@ +# Window + +The absolute size of the time window for which results will be returned. One of the [time line](https://docs.waylay.io/#/api/query/?id=time-line-properties) specifiers. + +## Properties + +Name | Type | Description | Notes +------------ | ------------- | ------------- | ------------- + +## Example + +```python +from waylay.services.queries.models.window import Window + +# TODO update the JSON string below +json = "{}" +# create an instance of Window from a JSON string +window_instance = Window.from_json(json) +# print the JSON string representation of the object +print Window.to_json() + +# convert the object into a dict +window_dict = window_instance.to_dict() +# create an instance of Window from a dict +window_form_dict = window.from_dict(window_dict) +``` +[[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/WindowOverride.md b/docs/WindowOverride.md new file mode 100644 index 0000000..b5fe7ca --- /dev/null +++ b/docs/WindowOverride.md @@ -0,0 +1,28 @@ +# WindowOverride + + +## Properties + +Name | Type | Description | Notes +------------ | ------------- | ------------- | ------------- + +## Example + +```python +from waylay.services.queries.models.window_override import WindowOverride + +# TODO update the JSON string below +json = "{}" +# create an instance of WindowOverride from a JSON string +window_override_instance = WindowOverride.from_json(json) +# print the JSON string representation of the object +print WindowOverride.to_json() + +# convert the object into a dict +window_override_dict = window_override_instance.to_dict() +# create an instance of WindowOverride from a dict +window_override_form_dict = window_override.from_dict(window_override_dict) +``` +[[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/openapi/queries.openapi.yaml b/openapi/queries.openapi.yaml new file mode 100644 index 0000000..de5d5c1 --- /dev/null +++ b/openapi/queries.openapi.yaml @@ -0,0 +1,5244 @@ +openapi: 3.1.0 +info: + title: 'Waylay Query: timeseries queries (v1 protocol)' + description: ' + + Execute and store queries on the Waylay timeseries. + + + Protocol version: v1.' + version: 0.5.0 +paths: + /queries/v1/queries/v1: + get: + tags: + - Status + summary: Get Version And Health + description: Get the version and health status for waylay-query. + operationId: get_version_and_health_queries_v1_get + responses: + '200': + description: Successful Response + content: + application/json: + schema: + additionalProperties: + type: string + type: object + title: Response Get Version And Health Queries V1 Get + security: &id001 + - waylayApiKeySecret: [] + /queries/v1/queries/v1/data: + post: + tags: + - Execute + summary: Execute Query + description: 'Execute a timeseries query. + + + Executes the timeseries query specified in the request body, + + after applying any overrides from the url parameters.' + operationId: execute_query_queries_v1_data_post + parameters: + - name: resource + in: query + required: false + schema: + type: string + title: Resource + description: Default Resource Override. + examples: + - 13efb488-75ac-4dac-828a-d49c5c2ebbfc + description: Default Resource Override. + - name: metric + in: query + required: false + schema: + type: string + title: Metric + description: Default Metric Override. + examples: + - temperature + - uptime + description: Default Metric Override. + - name: aggregation + in: query + required: false + schema: + title: Aggregation Override. + $ref: '#/components/schemas/AggregationMethod' + - name: interpolation + in: query + required: false + schema: + anyOf: + - $ref: '#/components/schemas/InterpolationMethod' + title: Interpolation Override. + - $ref: '#/components/schemas/InterpolationSpec' + title: Interpolation Override. + title: Interpolation + - name: freq + in: query + required: false + schema: + type: string + title: Grouping Interval Override + description: Override for the `freq` query attribute. + oneOf: + - type: string + format: period + example: PT3H15M + pattern: ^P([0-9]+Y)?([0-9]+M)?([0-9]+W)?([0-9]+D)?(T([0-9]+H)?([0-9]+M)?([0-9]+(\.[0-9]*)?S)?)?$ + title: 'ISO8601 period ' + description: A period in [ISO8601 duration](https://en.wikipedia.org/wiki/ISO_8601#Durations) + format. + - title: Inferred Frequency + type: string + description: When `inferred` is specified, the frequency of aggregation + will be inferred from the main/first time series. This can be used to + regularize the time series + const: inferred + description: Override for the `freq` query attribute. + - name: from + in: query + required: false + schema: + type: string + title: From Override. + oneOf: + - title: ISO8601 absolute timestamp + type: string + format: date-time + example: '2018-03-21T12:23:00+01:00' + description: A date or date-time in [ISO8601](https://en.wikipedia.org/wiki/ISO_8601#Combined_date_and_time_representations) + format. When no timezone is specified, the UTC timezone is assumed (`+00:00`) + pattern: '[0-9]{4}-[0-9]{2}-[0-9]{2}(T.*)?' + - type: integer + title: UNIX epoch milliseconds + minimum: 0 + description: Absolute timestamp milliseconds in unix epoch since 1970-01-01. + example: 1534836422284 + - type: string + format: period + example: PT3H15M + pattern: ^P([0-9]+Y)?([0-9]+M)?([0-9]+W)?([0-9]+D)?(T([0-9]+H)?([0-9]+M)?([0-9]+(\.[0-9]*)?S)?)?$ + title: ISO8601 Period Before Now + description: Specifies a timestamp before _now_ as a period in [ISO8601 + duration](https://en.wikipedia.org/wiki/ISO_8601#Durations) format. + - name: until + in: query + required: false + schema: + type: string + title: From Override. + oneOf: + - title: ISO8601 absolute timestamp + type: string + format: date-time + example: '2018-03-21T12:23:00+01:00' + description: A date or date-time in [ISO8601](https://en.wikipedia.org/wiki/ISO_8601#Combined_date_and_time_representations) + format. When no timezone is specified, the UTC timezone is assumed (`+00:00`) + pattern: '[0-9]{4}-[0-9]{2}-[0-9]{2}(T.*)?' + - type: integer + title: UNIX epoch milliseconds + minimum: 0 + description: Absolute timestamp milliseconds in unix epoch since 1970-01-01. + example: 1534836422284 + - type: string + format: period + example: PT3H15M + pattern: ^P([0-9]+Y)?([0-9]+M)?([0-9]+W)?([0-9]+D)?(T([0-9]+H)?([0-9]+M)?([0-9]+(\.[0-9]*)?S)?)?$ + title: ISO8601 Period Before Now + description: Specifies a timestamp before _now_ as a period in [ISO8601 + duration](https://en.wikipedia.org/wiki/ISO_8601#Durations) format. + - name: window + in: query + required: false + schema: + type: string + title: Window Override. + oneOf: + - type: string + format: period + example: PT3H15M + pattern: ^P([0-9]+Y)?([0-9]+M)?([0-9]+W)?([0-9]+D)?(T([0-9]+H)?([0-9]+M)?([0-9]+(\.[0-9]*)?S)?)?$ + title: 'ISO8601 period ' + description: A period in [ISO8601 duration](https://en.wikipedia.org/wiki/ISO_8601#Durations) + format. + - name: periods + in: query + required: false + schema: + type: integer + title: Periods Override. + - name: render + in: query + required: false + schema: + anyOf: + - $ref: '#/components/schemas/_RenderMode' + title: Render Mode + - $ref: '#/components/schemas/Render' + title: Render Override. + title: Render + - name: accept + in: header + required: false + schema: + anyOf: + - type: string + - type: 'null' + title: Accept header + description: Use a 'text/csv' accept header to get CSV formatted results. + description: Use a 'text/csv' accept header to get CSV formatted results. + requestBody: + required: true + content: + application/json: + schema: + $ref: '#/components/schemas/Query-Input' + responses: + '200': + description: Successful Response + content: + application/json: + schema: + $ref: '#/components/schemas/QueryResult' + examples: + default: + summary: Query response example for `?render=DEFAULT` + value: + data: + - columns: + - timestamp + - resource: 06e267b9-8714-4c58-ac53-df6a291b59dc + metric: temperature + aggregation: max + - resource: 06e267b9-8714-4c58-ac53-df6a291b59dc + metric: humidity + aggregation: mean + - resource: 7f33317b-a45e-4b0a-94a2-9bbbdc746cc1 + metric: temperature + aggregation: max + - resource: 7f33317b-a45e-4b0a-94a2-9bbbdc746cc1 + metric: humidity + aggregation: mean + data: + - - 1717977600000 + - 12.67 + - 80.0 + - 12.78 + - 83.125 + - - 1718006400000 + - 13.74 + - 88.0 + - 13.06 + - 80.875 + - - 1718035200000 + - null + - null + - 13.35 + - 78.5 + - - 1718064000000 + - 7.49 + - 88.0 + - 13.0 + - 81.875 + - - 1718092800000 + - null + - null + - 14.84 + - 62.375 + - - 1718121600000 + - null + - null + - 14.59 + - 76.5 + - - 1718150400000 + - 9.34 + - 90.0 + - 13.08 + - 85.375 + - - 1718179200000 + - null + - null + - 15.41 + - 61.75 + - - 1718208000000 + - null + - null + - 15.1 + - 74.0 + - - 1718236800000 + - 9.03 + - 90.0 + - 14.99 + - 82.875 + - - 1718265600000 + - null + - null + - 18.64 + - 57.5 + - - 1718294400000 + - null + - null + - 18.35 + - 62.5 + - - 1718323200000 + - 12.98 + - 80.0 + - 13.02 + - 81.625 + - - 1718352000000 + - null + - null + - 18.19 + - 81.5 + - - 1718380800000 + - null + - null + - 17.75 + - 88.875 + - - 1718409600000 + - 11.8 + - 88.0 + - 13.4 + - 87.25 + - - 1718438400000 + - null + - null + - 16.53 + - 64.5 + - - 1718467200000 + - null + - null + - 14.69 + - 84.875 + - - 1718496000000 + - 12.12 + - 89.0 + - 13.77 + - 87.875 + - - 1718524800000 + - null + - null + - 19.27 + - 73.125 + - - 1718553600000 + - null + - null + - 19.12 + - 69.75 + data_axis: column + attributes: + role: input + window_spec: + from: 1717977600000 + until: 1718582400000 + window: P7D + freq: PT8H + messages: + - message: Series ('06e267b9-8714-4c58-ac53-df6a291b59dc', 'temperature', + 'max'), aggregated on freq PT8H contains 26 null values. These + will NOT be interpolated + level: warning + timestamp: '2024-07-01T13:00:20.886997+00:00' + action: GET /queries/v1/data/weatherHistoryDailyAndHourly + category: data + - message: Series ('06e267b9-8714-4c58-ac53-df6a291b59dc', 'humidity', + 'mean'), aggregated on freq PT8H contains 26 null values. + These will NOT be interpolated + level: warning + timestamp: '2024-07-01T13:00:20.887995+00:00' + action: GET /queries/v1/data/weatherHistoryDailyAndHourly + category: data + query: + freq: PT8H + from_: 2024-06-16 12:00 AM + until: 2024-06-17 12:00 AM + data: + - metric: temperature + resource: 06e267b9-8714-4c58-ac53-df6a291b59dc + seriesId: 97de31f5-7b69-4a56-87e0-6b5c8a6b1872 + aggregation: max + - metric: humidity + resource: 06e267b9-8714-4c58-ac53-df6a291b59dc + seriesId: 8eb0799f-1af7-4af2-8233-517cb4bdc3c6 + aggregation: mean + - metric: temperature + resource: 7f33317b-a45e-4b0a-94a2-9bbbdc746cc1 + seriesId: 5055a943-e1c0-41d6-a6c9-7b20427a742d + aggregation: max + - metric: humidity + resource: 7f33317b-a45e-4b0a-94a2-9bbbdc746cc1 + seriesId: 16ac581f-f5ce-4845-9b6a-1b16249af051 + aggregation: mean + hier_dict: + summary: Query response example for `?render=HIER_DICT` + value: + data: + - - role: input + timestamp: 1717977600000 + timestamp_iso: '2024-06-10T00:00:00+00:00' + levels: + - resource + - metric + - aggregation + 06e267b9-8714-4c58-ac53-df6a291b59dc: + humidity: + mean: 80.0 + temperature: + max: 12.67 + 7f33317b-a45e-4b0a-94a2-9bbbdc746cc1: + humidity: + mean: 83.125 + temperature: + max: 12.78 + - role: input + timestamp: 1718006400000 + timestamp_iso: '2024-06-10T08:00:00+00:00' + levels: + - resource + - metric + - aggregation + 06e267b9-8714-4c58-ac53-df6a291b59dc: + humidity: + mean: 88.0 + temperature: + max: 13.74 + 7f33317b-a45e-4b0a-94a2-9bbbdc746cc1: + humidity: + mean: 80.875 + temperature: + max: 13.06 + - role: input + timestamp: 1718035200000 + timestamp_iso: '2024-06-10T16:00:00+00:00' + levels: + - resource + - metric + - aggregation + 06e267b9-8714-4c58-ac53-df6a291b59dc: + humidity: {} + temperature: {} + 7f33317b-a45e-4b0a-94a2-9bbbdc746cc1: + humidity: + mean: 78.5 + temperature: + max: 13.35 + - role: input + timestamp: 1718064000000 + timestamp_iso: '2024-06-11T00:00:00+00:00' + levels: + - resource + - metric + - aggregation + 06e267b9-8714-4c58-ac53-df6a291b59dc: + humidity: + mean: 88.0 + temperature: + max: 7.49 + 7f33317b-a45e-4b0a-94a2-9bbbdc746cc1: + humidity: + mean: 81.875 + temperature: + max: 13.0 + - role: input + timestamp: 1718092800000 + timestamp_iso: '2024-06-11T08:00:00+00:00' + levels: + - resource + - metric + - aggregation + 06e267b9-8714-4c58-ac53-df6a291b59dc: + humidity: {} + temperature: {} + 7f33317b-a45e-4b0a-94a2-9bbbdc746cc1: + humidity: + mean: 62.375 + temperature: + max: 14.84 + - role: input + timestamp: 1718121600000 + timestamp_iso: '2024-06-11T16:00:00+00:00' + levels: + - resource + - metric + - aggregation + 06e267b9-8714-4c58-ac53-df6a291b59dc: + humidity: {} + temperature: {} + 7f33317b-a45e-4b0a-94a2-9bbbdc746cc1: + humidity: + mean: 76.5 + temperature: + max: 14.59 + - role: input + timestamp: 1718150400000 + timestamp_iso: '2024-06-12T00:00:00+00:00' + levels: + - resource + - metric + - aggregation + 06e267b9-8714-4c58-ac53-df6a291b59dc: + humidity: + mean: 90.0 + temperature: + max: 9.34 + 7f33317b-a45e-4b0a-94a2-9bbbdc746cc1: + humidity: + mean: 85.375 + temperature: + max: 13.08 + - role: input + timestamp: 1718179200000 + timestamp_iso: '2024-06-12T08:00:00+00:00' + levels: + - resource + - metric + - aggregation + 06e267b9-8714-4c58-ac53-df6a291b59dc: + humidity: {} + temperature: {} + 7f33317b-a45e-4b0a-94a2-9bbbdc746cc1: + humidity: + mean: 61.75 + temperature: + max: 15.41 + - role: input + timestamp: 1718208000000 + timestamp_iso: '2024-06-12T16:00:00+00:00' + levels: + - resource + - metric + - aggregation + 06e267b9-8714-4c58-ac53-df6a291b59dc: + humidity: {} + temperature: {} + 7f33317b-a45e-4b0a-94a2-9bbbdc746cc1: + humidity: + mean: 74.0 + temperature: + max: 15.1 + - role: input + timestamp: 1718236800000 + timestamp_iso: '2024-06-13T00:00:00+00:00' + levels: + - resource + - metric + - aggregation + 06e267b9-8714-4c58-ac53-df6a291b59dc: + humidity: + mean: 90.0 + temperature: + max: 9.03 + 7f33317b-a45e-4b0a-94a2-9bbbdc746cc1: + humidity: + mean: 82.875 + temperature: + max: 14.99 + - role: input + timestamp: 1718265600000 + timestamp_iso: '2024-06-13T08:00:00+00:00' + levels: + - resource + - metric + - aggregation + 06e267b9-8714-4c58-ac53-df6a291b59dc: + humidity: {} + temperature: {} + 7f33317b-a45e-4b0a-94a2-9bbbdc746cc1: + humidity: + mean: 57.5 + temperature: + max: 18.64 + - role: input + timestamp: 1718294400000 + timestamp_iso: '2024-06-13T16:00:00+00:00' + levels: + - resource + - metric + - aggregation + 06e267b9-8714-4c58-ac53-df6a291b59dc: + humidity: {} + temperature: {} + 7f33317b-a45e-4b0a-94a2-9bbbdc746cc1: + humidity: + mean: 62.5 + temperature: + max: 18.35 + - role: input + timestamp: 1718323200000 + timestamp_iso: '2024-06-14T00:00:00+00:00' + levels: + - resource + - metric + - aggregation + 06e267b9-8714-4c58-ac53-df6a291b59dc: + humidity: + mean: 80.0 + temperature: + max: 12.98 + 7f33317b-a45e-4b0a-94a2-9bbbdc746cc1: + humidity: + mean: 81.625 + temperature: + max: 13.02 + - role: input + timestamp: 1718352000000 + timestamp_iso: '2024-06-14T08:00:00+00:00' + levels: + - resource + - metric + - aggregation + 06e267b9-8714-4c58-ac53-df6a291b59dc: + humidity: {} + temperature: {} + 7f33317b-a45e-4b0a-94a2-9bbbdc746cc1: + humidity: + mean: 81.5 + temperature: + max: 18.19 + - role: input + timestamp: 1718380800000 + timestamp_iso: '2024-06-14T16:00:00+00:00' + levels: + - resource + - metric + - aggregation + 06e267b9-8714-4c58-ac53-df6a291b59dc: + humidity: {} + temperature: {} + 7f33317b-a45e-4b0a-94a2-9bbbdc746cc1: + humidity: + mean: 88.875 + temperature: + max: 17.75 + - role: input + timestamp: 1718409600000 + timestamp_iso: '2024-06-15T00:00:00+00:00' + levels: + - resource + - metric + - aggregation + 06e267b9-8714-4c58-ac53-df6a291b59dc: + humidity: + mean: 88.0 + temperature: + max: 11.8 + 7f33317b-a45e-4b0a-94a2-9bbbdc746cc1: + humidity: + mean: 87.25 + temperature: + max: 13.4 + - role: input + timestamp: 1718438400000 + timestamp_iso: '2024-06-15T08:00:00+00:00' + levels: + - resource + - metric + - aggregation + 06e267b9-8714-4c58-ac53-df6a291b59dc: + humidity: {} + temperature: {} + 7f33317b-a45e-4b0a-94a2-9bbbdc746cc1: + humidity: + mean: 64.5 + temperature: + max: 16.53 + - role: input + timestamp: 1718467200000 + timestamp_iso: '2024-06-15T16:00:00+00:00' + levels: + - resource + - metric + - aggregation + 06e267b9-8714-4c58-ac53-df6a291b59dc: + humidity: {} + temperature: {} + 7f33317b-a45e-4b0a-94a2-9bbbdc746cc1: + humidity: + mean: 84.875 + temperature: + max: 14.69 + - role: input + timestamp: 1718496000000 + timestamp_iso: '2024-06-16T00:00:00+00:00' + levels: + - resource + - metric + - aggregation + 06e267b9-8714-4c58-ac53-df6a291b59dc: + humidity: + mean: 89.0 + temperature: + max: 12.12 + 7f33317b-a45e-4b0a-94a2-9bbbdc746cc1: + humidity: + mean: 87.875 + temperature: + max: 13.77 + - role: input + timestamp: 1718524800000 + timestamp_iso: '2024-06-16T08:00:00+00:00' + levels: + - resource + - metric + - aggregation + 06e267b9-8714-4c58-ac53-df6a291b59dc: + humidity: {} + temperature: {} + 7f33317b-a45e-4b0a-94a2-9bbbdc746cc1: + humidity: + mean: 73.125 + temperature: + max: 19.27 + - role: input + timestamp: 1718553600000 + timestamp_iso: '2024-06-16T16:00:00+00:00' + levels: + - resource + - metric + - aggregation + 06e267b9-8714-4c58-ac53-df6a291b59dc: + humidity: {} + temperature: {} + 7f33317b-a45e-4b0a-94a2-9bbbdc746cc1: + humidity: + mean: 69.75 + temperature: + max: 19.12 + messages: + - message: Series ('06e267b9-8714-4c58-ac53-df6a291b59dc', 'temperature', + 'max'), aggregated on freq PT8H contains 26 null values. These + will NOT be interpolated + level: warning + timestamp: '2024-07-01T12:57:58.698912+00:00' + action: GET /queries/v1/data/weatherHistoryDailyAndHourly + category: data + - message: Series ('06e267b9-8714-4c58-ac53-df6a291b59dc', 'humidity', + 'mean'), aggregated on freq PT8H contains 26 null values. + These will NOT be interpolated + level: warning + timestamp: '2024-07-01T12:57:58.699998+00:00' + action: GET /queries/v1/data/weatherHistoryDailyAndHourly + category: data + query: + freq: PT8H + from_: 2024-06-16 12:00 AM + until: 2024-06-17 12:00 AM + data: + - metric: temperature + resource: 06e267b9-8714-4c58-ac53-df6a291b59dc + seriesId: 97de31f5-7b69-4a56-87e0-6b5c8a6b1872 + aggregation: max + - metric: humidity + resource: 06e267b9-8714-4c58-ac53-df6a291b59dc + seriesId: 8eb0799f-1af7-4af2-8233-517cb4bdc3c6 + aggregation: mean + - metric: temperature + resource: 7f33317b-a45e-4b0a-94a2-9bbbdc746cc1 + seriesId: 5055a943-e1c0-41d6-a6c9-7b20427a742d + aggregation: max + - metric: humidity + resource: 7f33317b-a45e-4b0a-94a2-9bbbdc746cc1 + seriesId: 16ac581f-f5ce-4845-9b6a-1b16249af051 + aggregation: mean + render: + mode: HIER_DICT + upload: + summary: Query response example for `?render=UPLOAD` + value: + data: + - - role: input + timestamp: 1717977600000 + 06e267b9-8714-4c58-ac53-df6a291b59dc.temperature.max: 12.67 + 06e267b9-8714-4c58-ac53-df6a291b59dc.humidity.mean: 80.0 + 7f33317b-a45e-4b0a-94a2-9bbbdc746cc1.temperature.max: 12.78 + 7f33317b-a45e-4b0a-94a2-9bbbdc746cc1.humidity.mean: 83.125 + - role: input + timestamp: 1718006400000 + 06e267b9-8714-4c58-ac53-df6a291b59dc.temperature.max: 13.74 + 06e267b9-8714-4c58-ac53-df6a291b59dc.humidity.mean: 88.0 + 7f33317b-a45e-4b0a-94a2-9bbbdc746cc1.temperature.max: 13.06 + 7f33317b-a45e-4b0a-94a2-9bbbdc746cc1.humidity.mean: 80.875 + - role: input + timestamp: 1718035200000 + 7f33317b-a45e-4b0a-94a2-9bbbdc746cc1.temperature.max: 13.35 + 7f33317b-a45e-4b0a-94a2-9bbbdc746cc1.humidity.mean: 78.5 + - role: input + timestamp: 1718064000000 + 06e267b9-8714-4c58-ac53-df6a291b59dc.temperature.max: 7.49 + 06e267b9-8714-4c58-ac53-df6a291b59dc.humidity.mean: 88.0 + 7f33317b-a45e-4b0a-94a2-9bbbdc746cc1.temperature.max: 13.0 + 7f33317b-a45e-4b0a-94a2-9bbbdc746cc1.humidity.mean: 81.875 + - role: input + timestamp: 1718092800000 + 7f33317b-a45e-4b0a-94a2-9bbbdc746cc1.temperature.max: 14.84 + 7f33317b-a45e-4b0a-94a2-9bbbdc746cc1.humidity.mean: 62.375 + - role: input + timestamp: 1718121600000 + 7f33317b-a45e-4b0a-94a2-9bbbdc746cc1.temperature.max: 14.59 + 7f33317b-a45e-4b0a-94a2-9bbbdc746cc1.humidity.mean: 76.5 + - role: input + timestamp: 1718150400000 + 06e267b9-8714-4c58-ac53-df6a291b59dc.temperature.max: 9.34 + 06e267b9-8714-4c58-ac53-df6a291b59dc.humidity.mean: 90.0 + 7f33317b-a45e-4b0a-94a2-9bbbdc746cc1.temperature.max: 13.08 + 7f33317b-a45e-4b0a-94a2-9bbbdc746cc1.humidity.mean: 85.375 + - role: input + timestamp: 1718179200000 + 7f33317b-a45e-4b0a-94a2-9bbbdc746cc1.temperature.max: 15.41 + 7f33317b-a45e-4b0a-94a2-9bbbdc746cc1.humidity.mean: 61.75 + - role: input + timestamp: 1718208000000 + 7f33317b-a45e-4b0a-94a2-9bbbdc746cc1.temperature.max: 15.1 + 7f33317b-a45e-4b0a-94a2-9bbbdc746cc1.humidity.mean: 74.0 + - role: input + timestamp: 1718236800000 + 06e267b9-8714-4c58-ac53-df6a291b59dc.temperature.max: 9.03 + 06e267b9-8714-4c58-ac53-df6a291b59dc.humidity.mean: 90.0 + 7f33317b-a45e-4b0a-94a2-9bbbdc746cc1.temperature.max: 14.99 + 7f33317b-a45e-4b0a-94a2-9bbbdc746cc1.humidity.mean: 82.875 + - role: input + timestamp: 1718265600000 + 7f33317b-a45e-4b0a-94a2-9bbbdc746cc1.temperature.max: 18.64 + 7f33317b-a45e-4b0a-94a2-9bbbdc746cc1.humidity.mean: 57.5 + - role: input + timestamp: 1718294400000 + 7f33317b-a45e-4b0a-94a2-9bbbdc746cc1.temperature.max: 18.35 + 7f33317b-a45e-4b0a-94a2-9bbbdc746cc1.humidity.mean: 62.5 + - role: input + timestamp: 1718323200000 + 06e267b9-8714-4c58-ac53-df6a291b59dc.temperature.max: 12.98 + 06e267b9-8714-4c58-ac53-df6a291b59dc.humidity.mean: 80.0 + 7f33317b-a45e-4b0a-94a2-9bbbdc746cc1.temperature.max: 13.02 + 7f33317b-a45e-4b0a-94a2-9bbbdc746cc1.humidity.mean: 81.625 + - role: input + timestamp: 1718352000000 + 7f33317b-a45e-4b0a-94a2-9bbbdc746cc1.temperature.max: 18.19 + 7f33317b-a45e-4b0a-94a2-9bbbdc746cc1.humidity.mean: 81.5 + - role: input + timestamp: 1718380800000 + 7f33317b-a45e-4b0a-94a2-9bbbdc746cc1.temperature.max: 17.75 + 7f33317b-a45e-4b0a-94a2-9bbbdc746cc1.humidity.mean: 88.875 + - role: input + timestamp: 1718409600000 + 06e267b9-8714-4c58-ac53-df6a291b59dc.temperature.max: 11.8 + 06e267b9-8714-4c58-ac53-df6a291b59dc.humidity.mean: 88.0 + 7f33317b-a45e-4b0a-94a2-9bbbdc746cc1.temperature.max: 13.4 + 7f33317b-a45e-4b0a-94a2-9bbbdc746cc1.humidity.mean: 87.25 + - role: input + timestamp: 1718438400000 + 7f33317b-a45e-4b0a-94a2-9bbbdc746cc1.temperature.max: 16.53 + 7f33317b-a45e-4b0a-94a2-9bbbdc746cc1.humidity.mean: 64.5 + - role: input + timestamp: 1718467200000 + 7f33317b-a45e-4b0a-94a2-9bbbdc746cc1.temperature.max: 14.69 + 7f33317b-a45e-4b0a-94a2-9bbbdc746cc1.humidity.mean: 84.875 + - role: input + timestamp: 1718496000000 + 06e267b9-8714-4c58-ac53-df6a291b59dc.temperature.max: 12.12 + 06e267b9-8714-4c58-ac53-df6a291b59dc.humidity.mean: 89.0 + 7f33317b-a45e-4b0a-94a2-9bbbdc746cc1.temperature.max: 13.77 + 7f33317b-a45e-4b0a-94a2-9bbbdc746cc1.humidity.mean: 87.875 + - role: input + timestamp: 1718524800000 + 7f33317b-a45e-4b0a-94a2-9bbbdc746cc1.temperature.max: 19.27 + 7f33317b-a45e-4b0a-94a2-9bbbdc746cc1.humidity.mean: 73.125 + - role: input + timestamp: 1718553600000 + 7f33317b-a45e-4b0a-94a2-9bbbdc746cc1.temperature.max: 19.12 + 7f33317b-a45e-4b0a-94a2-9bbbdc746cc1.humidity.mean: 69.75 + messages: + - message: Series ('06e267b9-8714-4c58-ac53-df6a291b59dc', 'temperature', + 'max'), aggregated on freq PT8H contains 26 null values. These + will NOT be interpolated + level: warning + timestamp: '2024-07-01T13:03:24.128684+00:00' + action: GET /queries/v1/data/weatherHistoryDailyAndHourly + category: data + - message: Series ('06e267b9-8714-4c58-ac53-df6a291b59dc', 'humidity', + 'mean'), aggregated on freq PT8H contains 26 null values. + These will NOT be interpolated + level: warning + timestamp: '2024-07-01T13:03:24.129391+00:00' + action: GET /queries/v1/data/weatherHistoryDailyAndHourly + category: data + query: + freq: PT8H + from_: 2024-06-16 12:00 AM + until: 2024-06-17 12:00 AM + data: + - metric: temperature + resource: 06e267b9-8714-4c58-ac53-df6a291b59dc + seriesId: 97de31f5-7b69-4a56-87e0-6b5c8a6b1872 + aggregation: max + - metric: humidity + resource: 06e267b9-8714-4c58-ac53-df6a291b59dc + seriesId: 8eb0799f-1af7-4af2-8233-517cb4bdc3c6 + aggregation: mean + - metric: temperature + resource: 7f33317b-a45e-4b0a-94a2-9bbbdc746cc1 + seriesId: 5055a943-e1c0-41d6-a6c9-7b20427a742d + aggregation: max + - metric: humidity + resource: 7f33317b-a45e-4b0a-94a2-9bbbdc746cc1 + seriesId: 16ac581f-f5ce-4845-9b6a-1b16249af051 + aggregation: mean + render: + mode: UPLOAD + flat_dict: + summary: Query response example for `?render=FLAT_DICT` + value: + data: + - - role: input + timestamp: 1717977600000 + timestamp_iso: '2024-06-10T00:00:00+00:00' + levels: + - resource.metric.aggregation + 06e267b9-8714-4c58-ac53-df6a291b59dc.temperature.max: 12.67 + 06e267b9-8714-4c58-ac53-df6a291b59dc.humidity.mean: 80.0 + 7f33317b-a45e-4b0a-94a2-9bbbdc746cc1.temperature.max: 12.78 + 7f33317b-a45e-4b0a-94a2-9bbbdc746cc1.humidity.mean: 83.125 + - role: input + timestamp: 1718006400000 + timestamp_iso: '2024-06-10T08:00:00+00:00' + levels: + - resource.metric.aggregation + 06e267b9-8714-4c58-ac53-df6a291b59dc.temperature.max: 13.74 + 06e267b9-8714-4c58-ac53-df6a291b59dc.humidity.mean: 88.0 + 7f33317b-a45e-4b0a-94a2-9bbbdc746cc1.temperature.max: 13.06 + 7f33317b-a45e-4b0a-94a2-9bbbdc746cc1.humidity.mean: 80.875 + - role: input + timestamp: 1718035200000 + timestamp_iso: '2024-06-10T16:00:00+00:00' + levels: + - resource.metric.aggregation + 7f33317b-a45e-4b0a-94a2-9bbbdc746cc1.temperature.max: 13.35 + 7f33317b-a45e-4b0a-94a2-9bbbdc746cc1.humidity.mean: 78.5 + - role: input + timestamp: 1718064000000 + timestamp_iso: '2024-06-11T00:00:00+00:00' + levels: + - resource.metric.aggregation + 06e267b9-8714-4c58-ac53-df6a291b59dc.temperature.max: 7.49 + 06e267b9-8714-4c58-ac53-df6a291b59dc.humidity.mean: 88.0 + 7f33317b-a45e-4b0a-94a2-9bbbdc746cc1.temperature.max: 13.0 + 7f33317b-a45e-4b0a-94a2-9bbbdc746cc1.humidity.mean: 81.875 + - role: input + timestamp: 1718092800000 + timestamp_iso: '2024-06-11T08:00:00+00:00' + levels: + - resource.metric.aggregation + 7f33317b-a45e-4b0a-94a2-9bbbdc746cc1.temperature.max: 14.84 + 7f33317b-a45e-4b0a-94a2-9bbbdc746cc1.humidity.mean: 62.375 + - role: input + timestamp: 1718121600000 + timestamp_iso: '2024-06-11T16:00:00+00:00' + levels: + - resource.metric.aggregation + 7f33317b-a45e-4b0a-94a2-9bbbdc746cc1.temperature.max: 14.59 + 7f33317b-a45e-4b0a-94a2-9bbbdc746cc1.humidity.mean: 76.5 + - role: input + timestamp: 1718150400000 + timestamp_iso: '2024-06-12T00:00:00+00:00' + levels: + - resource.metric.aggregation + 06e267b9-8714-4c58-ac53-df6a291b59dc.temperature.max: 9.34 + 06e267b9-8714-4c58-ac53-df6a291b59dc.humidity.mean: 90.0 + 7f33317b-a45e-4b0a-94a2-9bbbdc746cc1.temperature.max: 13.08 + 7f33317b-a45e-4b0a-94a2-9bbbdc746cc1.humidity.mean: 85.375 + - role: input + timestamp: 1718179200000 + timestamp_iso: '2024-06-12T08:00:00+00:00' + levels: + - resource.metric.aggregation + 7f33317b-a45e-4b0a-94a2-9bbbdc746cc1.temperature.max: 15.41 + 7f33317b-a45e-4b0a-94a2-9bbbdc746cc1.humidity.mean: 61.75 + - role: input + timestamp: 1718208000000 + timestamp_iso: '2024-06-12T16:00:00+00:00' + levels: + - resource.metric.aggregation + 7f33317b-a45e-4b0a-94a2-9bbbdc746cc1.temperature.max: 15.1 + 7f33317b-a45e-4b0a-94a2-9bbbdc746cc1.humidity.mean: 74.0 + - role: input + timestamp: 1718236800000 + timestamp_iso: '2024-06-13T00:00:00+00:00' + levels: + - resource.metric.aggregation + 06e267b9-8714-4c58-ac53-df6a291b59dc.temperature.max: 9.03 + 06e267b9-8714-4c58-ac53-df6a291b59dc.humidity.mean: 90.0 + 7f33317b-a45e-4b0a-94a2-9bbbdc746cc1.temperature.max: 14.99 + 7f33317b-a45e-4b0a-94a2-9bbbdc746cc1.humidity.mean: 82.875 + - role: input + timestamp: 1718265600000 + timestamp_iso: '2024-06-13T08:00:00+00:00' + levels: + - resource.metric.aggregation + 7f33317b-a45e-4b0a-94a2-9bbbdc746cc1.temperature.max: 18.64 + 7f33317b-a45e-4b0a-94a2-9bbbdc746cc1.humidity.mean: 57.5 + - role: input + timestamp: 1718294400000 + timestamp_iso: '2024-06-13T16:00:00+00:00' + levels: + - resource.metric.aggregation + 7f33317b-a45e-4b0a-94a2-9bbbdc746cc1.temperature.max: 18.35 + 7f33317b-a45e-4b0a-94a2-9bbbdc746cc1.humidity.mean: 62.5 + - role: input + timestamp: 1718323200000 + timestamp_iso: '2024-06-14T00:00:00+00:00' + levels: + - resource.metric.aggregation + 06e267b9-8714-4c58-ac53-df6a291b59dc.temperature.max: 12.98 + 06e267b9-8714-4c58-ac53-df6a291b59dc.humidity.mean: 80.0 + 7f33317b-a45e-4b0a-94a2-9bbbdc746cc1.temperature.max: 13.02 + 7f33317b-a45e-4b0a-94a2-9bbbdc746cc1.humidity.mean: 81.625 + - role: input + timestamp: 1718352000000 + timestamp_iso: '2024-06-14T08:00:00+00:00' + levels: + - resource.metric.aggregation + 7f33317b-a45e-4b0a-94a2-9bbbdc746cc1.temperature.max: 18.19 + 7f33317b-a45e-4b0a-94a2-9bbbdc746cc1.humidity.mean: 81.5 + - role: input + timestamp: 1718380800000 + timestamp_iso: '2024-06-14T16:00:00+00:00' + levels: + - resource.metric.aggregation + 7f33317b-a45e-4b0a-94a2-9bbbdc746cc1.temperature.max: 17.75 + 7f33317b-a45e-4b0a-94a2-9bbbdc746cc1.humidity.mean: 88.875 + - role: input + timestamp: 1718409600000 + timestamp_iso: '2024-06-15T00:00:00+00:00' + levels: + - resource.metric.aggregation + 06e267b9-8714-4c58-ac53-df6a291b59dc.temperature.max: 11.8 + 06e267b9-8714-4c58-ac53-df6a291b59dc.humidity.mean: 88.0 + 7f33317b-a45e-4b0a-94a2-9bbbdc746cc1.temperature.max: 13.4 + 7f33317b-a45e-4b0a-94a2-9bbbdc746cc1.humidity.mean: 87.25 + - role: input + timestamp: 1718438400000 + timestamp_iso: '2024-06-15T08:00:00+00:00' + levels: + - resource.metric.aggregation + 7f33317b-a45e-4b0a-94a2-9bbbdc746cc1.temperature.max: 16.53 + 7f33317b-a45e-4b0a-94a2-9bbbdc746cc1.humidity.mean: 64.5 + - role: input + timestamp: 1718467200000 + timestamp_iso: '2024-06-15T16:00:00+00:00' + levels: + - resource.metric.aggregation + 7f33317b-a45e-4b0a-94a2-9bbbdc746cc1.temperature.max: 14.69 + 7f33317b-a45e-4b0a-94a2-9bbbdc746cc1.humidity.mean: 84.875 + - role: input + timestamp: 1718496000000 + timestamp_iso: '2024-06-16T00:00:00+00:00' + levels: + - resource.metric.aggregation + 06e267b9-8714-4c58-ac53-df6a291b59dc.temperature.max: 12.12 + 06e267b9-8714-4c58-ac53-df6a291b59dc.humidity.mean: 89.0 + 7f33317b-a45e-4b0a-94a2-9bbbdc746cc1.temperature.max: 13.77 + 7f33317b-a45e-4b0a-94a2-9bbbdc746cc1.humidity.mean: 87.875 + - role: input + timestamp: 1718524800000 + timestamp_iso: '2024-06-16T08:00:00+00:00' + levels: + - resource.metric.aggregation + 7f33317b-a45e-4b0a-94a2-9bbbdc746cc1.temperature.max: 19.27 + 7f33317b-a45e-4b0a-94a2-9bbbdc746cc1.humidity.mean: 73.125 + - role: input + timestamp: 1718553600000 + timestamp_iso: '2024-06-16T16:00:00+00:00' + levels: + - resource.metric.aggregation + 7f33317b-a45e-4b0a-94a2-9bbbdc746cc1.temperature.max: 19.12 + 7f33317b-a45e-4b0a-94a2-9bbbdc746cc1.humidity.mean: 69.75 + messages: + - message: Series ('06e267b9-8714-4c58-ac53-df6a291b59dc', 'temperature', + 'max'), aggregated on freq PT8H contains 26 null values. These + will NOT be interpolated + level: warning + timestamp: '2024-07-01T12:59:32.689972+00:00' + action: GET /queries/v1/data/weatherHistoryDailyAndHourly + category: data + - message: Series ('06e267b9-8714-4c58-ac53-df6a291b59dc', 'humidity', + 'mean'), aggregated on freq PT8H contains 26 null values. + These will NOT be interpolated + level: warning + timestamp: '2024-07-01T12:59:32.691573+00:00' + action: GET /queries/v1/data/weatherHistoryDailyAndHourly + category: data + query: + freq: PT8H + from_: 2024-06-16 12:00 AM + until: 2024-06-17 12:00 AM + data: + - metric: temperature + resource: 06e267b9-8714-4c58-ac53-df6a291b59dc + seriesId: 97de31f5-7b69-4a56-87e0-6b5c8a6b1872 + aggregation: max + - metric: humidity + resource: 06e267b9-8714-4c58-ac53-df6a291b59dc + seriesId: 8eb0799f-1af7-4af2-8233-517cb4bdc3c6 + aggregation: mean + - metric: temperature + resource: 7f33317b-a45e-4b0a-94a2-9bbbdc746cc1 + seriesId: 5055a943-e1c0-41d6-a6c9-7b20427a742d + aggregation: max + - metric: humidity + resource: 7f33317b-a45e-4b0a-94a2-9bbbdc746cc1 + seriesId: 16ac581f-f5ce-4845-9b6a-1b16249af051 + aggregation: mean + render: + mode: FLAT_DICT + metric_flat_dict: + summary: Query response example for `?render=METRIC_FLAT_DICT` + value: + data: + - - role: input + timestamp: 1717977600000 + timestamp_iso: '2024-06-10T00:00:00+00:00' + humidity: + 06e267b9-8714-4c58-ac53-df6a291b59dc.mean: 80.0 + 7f33317b-a45e-4b0a-94a2-9bbbdc746cc1.mean: 83.125 + temperature: + 06e267b9-8714-4c58-ac53-df6a291b59dc.max: 12.67 + 7f33317b-a45e-4b0a-94a2-9bbbdc746cc1.max: 12.78 + - role: input + timestamp: 1718006400000 + timestamp_iso: '2024-06-10T08:00:00+00:00' + humidity: + 06e267b9-8714-4c58-ac53-df6a291b59dc.mean: 88.0 + 7f33317b-a45e-4b0a-94a2-9bbbdc746cc1.mean: 80.875 + temperature: + 06e267b9-8714-4c58-ac53-df6a291b59dc.max: 13.74 + 7f33317b-a45e-4b0a-94a2-9bbbdc746cc1.max: 13.06 + - role: input + timestamp: 1718035200000 + timestamp_iso: '2024-06-10T16:00:00+00:00' + humidity: + 7f33317b-a45e-4b0a-94a2-9bbbdc746cc1.mean: 78.5 + temperature: + 7f33317b-a45e-4b0a-94a2-9bbbdc746cc1.max: 13.35 + - role: input + timestamp: 1718064000000 + timestamp_iso: '2024-06-11T00:00:00+00:00' + humidity: + 06e267b9-8714-4c58-ac53-df6a291b59dc.mean: 88.0 + 7f33317b-a45e-4b0a-94a2-9bbbdc746cc1.mean: 81.875 + temperature: + 06e267b9-8714-4c58-ac53-df6a291b59dc.max: 7.49 + 7f33317b-a45e-4b0a-94a2-9bbbdc746cc1.max: 13.0 + - role: input + timestamp: 1718092800000 + timestamp_iso: '2024-06-11T08:00:00+00:00' + humidity: + 7f33317b-a45e-4b0a-94a2-9bbbdc746cc1.mean: 62.375 + temperature: + 7f33317b-a45e-4b0a-94a2-9bbbdc746cc1.max: 14.84 + - role: input + timestamp: 1718121600000 + timestamp_iso: '2024-06-11T16:00:00+00:00' + humidity: + 7f33317b-a45e-4b0a-94a2-9bbbdc746cc1.mean: 76.5 + temperature: + 7f33317b-a45e-4b0a-94a2-9bbbdc746cc1.max: 14.59 + - role: input + timestamp: 1718150400000 + timestamp_iso: '2024-06-12T00:00:00+00:00' + humidity: + 06e267b9-8714-4c58-ac53-df6a291b59dc.mean: 90.0 + 7f33317b-a45e-4b0a-94a2-9bbbdc746cc1.mean: 85.375 + temperature: + 06e267b9-8714-4c58-ac53-df6a291b59dc.max: 9.34 + 7f33317b-a45e-4b0a-94a2-9bbbdc746cc1.max: 13.08 + - role: input + timestamp: 1718179200000 + timestamp_iso: '2024-06-12T08:00:00+00:00' + humidity: + 7f33317b-a45e-4b0a-94a2-9bbbdc746cc1.mean: 61.75 + temperature: + 7f33317b-a45e-4b0a-94a2-9bbbdc746cc1.max: 15.41 + - role: input + timestamp: 1718208000000 + timestamp_iso: '2024-06-12T16:00:00+00:00' + humidity: + 7f33317b-a45e-4b0a-94a2-9bbbdc746cc1.mean: 74.0 + temperature: + 7f33317b-a45e-4b0a-94a2-9bbbdc746cc1.max: 15.1 + - role: input + timestamp: 1718236800000 + timestamp_iso: '2024-06-13T00:00:00+00:00' + humidity: + 06e267b9-8714-4c58-ac53-df6a291b59dc.mean: 90.0 + 7f33317b-a45e-4b0a-94a2-9bbbdc746cc1.mean: 82.875 + temperature: + 06e267b9-8714-4c58-ac53-df6a291b59dc.max: 9.03 + 7f33317b-a45e-4b0a-94a2-9bbbdc746cc1.max: 14.99 + - role: input + timestamp: 1718265600000 + timestamp_iso: '2024-06-13T08:00:00+00:00' + humidity: + 7f33317b-a45e-4b0a-94a2-9bbbdc746cc1.mean: 57.5 + temperature: + 7f33317b-a45e-4b0a-94a2-9bbbdc746cc1.max: 18.64 + - role: input + timestamp: 1718294400000 + timestamp_iso: '2024-06-13T16:00:00+00:00' + humidity: + 7f33317b-a45e-4b0a-94a2-9bbbdc746cc1.mean: 62.5 + temperature: + 7f33317b-a45e-4b0a-94a2-9bbbdc746cc1.max: 18.35 + - role: input + timestamp: 1718323200000 + timestamp_iso: '2024-06-14T00:00:00+00:00' + humidity: + 06e267b9-8714-4c58-ac53-df6a291b59dc.mean: 80.0 + 7f33317b-a45e-4b0a-94a2-9bbbdc746cc1.mean: 81.625 + temperature: + 06e267b9-8714-4c58-ac53-df6a291b59dc.max: 12.98 + 7f33317b-a45e-4b0a-94a2-9bbbdc746cc1.max: 13.02 + - role: input + timestamp: 1718352000000 + timestamp_iso: '2024-06-14T08:00:00+00:00' + humidity: + 7f33317b-a45e-4b0a-94a2-9bbbdc746cc1.mean: 81.5 + temperature: + 7f33317b-a45e-4b0a-94a2-9bbbdc746cc1.max: 18.19 + - role: input + timestamp: 1718380800000 + timestamp_iso: '2024-06-14T16:00:00+00:00' + humidity: + 7f33317b-a45e-4b0a-94a2-9bbbdc746cc1.mean: 88.875 + temperature: + 7f33317b-a45e-4b0a-94a2-9bbbdc746cc1.max: 17.75 + - role: input + timestamp: 1718409600000 + timestamp_iso: '2024-06-15T00:00:00+00:00' + humidity: + 06e267b9-8714-4c58-ac53-df6a291b59dc.mean: 88.0 + 7f33317b-a45e-4b0a-94a2-9bbbdc746cc1.mean: 87.25 + temperature: + 06e267b9-8714-4c58-ac53-df6a291b59dc.max: 11.8 + 7f33317b-a45e-4b0a-94a2-9bbbdc746cc1.max: 13.4 + - role: input + timestamp: 1718438400000 + timestamp_iso: '2024-06-15T08:00:00+00:00' + humidity: + 7f33317b-a45e-4b0a-94a2-9bbbdc746cc1.mean: 64.5 + temperature: + 7f33317b-a45e-4b0a-94a2-9bbbdc746cc1.max: 16.53 + - role: input + timestamp: 1718467200000 + timestamp_iso: '2024-06-15T16:00:00+00:00' + humidity: + 7f33317b-a45e-4b0a-94a2-9bbbdc746cc1.mean: 84.875 + temperature: + 7f33317b-a45e-4b0a-94a2-9bbbdc746cc1.max: 14.69 + - role: input + timestamp: 1718496000000 + timestamp_iso: '2024-06-16T00:00:00+00:00' + humidity: + 06e267b9-8714-4c58-ac53-df6a291b59dc.mean: 89.0 + 7f33317b-a45e-4b0a-94a2-9bbbdc746cc1.mean: 87.875 + temperature: + 06e267b9-8714-4c58-ac53-df6a291b59dc.max: 12.12 + 7f33317b-a45e-4b0a-94a2-9bbbdc746cc1.max: 13.77 + - role: input + timestamp: 1718524800000 + timestamp_iso: '2024-06-16T08:00:00+00:00' + humidity: + 7f33317b-a45e-4b0a-94a2-9bbbdc746cc1.mean: 73.125 + temperature: + 7f33317b-a45e-4b0a-94a2-9bbbdc746cc1.max: 19.27 + - role: input + timestamp: 1718553600000 + timestamp_iso: '2024-06-16T16:00:00+00:00' + humidity: + 7f33317b-a45e-4b0a-94a2-9bbbdc746cc1.mean: 69.75 + temperature: + 7f33317b-a45e-4b0a-94a2-9bbbdc746cc1.max: 19.12 + messages: + - message: Series ('06e267b9-8714-4c58-ac53-df6a291b59dc', 'temperature', + 'max'), aggregated on freq PT8H contains 26 null values. These + will NOT be interpolated + level: warning + timestamp: '2024-07-01T15:37:41.460083+00:00' + action: GET /queries/v1/data/weatherHistoryDailyAndHourly + category: data + - message: Series ('06e267b9-8714-4c58-ac53-df6a291b59dc', 'humidity', + 'mean'), aggregated on freq PT8H contains 26 null values. + These will NOT be interpolated + level: warning + timestamp: '2024-07-01T15:37:41.461241+00:00' + action: GET /queries/v1/data/weatherHistoryDailyAndHourly + category: data + query: + freq: PT8H + from_: 2024-06-16 12:00 AM + until: 2024-06-17 12:00 AM + data: + - metric: temperature + resource: 06e267b9-8714-4c58-ac53-df6a291b59dc + seriesId: 97de31f5-7b69-4a56-87e0-6b5c8a6b1872 + aggregation: max + - metric: humidity + resource: 06e267b9-8714-4c58-ac53-df6a291b59dc + seriesId: 8eb0799f-1af7-4af2-8233-517cb4bdc3c6 + aggregation: mean + - metric: temperature + resource: 7f33317b-a45e-4b0a-94a2-9bbbdc746cc1 + seriesId: 5055a943-e1c0-41d6-a6c9-7b20427a742d + aggregation: max + - metric: humidity + resource: 7f33317b-a45e-4b0a-94a2-9bbbdc746cc1 + seriesId: 16ac581f-f5ce-4845-9b6a-1b16249af051 + aggregation: mean + render: + mode: METRIC_FLAT_DICT + header_column: + summary: Query response example for `?render=HEADER_COLUMN` + value: + data: + - rows: + - resource + - metric + - aggregation + - timestamp: 1717977600000 + timestamp_iso: '2024-06-10T00:00:00+00:00' + - timestamp: 1718006400000 + timestamp_iso: '2024-06-10T08:00:00+00:00' + - timestamp: 1718035200000 + timestamp_iso: '2024-06-10T16:00:00+00:00' + - timestamp: 1718064000000 + timestamp_iso: '2024-06-11T00:00:00+00:00' + - timestamp: 1718092800000 + timestamp_iso: '2024-06-11T08:00:00+00:00' + - timestamp: 1718121600000 + timestamp_iso: '2024-06-11T16:00:00+00:00' + - timestamp: 1718150400000 + timestamp_iso: '2024-06-12T00:00:00+00:00' + - timestamp: 1718179200000 + timestamp_iso: '2024-06-12T08:00:00+00:00' + - timestamp: 1718208000000 + timestamp_iso: '2024-06-12T16:00:00+00:00' + - timestamp: 1718236800000 + timestamp_iso: '2024-06-13T00:00:00+00:00' + - timestamp: 1718265600000 + timestamp_iso: '2024-06-13T08:00:00+00:00' + - timestamp: 1718294400000 + timestamp_iso: '2024-06-13T16:00:00+00:00' + - timestamp: 1718323200000 + timestamp_iso: '2024-06-14T00:00:00+00:00' + - timestamp: 1718352000000 + timestamp_iso: '2024-06-14T08:00:00+00:00' + - timestamp: 1718380800000 + timestamp_iso: '2024-06-14T16:00:00+00:00' + - timestamp: 1718409600000 + timestamp_iso: '2024-06-15T00:00:00+00:00' + - timestamp: 1718438400000 + timestamp_iso: '2024-06-15T08:00:00+00:00' + - timestamp: 1718467200000 + timestamp_iso: '2024-06-15T16:00:00+00:00' + - timestamp: 1718496000000 + timestamp_iso: '2024-06-16T00:00:00+00:00' + - timestamp: 1718524800000 + timestamp_iso: '2024-06-16T08:00:00+00:00' + - timestamp: 1718553600000 + timestamp_iso: '2024-06-16T16:00:00+00:00' + data: + - - 06e267b9-8714-4c58-ac53-df6a291b59dc + - temperature + - max + - 12.67 + - 13.74 + - null + - 7.49 + - null + - null + - 9.34 + - null + - null + - 9.03 + - null + - null + - 12.98 + - null + - null + - 11.8 + - null + - null + - 12.12 + - null + - null + - - 06e267b9-8714-4c58-ac53-df6a291b59dc + - humidity + - mean + - 80.0 + - 88.0 + - null + - 88.0 + - null + - null + - 90.0 + - null + - null + - 90.0 + - null + - null + - 80.0 + - null + - null + - 88.0 + - null + - null + - 89.0 + - null + - null + - - 7f33317b-a45e-4b0a-94a2-9bbbdc746cc1 + - temperature + - max + - 12.78 + - 13.06 + - 13.35 + - 13.0 + - 14.84 + - 14.59 + - 13.08 + - 15.41 + - 15.1 + - 14.99 + - 18.64 + - 18.35 + - 13.02 + - 18.19 + - 17.75 + - 13.4 + - 16.53 + - 14.69 + - 13.77 + - 19.27 + - 19.12 + - - 7f33317b-a45e-4b0a-94a2-9bbbdc746cc1 + - humidity + - mean + - 83.125 + - 80.875 + - 78.5 + - 81.875 + - 62.375 + - 76.5 + - 85.375 + - 61.75 + - 74.0 + - 82.875 + - 57.5 + - 62.5 + - 81.625 + - 81.5 + - 88.875 + - 87.25 + - 64.5 + - 84.875 + - 87.875 + - 73.125 + - 69.75 + data_axis: row + attributes: + role: input + messages: + - message: Series ('06e267b9-8714-4c58-ac53-df6a291b59dc', 'temperature', + 'max'), aggregated on freq PT8H contains 26 null values. These + will NOT be interpolated + level: warning + timestamp: '2024-07-01T13:02:54.733676+00:00' + action: GET /queries/v1/data/weatherHistoryDailyAndHourly + category: data + - message: Series ('06e267b9-8714-4c58-ac53-df6a291b59dc', 'humidity', + 'mean'), aggregated on freq PT8H contains 26 null values. + These will NOT be interpolated + level: warning + timestamp: '2024-07-01T13:02:54.734610+00:00' + action: GET /queries/v1/data/weatherHistoryDailyAndHourly + category: data + query: + freq: PT8H + from_: 2024-06-16 12:00 AM + until: 2024-06-17 12:00 AM + data: + - metric: temperature + resource: 06e267b9-8714-4c58-ac53-df6a291b59dc + seriesId: 97de31f5-7b69-4a56-87e0-6b5c8a6b1872 + aggregation: max + - metric: humidity + resource: 06e267b9-8714-4c58-ac53-df6a291b59dc + seriesId: 8eb0799f-1af7-4af2-8233-517cb4bdc3c6 + aggregation: mean + - metric: temperature + resource: 7f33317b-a45e-4b0a-94a2-9bbbdc746cc1 + seriesId: 5055a943-e1c0-41d6-a6c9-7b20427a742d + aggregation: max + - metric: humidity + resource: 7f33317b-a45e-4b0a-94a2-9bbbdc746cc1 + seriesId: 16ac581f-f5ce-4845-9b6a-1b16249af051 + aggregation: mean + render: + mode: HEADER_COLUMN + series: + summary: Query response example for `?render=SERIES` + value: + data: + - columns: + - timestamp + - resource: 06e267b9-8714-4c58-ac53-df6a291b59dc + metric: temperature + aggregation: max + - resource: 06e267b9-8714-4c58-ac53-df6a291b59dc + metric: humidity + aggregation: mean + - resource: 7f33317b-a45e-4b0a-94a2-9bbbdc746cc1 + metric: temperature + aggregation: max + - resource: 7f33317b-a45e-4b0a-94a2-9bbbdc746cc1 + metric: humidity + aggregation: mean + data: + - - 1717977600000 + - 1718006400000 + - 1718035200000 + - 1718064000000 + - 1718092800000 + - 1718121600000 + - 1718150400000 + - 1718179200000 + - 1718208000000 + - 1718236800000 + - 1718265600000 + - 1718294400000 + - 1718323200000 + - 1718352000000 + - 1718380800000 + - 1718409600000 + - 1718438400000 + - 1718467200000 + - 1718496000000 + - 1718524800000 + - 1718553600000 + - - 12.67 + - 13.74 + - null + - 7.49 + - null + - null + - 9.34 + - null + - null + - 9.03 + - null + - null + - 12.98 + - null + - null + - 11.8 + - null + - null + - 12.12 + - null + - null + - - 80.0 + - 88.0 + - null + - 88.0 + - null + - null + - 90.0 + - null + - null + - 90.0 + - null + - null + - 80.0 + - null + - null + - 88.0 + - null + - null + - 89.0 + - null + - null + - - 12.78 + - 13.06 + - 13.35 + - 13.0 + - 14.84 + - 14.59 + - 13.08 + - 15.41 + - 15.1 + - 14.99 + - 18.64 + - 18.35 + - 13.02 + - 18.19 + - 17.75 + - 13.4 + - 16.53 + - 14.69 + - 13.77 + - 19.27 + - 19.12 + - - 83.125 + - 80.875 + - 78.5 + - 81.875 + - 62.375 + - 76.5 + - 85.375 + - 61.75 + - 74.0 + - 82.875 + - 57.5 + - 62.5 + - 81.625 + - 81.5 + - 88.875 + - 87.25 + - 64.5 + - 84.875 + - 87.875 + - 73.125 + - 69.75 + data_axis: row + attributes: + role: input + window_spec: + from: 1717977600000 + until: 1718582400000 + window: P7D + freq: PT8H + messages: + - message: Series ('06e267b9-8714-4c58-ac53-df6a291b59dc', 'temperature', + 'max'), aggregated on freq PT8H contains 26 null values. These + will NOT be interpolated + level: warning + timestamp: '2024-07-01T13:01:39.240450+00:00' + action: GET /queries/v1/data/weatherHistoryDailyAndHourly + category: data + - message: Series ('06e267b9-8714-4c58-ac53-df6a291b59dc', 'humidity', + 'mean'), aggregated on freq PT8H contains 26 null values. + These will NOT be interpolated + level: warning + timestamp: '2024-07-01T13:01:39.241481+00:00' + action: GET /queries/v1/data/weatherHistoryDailyAndHourly + category: data + query: + freq: PT8H + from_: 2024-06-16 12:00 AM + until: 2024-06-17 12:00 AM + data: + - metric: temperature + resource: 06e267b9-8714-4c58-ac53-df6a291b59dc + seriesId: 97de31f5-7b69-4a56-87e0-6b5c8a6b1872 + aggregation: max + - metric: humidity + resource: 06e267b9-8714-4c58-ac53-df6a291b59dc + seriesId: 8eb0799f-1af7-4af2-8233-517cb4bdc3c6 + aggregation: mean + - metric: temperature + resource: 7f33317b-a45e-4b0a-94a2-9bbbdc746cc1 + seriesId: 5055a943-e1c0-41d6-a6c9-7b20427a742d + aggregation: max + - metric: humidity + resource: 7f33317b-a45e-4b0a-94a2-9bbbdc746cc1 + seriesId: 16ac581f-f5ce-4845-9b6a-1b16249af051 + aggregation: mean + render: + mode: SERIES + text/csv: + schema: + title: CSV timeseries data response. + description: 'A CSV representation of the query result, + + - the first `timestamp` column contains event timestamp in iso + format + + - remaining columns contain the (aggregated or non-aggregated) series + values, using a `{resource_id}/{metric}` or `{resource_id}/{metric}/{aggregation}` header.' + '422': + description: Validation Error + content: + application/json: + schema: + $ref: '#/components/schemas/HTTPValidationError' + security: *id001 + /queries/v1/queries/v1/data/{query_name}: + get: + tags: + - Execute + summary: Execute Named Query + description: 'Execute a named timeseries query. + + + Retrieves a stored query definition by name, + + applies overrides from the url parameters, and executes it.' + operationId: executeByName_query_queries_v1_data__query_name__get + parameters: + - name: query_name + in: path + required: true + schema: + type: string + title: Query Name + - name: resource + in: query + required: false + schema: + type: string + title: Resource + description: Default Resource Override. + examples: + - 13efb488-75ac-4dac-828a-d49c5c2ebbfc + description: Default Resource Override. + - name: metric + in: query + required: false + schema: + type: string + title: Metric + description: Default Metric Override. + examples: + - temperature + - uptime + description: Default Metric Override. + - name: aggregation + in: query + required: false + schema: + title: Aggregation Override. + $ref: '#/components/schemas/AggregationMethod' + - name: interpolation + in: query + required: false + schema: + anyOf: + - $ref: '#/components/schemas/InterpolationMethod' + title: Interpolation Override. + - $ref: '#/components/schemas/InterpolationSpec' + title: Interpolation Override. + title: Interpolation + - name: freq + in: query + required: false + schema: + type: string + title: Grouping Interval Override + description: Override for the `freq` query attribute. + oneOf: + - type: string + format: period + example: PT3H15M + pattern: ^P([0-9]+Y)?([0-9]+M)?([0-9]+W)?([0-9]+D)?(T([0-9]+H)?([0-9]+M)?([0-9]+(\.[0-9]*)?S)?)?$ + title: 'ISO8601 period ' + description: A period in [ISO8601 duration](https://en.wikipedia.org/wiki/ISO_8601#Durations) + format. + - title: Inferred Frequency + type: string + description: When `inferred` is specified, the frequency of aggregation + will be inferred from the main/first time series. This can be used to + regularize the time series + const: inferred + description: Override for the `freq` query attribute. + - name: from + in: query + required: false + schema: + type: string + title: From Override. + oneOf: + - title: ISO8601 absolute timestamp + type: string + format: date-time + example: '2018-03-21T12:23:00+01:00' + description: A date or date-time in [ISO8601](https://en.wikipedia.org/wiki/ISO_8601#Combined_date_and_time_representations) + format. When no timezone is specified, the UTC timezone is assumed (`+00:00`) + pattern: '[0-9]{4}-[0-9]{2}-[0-9]{2}(T.*)?' + - type: integer + title: UNIX epoch milliseconds + minimum: 0 + description: Absolute timestamp milliseconds in unix epoch since 1970-01-01. + example: 1534836422284 + - type: string + format: period + example: PT3H15M + pattern: ^P([0-9]+Y)?([0-9]+M)?([0-9]+W)?([0-9]+D)?(T([0-9]+H)?([0-9]+M)?([0-9]+(\.[0-9]*)?S)?)?$ + title: ISO8601 Period Before Now + description: Specifies a timestamp before _now_ as a period in [ISO8601 + duration](https://en.wikipedia.org/wiki/ISO_8601#Durations) format. + - name: until + in: query + required: false + schema: + type: string + title: From Override. + oneOf: + - title: ISO8601 absolute timestamp + type: string + format: date-time + example: '2018-03-21T12:23:00+01:00' + description: A date or date-time in [ISO8601](https://en.wikipedia.org/wiki/ISO_8601#Combined_date_and_time_representations) + format. When no timezone is specified, the UTC timezone is assumed (`+00:00`) + pattern: '[0-9]{4}-[0-9]{2}-[0-9]{2}(T.*)?' + - type: integer + title: UNIX epoch milliseconds + minimum: 0 + description: Absolute timestamp milliseconds in unix epoch since 1970-01-01. + example: 1534836422284 + - type: string + format: period + example: PT3H15M + pattern: ^P([0-9]+Y)?([0-9]+M)?([0-9]+W)?([0-9]+D)?(T([0-9]+H)?([0-9]+M)?([0-9]+(\.[0-9]*)?S)?)?$ + title: ISO8601 Period Before Now + description: Specifies a timestamp before _now_ as a period in [ISO8601 + duration](https://en.wikipedia.org/wiki/ISO_8601#Durations) format. + - name: window + in: query + required: false + schema: + type: string + title: Window Override. + oneOf: + - type: string + format: period + example: PT3H15M + pattern: ^P([0-9]+Y)?([0-9]+M)?([0-9]+W)?([0-9]+D)?(T([0-9]+H)?([0-9]+M)?([0-9]+(\.[0-9]*)?S)?)?$ + title: 'ISO8601 period ' + description: A period in [ISO8601 duration](https://en.wikipedia.org/wiki/ISO_8601#Durations) + format. + - name: periods + in: query + required: false + schema: + type: integer + title: Periods Override. + - name: render + in: query + required: false + schema: + anyOf: + - $ref: '#/components/schemas/_RenderMode' + title: Render Mode + - $ref: '#/components/schemas/Render' + title: Render Override. + title: Render + - name: accept + in: header + required: false + schema: + anyOf: + - type: string + - type: 'null' + title: Accept header + description: Use a 'text/csv' accept header to get CSV formatted results. + description: Use a 'text/csv' accept header to get CSV formatted results. + responses: + '200': + description: Successful Response + content: + application/json: + schema: + $ref: '#/components/schemas/QueryResult' + examples: + default: + summary: Query response example for `?render=DEFAULT` + value: + data: + - columns: + - timestamp + - resource: 06e267b9-8714-4c58-ac53-df6a291b59dc + metric: temperature + aggregation: max + - resource: 06e267b9-8714-4c58-ac53-df6a291b59dc + metric: humidity + aggregation: mean + - resource: 7f33317b-a45e-4b0a-94a2-9bbbdc746cc1 + metric: temperature + aggregation: max + - resource: 7f33317b-a45e-4b0a-94a2-9bbbdc746cc1 + metric: humidity + aggregation: mean + data: + - - 1717977600000 + - 12.67 + - 80.0 + - 12.78 + - 83.125 + - - 1718006400000 + - 13.74 + - 88.0 + - 13.06 + - 80.875 + - - 1718035200000 + - null + - null + - 13.35 + - 78.5 + - - 1718064000000 + - 7.49 + - 88.0 + - 13.0 + - 81.875 + - - 1718092800000 + - null + - null + - 14.84 + - 62.375 + - - 1718121600000 + - null + - null + - 14.59 + - 76.5 + - - 1718150400000 + - 9.34 + - 90.0 + - 13.08 + - 85.375 + - - 1718179200000 + - null + - null + - 15.41 + - 61.75 + - - 1718208000000 + - null + - null + - 15.1 + - 74.0 + - - 1718236800000 + - 9.03 + - 90.0 + - 14.99 + - 82.875 + - - 1718265600000 + - null + - null + - 18.64 + - 57.5 + - - 1718294400000 + - null + - null + - 18.35 + - 62.5 + - - 1718323200000 + - 12.98 + - 80.0 + - 13.02 + - 81.625 + - - 1718352000000 + - null + - null + - 18.19 + - 81.5 + - - 1718380800000 + - null + - null + - 17.75 + - 88.875 + - - 1718409600000 + - 11.8 + - 88.0 + - 13.4 + - 87.25 + - - 1718438400000 + - null + - null + - 16.53 + - 64.5 + - - 1718467200000 + - null + - null + - 14.69 + - 84.875 + - - 1718496000000 + - 12.12 + - 89.0 + - 13.77 + - 87.875 + - - 1718524800000 + - null + - null + - 19.27 + - 73.125 + - - 1718553600000 + - null + - null + - 19.12 + - 69.75 + data_axis: column + attributes: + role: input + window_spec: + from: 1717977600000 + until: 1718582400000 + window: P7D + freq: PT8H + messages: + - message: Series ('06e267b9-8714-4c58-ac53-df6a291b59dc', 'temperature', + 'max'), aggregated on freq PT8H contains 26 null values. These + will NOT be interpolated + level: warning + timestamp: '2024-07-01T13:00:20.886997+00:00' + action: GET /queries/v1/data/weatherHistoryDailyAndHourly + category: data + - message: Series ('06e267b9-8714-4c58-ac53-df6a291b59dc', 'humidity', + 'mean'), aggregated on freq PT8H contains 26 null values. + These will NOT be interpolated + level: warning + timestamp: '2024-07-01T13:00:20.887995+00:00' + action: GET /queries/v1/data/weatherHistoryDailyAndHourly + category: data + query: + freq: PT8H + from_: 2024-06-16 12:00 AM + until: 2024-06-17 12:00 AM + data: + - metric: temperature + resource: 06e267b9-8714-4c58-ac53-df6a291b59dc + seriesId: 97de31f5-7b69-4a56-87e0-6b5c8a6b1872 + aggregation: max + - metric: humidity + resource: 06e267b9-8714-4c58-ac53-df6a291b59dc + seriesId: 8eb0799f-1af7-4af2-8233-517cb4bdc3c6 + aggregation: mean + - metric: temperature + resource: 7f33317b-a45e-4b0a-94a2-9bbbdc746cc1 + seriesId: 5055a943-e1c0-41d6-a6c9-7b20427a742d + aggregation: max + - metric: humidity + resource: 7f33317b-a45e-4b0a-94a2-9bbbdc746cc1 + seriesId: 16ac581f-f5ce-4845-9b6a-1b16249af051 + aggregation: mean + hier_dict: + summary: Query response example for `?render=HIER_DICT` + value: + data: + - - role: input + timestamp: 1717977600000 + timestamp_iso: '2024-06-10T00:00:00+00:00' + levels: + - resource + - metric + - aggregation + 06e267b9-8714-4c58-ac53-df6a291b59dc: + humidity: + mean: 80.0 + temperature: + max: 12.67 + 7f33317b-a45e-4b0a-94a2-9bbbdc746cc1: + humidity: + mean: 83.125 + temperature: + max: 12.78 + - role: input + timestamp: 1718006400000 + timestamp_iso: '2024-06-10T08:00:00+00:00' + levels: + - resource + - metric + - aggregation + 06e267b9-8714-4c58-ac53-df6a291b59dc: + humidity: + mean: 88.0 + temperature: + max: 13.74 + 7f33317b-a45e-4b0a-94a2-9bbbdc746cc1: + humidity: + mean: 80.875 + temperature: + max: 13.06 + - role: input + timestamp: 1718035200000 + timestamp_iso: '2024-06-10T16:00:00+00:00' + levels: + - resource + - metric + - aggregation + 06e267b9-8714-4c58-ac53-df6a291b59dc: + humidity: {} + temperature: {} + 7f33317b-a45e-4b0a-94a2-9bbbdc746cc1: + humidity: + mean: 78.5 + temperature: + max: 13.35 + - role: input + timestamp: 1718064000000 + timestamp_iso: '2024-06-11T00:00:00+00:00' + levels: + - resource + - metric + - aggregation + 06e267b9-8714-4c58-ac53-df6a291b59dc: + humidity: + mean: 88.0 + temperature: + max: 7.49 + 7f33317b-a45e-4b0a-94a2-9bbbdc746cc1: + humidity: + mean: 81.875 + temperature: + max: 13.0 + - role: input + timestamp: 1718092800000 + timestamp_iso: '2024-06-11T08:00:00+00:00' + levels: + - resource + - metric + - aggregation + 06e267b9-8714-4c58-ac53-df6a291b59dc: + humidity: {} + temperature: {} + 7f33317b-a45e-4b0a-94a2-9bbbdc746cc1: + humidity: + mean: 62.375 + temperature: + max: 14.84 + - role: input + timestamp: 1718121600000 + timestamp_iso: '2024-06-11T16:00:00+00:00' + levels: + - resource + - metric + - aggregation + 06e267b9-8714-4c58-ac53-df6a291b59dc: + humidity: {} + temperature: {} + 7f33317b-a45e-4b0a-94a2-9bbbdc746cc1: + humidity: + mean: 76.5 + temperature: + max: 14.59 + - role: input + timestamp: 1718150400000 + timestamp_iso: '2024-06-12T00:00:00+00:00' + levels: + - resource + - metric + - aggregation + 06e267b9-8714-4c58-ac53-df6a291b59dc: + humidity: + mean: 90.0 + temperature: + max: 9.34 + 7f33317b-a45e-4b0a-94a2-9bbbdc746cc1: + humidity: + mean: 85.375 + temperature: + max: 13.08 + - role: input + timestamp: 1718179200000 + timestamp_iso: '2024-06-12T08:00:00+00:00' + levels: + - resource + - metric + - aggregation + 06e267b9-8714-4c58-ac53-df6a291b59dc: + humidity: {} + temperature: {} + 7f33317b-a45e-4b0a-94a2-9bbbdc746cc1: + humidity: + mean: 61.75 + temperature: + max: 15.41 + - role: input + timestamp: 1718208000000 + timestamp_iso: '2024-06-12T16:00:00+00:00' + levels: + - resource + - metric + - aggregation + 06e267b9-8714-4c58-ac53-df6a291b59dc: + humidity: {} + temperature: {} + 7f33317b-a45e-4b0a-94a2-9bbbdc746cc1: + humidity: + mean: 74.0 + temperature: + max: 15.1 + - role: input + timestamp: 1718236800000 + timestamp_iso: '2024-06-13T00:00:00+00:00' + levels: + - resource + - metric + - aggregation + 06e267b9-8714-4c58-ac53-df6a291b59dc: + humidity: + mean: 90.0 + temperature: + max: 9.03 + 7f33317b-a45e-4b0a-94a2-9bbbdc746cc1: + humidity: + mean: 82.875 + temperature: + max: 14.99 + - role: input + timestamp: 1718265600000 + timestamp_iso: '2024-06-13T08:00:00+00:00' + levels: + - resource + - metric + - aggregation + 06e267b9-8714-4c58-ac53-df6a291b59dc: + humidity: {} + temperature: {} + 7f33317b-a45e-4b0a-94a2-9bbbdc746cc1: + humidity: + mean: 57.5 + temperature: + max: 18.64 + - role: input + timestamp: 1718294400000 + timestamp_iso: '2024-06-13T16:00:00+00:00' + levels: + - resource + - metric + - aggregation + 06e267b9-8714-4c58-ac53-df6a291b59dc: + humidity: {} + temperature: {} + 7f33317b-a45e-4b0a-94a2-9bbbdc746cc1: + humidity: + mean: 62.5 + temperature: + max: 18.35 + - role: input + timestamp: 1718323200000 + timestamp_iso: '2024-06-14T00:00:00+00:00' + levels: + - resource + - metric + - aggregation + 06e267b9-8714-4c58-ac53-df6a291b59dc: + humidity: + mean: 80.0 + temperature: + max: 12.98 + 7f33317b-a45e-4b0a-94a2-9bbbdc746cc1: + humidity: + mean: 81.625 + temperature: + max: 13.02 + - role: input + timestamp: 1718352000000 + timestamp_iso: '2024-06-14T08:00:00+00:00' + levels: + - resource + - metric + - aggregation + 06e267b9-8714-4c58-ac53-df6a291b59dc: + humidity: {} + temperature: {} + 7f33317b-a45e-4b0a-94a2-9bbbdc746cc1: + humidity: + mean: 81.5 + temperature: + max: 18.19 + - role: input + timestamp: 1718380800000 + timestamp_iso: '2024-06-14T16:00:00+00:00' + levels: + - resource + - metric + - aggregation + 06e267b9-8714-4c58-ac53-df6a291b59dc: + humidity: {} + temperature: {} + 7f33317b-a45e-4b0a-94a2-9bbbdc746cc1: + humidity: + mean: 88.875 + temperature: + max: 17.75 + - role: input + timestamp: 1718409600000 + timestamp_iso: '2024-06-15T00:00:00+00:00' + levels: + - resource + - metric + - aggregation + 06e267b9-8714-4c58-ac53-df6a291b59dc: + humidity: + mean: 88.0 + temperature: + max: 11.8 + 7f33317b-a45e-4b0a-94a2-9bbbdc746cc1: + humidity: + mean: 87.25 + temperature: + max: 13.4 + - role: input + timestamp: 1718438400000 + timestamp_iso: '2024-06-15T08:00:00+00:00' + levels: + - resource + - metric + - aggregation + 06e267b9-8714-4c58-ac53-df6a291b59dc: + humidity: {} + temperature: {} + 7f33317b-a45e-4b0a-94a2-9bbbdc746cc1: + humidity: + mean: 64.5 + temperature: + max: 16.53 + - role: input + timestamp: 1718467200000 + timestamp_iso: '2024-06-15T16:00:00+00:00' + levels: + - resource + - metric + - aggregation + 06e267b9-8714-4c58-ac53-df6a291b59dc: + humidity: {} + temperature: {} + 7f33317b-a45e-4b0a-94a2-9bbbdc746cc1: + humidity: + mean: 84.875 + temperature: + max: 14.69 + - role: input + timestamp: 1718496000000 + timestamp_iso: '2024-06-16T00:00:00+00:00' + levels: + - resource + - metric + - aggregation + 06e267b9-8714-4c58-ac53-df6a291b59dc: + humidity: + mean: 89.0 + temperature: + max: 12.12 + 7f33317b-a45e-4b0a-94a2-9bbbdc746cc1: + humidity: + mean: 87.875 + temperature: + max: 13.77 + - role: input + timestamp: 1718524800000 + timestamp_iso: '2024-06-16T08:00:00+00:00' + levels: + - resource + - metric + - aggregation + 06e267b9-8714-4c58-ac53-df6a291b59dc: + humidity: {} + temperature: {} + 7f33317b-a45e-4b0a-94a2-9bbbdc746cc1: + humidity: + mean: 73.125 + temperature: + max: 19.27 + - role: input + timestamp: 1718553600000 + timestamp_iso: '2024-06-16T16:00:00+00:00' + levels: + - resource + - metric + - aggregation + 06e267b9-8714-4c58-ac53-df6a291b59dc: + humidity: {} + temperature: {} + 7f33317b-a45e-4b0a-94a2-9bbbdc746cc1: + humidity: + mean: 69.75 + temperature: + max: 19.12 + messages: + - message: Series ('06e267b9-8714-4c58-ac53-df6a291b59dc', 'temperature', + 'max'), aggregated on freq PT8H contains 26 null values. These + will NOT be interpolated + level: warning + timestamp: '2024-07-01T12:57:58.698912+00:00' + action: GET /queries/v1/data/weatherHistoryDailyAndHourly + category: data + - message: Series ('06e267b9-8714-4c58-ac53-df6a291b59dc', 'humidity', + 'mean'), aggregated on freq PT8H contains 26 null values. + These will NOT be interpolated + level: warning + timestamp: '2024-07-01T12:57:58.699998+00:00' + action: GET /queries/v1/data/weatherHistoryDailyAndHourly + category: data + query: + freq: PT8H + from_: 2024-06-16 12:00 AM + until: 2024-06-17 12:00 AM + data: + - metric: temperature + resource: 06e267b9-8714-4c58-ac53-df6a291b59dc + seriesId: 97de31f5-7b69-4a56-87e0-6b5c8a6b1872 + aggregation: max + - metric: humidity + resource: 06e267b9-8714-4c58-ac53-df6a291b59dc + seriesId: 8eb0799f-1af7-4af2-8233-517cb4bdc3c6 + aggregation: mean + - metric: temperature + resource: 7f33317b-a45e-4b0a-94a2-9bbbdc746cc1 + seriesId: 5055a943-e1c0-41d6-a6c9-7b20427a742d + aggregation: max + - metric: humidity + resource: 7f33317b-a45e-4b0a-94a2-9bbbdc746cc1 + seriesId: 16ac581f-f5ce-4845-9b6a-1b16249af051 + aggregation: mean + render: + mode: HIER_DICT + upload: + summary: Query response example for `?render=UPLOAD` + value: + data: + - - role: input + timestamp: 1717977600000 + 06e267b9-8714-4c58-ac53-df6a291b59dc.temperature.max: 12.67 + 06e267b9-8714-4c58-ac53-df6a291b59dc.humidity.mean: 80.0 + 7f33317b-a45e-4b0a-94a2-9bbbdc746cc1.temperature.max: 12.78 + 7f33317b-a45e-4b0a-94a2-9bbbdc746cc1.humidity.mean: 83.125 + - role: input + timestamp: 1718006400000 + 06e267b9-8714-4c58-ac53-df6a291b59dc.temperature.max: 13.74 + 06e267b9-8714-4c58-ac53-df6a291b59dc.humidity.mean: 88.0 + 7f33317b-a45e-4b0a-94a2-9bbbdc746cc1.temperature.max: 13.06 + 7f33317b-a45e-4b0a-94a2-9bbbdc746cc1.humidity.mean: 80.875 + - role: input + timestamp: 1718035200000 + 7f33317b-a45e-4b0a-94a2-9bbbdc746cc1.temperature.max: 13.35 + 7f33317b-a45e-4b0a-94a2-9bbbdc746cc1.humidity.mean: 78.5 + - role: input + timestamp: 1718064000000 + 06e267b9-8714-4c58-ac53-df6a291b59dc.temperature.max: 7.49 + 06e267b9-8714-4c58-ac53-df6a291b59dc.humidity.mean: 88.0 + 7f33317b-a45e-4b0a-94a2-9bbbdc746cc1.temperature.max: 13.0 + 7f33317b-a45e-4b0a-94a2-9bbbdc746cc1.humidity.mean: 81.875 + - role: input + timestamp: 1718092800000 + 7f33317b-a45e-4b0a-94a2-9bbbdc746cc1.temperature.max: 14.84 + 7f33317b-a45e-4b0a-94a2-9bbbdc746cc1.humidity.mean: 62.375 + - role: input + timestamp: 1718121600000 + 7f33317b-a45e-4b0a-94a2-9bbbdc746cc1.temperature.max: 14.59 + 7f33317b-a45e-4b0a-94a2-9bbbdc746cc1.humidity.mean: 76.5 + - role: input + timestamp: 1718150400000 + 06e267b9-8714-4c58-ac53-df6a291b59dc.temperature.max: 9.34 + 06e267b9-8714-4c58-ac53-df6a291b59dc.humidity.mean: 90.0 + 7f33317b-a45e-4b0a-94a2-9bbbdc746cc1.temperature.max: 13.08 + 7f33317b-a45e-4b0a-94a2-9bbbdc746cc1.humidity.mean: 85.375 + - role: input + timestamp: 1718179200000 + 7f33317b-a45e-4b0a-94a2-9bbbdc746cc1.temperature.max: 15.41 + 7f33317b-a45e-4b0a-94a2-9bbbdc746cc1.humidity.mean: 61.75 + - role: input + timestamp: 1718208000000 + 7f33317b-a45e-4b0a-94a2-9bbbdc746cc1.temperature.max: 15.1 + 7f33317b-a45e-4b0a-94a2-9bbbdc746cc1.humidity.mean: 74.0 + - role: input + timestamp: 1718236800000 + 06e267b9-8714-4c58-ac53-df6a291b59dc.temperature.max: 9.03 + 06e267b9-8714-4c58-ac53-df6a291b59dc.humidity.mean: 90.0 + 7f33317b-a45e-4b0a-94a2-9bbbdc746cc1.temperature.max: 14.99 + 7f33317b-a45e-4b0a-94a2-9bbbdc746cc1.humidity.mean: 82.875 + - role: input + timestamp: 1718265600000 + 7f33317b-a45e-4b0a-94a2-9bbbdc746cc1.temperature.max: 18.64 + 7f33317b-a45e-4b0a-94a2-9bbbdc746cc1.humidity.mean: 57.5 + - role: input + timestamp: 1718294400000 + 7f33317b-a45e-4b0a-94a2-9bbbdc746cc1.temperature.max: 18.35 + 7f33317b-a45e-4b0a-94a2-9bbbdc746cc1.humidity.mean: 62.5 + - role: input + timestamp: 1718323200000 + 06e267b9-8714-4c58-ac53-df6a291b59dc.temperature.max: 12.98 + 06e267b9-8714-4c58-ac53-df6a291b59dc.humidity.mean: 80.0 + 7f33317b-a45e-4b0a-94a2-9bbbdc746cc1.temperature.max: 13.02 + 7f33317b-a45e-4b0a-94a2-9bbbdc746cc1.humidity.mean: 81.625 + - role: input + timestamp: 1718352000000 + 7f33317b-a45e-4b0a-94a2-9bbbdc746cc1.temperature.max: 18.19 + 7f33317b-a45e-4b0a-94a2-9bbbdc746cc1.humidity.mean: 81.5 + - role: input + timestamp: 1718380800000 + 7f33317b-a45e-4b0a-94a2-9bbbdc746cc1.temperature.max: 17.75 + 7f33317b-a45e-4b0a-94a2-9bbbdc746cc1.humidity.mean: 88.875 + - role: input + timestamp: 1718409600000 + 06e267b9-8714-4c58-ac53-df6a291b59dc.temperature.max: 11.8 + 06e267b9-8714-4c58-ac53-df6a291b59dc.humidity.mean: 88.0 + 7f33317b-a45e-4b0a-94a2-9bbbdc746cc1.temperature.max: 13.4 + 7f33317b-a45e-4b0a-94a2-9bbbdc746cc1.humidity.mean: 87.25 + - role: input + timestamp: 1718438400000 + 7f33317b-a45e-4b0a-94a2-9bbbdc746cc1.temperature.max: 16.53 + 7f33317b-a45e-4b0a-94a2-9bbbdc746cc1.humidity.mean: 64.5 + - role: input + timestamp: 1718467200000 + 7f33317b-a45e-4b0a-94a2-9bbbdc746cc1.temperature.max: 14.69 + 7f33317b-a45e-4b0a-94a2-9bbbdc746cc1.humidity.mean: 84.875 + - role: input + timestamp: 1718496000000 + 06e267b9-8714-4c58-ac53-df6a291b59dc.temperature.max: 12.12 + 06e267b9-8714-4c58-ac53-df6a291b59dc.humidity.mean: 89.0 + 7f33317b-a45e-4b0a-94a2-9bbbdc746cc1.temperature.max: 13.77 + 7f33317b-a45e-4b0a-94a2-9bbbdc746cc1.humidity.mean: 87.875 + - role: input + timestamp: 1718524800000 + 7f33317b-a45e-4b0a-94a2-9bbbdc746cc1.temperature.max: 19.27 + 7f33317b-a45e-4b0a-94a2-9bbbdc746cc1.humidity.mean: 73.125 + - role: input + timestamp: 1718553600000 + 7f33317b-a45e-4b0a-94a2-9bbbdc746cc1.temperature.max: 19.12 + 7f33317b-a45e-4b0a-94a2-9bbbdc746cc1.humidity.mean: 69.75 + messages: + - message: Series ('06e267b9-8714-4c58-ac53-df6a291b59dc', 'temperature', + 'max'), aggregated on freq PT8H contains 26 null values. These + will NOT be interpolated + level: warning + timestamp: '2024-07-01T13:03:24.128684+00:00' + action: GET /queries/v1/data/weatherHistoryDailyAndHourly + category: data + - message: Series ('06e267b9-8714-4c58-ac53-df6a291b59dc', 'humidity', + 'mean'), aggregated on freq PT8H contains 26 null values. + These will NOT be interpolated + level: warning + timestamp: '2024-07-01T13:03:24.129391+00:00' + action: GET /queries/v1/data/weatherHistoryDailyAndHourly + category: data + query: + freq: PT8H + from_: 2024-06-16 12:00 AM + until: 2024-06-17 12:00 AM + data: + - metric: temperature + resource: 06e267b9-8714-4c58-ac53-df6a291b59dc + seriesId: 97de31f5-7b69-4a56-87e0-6b5c8a6b1872 + aggregation: max + - metric: humidity + resource: 06e267b9-8714-4c58-ac53-df6a291b59dc + seriesId: 8eb0799f-1af7-4af2-8233-517cb4bdc3c6 + aggregation: mean + - metric: temperature + resource: 7f33317b-a45e-4b0a-94a2-9bbbdc746cc1 + seriesId: 5055a943-e1c0-41d6-a6c9-7b20427a742d + aggregation: max + - metric: humidity + resource: 7f33317b-a45e-4b0a-94a2-9bbbdc746cc1 + seriesId: 16ac581f-f5ce-4845-9b6a-1b16249af051 + aggregation: mean + render: + mode: UPLOAD + flat_dict: + summary: Query response example for `?render=FLAT_DICT` + value: + data: + - - role: input + timestamp: 1717977600000 + timestamp_iso: '2024-06-10T00:00:00+00:00' + levels: + - resource.metric.aggregation + 06e267b9-8714-4c58-ac53-df6a291b59dc.temperature.max: 12.67 + 06e267b9-8714-4c58-ac53-df6a291b59dc.humidity.mean: 80.0 + 7f33317b-a45e-4b0a-94a2-9bbbdc746cc1.temperature.max: 12.78 + 7f33317b-a45e-4b0a-94a2-9bbbdc746cc1.humidity.mean: 83.125 + - role: input + timestamp: 1718006400000 + timestamp_iso: '2024-06-10T08:00:00+00:00' + levels: + - resource.metric.aggregation + 06e267b9-8714-4c58-ac53-df6a291b59dc.temperature.max: 13.74 + 06e267b9-8714-4c58-ac53-df6a291b59dc.humidity.mean: 88.0 + 7f33317b-a45e-4b0a-94a2-9bbbdc746cc1.temperature.max: 13.06 + 7f33317b-a45e-4b0a-94a2-9bbbdc746cc1.humidity.mean: 80.875 + - role: input + timestamp: 1718035200000 + timestamp_iso: '2024-06-10T16:00:00+00:00' + levels: + - resource.metric.aggregation + 7f33317b-a45e-4b0a-94a2-9bbbdc746cc1.temperature.max: 13.35 + 7f33317b-a45e-4b0a-94a2-9bbbdc746cc1.humidity.mean: 78.5 + - role: input + timestamp: 1718064000000 + timestamp_iso: '2024-06-11T00:00:00+00:00' + levels: + - resource.metric.aggregation + 06e267b9-8714-4c58-ac53-df6a291b59dc.temperature.max: 7.49 + 06e267b9-8714-4c58-ac53-df6a291b59dc.humidity.mean: 88.0 + 7f33317b-a45e-4b0a-94a2-9bbbdc746cc1.temperature.max: 13.0 + 7f33317b-a45e-4b0a-94a2-9bbbdc746cc1.humidity.mean: 81.875 + - role: input + timestamp: 1718092800000 + timestamp_iso: '2024-06-11T08:00:00+00:00' + levels: + - resource.metric.aggregation + 7f33317b-a45e-4b0a-94a2-9bbbdc746cc1.temperature.max: 14.84 + 7f33317b-a45e-4b0a-94a2-9bbbdc746cc1.humidity.mean: 62.375 + - role: input + timestamp: 1718121600000 + timestamp_iso: '2024-06-11T16:00:00+00:00' + levels: + - resource.metric.aggregation + 7f33317b-a45e-4b0a-94a2-9bbbdc746cc1.temperature.max: 14.59 + 7f33317b-a45e-4b0a-94a2-9bbbdc746cc1.humidity.mean: 76.5 + - role: input + timestamp: 1718150400000 + timestamp_iso: '2024-06-12T00:00:00+00:00' + levels: + - resource.metric.aggregation + 06e267b9-8714-4c58-ac53-df6a291b59dc.temperature.max: 9.34 + 06e267b9-8714-4c58-ac53-df6a291b59dc.humidity.mean: 90.0 + 7f33317b-a45e-4b0a-94a2-9bbbdc746cc1.temperature.max: 13.08 + 7f33317b-a45e-4b0a-94a2-9bbbdc746cc1.humidity.mean: 85.375 + - role: input + timestamp: 1718179200000 + timestamp_iso: '2024-06-12T08:00:00+00:00' + levels: + - resource.metric.aggregation + 7f33317b-a45e-4b0a-94a2-9bbbdc746cc1.temperature.max: 15.41 + 7f33317b-a45e-4b0a-94a2-9bbbdc746cc1.humidity.mean: 61.75 + - role: input + timestamp: 1718208000000 + timestamp_iso: '2024-06-12T16:00:00+00:00' + levels: + - resource.metric.aggregation + 7f33317b-a45e-4b0a-94a2-9bbbdc746cc1.temperature.max: 15.1 + 7f33317b-a45e-4b0a-94a2-9bbbdc746cc1.humidity.mean: 74.0 + - role: input + timestamp: 1718236800000 + timestamp_iso: '2024-06-13T00:00:00+00:00' + levels: + - resource.metric.aggregation + 06e267b9-8714-4c58-ac53-df6a291b59dc.temperature.max: 9.03 + 06e267b9-8714-4c58-ac53-df6a291b59dc.humidity.mean: 90.0 + 7f33317b-a45e-4b0a-94a2-9bbbdc746cc1.temperature.max: 14.99 + 7f33317b-a45e-4b0a-94a2-9bbbdc746cc1.humidity.mean: 82.875 + - role: input + timestamp: 1718265600000 + timestamp_iso: '2024-06-13T08:00:00+00:00' + levels: + - resource.metric.aggregation + 7f33317b-a45e-4b0a-94a2-9bbbdc746cc1.temperature.max: 18.64 + 7f33317b-a45e-4b0a-94a2-9bbbdc746cc1.humidity.mean: 57.5 + - role: input + timestamp: 1718294400000 + timestamp_iso: '2024-06-13T16:00:00+00:00' + levels: + - resource.metric.aggregation + 7f33317b-a45e-4b0a-94a2-9bbbdc746cc1.temperature.max: 18.35 + 7f33317b-a45e-4b0a-94a2-9bbbdc746cc1.humidity.mean: 62.5 + - role: input + timestamp: 1718323200000 + timestamp_iso: '2024-06-14T00:00:00+00:00' + levels: + - resource.metric.aggregation + 06e267b9-8714-4c58-ac53-df6a291b59dc.temperature.max: 12.98 + 06e267b9-8714-4c58-ac53-df6a291b59dc.humidity.mean: 80.0 + 7f33317b-a45e-4b0a-94a2-9bbbdc746cc1.temperature.max: 13.02 + 7f33317b-a45e-4b0a-94a2-9bbbdc746cc1.humidity.mean: 81.625 + - role: input + timestamp: 1718352000000 + timestamp_iso: '2024-06-14T08:00:00+00:00' + levels: + - resource.metric.aggregation + 7f33317b-a45e-4b0a-94a2-9bbbdc746cc1.temperature.max: 18.19 + 7f33317b-a45e-4b0a-94a2-9bbbdc746cc1.humidity.mean: 81.5 + - role: input + timestamp: 1718380800000 + timestamp_iso: '2024-06-14T16:00:00+00:00' + levels: + - resource.metric.aggregation + 7f33317b-a45e-4b0a-94a2-9bbbdc746cc1.temperature.max: 17.75 + 7f33317b-a45e-4b0a-94a2-9bbbdc746cc1.humidity.mean: 88.875 + - role: input + timestamp: 1718409600000 + timestamp_iso: '2024-06-15T00:00:00+00:00' + levels: + - resource.metric.aggregation + 06e267b9-8714-4c58-ac53-df6a291b59dc.temperature.max: 11.8 + 06e267b9-8714-4c58-ac53-df6a291b59dc.humidity.mean: 88.0 + 7f33317b-a45e-4b0a-94a2-9bbbdc746cc1.temperature.max: 13.4 + 7f33317b-a45e-4b0a-94a2-9bbbdc746cc1.humidity.mean: 87.25 + - role: input + timestamp: 1718438400000 + timestamp_iso: '2024-06-15T08:00:00+00:00' + levels: + - resource.metric.aggregation + 7f33317b-a45e-4b0a-94a2-9bbbdc746cc1.temperature.max: 16.53 + 7f33317b-a45e-4b0a-94a2-9bbbdc746cc1.humidity.mean: 64.5 + - role: input + timestamp: 1718467200000 + timestamp_iso: '2024-06-15T16:00:00+00:00' + levels: + - resource.metric.aggregation + 7f33317b-a45e-4b0a-94a2-9bbbdc746cc1.temperature.max: 14.69 + 7f33317b-a45e-4b0a-94a2-9bbbdc746cc1.humidity.mean: 84.875 + - role: input + timestamp: 1718496000000 + timestamp_iso: '2024-06-16T00:00:00+00:00' + levels: + - resource.metric.aggregation + 06e267b9-8714-4c58-ac53-df6a291b59dc.temperature.max: 12.12 + 06e267b9-8714-4c58-ac53-df6a291b59dc.humidity.mean: 89.0 + 7f33317b-a45e-4b0a-94a2-9bbbdc746cc1.temperature.max: 13.77 + 7f33317b-a45e-4b0a-94a2-9bbbdc746cc1.humidity.mean: 87.875 + - role: input + timestamp: 1718524800000 + timestamp_iso: '2024-06-16T08:00:00+00:00' + levels: + - resource.metric.aggregation + 7f33317b-a45e-4b0a-94a2-9bbbdc746cc1.temperature.max: 19.27 + 7f33317b-a45e-4b0a-94a2-9bbbdc746cc1.humidity.mean: 73.125 + - role: input + timestamp: 1718553600000 + timestamp_iso: '2024-06-16T16:00:00+00:00' + levels: + - resource.metric.aggregation + 7f33317b-a45e-4b0a-94a2-9bbbdc746cc1.temperature.max: 19.12 + 7f33317b-a45e-4b0a-94a2-9bbbdc746cc1.humidity.mean: 69.75 + messages: + - message: Series ('06e267b9-8714-4c58-ac53-df6a291b59dc', 'temperature', + 'max'), aggregated on freq PT8H contains 26 null values. These + will NOT be interpolated + level: warning + timestamp: '2024-07-01T12:59:32.689972+00:00' + action: GET /queries/v1/data/weatherHistoryDailyAndHourly + category: data + - message: Series ('06e267b9-8714-4c58-ac53-df6a291b59dc', 'humidity', + 'mean'), aggregated on freq PT8H contains 26 null values. + These will NOT be interpolated + level: warning + timestamp: '2024-07-01T12:59:32.691573+00:00' + action: GET /queries/v1/data/weatherHistoryDailyAndHourly + category: data + query: + freq: PT8H + from_: 2024-06-16 12:00 AM + until: 2024-06-17 12:00 AM + data: + - metric: temperature + resource: 06e267b9-8714-4c58-ac53-df6a291b59dc + seriesId: 97de31f5-7b69-4a56-87e0-6b5c8a6b1872 + aggregation: max + - metric: humidity + resource: 06e267b9-8714-4c58-ac53-df6a291b59dc + seriesId: 8eb0799f-1af7-4af2-8233-517cb4bdc3c6 + aggregation: mean + - metric: temperature + resource: 7f33317b-a45e-4b0a-94a2-9bbbdc746cc1 + seriesId: 5055a943-e1c0-41d6-a6c9-7b20427a742d + aggregation: max + - metric: humidity + resource: 7f33317b-a45e-4b0a-94a2-9bbbdc746cc1 + seriesId: 16ac581f-f5ce-4845-9b6a-1b16249af051 + aggregation: mean + render: + mode: FLAT_DICT + metric_flat_dict: + summary: Query response example for `?render=METRIC_FLAT_DICT` + value: + data: + - - role: input + timestamp: 1717977600000 + timestamp_iso: '2024-06-10T00:00:00+00:00' + humidity: + 06e267b9-8714-4c58-ac53-df6a291b59dc.mean: 80.0 + 7f33317b-a45e-4b0a-94a2-9bbbdc746cc1.mean: 83.125 + temperature: + 06e267b9-8714-4c58-ac53-df6a291b59dc.max: 12.67 + 7f33317b-a45e-4b0a-94a2-9bbbdc746cc1.max: 12.78 + - role: input + timestamp: 1718006400000 + timestamp_iso: '2024-06-10T08:00:00+00:00' + humidity: + 06e267b9-8714-4c58-ac53-df6a291b59dc.mean: 88.0 + 7f33317b-a45e-4b0a-94a2-9bbbdc746cc1.mean: 80.875 + temperature: + 06e267b9-8714-4c58-ac53-df6a291b59dc.max: 13.74 + 7f33317b-a45e-4b0a-94a2-9bbbdc746cc1.max: 13.06 + - role: input + timestamp: 1718035200000 + timestamp_iso: '2024-06-10T16:00:00+00:00' + humidity: + 7f33317b-a45e-4b0a-94a2-9bbbdc746cc1.mean: 78.5 + temperature: + 7f33317b-a45e-4b0a-94a2-9bbbdc746cc1.max: 13.35 + - role: input + timestamp: 1718064000000 + timestamp_iso: '2024-06-11T00:00:00+00:00' + humidity: + 06e267b9-8714-4c58-ac53-df6a291b59dc.mean: 88.0 + 7f33317b-a45e-4b0a-94a2-9bbbdc746cc1.mean: 81.875 + temperature: + 06e267b9-8714-4c58-ac53-df6a291b59dc.max: 7.49 + 7f33317b-a45e-4b0a-94a2-9bbbdc746cc1.max: 13.0 + - role: input + timestamp: 1718092800000 + timestamp_iso: '2024-06-11T08:00:00+00:00' + humidity: + 7f33317b-a45e-4b0a-94a2-9bbbdc746cc1.mean: 62.375 + temperature: + 7f33317b-a45e-4b0a-94a2-9bbbdc746cc1.max: 14.84 + - role: input + timestamp: 1718121600000 + timestamp_iso: '2024-06-11T16:00:00+00:00' + humidity: + 7f33317b-a45e-4b0a-94a2-9bbbdc746cc1.mean: 76.5 + temperature: + 7f33317b-a45e-4b0a-94a2-9bbbdc746cc1.max: 14.59 + - role: input + timestamp: 1718150400000 + timestamp_iso: '2024-06-12T00:00:00+00:00' + humidity: + 06e267b9-8714-4c58-ac53-df6a291b59dc.mean: 90.0 + 7f33317b-a45e-4b0a-94a2-9bbbdc746cc1.mean: 85.375 + temperature: + 06e267b9-8714-4c58-ac53-df6a291b59dc.max: 9.34 + 7f33317b-a45e-4b0a-94a2-9bbbdc746cc1.max: 13.08 + - role: input + timestamp: 1718179200000 + timestamp_iso: '2024-06-12T08:00:00+00:00' + humidity: + 7f33317b-a45e-4b0a-94a2-9bbbdc746cc1.mean: 61.75 + temperature: + 7f33317b-a45e-4b0a-94a2-9bbbdc746cc1.max: 15.41 + - role: input + timestamp: 1718208000000 + timestamp_iso: '2024-06-12T16:00:00+00:00' + humidity: + 7f33317b-a45e-4b0a-94a2-9bbbdc746cc1.mean: 74.0 + temperature: + 7f33317b-a45e-4b0a-94a2-9bbbdc746cc1.max: 15.1 + - role: input + timestamp: 1718236800000 + timestamp_iso: '2024-06-13T00:00:00+00:00' + humidity: + 06e267b9-8714-4c58-ac53-df6a291b59dc.mean: 90.0 + 7f33317b-a45e-4b0a-94a2-9bbbdc746cc1.mean: 82.875 + temperature: + 06e267b9-8714-4c58-ac53-df6a291b59dc.max: 9.03 + 7f33317b-a45e-4b0a-94a2-9bbbdc746cc1.max: 14.99 + - role: input + timestamp: 1718265600000 + timestamp_iso: '2024-06-13T08:00:00+00:00' + humidity: + 7f33317b-a45e-4b0a-94a2-9bbbdc746cc1.mean: 57.5 + temperature: + 7f33317b-a45e-4b0a-94a2-9bbbdc746cc1.max: 18.64 + - role: input + timestamp: 1718294400000 + timestamp_iso: '2024-06-13T16:00:00+00:00' + humidity: + 7f33317b-a45e-4b0a-94a2-9bbbdc746cc1.mean: 62.5 + temperature: + 7f33317b-a45e-4b0a-94a2-9bbbdc746cc1.max: 18.35 + - role: input + timestamp: 1718323200000 + timestamp_iso: '2024-06-14T00:00:00+00:00' + humidity: + 06e267b9-8714-4c58-ac53-df6a291b59dc.mean: 80.0 + 7f33317b-a45e-4b0a-94a2-9bbbdc746cc1.mean: 81.625 + temperature: + 06e267b9-8714-4c58-ac53-df6a291b59dc.max: 12.98 + 7f33317b-a45e-4b0a-94a2-9bbbdc746cc1.max: 13.02 + - role: input + timestamp: 1718352000000 + timestamp_iso: '2024-06-14T08:00:00+00:00' + humidity: + 7f33317b-a45e-4b0a-94a2-9bbbdc746cc1.mean: 81.5 + temperature: + 7f33317b-a45e-4b0a-94a2-9bbbdc746cc1.max: 18.19 + - role: input + timestamp: 1718380800000 + timestamp_iso: '2024-06-14T16:00:00+00:00' + humidity: + 7f33317b-a45e-4b0a-94a2-9bbbdc746cc1.mean: 88.875 + temperature: + 7f33317b-a45e-4b0a-94a2-9bbbdc746cc1.max: 17.75 + - role: input + timestamp: 1718409600000 + timestamp_iso: '2024-06-15T00:00:00+00:00' + humidity: + 06e267b9-8714-4c58-ac53-df6a291b59dc.mean: 88.0 + 7f33317b-a45e-4b0a-94a2-9bbbdc746cc1.mean: 87.25 + temperature: + 06e267b9-8714-4c58-ac53-df6a291b59dc.max: 11.8 + 7f33317b-a45e-4b0a-94a2-9bbbdc746cc1.max: 13.4 + - role: input + timestamp: 1718438400000 + timestamp_iso: '2024-06-15T08:00:00+00:00' + humidity: + 7f33317b-a45e-4b0a-94a2-9bbbdc746cc1.mean: 64.5 + temperature: + 7f33317b-a45e-4b0a-94a2-9bbbdc746cc1.max: 16.53 + - role: input + timestamp: 1718467200000 + timestamp_iso: '2024-06-15T16:00:00+00:00' + humidity: + 7f33317b-a45e-4b0a-94a2-9bbbdc746cc1.mean: 84.875 + temperature: + 7f33317b-a45e-4b0a-94a2-9bbbdc746cc1.max: 14.69 + - role: input + timestamp: 1718496000000 + timestamp_iso: '2024-06-16T00:00:00+00:00' + humidity: + 06e267b9-8714-4c58-ac53-df6a291b59dc.mean: 89.0 + 7f33317b-a45e-4b0a-94a2-9bbbdc746cc1.mean: 87.875 + temperature: + 06e267b9-8714-4c58-ac53-df6a291b59dc.max: 12.12 + 7f33317b-a45e-4b0a-94a2-9bbbdc746cc1.max: 13.77 + - role: input + timestamp: 1718524800000 + timestamp_iso: '2024-06-16T08:00:00+00:00' + humidity: + 7f33317b-a45e-4b0a-94a2-9bbbdc746cc1.mean: 73.125 + temperature: + 7f33317b-a45e-4b0a-94a2-9bbbdc746cc1.max: 19.27 + - role: input + timestamp: 1718553600000 + timestamp_iso: '2024-06-16T16:00:00+00:00' + humidity: + 7f33317b-a45e-4b0a-94a2-9bbbdc746cc1.mean: 69.75 + temperature: + 7f33317b-a45e-4b0a-94a2-9bbbdc746cc1.max: 19.12 + messages: + - message: Series ('06e267b9-8714-4c58-ac53-df6a291b59dc', 'temperature', + 'max'), aggregated on freq PT8H contains 26 null values. These + will NOT be interpolated + level: warning + timestamp: '2024-07-01T15:37:41.460083+00:00' + action: GET /queries/v1/data/weatherHistoryDailyAndHourly + category: data + - message: Series ('06e267b9-8714-4c58-ac53-df6a291b59dc', 'humidity', + 'mean'), aggregated on freq PT8H contains 26 null values. + These will NOT be interpolated + level: warning + timestamp: '2024-07-01T15:37:41.461241+00:00' + action: GET /queries/v1/data/weatherHistoryDailyAndHourly + category: data + query: + freq: PT8H + from_: 2024-06-16 12:00 AM + until: 2024-06-17 12:00 AM + data: + - metric: temperature + resource: 06e267b9-8714-4c58-ac53-df6a291b59dc + seriesId: 97de31f5-7b69-4a56-87e0-6b5c8a6b1872 + aggregation: max + - metric: humidity + resource: 06e267b9-8714-4c58-ac53-df6a291b59dc + seriesId: 8eb0799f-1af7-4af2-8233-517cb4bdc3c6 + aggregation: mean + - metric: temperature + resource: 7f33317b-a45e-4b0a-94a2-9bbbdc746cc1 + seriesId: 5055a943-e1c0-41d6-a6c9-7b20427a742d + aggregation: max + - metric: humidity + resource: 7f33317b-a45e-4b0a-94a2-9bbbdc746cc1 + seriesId: 16ac581f-f5ce-4845-9b6a-1b16249af051 + aggregation: mean + render: + mode: METRIC_FLAT_DICT + header_column: + summary: Query response example for `?render=HEADER_COLUMN` + value: + data: + - rows: + - resource + - metric + - aggregation + - timestamp: 1717977600000 + timestamp_iso: '2024-06-10T00:00:00+00:00' + - timestamp: 1718006400000 + timestamp_iso: '2024-06-10T08:00:00+00:00' + - timestamp: 1718035200000 + timestamp_iso: '2024-06-10T16:00:00+00:00' + - timestamp: 1718064000000 + timestamp_iso: '2024-06-11T00:00:00+00:00' + - timestamp: 1718092800000 + timestamp_iso: '2024-06-11T08:00:00+00:00' + - timestamp: 1718121600000 + timestamp_iso: '2024-06-11T16:00:00+00:00' + - timestamp: 1718150400000 + timestamp_iso: '2024-06-12T00:00:00+00:00' + - timestamp: 1718179200000 + timestamp_iso: '2024-06-12T08:00:00+00:00' + - timestamp: 1718208000000 + timestamp_iso: '2024-06-12T16:00:00+00:00' + - timestamp: 1718236800000 + timestamp_iso: '2024-06-13T00:00:00+00:00' + - timestamp: 1718265600000 + timestamp_iso: '2024-06-13T08:00:00+00:00' + - timestamp: 1718294400000 + timestamp_iso: '2024-06-13T16:00:00+00:00' + - timestamp: 1718323200000 + timestamp_iso: '2024-06-14T00:00:00+00:00' + - timestamp: 1718352000000 + timestamp_iso: '2024-06-14T08:00:00+00:00' + - timestamp: 1718380800000 + timestamp_iso: '2024-06-14T16:00:00+00:00' + - timestamp: 1718409600000 + timestamp_iso: '2024-06-15T00:00:00+00:00' + - timestamp: 1718438400000 + timestamp_iso: '2024-06-15T08:00:00+00:00' + - timestamp: 1718467200000 + timestamp_iso: '2024-06-15T16:00:00+00:00' + - timestamp: 1718496000000 + timestamp_iso: '2024-06-16T00:00:00+00:00' + - timestamp: 1718524800000 + timestamp_iso: '2024-06-16T08:00:00+00:00' + - timestamp: 1718553600000 + timestamp_iso: '2024-06-16T16:00:00+00:00' + data: + - - 06e267b9-8714-4c58-ac53-df6a291b59dc + - temperature + - max + - 12.67 + - 13.74 + - null + - 7.49 + - null + - null + - 9.34 + - null + - null + - 9.03 + - null + - null + - 12.98 + - null + - null + - 11.8 + - null + - null + - 12.12 + - null + - null + - - 06e267b9-8714-4c58-ac53-df6a291b59dc + - humidity + - mean + - 80.0 + - 88.0 + - null + - 88.0 + - null + - null + - 90.0 + - null + - null + - 90.0 + - null + - null + - 80.0 + - null + - null + - 88.0 + - null + - null + - 89.0 + - null + - null + - - 7f33317b-a45e-4b0a-94a2-9bbbdc746cc1 + - temperature + - max + - 12.78 + - 13.06 + - 13.35 + - 13.0 + - 14.84 + - 14.59 + - 13.08 + - 15.41 + - 15.1 + - 14.99 + - 18.64 + - 18.35 + - 13.02 + - 18.19 + - 17.75 + - 13.4 + - 16.53 + - 14.69 + - 13.77 + - 19.27 + - 19.12 + - - 7f33317b-a45e-4b0a-94a2-9bbbdc746cc1 + - humidity + - mean + - 83.125 + - 80.875 + - 78.5 + - 81.875 + - 62.375 + - 76.5 + - 85.375 + - 61.75 + - 74.0 + - 82.875 + - 57.5 + - 62.5 + - 81.625 + - 81.5 + - 88.875 + - 87.25 + - 64.5 + - 84.875 + - 87.875 + - 73.125 + - 69.75 + data_axis: row + attributes: + role: input + messages: + - message: Series ('06e267b9-8714-4c58-ac53-df6a291b59dc', 'temperature', + 'max'), aggregated on freq PT8H contains 26 null values. These + will NOT be interpolated + level: warning + timestamp: '2024-07-01T13:02:54.733676+00:00' + action: GET /queries/v1/data/weatherHistoryDailyAndHourly + category: data + - message: Series ('06e267b9-8714-4c58-ac53-df6a291b59dc', 'humidity', + 'mean'), aggregated on freq PT8H contains 26 null values. + These will NOT be interpolated + level: warning + timestamp: '2024-07-01T13:02:54.734610+00:00' + action: GET /queries/v1/data/weatherHistoryDailyAndHourly + category: data + query: + freq: PT8H + from_: 2024-06-16 12:00 AM + until: 2024-06-17 12:00 AM + data: + - metric: temperature + resource: 06e267b9-8714-4c58-ac53-df6a291b59dc + seriesId: 97de31f5-7b69-4a56-87e0-6b5c8a6b1872 + aggregation: max + - metric: humidity + resource: 06e267b9-8714-4c58-ac53-df6a291b59dc + seriesId: 8eb0799f-1af7-4af2-8233-517cb4bdc3c6 + aggregation: mean + - metric: temperature + resource: 7f33317b-a45e-4b0a-94a2-9bbbdc746cc1 + seriesId: 5055a943-e1c0-41d6-a6c9-7b20427a742d + aggregation: max + - metric: humidity + resource: 7f33317b-a45e-4b0a-94a2-9bbbdc746cc1 + seriesId: 16ac581f-f5ce-4845-9b6a-1b16249af051 + aggregation: mean + render: + mode: HEADER_COLUMN + series: + summary: Query response example for `?render=SERIES` + value: + data: + - columns: + - timestamp + - resource: 06e267b9-8714-4c58-ac53-df6a291b59dc + metric: temperature + aggregation: max + - resource: 06e267b9-8714-4c58-ac53-df6a291b59dc + metric: humidity + aggregation: mean + - resource: 7f33317b-a45e-4b0a-94a2-9bbbdc746cc1 + metric: temperature + aggregation: max + - resource: 7f33317b-a45e-4b0a-94a2-9bbbdc746cc1 + metric: humidity + aggregation: mean + data: + - - 1717977600000 + - 1718006400000 + - 1718035200000 + - 1718064000000 + - 1718092800000 + - 1718121600000 + - 1718150400000 + - 1718179200000 + - 1718208000000 + - 1718236800000 + - 1718265600000 + - 1718294400000 + - 1718323200000 + - 1718352000000 + - 1718380800000 + - 1718409600000 + - 1718438400000 + - 1718467200000 + - 1718496000000 + - 1718524800000 + - 1718553600000 + - - 12.67 + - 13.74 + - null + - 7.49 + - null + - null + - 9.34 + - null + - null + - 9.03 + - null + - null + - 12.98 + - null + - null + - 11.8 + - null + - null + - 12.12 + - null + - null + - - 80.0 + - 88.0 + - null + - 88.0 + - null + - null + - 90.0 + - null + - null + - 90.0 + - null + - null + - 80.0 + - null + - null + - 88.0 + - null + - null + - 89.0 + - null + - null + - - 12.78 + - 13.06 + - 13.35 + - 13.0 + - 14.84 + - 14.59 + - 13.08 + - 15.41 + - 15.1 + - 14.99 + - 18.64 + - 18.35 + - 13.02 + - 18.19 + - 17.75 + - 13.4 + - 16.53 + - 14.69 + - 13.77 + - 19.27 + - 19.12 + - - 83.125 + - 80.875 + - 78.5 + - 81.875 + - 62.375 + - 76.5 + - 85.375 + - 61.75 + - 74.0 + - 82.875 + - 57.5 + - 62.5 + - 81.625 + - 81.5 + - 88.875 + - 87.25 + - 64.5 + - 84.875 + - 87.875 + - 73.125 + - 69.75 + data_axis: row + attributes: + role: input + window_spec: + from: 1717977600000 + until: 1718582400000 + window: P7D + freq: PT8H + messages: + - message: Series ('06e267b9-8714-4c58-ac53-df6a291b59dc', 'temperature', + 'max'), aggregated on freq PT8H contains 26 null values. These + will NOT be interpolated + level: warning + timestamp: '2024-07-01T13:01:39.240450+00:00' + action: GET /queries/v1/data/weatherHistoryDailyAndHourly + category: data + - message: Series ('06e267b9-8714-4c58-ac53-df6a291b59dc', 'humidity', + 'mean'), aggregated on freq PT8H contains 26 null values. + These will NOT be interpolated + level: warning + timestamp: '2024-07-01T13:01:39.241481+00:00' + action: GET /queries/v1/data/weatherHistoryDailyAndHourly + category: data + query: + freq: PT8H + from_: 2024-06-16 12:00 AM + until: 2024-06-17 12:00 AM + data: + - metric: temperature + resource: 06e267b9-8714-4c58-ac53-df6a291b59dc + seriesId: 97de31f5-7b69-4a56-87e0-6b5c8a6b1872 + aggregation: max + - metric: humidity + resource: 06e267b9-8714-4c58-ac53-df6a291b59dc + seriesId: 8eb0799f-1af7-4af2-8233-517cb4bdc3c6 + aggregation: mean + - metric: temperature + resource: 7f33317b-a45e-4b0a-94a2-9bbbdc746cc1 + seriesId: 5055a943-e1c0-41d6-a6c9-7b20427a742d + aggregation: max + - metric: humidity + resource: 7f33317b-a45e-4b0a-94a2-9bbbdc746cc1 + seriesId: 16ac581f-f5ce-4845-9b6a-1b16249af051 + aggregation: mean + render: + mode: SERIES + text/csv: + schema: + title: CSV timeseries data response. + description: 'A CSV representation of the query result, + + - the first `timestamp` column contains event timestamp in iso + format + + - remaining columns contain the (aggregated or non-aggregated) series + values, using a `{resource_id}/{metric}` or `{resource_id}/{metric}/{aggregation}` header.' + '422': + description: Validation Error + content: + application/json: + schema: + $ref: '#/components/schemas/HTTPValidationError' + security: *id001 + /queries/v1/queries/v1/query: + get: + tags: + - Manage + summary: List Queries + description: List named queries. + operationId: list_queries_queries_v1_query_get + parameters: + - name: q + in: query + required: false + schema: + type: string + title: Filter condition + description: The QDSL filter condition for the stored queries. Note that + this value needs to be escaped when passed as an url paramater. + default: '' + description: The QDSL filter condition for the stored queries. Note that this + value needs to be escaped when passed as an url paramater. + examples: + resource: + summary: resource + description: Filter queries that reference a given resource id. + value: resource:APL4995 + user: + summary: current user + description: Filter queries on the user that created or updated the item. + value: user:@me + created: + summary: created after + description: Filter on a creation timestamp interval. + value: created:2020-02-20/ + modified: + summary: last modified more than 2 days ago + description: Filter on a modification timestamp interval. + value: modified:/now-P2D + meta_contains: + summary: metadata contains + description: Filter on a string contained in a metadata property. + value: 'meta.comments:contains(''{ "topic" : "general" }''' + meta_like: + summary: metadata matches + description: Filter on a pattern in a metadata property. + value: meta.description:like(*http*waylay.io*) + tag: + summary: tag combination + description: Filter queries on tag combinations. + value: tag:stable,demo,release_15 tag:demo,release_16 -tag:dummy + - name: limit + in: query + required: false + schema: + type: integer + maximum: 100 + title: Page size + description: Maximal number of items return in one response. + default: 10 + description: Maximal number of items return in one response. + - name: offset + in: query + required: false + schema: + type: integer + title: Page offset + description: Numbers of items to skip before listing results in the response + page. + default: 0 + description: Numbers of items to skip before listing results in the response + page. + responses: + '200': + description: Successful Response + content: + application/json: + schema: + $ref: '#/components/schemas/QueriesListResponse' + '422': + description: Validation Error + content: + application/json: + schema: + $ref: '#/components/schemas/HTTPValidationError' + security: *id001 + post: + tags: + - Manage + summary: Post Query + description: Create a new named query. + operationId: create_query_queries_v1_query_post + requestBody: + required: true + content: + application/json: + schema: + $ref: '#/components/schemas/QueryEntityInput' + responses: + '200': + description: Successful Response + content: + application/json: + schema: + $ref: '#/components/schemas/QueryResponse' + '422': + description: Validation Error + content: + application/json: + schema: + $ref: '#/components/schemas/HTTPValidationError' + security: *id001 + /queries/v1/queries/v1/query/{query_name}: + get: + tags: + - Manage + summary: Get Query + description: Get the definition of a named query. + operationId: get_query_queries_v1_query__query_name__get + parameters: + - name: query_name + in: path + required: true + schema: + type: string + title: Query Name + description: Name of the stored query. + description: Name of the stored query. + responses: + '200': + description: Successful Response + content: + application/json: + schema: + $ref: '#/components/schemas/QueryResponse' + '422': + description: Validation Error + content: + application/json: + schema: + $ref: '#/components/schemas/HTTPValidationError' + security: *id001 + put: + tags: + - Manage + summary: Update Query + description: Create or update a named query definition. + operationId: update_query_queries_v1_query__query_name__put + parameters: + - name: query_name + in: path + required: true + schema: + type: string + title: Query Name + description: Name of the stored query. + description: Name of the stored query. + requestBody: + required: true + content: + application/json: + schema: + anyOf: + - $ref: '#/components/schemas/QueryUpdateInput' + - $ref: '#/components/schemas/Query-Input' + title: Query Definition + responses: + '200': + description: Successful Response + content: + application/json: + schema: + $ref: '#/components/schemas/QueryResponse' + '422': + description: Validation Error + content: + application/json: + schema: + $ref: '#/components/schemas/HTTPValidationError' + security: *id001 + delete: + tags: + - Manage + summary: Remove Query + description: Remove definition of a named query. + operationId: remove_query_queries_v1_query__query_name__delete + parameters: + - name: query_name + in: path + required: true + schema: + type: string + title: Query Name + description: Name of the stored query. + description: Name of the stored query. + responses: + '200': + description: Successful Response + content: + application/json: + schema: + $ref: '#/components/schemas/DeleteResponse' + '422': + description: Validation Error + content: + application/json: + schema: + $ref: '#/components/schemas/HTTPValidationError' + security: *id001 +components: + schemas: + AggregationMethod: + type: string + title: Aggregation Method. + oneOf: + - const: first + title: First + description: Use the first value (in time) to represent all data for the sample + interval. + - const: last + title: Last + description: Use the last value (in time) to represent all data for the sample + interval. + - const: mean + title: Mean + description: 'Aggregate data by the mean value: The sum of values divided + by number of observations.' + - const: median + title: Median + description: 'Aggregate data by the median value: The n/2-th value when ordered, + the average of the (n-1)/2-th and (n+1)/2-th value when n is uneven.' + - const: sum + title: Sum + description: The sum of all values summarizes the data for the sample interval. + - const: count + title: Count + description: Use the count of observations in the sample interval. + - const: std + title: Standard Deviation + description: Use the standard deviation of all observations in the sample + interval. + - const: max + title: Maximum + description: Use the maximum of all values in the sample interval. + - const: min + title: Minimum + description: Use the minimum of all values in the sample interval. + - title: Precentile + description: Aggregate data by the p-th percentile, where p is a number between + 0 and 1. + pattern: ^percentile\((1(\.0*)?)|(0\.[0-9]*)\)$ + example: percentile(0.02) + AlignAt: + type: string + enum: + - grid + - boundary + - from + - until + title: AlignAt + description: "Possible values for `align.at`.\n\n* 'grid' Align to a fixed grid\ + \ (possibly using timezone information)\n* 'from' Align a the `from` boundary\n\ + * 'until' Align a the `until` boundary\n* 'boundary' Align a the `from` boundary\ + \ if specified,\n otherwise the `until` boundary.\n\nWhen not specified,\ + \ 'grid' is used." + AlignShift: + type: string + enum: + - backward + - forward + - wrap + title: AlignShift + description: "Possible values for `align.shift`.\n\n* 'backward': keep the window\ + \ size of the original interval specification,\n shifting back.\n* 'forward':\ + \ keep the window size of the original interval specification,\n shifting\ + \ forward.\n* 'wrap': enlarge the window size to include all of the original\ + \ interval.\n\nWhen not specified, 'backward' is used." + Alignment: + properties: + at: + $ref: '#/components/schemas/AlignAt' + title: Align At + description: Method used to align the aggregation grid. The default value + is system-dependent (normally `grid`) + shift: + $ref: '#/components/schemas/AlignShift' + title: Align Shift + description: ' + + Specifies in what direction the query window is shifted + + to match the alignment specification. + + When not specified, defaults are: + + - `backward` when only the `from` boundary is specified. + + - `forward` when only the `until` boundary is specified. + + - `wrap` otherwise (_none_ or _both_ boundaries specified). + + ' + freq: + oneOf: + - type: string + pattern: ^P([0-9]+Y)?([0-9]+M)?([0-9]+W)?([0-9]+D)?(T([0-9]+H)?([0-9]+M)?([0-9]+(\.[0-9]*)?S)?)?$ + format: period + title: 'ISO8601 period ' + description: A period in [ISO8601 duration](https://en.wikipedia.org/wiki/ISO_8601#Durations) + format. + example: PT3H15M + - type: string + const: inferred + title: Inferred Frequency + description: When `inferred` is specified, the frequency of aggregation + will be inferred from the main/first time series. This can be used to + regularize the time series + type: string + title: Alignment Grid interval. + description: "\nDefines the grid used to align the aggregation window.\n\ + The window will align at whole-unit multiples of this interval.\n\nFor\ + \ intervals like `PT1D`, that are timezone-dependent, use the \n`align.timezone`\ + \ to fix the absolute timestamp of the grid boundaries.\n\nIf not specified,\ + \ defaults to the `freq` aggregation interval.\n" + timezone: + oneOf: + - type: string + title: Timezone Identifier + description: '[ICANN timezone identifier](https://en.wikipedia.org/wiki/List_of_tz_database_time_zones)' + - type: string + pattern: (+|-)\d\d:\d\d + title: UTC Offset + description: '[UTC offset](https://en.wikipedia.org/wiki/UTC_offset)' + type: string + title: Alignment Timezone. + description: ' + + The timezone to use when shifting boundaries, especially + + at day granularity. + + Also affects the rendering of timestamps when + + `render.iso_timestamp` is enabled. + + + When not specified, the `UTC` timezone is used. + + ' + additionalProperties: true + type: object + title: Alignment + description: 'Aggregation Alignment Options. + + + Specifies how the aggregation grid is aligned.' + CauseException: + properties: + type: + type: string + title: Exception Type + message: + type: string + title: Exception Message + stacktrace: + items: + type: string + type: array + title: Stack Trace + additionalProperties: true + type: object + required: + - type + - message + - stacktrace + title: CauseException + description: Describes the exception that caused a message. + ColumnDataSet: + properties: + attributes: + $ref: '#/components/schemas/DataSetAttributes' + window_spec: + $ref: '#/components/schemas/DataSetWindow' + data_axis: + type: string + enum: + - row + const: row + title: Data Axis + default: row + rows: + oneOf: + - prefixItems: + - const: resource + title: Index label for the resource attribute. + - const: metric + title: Index label for the metric attribute. + - prefixItems: + - const: resource + title: Index label for the resource attribute. + - const: metric + title: Index label for the metric attribute. + - const: aggregation + title: Index label for the aggregation attribute. + items: + anyOf: + - $ref: '#/components/schemas/ColumnIndexRowHeader' + - $ref: '#/components/schemas/RowHeader' + type: array + title: Row Headers + description: 'Header Attributes for the index data. + + + The initial string-valued headers (normally `resource`, `metric`,`aggregation`) + indicate that row to contain series attributes. + + + The remaining object-valued row headers contain the index data.' + data: + items: + items: + $ref: '#/components/schemas/Datum' + type: array + type: array + title: Series + description: All metric observation values for a single series. Prefixed + by the series attributes. + additionalProperties: true + type: object + required: + - rows + - data + title: ColumnDataSet + description: 'Column-oriented dataset with rows header. + + + Timeseries data layout with a rows header containing + + the index data. + + The data array contains series data prefixed by series attributes. + + The `rows` index is prefix by the names of these series attributes. + + Result for render options `data_axis=row` and `header_array=column`.' + ColumnHeader: + properties: + resource: + type: string + title: Series resource id + metric: + type: string + title: Series metric + aggregation: + type: string + title: Aggregation applied to the series. + additionalProperties: true + type: object + required: + - resource + - metric + title: ColumnHeader + description: 'Column attributes. + + + Attributes that identify and describe the data in this column.' + ColumnIndexRowHeader: + type: string + title: Series Attribute Label + description: Label for a series attribute + examples: + - resource + - metric + - aggregation + DataAxisOption: + type: string + enum: + - row + - column + title: DataAxisOption + description: Allowed values for the render.data_axis option. + DataSetAttributes: + properties: + role: + $ref: '#/components/schemas/Role' + additionalProperties: true + type: object + title: DataSetAttributes + description: 'Data Set Attributes. + + + Data attributes that apply to all data in this set.' + DataSetWindow: + properties: + until: + type: integer + title: Time Axis End + description: Exclusive higher bound of the time axis in unix epoch milliseconds. + window: + type: string + format: period + title: Time Axis Length + description: Time axis length as ISO8601 period. + freq: + type: string + format: period + title: Frequency + description: Time axis aggregation interval as an ISO8601 period . + additionalProperties: true + type: object + required: + - until + - window + - freq + title: DataSetWindow + description: 'Data Window. + + + Statistics of the time axis of a data set. + + Present with render option `include_window_spec=true`.",' + Datum: + oneOf: + - type: number + - type: string + - type: boolean + - type: 'null' + title: Value + description: 'A single metric value for a timeseries. + + + A null value indicates that no (aggregated/interpolated) value exists for + the corresponding timestamp.' + DeleteResponse: + properties: + messages: + items: + $ref: '#/components/schemas/Message' + type: array + title: Messages + _links: + additionalProperties: + anyOf: + - $ref: '#/components/schemas/HALLink' + - items: + $ref: '#/components/schemas/HALLink' + type: array + type: object + title: ' Links' + description: HAL links, indexed by link relation. + _embeddings: + additionalProperties: + anyOf: + - $ref: '#/components/schemas/HALEmbedding' + - items: + $ref: '#/components/schemas/HALEmbedding' + type: array + type: object + title: ' Embeddings' + description: Hal embeddings, indexed by relation. + additionalProperties: true + type: object + title: DeleteResponse + description: Confirmation of a delete request. + HALEmbedding: + properties: {} + additionalProperties: true + type: object + title: HALEmbedding + description: Any embedded representation in a HAL response. + HALLink: + properties: + href: + type: string + title: Link URL + description: Target url for this link. + type: + type: string + title: Link type + description: Type of the resource referenced by this link. + method: + $ref: '#/components/schemas/HALLinkMethod' + title: Link method + description: Http method required to resolve the link. + additionalProperties: true + type: object + required: + - href + title: HALLink + description: A link target in a HAL response. + HALLinkMethod: + type: string + enum: + - GET + - POST + - PUT + - DELETE + - PATCH + title: HALLinkMethod + description: An http method that can be specified in a HAL link. + HALLinkRole: + type: string + enum: + - self + - first + - prev + - next + - last + - execute + title: HALLinkRole + description: Supported link and embedding roles in HAL representations. + HTTPValidationError: + properties: + detail: + items: + $ref: '#/components/schemas/ValidationError' + type: array + title: Detail + type: object + title: HTTPValidationError + HeaderArrayOption: + type: string + enum: + - row + - column + title: HeaderArrayOption + description: Allowed values for the render.header_array option. + InterpolationMethod: + type: string + enum: + - pad + - fixed + - backfill + - linear + - zero + - slinear + - quadratic + - cubic + - polynomial + - spline + - from_derivatives + - pchip + - akima + title: InterpolationMethod + description: Interpolation algorithm specifier. + InterpolationSpec: + properties: + method: + oneOf: + - const: pad + title: pad + description: Interpolate with the value of the first observed point. This + method also extrapolates. + - const: fixed + title: fixed + description: Interpolate with a fixed, user-specified value. This method + also extrapolates. + - const: backfill + title: backfill + description: Same as pad, but using the last observed value. This method + also extrapolates + - const: linear + title: linear + description: Linearly go from the first observed value of the gap to the + last observed oneThis method also extrapolates + - const: nearest + title: nearest + description: Use the value that is closest in time. + - const: zero + title: zero + description: Interpolate with a spline function of order 0, which is a + piecewise polynomial. + - const: slinear + title: slinear + description: Interpolate with a spline function of order 1, which is a + piecewise polynomial. + - const: quadratic + title: quadratic + description: Interpolate with a spline function of order 2, which is a + piecewise polynomial. + - const: cubic + title: cubic + description: Interpolate with a spline function of order 3, which is a + piecewise polynomial. + - const: polynomial + title: polynomial + description: Interpolate with a polynomial of the lowest possible degree + passing trough the data points. + - const: spline + title: spline + description: Interpolate with a spline function of a user-specified order. + - const: from_derivatives + title: from_derivatives + description: Interpolate with the derivative of order 1. + - const: pchip + title: pchip + description: Interpolate with a piecewise cubic spline function. + - const: akima + title: akima + description: Interpolate with a non-smoothing spline of order 2, called + Akima interpolation. + type: string + title: Interpolation method + value: + type: integer + title: Interpolation parameter + description: Optional parameter value for the interpolation method (see + method description). + order: + type: integer + title: Interpolation order + description: Optional order parameter for the interpolation method (see + method description). + additionalProperties: true + type: object + required: + - method + title: InterpolationSpec + description: "Defines whether, and how to treat missing values.\n\nThis can\ + \ occur in two circumstances when aggregating (setting a sample frequency):\n\ + * missing values: if there are missing (or invalid) values stored for\na given\ + \ freq-interval,\n\"interpolation\" specifies how to compute these.\n* down-sampling:\ + \ when the specified freq is smaller than the series\u2019\nactual frequency.\n\ + \"interpolation\" specifies how to compute intermediate values." + Message: + properties: + code: + anyOf: + - type: string + - type: 'null' + title: Code + message: + type: string + title: Message + level: + type: string + enum: + - debug + - info + - warning + - error + - fatal + title: Level + default: info + args: + anyOf: + - type: object + - type: 'null' + title: Args + type: object + required: + - message + title: Message + description: Individual (info/warning/error) message in a response. + MessageProperties: + properties: + resource: + type: string + title: Series resource id + metric: + type: string + title: Series metric + additionalProperties: true + type: object + title: MessageProperties + description: Additional message arguments. + ObjectData: + properties: + timestamp: + $ref: '#/components/schemas/Timestamp' + timestamp_iso: + $ref: '#/components/schemas/TimestampIso' + role: + $ref: '#/components/schemas/Role' + resource: + type: string + title: Resource + description: Series resource id, if applicable for all values. + metric: + type: string + title: Metric + description: Series metric, if applicable for all values. + aggregation: + type: string + title: Aggregation + description: Series aggregation, if applicable for all values. + levels: + items: + type: string + type: array + title: Hierarchical Levels + description: 'Attribute level names used to key the values for this observation. + + + Levels that are flattened have a dot-separated key. + + + If all observations have the same attribute for a level, that level might + be omitted.' + examples: + - - resource + - metric + - aggregation + - - resource.metric + additionalProperties: + oneOf: + - type: object + title: Hierarchical Data + description: Values for the series whose attributes corresponds with the + key. Keyed by sub-levels. + - $ref: '#/components/schemas/Datum' + description: Series value that corresponds with a (flattened) attribute + key. + title: 'Data ' + type: object + required: + - timestamp + title: ObjectData + description: Result data for a timestamp in object format. + ObjectDataSet: + properties: + attributes: + $ref: '#/components/schemas/DataSetAttributes' + window_spec: + $ref: '#/components/schemas/DataSetWindow' + data: + items: + $ref: '#/components/schemas/ObjectData' + type: array + title: Data + additionalProperties: true + type: object + required: + - data + title: ObjectDataSet + description: "Data result in object format.\n\nResult item when render option\ + \ `render.header_array` is not set.\n\nThe data values are keyed by their\ + \ attributes (`resource`, `metric`, `aggregation`),\naccording to the render\ + \ options:\n* _hierachical_: for each level, a sub-object is created\n (e.g.\ + \ `render.mode=hier_dict`)\n* _flattened_: the attributes are '.'-separated\ + \ concatenation\n of the attributes (e.g `render.mode=flat_dict`)\n* _mixed_:\ + \ (.e.g. `render.mode=metric_flat_dict`) a single level\n (e.g. `metric`)\ + \ is used as main key, any remaining levels\n (`resource`,`aggregation`)\ + \ are indicated with a flattened subkey.\n\nWhen `render.rollup=true`, the\ + \ attribute levels that are the same for all series are\nnot used as key,\ + \ but reported as a data or table attribute." + QueriesListResponse: + properties: + messages: + items: + $ref: '#/components/schemas/Message' + type: array + title: Messages + queries: + items: + $ref: '#/components/schemas/QueryListItem' + type: array + title: Query item list + description: One page of matching query definitions. + count: + type: integer + title: Current page size + description: Number of query definitions returned in the current response. + offset: + type: integer + title: Page offset + description: Offset in the full listing (skipped definitions). + limit: + type: integer + title: Page size limit + description: Maximal number of query definitions returned in one response. + total_count: + type: integer + title: Total count + description: Total number of query definitions matching the filter. + _links: + $ref: '#/components/schemas/QueryListHALLinks' + additionalProperties: true + type: object + required: + - queries + - count + - offset + - limit + - _links + title: QueriesListResponse + description: Listing of named queries, with paging links. + Query-Input: + properties: + resource: + type: string + title: Default Resource + description: Default resource for the series in the query. + metric: + type: string + title: Default Metric + description: Default metric for the series in the query. + aggregation: + anyOf: + - description: Aggregation method for a series in the query. + $ref: '#/components/schemas/AggregationMethod' + - items: + anyOf: + - $ref: '#/components/schemas/AggregationMethod' + - type: 'null' + type: array + title: Aggregations + description: Aggregation methods, leading to sepearate series. + - additionalProperties: + anyOf: + - $ref: '#/components/schemas/AggregationMethod' + - items: + anyOf: + - $ref: '#/components/schemas/AggregationMethod' + - type: 'null' + type: array + title: Aggregations + description: Aggregation methods, leading to sepearate series. + - type: 'null' + type: object + title: Aggregation by Resource or Metric + description: Aggregation methods specified per resource or metric. + - additionalProperties: + anyOf: + - additionalProperties: + anyOf: + - $ref: '#/components/schemas/AggregationMethod' + - items: + anyOf: + - $ref: '#/components/schemas/AggregationMethod' + - type: 'null' + type: array + title: Aggregations + description: Aggregation methods, leading to sepearate series. + - type: 'null' + type: object + title: Aggregation by Resource or Metric + description: Aggregation methods specified per resource or metric. + - type: 'null' + type: object + title: Aggregation by Resource and Metric + description: Aggregation methods specified per resource and metric. + - type: 'null' + title: Default Aggregation + description: Default aggregation method(s) for the series in the query. + interpolation: + anyOf: + - $ref: '#/components/schemas/InterpolationMethod' + title: Interpolation Method + - $ref: '#/components/schemas/InterpolationSpec' + title: Interpolation specification. + title: Default Interpolation + description: Default Interpolation method for the series (if aggregated). + freq: + oneOf: + - type: string + pattern: ^P([0-9]+Y)?([0-9]+M)?([0-9]+W)?([0-9]+D)?(T([0-9]+H)?([0-9]+M)?([0-9]+(\.[0-9]*)?S)?)?$ + format: period + title: 'ISO8601 period ' + description: A period in [ISO8601 duration](https://en.wikipedia.org/wiki/ISO_8601#Durations) + format. + example: PT3H15M + - type: string + const: inferred + title: Inferred Frequency + description: When `inferred` is specified, the frequency of aggregation + will be inferred from the main/first time series. This can be used to + regularize the time series + type: string + title: Grouping interval + description: Interval used to aggregate or regularize data. One of the [time + line](https://docs.waylay.io/#/api/query/?id=time-line-properties) specifiers. + from: + oneOf: + - type: string + pattern: '[0-9]{4}-[0-9]{2}-[0-9]{2}(T.*)?' + format: date-time + title: ISO8601 absolute timestamp + description: A date or date-time in [ISO8601](https://en.wikipedia.org/wiki/ISO_8601#Combined_date_and_time_representations) + format. When no timezone is specified, the UTC timezone is assumed (`+00:00`) + example: '2018-03-21T12:23:00+01:00' + - type: integer + minimum: 0.0 + title: UNIX epoch milliseconds + description: Absolute timestamp milliseconds in unix epoch since 1970-01-01. + example: 1534836422284 + - type: string + pattern: ^P([0-9]+Y)?([0-9]+M)?([0-9]+W)?([0-9]+D)?(T([0-9]+H)?([0-9]+M)?([0-9]+(\.[0-9]*)?S)?)?$ + format: period + title: ISO8601 Period Before Now + description: Specifies a timestamp before _now_ as a period in [ISO8601 + duration](https://en.wikipedia.org/wiki/ISO_8601#Durations) format. + example: PT3H15M + title: Time Window From + description: The start of the time window for which results will be returned. + One of the [time line](https://docs.waylay.io/#/api/query/?id=time-line-properties) specifiers. + until: + oneOf: + - type: string + pattern: '[0-9]{4}-[0-9]{2}-[0-9]{2}(T.*)?' + format: date-time + title: ISO8601 absolute timestamp + description: A date or date-time in [ISO8601](https://en.wikipedia.org/wiki/ISO_8601#Combined_date_and_time_representations) + format. When no timezone is specified, the UTC timezone is assumed (`+00:00`) + example: '2018-03-21T12:23:00+01:00' + - type: integer + minimum: 0.0 + title: UNIX epoch milliseconds + description: Absolute timestamp milliseconds in unix epoch since 1970-01-01. + example: 1534836422284 + - type: string + pattern: ^P([0-9]+Y)?([0-9]+M)?([0-9]+W)?([0-9]+D)?(T([0-9]+H)?([0-9]+M)?([0-9]+(\.[0-9]*)?S)?)?$ + format: period + title: ISO8601 Period Before Now + description: Specifies a timestamp before _now_ as a period in [ISO8601 + duration](https://en.wikipedia.org/wiki/ISO_8601#Durations) format. + example: PT3H15M + title: Time Window Until + description: The end (not-inclusive) of the time window for which results + will be returned. One of the [time line](https://docs.waylay.io/#/api/query/?id=time-line-properties)specifiers. + window: + oneOf: + - type: string + pattern: ^P([0-9]+Y)?([0-9]+M)?([0-9]+W)?([0-9]+D)?(T([0-9]+H)?([0-9]+M)?([0-9]+(\.[0-9]*)?S)?)?$ + format: period + title: 'ISO8601 period ' + description: A period in [ISO8601 duration](https://en.wikipedia.org/wiki/ISO_8601#Durations) + format. + example: PT3H15M + type: string + title: Window + description: The absolute size of the time window for which results will + be returned. One of the [time line](https://docs.waylay.io/#/api/query/?id=time-line-properties) + specifiers. + periods: + type: integer + title: Periods + description: The size of the time window in number of `freq` units. One + of the [time line](https://docs.waylay.io/#/api/query/?id=time-line-properties) + specifiers. + align: + $ref: '#/components/schemas/Alignment' + data: + items: + $ref: '#/components/schemas/SeriesSpec' + type: array + title: Series specifications + description: List of series specifications. When not specified, a single + default series specification is assumed(`[{}]`, using the default `metric`,`resource`, + ... ). + render: + $ref: '#/components/schemas/Render' + additionalProperties: true + type: object + title: Query + description: 'Query definition for a Waylay analytics query. + + + See also [api docs](https://docs.waylay.io/#/api/query/?id=data-query-json-representation).' + Query-Output: + properties: + resource: + type: string + title: Default Resource + description: Default resource for the series in the query. + metric: + type: string + title: Default Metric + description: Default metric for the series in the query. + aggregation: + anyOf: + - $ref: '#/components/schemas/AggregationMethod' + - items: + anyOf: + - $ref: '#/components/schemas/AggregationMethod' + - type: 'null' + type: array + title: Aggregations + description: Aggregation methods, leading to sepearate series. + - additionalProperties: + anyOf: + - $ref: '#/components/schemas/AggregationMethod' + - items: + anyOf: + - $ref: '#/components/schemas/AggregationMethod' + - type: 'null' + type: array + title: Aggregations + description: Aggregation methods, leading to sepearate series. + - type: 'null' + type: object + title: Aggregation by Resource or Metric + description: Aggregation methods specified per resource or metric. + - additionalProperties: + anyOf: + - additionalProperties: + anyOf: + - $ref: '#/components/schemas/AggregationMethod' + - items: + anyOf: + - $ref: '#/components/schemas/AggregationMethod' + - type: 'null' + type: array + title: Aggregations + description: Aggregation methods, leading to sepearate series. + - type: 'null' + type: object + title: Aggregation by Resource or Metric + description: Aggregation methods specified per resource or metric. + - type: 'null' + type: object + title: Aggregation by Resource and Metric + description: Aggregation methods specified per resource and metric. + - type: 'null' + title: Default Aggregation + description: Default aggregation method(s) for the series in the query. + interpolation: + anyOf: + - $ref: '#/components/schemas/InterpolationMethod' + title: Interpolation Method + - $ref: '#/components/schemas/InterpolationSpec' + title: Interpolation specification. + title: Default Interpolation + description: Default Interpolation method for the series (if aggregated). + freq: + oneOf: + - type: string + pattern: ^P([0-9]+Y)?([0-9]+M)?([0-9]+W)?([0-9]+D)?(T([0-9]+H)?([0-9]+M)?([0-9]+(\.[0-9]*)?S)?)?$ + format: period + title: 'ISO8601 period ' + description: A period in [ISO8601 duration](https://en.wikipedia.org/wiki/ISO_8601#Durations) + format. + example: PT3H15M + - type: string + const: inferred + title: Inferred Frequency + description: When `inferred` is specified, the frequency of aggregation + will be inferred from the main/first time series. This can be used to + regularize the time series + type: string + title: Grouping interval + description: Interval used to aggregate or regularize data. One of the [time + line](https://docs.waylay.io/#/api/query/?id=time-line-properties) specifiers. + from: + oneOf: + - type: string + pattern: '[0-9]{4}-[0-9]{2}-[0-9]{2}(T.*)?' + format: date-time + title: ISO8601 absolute timestamp + description: A date or date-time in [ISO8601](https://en.wikipedia.org/wiki/ISO_8601#Combined_date_and_time_representations) + format. When no timezone is specified, the UTC timezone is assumed (`+00:00`) + example: '2018-03-21T12:23:00+01:00' + - type: integer + minimum: 0.0 + title: UNIX epoch milliseconds + description: Absolute timestamp milliseconds in unix epoch since 1970-01-01. + example: 1534836422284 + - type: string + pattern: ^P([0-9]+Y)?([0-9]+M)?([0-9]+W)?([0-9]+D)?(T([0-9]+H)?([0-9]+M)?([0-9]+(\.[0-9]*)?S)?)?$ + format: period + title: ISO8601 Period Before Now + description: Specifies a timestamp before _now_ as a period in [ISO8601 + duration](https://en.wikipedia.org/wiki/ISO_8601#Durations) format. + example: PT3H15M + title: Time Window From + description: The start of the time window for which results will be returned. + One of the [time line](https://docs.waylay.io/#/api/query/?id=time-line-properties) specifiers. + until: + oneOf: + - type: string + pattern: '[0-9]{4}-[0-9]{2}-[0-9]{2}(T.*)?' + format: date-time + title: ISO8601 absolute timestamp + description: A date or date-time in [ISO8601](https://en.wikipedia.org/wiki/ISO_8601#Combined_date_and_time_representations) + format. When no timezone is specified, the UTC timezone is assumed (`+00:00`) + example: '2018-03-21T12:23:00+01:00' + - type: integer + minimum: 0.0 + title: UNIX epoch milliseconds + description: Absolute timestamp milliseconds in unix epoch since 1970-01-01. + example: 1534836422284 + - type: string + pattern: ^P([0-9]+Y)?([0-9]+M)?([0-9]+W)?([0-9]+D)?(T([0-9]+H)?([0-9]+M)?([0-9]+(\.[0-9]*)?S)?)?$ + format: period + title: ISO8601 Period Before Now + description: Specifies a timestamp before _now_ as a period in [ISO8601 + duration](https://en.wikipedia.org/wiki/ISO_8601#Durations) format. + example: PT3H15M + title: Time Window Until + description: The end (not-inclusive) of the time window for which results + will be returned. One of the [time line](https://docs.waylay.io/#/api/query/?id=time-line-properties)specifiers. + window: + oneOf: + - type: string + pattern: ^P([0-9]+Y)?([0-9]+M)?([0-9]+W)?([0-9]+D)?(T([0-9]+H)?([0-9]+M)?([0-9]+(\.[0-9]*)?S)?)?$ + format: period + title: 'ISO8601 period ' + description: A period in [ISO8601 duration](https://en.wikipedia.org/wiki/ISO_8601#Durations) + format. + example: PT3H15M + type: string + title: Window + description: The absolute size of the time window for which results will + be returned. One of the [time line](https://docs.waylay.io/#/api/query/?id=time-line-properties) + specifiers. + periods: + type: integer + title: Periods + description: The size of the time window in number of `freq` units. One + of the [time line](https://docs.waylay.io/#/api/query/?id=time-line-properties) + specifiers. + align: + $ref: '#/components/schemas/Alignment' + data: + items: + $ref: '#/components/schemas/SeriesSpec' + type: array + title: Series specifications + description: List of series specifications. When not specified, a single + default series specification is assumed(`[{}]`, using the default `metric`,`resource`, + ... ). + render: + $ref: '#/components/schemas/Render' + additionalProperties: true + type: object + title: Query + description: 'Query definition for a Waylay analytics query. + + + See also [api docs](https://docs.waylay.io/#/api/query/?id=data-query-json-representation).' + QueryEntityInput: + properties: + name: + type: string + title: Query name + description: Name of the stored query definition. + meta: + type: object + title: Query metadata + description: User metadata for the query definition. + query: + $ref: '#/components/schemas/Query-Input' + additionalProperties: true + type: object + required: + - name + - query + title: QueryEntityInput + description: Input data to create a query definition. + QueryExecutionMessage: + properties: + message: + type: string + title: Message + description: A human readable message. + level: + type: string + enum: + - debug + - info + - warning + - error + title: Severity Level + timestamp: + type: string + format: date-time + title: Timestamp + action: + type: string + title: Action + description: The request action that caused this message. + category: + type: string + title: Message Category + description: The subsystem that issued this message. + examples: + - data + - broker + - opt-cfg + properties: + anyOf: + - type: string + - $ref: '#/components/schemas/MessageProperties' + title: Message Arguments + exception: + $ref: '#/components/schemas/CauseException' + title: '' + description: '' + additionalProperties: true + type: object + required: + - message + - level + - timestamp + - action + - category + title: Message Object + description: A message object that informs or warns about a query execution + issue. + QueryHALLinks: + properties: + self: + $ref: '#/components/schemas/HALLink' + title: Self link + description: Link to the query definition. + execute: + $ref: '#/components/schemas/HALLink' + title: Execute link + description: Link to the query execution. + additionalProperties: true + type: object + required: + - self + - execute + title: QueryHALLinks + description: HAL Links for a query entity. + QueryListHALLinks: + properties: + self: + $ref: '#/components/schemas/HALLink' + title: Self link + description: Link to the current page of results. + first: + $ref: '#/components/schemas/HALLink' + title: First page link + description: Link to the first page of results. + prev: + $ref: '#/components/schemas/HALLink' + title: Previous page link + description: Link to the previous page of results. + next: + $ref: '#/components/schemas/HALLink' + title: Next page link + description: Link to the next page of results. + last: + $ref: '#/components/schemas/HALLink' + title: Last page link + description: Link to the last page of results. + additionalProperties: true + type: object + required: + - self + title: QueryListHALLinks + description: HAL Links for a query entity. + QueryListItem: + properties: + _links: + $ref: '#/components/schemas/QueryHALLinks' + attrs: + type: object + title: Query attributes + description: System provided metadata for the query definition. + name: + type: string + title: Query name + description: Name of the stored query definition. + meta: + type: object + title: Query metadata + description: User metadata for the query definition. + additionalProperties: true + type: object + required: + - _links + - attrs + - name + title: QueryListItem + description: Listing of a query definition item. + QueryResponse: + properties: + _links: + $ref: '#/components/schemas/QueryHALLinks' + attrs: + type: object + title: Query attributes + description: System provided metadata for the query definition. + name: + type: string + title: Query name + description: Name of the stored query definition. + meta: + type: object + title: Query metadata + description: User metadata for the query definition. + query: + $ref: '#/components/schemas/Query-Output' + messages: + items: + $ref: '#/components/schemas/Message' + type: array + title: Messages + additionalProperties: true + type: object + required: + - _links + - attrs + - name + - query + title: QueryResponse + description: Represents a single named query. + QueryResult: + properties: + data: + items: + anyOf: + - $ref: '#/components/schemas/RowDataSet' + - $ref: '#/components/schemas/SeriesDataSet' + - $ref: '#/components/schemas/ColumnDataSet' + - $ref: '#/components/schemas/ObjectDataSet' + title: Response Data Set + description: Result timeseries data set, with one time dimension. + type: array + title: Response Data Sets + description: 'A list of data sets, each with their own time axis. There + will be one dataset for each `role` specified in the query (by default + a single `input` role). + + + The data is represented according to the `render` options in the query + (default `COMPACT_WS`).' + query: + $ref: '#/components/schemas/Query-Input' + description: The query that lead to this result. + messages: + items: + $ref: '#/components/schemas/QueryExecutionMessage' + type: array + title: Messages and Warnings + additionalProperties: true + type: object + required: + - data + - query + - messages + title: Result of a timeseries query. + description: 'A json data response. + + + Uses the format as specified by the + + `render` options of the request (defaults to `COMPACT_WS`). + + ''' + examples: + - data: [] + query: + resource: R + metric: temperature + messages: [] + QueryUpdateInput: + properties: + meta: + type: object + title: Query metadata + description: User metadata for the query definition. + query: + $ref: '#/components/schemas/Query-Input' + title: Query definition + additionalProperties: true + type: object + title: QueryUpdateInput + description: Input data to update a query definition. + Render: + properties: + mode: + $ref: '#/components/schemas/_RenderMode' + title: Named configuration of render options. + description: A render mode combines a number of render option under a single + name. Each option can still be overriden by an explicit value. + default: COMPACT_WS + roll_up: + type: boolean + title: Roll Up + description: move up attributes on rows (or columns) that are the same for all + rows (or columns) to a table attribute. Levels enumerated + in 'hierarchical' are excluded. + hierarchical: + anyOf: + - type: boolean + - items: + type: string + type: array + title: Hierarchical + description: if true, use hierarchical objects to represent multiple row + (or column) dimensions, otherwise multi-keys get concatenated with a dot-delimiter. + If the value is a list, only these levels are kept as separate levels, + while remaining levels get concatenated keys + value_key: + type: string + title: Value Key + description: if set, use this key in the value object to report data values + show_levels: + type: boolean + title: Show Levels + description: if set, report the levels used in the data values (either hierarchical + or flat) + iso_timestamp: + type: boolean + title: Iso Timestamp + description: if set, render timestamps in a row or column index with both + epoch and iso representations + row_key: + type: string + title: Row Key + description: if set, use this key as name of the row-dimension for single-dimensional + rows + column_key: + type: string + title: Column Key + description: if set, use this key as name of the column-dimension for single-dimensional + columns + header_array: + $ref: '#/components/schemas/HeaderArrayOption' + description: 'if set, report data as an header and an array. ' + data_axis: + $ref: '#/components/schemas/DataAxisOption' + description: orientation of the tabular data as a array of arrays + key_seperator: + type: string + title: Key Seperator + description: character used to concatenate multi-key columns or rows when + required + key_skip_empty: + type: boolean + title: Key Skip Empty + description: skip empty values in concatenating multi-key column or row + headers + include_window_spec: + type: boolean + title: Include Window Spec + description: if set, include window specification in render modes that support + it + additionalProperties: true + type: object + title: Render + description: Configures the representation of data sets returned by the query + API. + Role: + type: string + title: Data set role + description: The role of series specification that was used to compile this + data set. + examples: + - input + - exogenous + - predictions + RowDataSet: + properties: + attributes: + $ref: '#/components/schemas/DataSetAttributes' + window_spec: + $ref: '#/components/schemas/DataSetWindow' + data_axis: + type: string + enum: + - column + const: column + title: Data Axis + default: column + columns: + prefixItems: + - const: timestamp + title: Unix epoch milliseconds timestamp. + items: + anyOf: + - $ref: '#/components/schemas/RowIndexColumnHeader' + - $ref: '#/components/schemas/ColumnHeader' + type: array + title: Column Headers + description: 'Header Attributes for the column data. + + + The initial string-valued headers (normally a single `timestamp`) indicate + that column to contain row index data (i.e. timestamps). + + + The remaining object-valued column headers identify and describe the actual + series data.' + data: + items: + prefixItems: + - $ref: '#/components/schemas/Timestamp' + items: + $ref: '#/components/schemas/Datum' + type: array + title: Observation + description: Row index data (timestamp), and a value for each of the series. + type: array + title: Data + additionalProperties: true + type: object + required: + - columns + - data + title: RowDataSet + description: 'Row-oriented dataset. + + + Timeseries data layout with a column header and a data row per timestamp. + + Result for render options `data_axis=column` and `header_array=row`.",' + RowHeader: + properties: + timestamp: + $ref: '#/components/schemas/Timestamp' + timestamp_iso: + $ref: '#/components/schemas/TimestampIso' + additionalProperties: true + type: object + required: + - timestamp + title: RowHeader + description: 'Index entry attributes. + + + Attributes for a timestamp index entry.' + RowIndexColumnHeader: + type: string + title: Row Index Column Header + description: 'Header for a column containing a (representation of) the row index + value. + + These headers precede the header attributes for row data.' + examples: + - timestamp + - timestamp_iso + SeriesDataSet: + properties: + attributes: + $ref: '#/components/schemas/DataSetAttributes' + window_spec: + $ref: '#/components/schemas/DataSetWindow' + data_axis: + type: string + enum: + - row + const: row + title: Data Axis + default: row + columns: + prefixItems: + - const: timestamp + title: Unix epoch milliseconds timestamp. + items: + anyOf: + - $ref: '#/components/schemas/RowIndexColumnHeader' + - $ref: '#/components/schemas/ColumnHeader' + type: array + title: Column Headers + description: 'Header Attributes for the column data. + + + The initial string-valued headers (normally a single `timestamp`) indicate + that column to contain row index data (i.e. timestamps). + + + The remaining object-valued column headers identify and describe the actual + series data.' + data: + prefixItems: + - items: + $ref: '#/components/schemas/Timestamp' + type: array + title: Timestamp Index + description: The timestamp index for this result data. + items: + items: + $ref: '#/components/schemas/Datum' + type: array + title: Series + description: All metric observation values for a single series. + type: array + title: Data + additionalProperties: true + type: object + required: + - columns + - data + title: SeriesDataSet + description: 'Column-oriented dataset. + + + Timeseries data layout with a column header + + and a seperate data array for the time index and each series. + + Result for render options `data_axis=row` and `header_array=row`.' + SeriesSpec: + properties: + name: + type: string + title: Name + description: Optional alias name for the series. This name is used when + exporting the dataset to CSV format. + examples: + - demoQuery + resource: + type: string + title: Resource + description: Resource id for the series, required unless it is specified + as a query default. + examples: + - 13efb488-75ac-4dac-828a-d49c5c2ebbfc + metric: + type: string + title: Metric + description: Metric name for the series, required unless it is specified + as a query default. + examples: + - temperature + - uptime + aggregration: + $ref: '#/components/schemas/AggregationMethod' + interpolation: + anyOf: + - $ref: '#/components/schemas/InterpolationMethod' + title: Interpolation Method + - $ref: '#/components/schemas/InterpolationSpec' + title: Interpolation specification. + title: Interpolation + additionalProperties: true + type: object + title: SeriesSpec + description: Query specification for a single series. + Timestamp: + type: integer + title: Timestamp + description: Unix epoch milliseconds timestamp. + TimestampIso: + type: string + format: date-time + title: ISO8601 timestamp + description: ISO8601 rendering of the timestamp, present when `render.iso_timestamp=true` + ValidationError: + properties: + loc: + items: + anyOf: + - type: string + - type: integer + type: array + title: Location + msg: + type: string + title: Message + type: + type: string + title: Error Type + type: object + required: + - loc + - msg + - type + title: ValidationError + _RenderMode: + type: string + title: Render Mode + oneOf: + - const: HEADER_ROW + description: 'Render rows of timestamp and values. Show column headers. Includes + an iso timestamp. + + + ###### options + + - `iso_timestamp`: `True` + + - `header_array`: `row` + + - `roll_up`: `False` + + - `data_axis`: `column`' + type: string + - const: COMPACT + description: 'Render rows of timestamp and values. Show column headers. + + + ###### options + + - `iso_timestamp`: `False` + + - `header_array`: `row` + + - `roll_up`: `False` + + - `data_axis`: `column`' + type: string + - const: COMPACT_WS + description: 'Render rows of timestamp and values. Show column headers. Show + the time window attributes. + + + ###### options + + - `iso_timestamp`: `False` + + - `header_array`: `row` + + - `roll_up`: `False` + + - `data_axis`: `column` + + - `include_window_spec`: `True`' + type: string + - const: SERIES + description: 'Render timestamps and each series (column) as a values array. + Show column headers. + + + ###### options + + - `iso_timestamp`: `False` + + - `header_array`: `row` + + - `data_axis`: `row` + + - `roll_up`: `True` + + - `include_window_spec`: `True`' + type: string + - const: HEADER_COLUMN + description: 'Renders row index in `rows`, and each series as a values array. + + + The series are prefixed by their series attributes.The `rows` index is prefixed + by the labels for these attributes. + + + ###### options + + - `iso_timestamp`: `True` + + - `header_array`: `column` + + - `roll_up`: `False` + + - `data_axis`: `row`' + type: string + - const: FLAT_DICT + description: 'Render an object for each observation. Uses flattened keys. + + + ###### options + + - `iso_timestamp`: `True` + + - `hierarchical`: `False` + + - `show_levels`: `True` + + - `roll_up`: `False`' + type: string + - const: HIER_DICT + description: 'Render an hierarchical object for each observation. Shows an + iso timestamp. + + + ###### options + + - `iso_timestamp`: `True` + + - `hierarchical`: `True` + + - `show_levels`: `True` + + - `roll_up`: `True`' + type: string + - const: METRIC_FLAT_DICT + description: 'Render an object with metric keys for each observation. Shows + an iso timestamp. + + + ###### options + + - `iso_timestamp`: `True` + + - `hierarchical`: `[''metric'']` + + - `show_levels`: `False` + + - `roll_up`: `True` + + - `key_skip_empty`: `True`' + type: string + - const: UPLOAD + description: 'Render in an object format compatible with the `/data/v1/events` + upload. + + + ###### options + + - `iso_timestamp`: `False` + + - `hierarchical`: `False` + + - `show_levels`: `False` + + - `roll_up`: `True`' + type: string + - const: CSV + description: 'Render in csv format with row headers. + + + ###### options + + - `iso_timestamp`: `False`' + type: string + description: Render mode configuration keys. + securitySchemes: + waylayApiKeySecret: + type: http + description: Waylay apiKey/apiSecret basic authentication. All endpoints support + also Waylay JWT Bearer authentication. + scheme: basic +tags: +- name: Execute + description: Execute a named or ad-hoc query. +- name: Manage + description: List, read, create, update and remove queries that are stored by name. +- name: Status + description: Inspect the technical status of the waylay-query service. +servers: +- url: https://api.waylay.io + description: Waylay enterprise gateway diff --git a/openapi/queries.transformed.openapi.yaml b/openapi/queries.transformed.openapi.yaml new file mode 100644 index 0000000..4b979df --- /dev/null +++ b/openapi/queries.transformed.openapi.yaml @@ -0,0 +1,5501 @@ +openapi: 3.0.3 +info: + title: 'Waylay Query: timeseries queries (v1 protocol)' + description: |- + + Execute and store queries on the Waylay timeseries. + + Protocol version: v1. + version: 0.5.0 +paths: + /queries/v1/queries/v1: + get: + tags: + - Status + summary: Get Version And Health + description: Get the version and health status for waylay-query. + operationId: get_version_and_health_queries_v1_get + responses: + '200': + description: Successful Response + content: + application/json: + schema: + additionalProperties: + type: string + type: object + title: Response Get Version And Health Queries V1 Get + security: + - waylayApiKeySecret: [] + x-py-method: get + x-consumes-multipart: false + x-consumes-urlencoded: false + x-consumes-json: false + x-consumes-other: false + /queries/v1/queries/v1/data: + post: + tags: + - Execute + summary: Execute Query + description: |- + Execute a timeseries query. + + Executes the timeseries query specified in the request body, + after applying any overrides from the url parameters. + operationId: execute_query_queries_v1_data_post + parameters: + - name: resource + in: query + required: false + schema: + type: string + title: Resource + description: Default Resource Override. + example: 13efb488-75ac-4dac-828a-d49c5c2ebbfc + description: Default Resource Override. + x-example: '''13efb488-75ac-4dac-828a-d49c5c2ebbfc''' + x-showExample: true + - name: metric + in: query + required: false + schema: + type: string + title: Metric + description: Default Metric Override. + example: temperature + description: Default Metric Override. + x-example: '''temperature''' + x-showExample: true + - name: aggregation + in: query + required: false + schema: + title: Aggregation Override. + $ref: '#/components/schemas/AggregationMethod' + x-showExample: false + - name: interpolation + in: query + required: false + schema: + anyOf: + - $ref: '#/components/schemas/InterpolationMethod' + title: Interpolation Override. + - $ref: '#/components/schemas/InterpolationSpec' + title: Interpolation Override. + title: Interpolation + x-showExample: false + - name: freq + in: query + required: false + schema: + type: string + title: Grouping Interval Override + description: Override for the `freq` query attribute. + oneOf: + - type: string + format: period + example: PT3H15M + pattern: >- + ^P([0-9]+Y)?([0-9]+M)?([0-9]+W)?([0-9]+D)?(T([0-9]+H)?([0-9]+M)?([0-9]+(\.[0-9]*)?S)?)?$ + title: 'ISO8601 period ' + description: >- + A period in [ISO8601 + duration](https://en.wikipedia.org/wiki/ISO_8601#Durations) + format. + - type: string + description: >- + When `inferred` is specified, the frequency of aggregation + will be inferred from the main/first time series. This can be + used to regularize the time series + enum: + - inferred + description: Override for the `freq` query attribute. + x-showExample: false + - name: from + in: query + required: false + schema: + type: string + title: From Override. + oneOf: + - title: ISO8601 absolute timestamp + type: string + format: date-time + example: '2018-03-21T12:23:00+01:00' + description: >- + A date or date-time in + [ISO8601](https://en.wikipedia.org/wiki/ISO_8601#Combined_date_and_time_representations) + format. When no timezone is specified, the UTC timezone is + assumed (`+00:00`) + pattern: '[0-9]{4}-[0-9]{2}-[0-9]{2}(T.*)?' + - type: integer + title: UNIX epoch milliseconds + minimum: 0 + description: >- + Absolute timestamp milliseconds in unix epoch since + 1970-01-01. + example: 1534836422284 + - type: string + format: period + example: PT3H15M + pattern: >- + ^P([0-9]+Y)?([0-9]+M)?([0-9]+W)?([0-9]+D)?(T([0-9]+H)?([0-9]+M)?([0-9]+(\.[0-9]*)?S)?)?$ + title: ISO8601 Period Before Now + description: >- + Specifies a timestamp before _now_ as a period in [ISO8601 + duration](https://en.wikipedia.org/wiki/ISO_8601#Durations) + format. + x-showExample: false + - name: until + in: query + required: false + schema: + type: string + title: From Override. + oneOf: + - title: ISO8601 absolute timestamp + type: string + format: date-time + example: '2018-03-21T12:23:00+01:00' + description: >- + A date or date-time in + [ISO8601](https://en.wikipedia.org/wiki/ISO_8601#Combined_date_and_time_representations) + format. When no timezone is specified, the UTC timezone is + assumed (`+00:00`) + pattern: '[0-9]{4}-[0-9]{2}-[0-9]{2}(T.*)?' + - type: integer + title: UNIX epoch milliseconds + minimum: 0 + description: >- + Absolute timestamp milliseconds in unix epoch since + 1970-01-01. + example: 1534836422284 + - type: string + format: period + example: PT3H15M + pattern: >- + ^P([0-9]+Y)?([0-9]+M)?([0-9]+W)?([0-9]+D)?(T([0-9]+H)?([0-9]+M)?([0-9]+(\.[0-9]*)?S)?)?$ + title: ISO8601 Period Before Now + description: >- + Specifies a timestamp before _now_ as a period in [ISO8601 + duration](https://en.wikipedia.org/wiki/ISO_8601#Durations) + format. + x-showExample: false + - name: window + in: query + required: false + schema: + type: string + title: Window Override. + oneOf: + - type: string + format: period + example: PT3H15M + pattern: >- + ^P([0-9]+Y)?([0-9]+M)?([0-9]+W)?([0-9]+D)?(T([0-9]+H)?([0-9]+M)?([0-9]+(\.[0-9]*)?S)?)?$ + title: 'ISO8601 period ' + description: >- + A period in [ISO8601 + duration](https://en.wikipedia.org/wiki/ISO_8601#Durations) + format. + x-showExample: false + - name: periods + in: query + required: false + schema: + type: integer + title: Periods Override. + x-showExample: false + - name: render + in: query + required: false + schema: + anyOf: + - $ref: '#/components/schemas/_RenderMode' + title: Render Mode + - $ref: '#/components/schemas/Render' + title: Render Override. + title: Render + x-showExample: false + - name: accept + in: header + required: false + schema: + anyOf: + - type: string + nullable: true + title: Accept header + description: Use a 'text/csv' accept header to get CSV formatted results. + description: Use a 'text/csv' accept header to get CSV formatted results. + x-showExample: false + requestBody: + required: true + content: + application/json: + schema: + $ref: '#/components/schemas/Query-Input' + responses: + '200': + description: Successful Response + content: + application/json: + schema: + $ref: '#/components/schemas/QueryResult' + examples: + default: + summary: Query response example for `?render=DEFAULT` + value: + data: + - columns: + - timestamp + - resource: 06e267b9-8714-4c58-ac53-df6a291b59dc + metric: temperature + aggregation: max + - resource: 06e267b9-8714-4c58-ac53-df6a291b59dc + metric: humidity + aggregation: mean + - resource: 7f33317b-a45e-4b0a-94a2-9bbbdc746cc1 + metric: temperature + aggregation: max + - resource: 7f33317b-a45e-4b0a-94a2-9bbbdc746cc1 + metric: humidity + aggregation: mean + data: + - - 1717977600000 + - 12.67 + - 80 + - 12.78 + - 83.125 + - - 1718006400000 + - 13.74 + - 88 + - 13.06 + - 80.875 + - - 1718035200000 + - null + - null + - 13.35 + - 78.5 + - - 1718064000000 + - 7.49 + - 88 + - 13 + - 81.875 + - - 1718092800000 + - null + - null + - 14.84 + - 62.375 + - - 1718121600000 + - null + - null + - 14.59 + - 76.5 + - - 1718150400000 + - 9.34 + - 90 + - 13.08 + - 85.375 + - - 1718179200000 + - null + - null + - 15.41 + - 61.75 + - - 1718208000000 + - null + - null + - 15.1 + - 74 + - - 1718236800000 + - 9.03 + - 90 + - 14.99 + - 82.875 + - - 1718265600000 + - null + - null + - 18.64 + - 57.5 + - - 1718294400000 + - null + - null + - 18.35 + - 62.5 + - - 1718323200000 + - 12.98 + - 80 + - 13.02 + - 81.625 + - - 1718352000000 + - null + - null + - 18.19 + - 81.5 + - - 1718380800000 + - null + - null + - 17.75 + - 88.875 + - - 1718409600000 + - 11.8 + - 88 + - 13.4 + - 87.25 + - - 1718438400000 + - null + - null + - 16.53 + - 64.5 + - - 1718467200000 + - null + - null + - 14.69 + - 84.875 + - - 1718496000000 + - 12.12 + - 89 + - 13.77 + - 87.875 + - - 1718524800000 + - null + - null + - 19.27 + - 73.125 + - - 1718553600000 + - null + - null + - 19.12 + - 69.75 + data_axis: column + attributes: + role: input + window_spec: + from: 1717977600000 + until: 1718582400000 + window: P7D + freq: PT8H + messages: + - message: >- + Series ('06e267b9-8714-4c58-ac53-df6a291b59dc', + 'temperature', 'max'), aggregated on freq PT8H + contains 26 null values. These will NOT be + interpolated + level: warning + timestamp: '2024-07-01T13:00:20.886997+00:00' + action: GET /queries/v1/data/weatherHistoryDailyAndHourly + category: data + - message: >- + Series ('06e267b9-8714-4c58-ac53-df6a291b59dc', + 'humidity', 'mean'), aggregated on freq PT8H contains + 26 null values. These will NOT be interpolated + level: warning + timestamp: '2024-07-01T13:00:20.887995+00:00' + action: GET /queries/v1/data/weatherHistoryDailyAndHourly + category: data + query: + freq: PT8H + from_: 2024-06-16 12:00 AM + until: 2024-06-17 12:00 AM + data: + - metric: temperature + resource: 06e267b9-8714-4c58-ac53-df6a291b59dc + seriesId: 97de31f5-7b69-4a56-87e0-6b5c8a6b1872 + aggregation: max + - metric: humidity + resource: 06e267b9-8714-4c58-ac53-df6a291b59dc + seriesId: 8eb0799f-1af7-4af2-8233-517cb4bdc3c6 + aggregation: mean + - metric: temperature + resource: 7f33317b-a45e-4b0a-94a2-9bbbdc746cc1 + seriesId: 5055a943-e1c0-41d6-a6c9-7b20427a742d + aggregation: max + - metric: humidity + resource: 7f33317b-a45e-4b0a-94a2-9bbbdc746cc1 + seriesId: 16ac581f-f5ce-4845-9b6a-1b16249af051 + aggregation: mean + hier_dict: + summary: Query response example for `?render=HIER_DICT` + value: + data: + - - role: input + timestamp: 1717977600000 + timestamp_iso: '2024-06-10T00:00:00+00:00' + levels: + - resource + - metric + - aggregation + 06e267b9-8714-4c58-ac53-df6a291b59dc: + humidity: + mean: 80 + temperature: + max: 12.67 + 7f33317b-a45e-4b0a-94a2-9bbbdc746cc1: + humidity: + mean: 83.125 + temperature: + max: 12.78 + - role: input + timestamp: 1718006400000 + timestamp_iso: '2024-06-10T08:00:00+00:00' + levels: + - resource + - metric + - aggregation + 06e267b9-8714-4c58-ac53-df6a291b59dc: + humidity: + mean: 88 + temperature: + max: 13.74 + 7f33317b-a45e-4b0a-94a2-9bbbdc746cc1: + humidity: + mean: 80.875 + temperature: + max: 13.06 + - role: input + timestamp: 1718035200000 + timestamp_iso: '2024-06-10T16:00:00+00:00' + levels: + - resource + - metric + - aggregation + 06e267b9-8714-4c58-ac53-df6a291b59dc: + humidity: {} + temperature: {} + 7f33317b-a45e-4b0a-94a2-9bbbdc746cc1: + humidity: + mean: 78.5 + temperature: + max: 13.35 + - role: input + timestamp: 1718064000000 + timestamp_iso: '2024-06-11T00:00:00+00:00' + levels: + - resource + - metric + - aggregation + 06e267b9-8714-4c58-ac53-df6a291b59dc: + humidity: + mean: 88 + temperature: + max: 7.49 + 7f33317b-a45e-4b0a-94a2-9bbbdc746cc1: + humidity: + mean: 81.875 + temperature: + max: 13 + - role: input + timestamp: 1718092800000 + timestamp_iso: '2024-06-11T08:00:00+00:00' + levels: + - resource + - metric + - aggregation + 06e267b9-8714-4c58-ac53-df6a291b59dc: + humidity: {} + temperature: {} + 7f33317b-a45e-4b0a-94a2-9bbbdc746cc1: + humidity: + mean: 62.375 + temperature: + max: 14.84 + - role: input + timestamp: 1718121600000 + timestamp_iso: '2024-06-11T16:00:00+00:00' + levels: + - resource + - metric + - aggregation + 06e267b9-8714-4c58-ac53-df6a291b59dc: + humidity: {} + temperature: {} + 7f33317b-a45e-4b0a-94a2-9bbbdc746cc1: + humidity: + mean: 76.5 + temperature: + max: 14.59 + - role: input + timestamp: 1718150400000 + timestamp_iso: '2024-06-12T00:00:00+00:00' + levels: + - resource + - metric + - aggregation + 06e267b9-8714-4c58-ac53-df6a291b59dc: + humidity: + mean: 90 + temperature: + max: 9.34 + 7f33317b-a45e-4b0a-94a2-9bbbdc746cc1: + humidity: + mean: 85.375 + temperature: + max: 13.08 + - role: input + timestamp: 1718179200000 + timestamp_iso: '2024-06-12T08:00:00+00:00' + levels: + - resource + - metric + - aggregation + 06e267b9-8714-4c58-ac53-df6a291b59dc: + humidity: {} + temperature: {} + 7f33317b-a45e-4b0a-94a2-9bbbdc746cc1: + humidity: + mean: 61.75 + temperature: + max: 15.41 + - role: input + timestamp: 1718208000000 + timestamp_iso: '2024-06-12T16:00:00+00:00' + levels: + - resource + - metric + - aggregation + 06e267b9-8714-4c58-ac53-df6a291b59dc: + humidity: {} + temperature: {} + 7f33317b-a45e-4b0a-94a2-9bbbdc746cc1: + humidity: + mean: 74 + temperature: + max: 15.1 + - role: input + timestamp: 1718236800000 + timestamp_iso: '2024-06-13T00:00:00+00:00' + levels: + - resource + - metric + - aggregation + 06e267b9-8714-4c58-ac53-df6a291b59dc: + humidity: + mean: 90 + temperature: + max: 9.03 + 7f33317b-a45e-4b0a-94a2-9bbbdc746cc1: + humidity: + mean: 82.875 + temperature: + max: 14.99 + - role: input + timestamp: 1718265600000 + timestamp_iso: '2024-06-13T08:00:00+00:00' + levels: + - resource + - metric + - aggregation + 06e267b9-8714-4c58-ac53-df6a291b59dc: + humidity: {} + temperature: {} + 7f33317b-a45e-4b0a-94a2-9bbbdc746cc1: + humidity: + mean: 57.5 + temperature: + max: 18.64 + - role: input + timestamp: 1718294400000 + timestamp_iso: '2024-06-13T16:00:00+00:00' + levels: + - resource + - metric + - aggregation + 06e267b9-8714-4c58-ac53-df6a291b59dc: + humidity: {} + temperature: {} + 7f33317b-a45e-4b0a-94a2-9bbbdc746cc1: + humidity: + mean: 62.5 + temperature: + max: 18.35 + - role: input + timestamp: 1718323200000 + timestamp_iso: '2024-06-14T00:00:00+00:00' + levels: + - resource + - metric + - aggregation + 06e267b9-8714-4c58-ac53-df6a291b59dc: + humidity: + mean: 80 + temperature: + max: 12.98 + 7f33317b-a45e-4b0a-94a2-9bbbdc746cc1: + humidity: + mean: 81.625 + temperature: + max: 13.02 + - role: input + timestamp: 1718352000000 + timestamp_iso: '2024-06-14T08:00:00+00:00' + levels: + - resource + - metric + - aggregation + 06e267b9-8714-4c58-ac53-df6a291b59dc: + humidity: {} + temperature: {} + 7f33317b-a45e-4b0a-94a2-9bbbdc746cc1: + humidity: + mean: 81.5 + temperature: + max: 18.19 + - role: input + timestamp: 1718380800000 + timestamp_iso: '2024-06-14T16:00:00+00:00' + levels: + - resource + - metric + - aggregation + 06e267b9-8714-4c58-ac53-df6a291b59dc: + humidity: {} + temperature: {} + 7f33317b-a45e-4b0a-94a2-9bbbdc746cc1: + humidity: + mean: 88.875 + temperature: + max: 17.75 + - role: input + timestamp: 1718409600000 + timestamp_iso: '2024-06-15T00:00:00+00:00' + levels: + - resource + - metric + - aggregation + 06e267b9-8714-4c58-ac53-df6a291b59dc: + humidity: + mean: 88 + temperature: + max: 11.8 + 7f33317b-a45e-4b0a-94a2-9bbbdc746cc1: + humidity: + mean: 87.25 + temperature: + max: 13.4 + - role: input + timestamp: 1718438400000 + timestamp_iso: '2024-06-15T08:00:00+00:00' + levels: + - resource + - metric + - aggregation + 06e267b9-8714-4c58-ac53-df6a291b59dc: + humidity: {} + temperature: {} + 7f33317b-a45e-4b0a-94a2-9bbbdc746cc1: + humidity: + mean: 64.5 + temperature: + max: 16.53 + - role: input + timestamp: 1718467200000 + timestamp_iso: '2024-06-15T16:00:00+00:00' + levels: + - resource + - metric + - aggregation + 06e267b9-8714-4c58-ac53-df6a291b59dc: + humidity: {} + temperature: {} + 7f33317b-a45e-4b0a-94a2-9bbbdc746cc1: + humidity: + mean: 84.875 + temperature: + max: 14.69 + - role: input + timestamp: 1718496000000 + timestamp_iso: '2024-06-16T00:00:00+00:00' + levels: + - resource + - metric + - aggregation + 06e267b9-8714-4c58-ac53-df6a291b59dc: + humidity: + mean: 89 + temperature: + max: 12.12 + 7f33317b-a45e-4b0a-94a2-9bbbdc746cc1: + humidity: + mean: 87.875 + temperature: + max: 13.77 + - role: input + timestamp: 1718524800000 + timestamp_iso: '2024-06-16T08:00:00+00:00' + levels: + - resource + - metric + - aggregation + 06e267b9-8714-4c58-ac53-df6a291b59dc: + humidity: {} + temperature: {} + 7f33317b-a45e-4b0a-94a2-9bbbdc746cc1: + humidity: + mean: 73.125 + temperature: + max: 19.27 + - role: input + timestamp: 1718553600000 + timestamp_iso: '2024-06-16T16:00:00+00:00' + levels: + - resource + - metric + - aggregation + 06e267b9-8714-4c58-ac53-df6a291b59dc: + humidity: {} + temperature: {} + 7f33317b-a45e-4b0a-94a2-9bbbdc746cc1: + humidity: + mean: 69.75 + temperature: + max: 19.12 + messages: + - message: >- + Series ('06e267b9-8714-4c58-ac53-df6a291b59dc', + 'temperature', 'max'), aggregated on freq PT8H + contains 26 null values. These will NOT be + interpolated + level: warning + timestamp: '2024-07-01T12:57:58.698912+00:00' + action: GET /queries/v1/data/weatherHistoryDailyAndHourly + category: data + - message: >- + Series ('06e267b9-8714-4c58-ac53-df6a291b59dc', + 'humidity', 'mean'), aggregated on freq PT8H contains + 26 null values. These will NOT be interpolated + level: warning + timestamp: '2024-07-01T12:57:58.699998+00:00' + action: GET /queries/v1/data/weatherHistoryDailyAndHourly + category: data + query: + freq: PT8H + from_: 2024-06-16 12:00 AM + until: 2024-06-17 12:00 AM + data: + - metric: temperature + resource: 06e267b9-8714-4c58-ac53-df6a291b59dc + seriesId: 97de31f5-7b69-4a56-87e0-6b5c8a6b1872 + aggregation: max + - metric: humidity + resource: 06e267b9-8714-4c58-ac53-df6a291b59dc + seriesId: 8eb0799f-1af7-4af2-8233-517cb4bdc3c6 + aggregation: mean + - metric: temperature + resource: 7f33317b-a45e-4b0a-94a2-9bbbdc746cc1 + seriesId: 5055a943-e1c0-41d6-a6c9-7b20427a742d + aggregation: max + - metric: humidity + resource: 7f33317b-a45e-4b0a-94a2-9bbbdc746cc1 + seriesId: 16ac581f-f5ce-4845-9b6a-1b16249af051 + aggregation: mean + render: + mode: HIER_DICT + upload: + summary: Query response example for `?render=UPLOAD` + value: + data: + - - role: input + timestamp: 1717977600000 + 06e267b9-8714-4c58-ac53-df6a291b59dc.temperature.max: 12.67 + 06e267b9-8714-4c58-ac53-df6a291b59dc.humidity.mean: 80 + 7f33317b-a45e-4b0a-94a2-9bbbdc746cc1.temperature.max: 12.78 + 7f33317b-a45e-4b0a-94a2-9bbbdc746cc1.humidity.mean: 83.125 + - role: input + timestamp: 1718006400000 + 06e267b9-8714-4c58-ac53-df6a291b59dc.temperature.max: 13.74 + 06e267b9-8714-4c58-ac53-df6a291b59dc.humidity.mean: 88 + 7f33317b-a45e-4b0a-94a2-9bbbdc746cc1.temperature.max: 13.06 + 7f33317b-a45e-4b0a-94a2-9bbbdc746cc1.humidity.mean: 80.875 + - role: input + timestamp: 1718035200000 + 7f33317b-a45e-4b0a-94a2-9bbbdc746cc1.temperature.max: 13.35 + 7f33317b-a45e-4b0a-94a2-9bbbdc746cc1.humidity.mean: 78.5 + - role: input + timestamp: 1718064000000 + 06e267b9-8714-4c58-ac53-df6a291b59dc.temperature.max: 7.49 + 06e267b9-8714-4c58-ac53-df6a291b59dc.humidity.mean: 88 + 7f33317b-a45e-4b0a-94a2-9bbbdc746cc1.temperature.max: 13 + 7f33317b-a45e-4b0a-94a2-9bbbdc746cc1.humidity.mean: 81.875 + - role: input + timestamp: 1718092800000 + 7f33317b-a45e-4b0a-94a2-9bbbdc746cc1.temperature.max: 14.84 + 7f33317b-a45e-4b0a-94a2-9bbbdc746cc1.humidity.mean: 62.375 + - role: input + timestamp: 1718121600000 + 7f33317b-a45e-4b0a-94a2-9bbbdc746cc1.temperature.max: 14.59 + 7f33317b-a45e-4b0a-94a2-9bbbdc746cc1.humidity.mean: 76.5 + - role: input + timestamp: 1718150400000 + 06e267b9-8714-4c58-ac53-df6a291b59dc.temperature.max: 9.34 + 06e267b9-8714-4c58-ac53-df6a291b59dc.humidity.mean: 90 + 7f33317b-a45e-4b0a-94a2-9bbbdc746cc1.temperature.max: 13.08 + 7f33317b-a45e-4b0a-94a2-9bbbdc746cc1.humidity.mean: 85.375 + - role: input + timestamp: 1718179200000 + 7f33317b-a45e-4b0a-94a2-9bbbdc746cc1.temperature.max: 15.41 + 7f33317b-a45e-4b0a-94a2-9bbbdc746cc1.humidity.mean: 61.75 + - role: input + timestamp: 1718208000000 + 7f33317b-a45e-4b0a-94a2-9bbbdc746cc1.temperature.max: 15.1 + 7f33317b-a45e-4b0a-94a2-9bbbdc746cc1.humidity.mean: 74 + - role: input + timestamp: 1718236800000 + 06e267b9-8714-4c58-ac53-df6a291b59dc.temperature.max: 9.03 + 06e267b9-8714-4c58-ac53-df6a291b59dc.humidity.mean: 90 + 7f33317b-a45e-4b0a-94a2-9bbbdc746cc1.temperature.max: 14.99 + 7f33317b-a45e-4b0a-94a2-9bbbdc746cc1.humidity.mean: 82.875 + - role: input + timestamp: 1718265600000 + 7f33317b-a45e-4b0a-94a2-9bbbdc746cc1.temperature.max: 18.64 + 7f33317b-a45e-4b0a-94a2-9bbbdc746cc1.humidity.mean: 57.5 + - role: input + timestamp: 1718294400000 + 7f33317b-a45e-4b0a-94a2-9bbbdc746cc1.temperature.max: 18.35 + 7f33317b-a45e-4b0a-94a2-9bbbdc746cc1.humidity.mean: 62.5 + - role: input + timestamp: 1718323200000 + 06e267b9-8714-4c58-ac53-df6a291b59dc.temperature.max: 12.98 + 06e267b9-8714-4c58-ac53-df6a291b59dc.humidity.mean: 80 + 7f33317b-a45e-4b0a-94a2-9bbbdc746cc1.temperature.max: 13.02 + 7f33317b-a45e-4b0a-94a2-9bbbdc746cc1.humidity.mean: 81.625 + - role: input + timestamp: 1718352000000 + 7f33317b-a45e-4b0a-94a2-9bbbdc746cc1.temperature.max: 18.19 + 7f33317b-a45e-4b0a-94a2-9bbbdc746cc1.humidity.mean: 81.5 + - role: input + timestamp: 1718380800000 + 7f33317b-a45e-4b0a-94a2-9bbbdc746cc1.temperature.max: 17.75 + 7f33317b-a45e-4b0a-94a2-9bbbdc746cc1.humidity.mean: 88.875 + - role: input + timestamp: 1718409600000 + 06e267b9-8714-4c58-ac53-df6a291b59dc.temperature.max: 11.8 + 06e267b9-8714-4c58-ac53-df6a291b59dc.humidity.mean: 88 + 7f33317b-a45e-4b0a-94a2-9bbbdc746cc1.temperature.max: 13.4 + 7f33317b-a45e-4b0a-94a2-9bbbdc746cc1.humidity.mean: 87.25 + - role: input + timestamp: 1718438400000 + 7f33317b-a45e-4b0a-94a2-9bbbdc746cc1.temperature.max: 16.53 + 7f33317b-a45e-4b0a-94a2-9bbbdc746cc1.humidity.mean: 64.5 + - role: input + timestamp: 1718467200000 + 7f33317b-a45e-4b0a-94a2-9bbbdc746cc1.temperature.max: 14.69 + 7f33317b-a45e-4b0a-94a2-9bbbdc746cc1.humidity.mean: 84.875 + - role: input + timestamp: 1718496000000 + 06e267b9-8714-4c58-ac53-df6a291b59dc.temperature.max: 12.12 + 06e267b9-8714-4c58-ac53-df6a291b59dc.humidity.mean: 89 + 7f33317b-a45e-4b0a-94a2-9bbbdc746cc1.temperature.max: 13.77 + 7f33317b-a45e-4b0a-94a2-9bbbdc746cc1.humidity.mean: 87.875 + - role: input + timestamp: 1718524800000 + 7f33317b-a45e-4b0a-94a2-9bbbdc746cc1.temperature.max: 19.27 + 7f33317b-a45e-4b0a-94a2-9bbbdc746cc1.humidity.mean: 73.125 + - role: input + timestamp: 1718553600000 + 7f33317b-a45e-4b0a-94a2-9bbbdc746cc1.temperature.max: 19.12 + 7f33317b-a45e-4b0a-94a2-9bbbdc746cc1.humidity.mean: 69.75 + messages: + - message: >- + Series ('06e267b9-8714-4c58-ac53-df6a291b59dc', + 'temperature', 'max'), aggregated on freq PT8H + contains 26 null values. These will NOT be + interpolated + level: warning + timestamp: '2024-07-01T13:03:24.128684+00:00' + action: GET /queries/v1/data/weatherHistoryDailyAndHourly + category: data + - message: >- + Series ('06e267b9-8714-4c58-ac53-df6a291b59dc', + 'humidity', 'mean'), aggregated on freq PT8H contains + 26 null values. These will NOT be interpolated + level: warning + timestamp: '2024-07-01T13:03:24.129391+00:00' + action: GET /queries/v1/data/weatherHistoryDailyAndHourly + category: data + query: + freq: PT8H + from_: 2024-06-16 12:00 AM + until: 2024-06-17 12:00 AM + data: + - metric: temperature + resource: 06e267b9-8714-4c58-ac53-df6a291b59dc + seriesId: 97de31f5-7b69-4a56-87e0-6b5c8a6b1872 + aggregation: max + - metric: humidity + resource: 06e267b9-8714-4c58-ac53-df6a291b59dc + seriesId: 8eb0799f-1af7-4af2-8233-517cb4bdc3c6 + aggregation: mean + - metric: temperature + resource: 7f33317b-a45e-4b0a-94a2-9bbbdc746cc1 + seriesId: 5055a943-e1c0-41d6-a6c9-7b20427a742d + aggregation: max + - metric: humidity + resource: 7f33317b-a45e-4b0a-94a2-9bbbdc746cc1 + seriesId: 16ac581f-f5ce-4845-9b6a-1b16249af051 + aggregation: mean + render: + mode: UPLOAD + flat_dict: + summary: Query response example for `?render=FLAT_DICT` + value: + data: + - - role: input + timestamp: 1717977600000 + timestamp_iso: '2024-06-10T00:00:00+00:00' + levels: + - resource.metric.aggregation + 06e267b9-8714-4c58-ac53-df6a291b59dc.temperature.max: 12.67 + 06e267b9-8714-4c58-ac53-df6a291b59dc.humidity.mean: 80 + 7f33317b-a45e-4b0a-94a2-9bbbdc746cc1.temperature.max: 12.78 + 7f33317b-a45e-4b0a-94a2-9bbbdc746cc1.humidity.mean: 83.125 + - role: input + timestamp: 1718006400000 + timestamp_iso: '2024-06-10T08:00:00+00:00' + levels: + - resource.metric.aggregation + 06e267b9-8714-4c58-ac53-df6a291b59dc.temperature.max: 13.74 + 06e267b9-8714-4c58-ac53-df6a291b59dc.humidity.mean: 88 + 7f33317b-a45e-4b0a-94a2-9bbbdc746cc1.temperature.max: 13.06 + 7f33317b-a45e-4b0a-94a2-9bbbdc746cc1.humidity.mean: 80.875 + - role: input + timestamp: 1718035200000 + timestamp_iso: '2024-06-10T16:00:00+00:00' + levels: + - resource.metric.aggregation + 7f33317b-a45e-4b0a-94a2-9bbbdc746cc1.temperature.max: 13.35 + 7f33317b-a45e-4b0a-94a2-9bbbdc746cc1.humidity.mean: 78.5 + - role: input + timestamp: 1718064000000 + timestamp_iso: '2024-06-11T00:00:00+00:00' + levels: + - resource.metric.aggregation + 06e267b9-8714-4c58-ac53-df6a291b59dc.temperature.max: 7.49 + 06e267b9-8714-4c58-ac53-df6a291b59dc.humidity.mean: 88 + 7f33317b-a45e-4b0a-94a2-9bbbdc746cc1.temperature.max: 13 + 7f33317b-a45e-4b0a-94a2-9bbbdc746cc1.humidity.mean: 81.875 + - role: input + timestamp: 1718092800000 + timestamp_iso: '2024-06-11T08:00:00+00:00' + levels: + - resource.metric.aggregation + 7f33317b-a45e-4b0a-94a2-9bbbdc746cc1.temperature.max: 14.84 + 7f33317b-a45e-4b0a-94a2-9bbbdc746cc1.humidity.mean: 62.375 + - role: input + timestamp: 1718121600000 + timestamp_iso: '2024-06-11T16:00:00+00:00' + levels: + - resource.metric.aggregation + 7f33317b-a45e-4b0a-94a2-9bbbdc746cc1.temperature.max: 14.59 + 7f33317b-a45e-4b0a-94a2-9bbbdc746cc1.humidity.mean: 76.5 + - role: input + timestamp: 1718150400000 + timestamp_iso: '2024-06-12T00:00:00+00:00' + levels: + - resource.metric.aggregation + 06e267b9-8714-4c58-ac53-df6a291b59dc.temperature.max: 9.34 + 06e267b9-8714-4c58-ac53-df6a291b59dc.humidity.mean: 90 + 7f33317b-a45e-4b0a-94a2-9bbbdc746cc1.temperature.max: 13.08 + 7f33317b-a45e-4b0a-94a2-9bbbdc746cc1.humidity.mean: 85.375 + - role: input + timestamp: 1718179200000 + timestamp_iso: '2024-06-12T08:00:00+00:00' + levels: + - resource.metric.aggregation + 7f33317b-a45e-4b0a-94a2-9bbbdc746cc1.temperature.max: 15.41 + 7f33317b-a45e-4b0a-94a2-9bbbdc746cc1.humidity.mean: 61.75 + - role: input + timestamp: 1718208000000 + timestamp_iso: '2024-06-12T16:00:00+00:00' + levels: + - resource.metric.aggregation + 7f33317b-a45e-4b0a-94a2-9bbbdc746cc1.temperature.max: 15.1 + 7f33317b-a45e-4b0a-94a2-9bbbdc746cc1.humidity.mean: 74 + - role: input + timestamp: 1718236800000 + timestamp_iso: '2024-06-13T00:00:00+00:00' + levels: + - resource.metric.aggregation + 06e267b9-8714-4c58-ac53-df6a291b59dc.temperature.max: 9.03 + 06e267b9-8714-4c58-ac53-df6a291b59dc.humidity.mean: 90 + 7f33317b-a45e-4b0a-94a2-9bbbdc746cc1.temperature.max: 14.99 + 7f33317b-a45e-4b0a-94a2-9bbbdc746cc1.humidity.mean: 82.875 + - role: input + timestamp: 1718265600000 + timestamp_iso: '2024-06-13T08:00:00+00:00' + levels: + - resource.metric.aggregation + 7f33317b-a45e-4b0a-94a2-9bbbdc746cc1.temperature.max: 18.64 + 7f33317b-a45e-4b0a-94a2-9bbbdc746cc1.humidity.mean: 57.5 + - role: input + timestamp: 1718294400000 + timestamp_iso: '2024-06-13T16:00:00+00:00' + levels: + - resource.metric.aggregation + 7f33317b-a45e-4b0a-94a2-9bbbdc746cc1.temperature.max: 18.35 + 7f33317b-a45e-4b0a-94a2-9bbbdc746cc1.humidity.mean: 62.5 + - role: input + timestamp: 1718323200000 + timestamp_iso: '2024-06-14T00:00:00+00:00' + levels: + - resource.metric.aggregation + 06e267b9-8714-4c58-ac53-df6a291b59dc.temperature.max: 12.98 + 06e267b9-8714-4c58-ac53-df6a291b59dc.humidity.mean: 80 + 7f33317b-a45e-4b0a-94a2-9bbbdc746cc1.temperature.max: 13.02 + 7f33317b-a45e-4b0a-94a2-9bbbdc746cc1.humidity.mean: 81.625 + - role: input + timestamp: 1718352000000 + timestamp_iso: '2024-06-14T08:00:00+00:00' + levels: + - resource.metric.aggregation + 7f33317b-a45e-4b0a-94a2-9bbbdc746cc1.temperature.max: 18.19 + 7f33317b-a45e-4b0a-94a2-9bbbdc746cc1.humidity.mean: 81.5 + - role: input + timestamp: 1718380800000 + timestamp_iso: '2024-06-14T16:00:00+00:00' + levels: + - resource.metric.aggregation + 7f33317b-a45e-4b0a-94a2-9bbbdc746cc1.temperature.max: 17.75 + 7f33317b-a45e-4b0a-94a2-9bbbdc746cc1.humidity.mean: 88.875 + - role: input + timestamp: 1718409600000 + timestamp_iso: '2024-06-15T00:00:00+00:00' + levels: + - resource.metric.aggregation + 06e267b9-8714-4c58-ac53-df6a291b59dc.temperature.max: 11.8 + 06e267b9-8714-4c58-ac53-df6a291b59dc.humidity.mean: 88 + 7f33317b-a45e-4b0a-94a2-9bbbdc746cc1.temperature.max: 13.4 + 7f33317b-a45e-4b0a-94a2-9bbbdc746cc1.humidity.mean: 87.25 + - role: input + timestamp: 1718438400000 + timestamp_iso: '2024-06-15T08:00:00+00:00' + levels: + - resource.metric.aggregation + 7f33317b-a45e-4b0a-94a2-9bbbdc746cc1.temperature.max: 16.53 + 7f33317b-a45e-4b0a-94a2-9bbbdc746cc1.humidity.mean: 64.5 + - role: input + timestamp: 1718467200000 + timestamp_iso: '2024-06-15T16:00:00+00:00' + levels: + - resource.metric.aggregation + 7f33317b-a45e-4b0a-94a2-9bbbdc746cc1.temperature.max: 14.69 + 7f33317b-a45e-4b0a-94a2-9bbbdc746cc1.humidity.mean: 84.875 + - role: input + timestamp: 1718496000000 + timestamp_iso: '2024-06-16T00:00:00+00:00' + levels: + - resource.metric.aggregation + 06e267b9-8714-4c58-ac53-df6a291b59dc.temperature.max: 12.12 + 06e267b9-8714-4c58-ac53-df6a291b59dc.humidity.mean: 89 + 7f33317b-a45e-4b0a-94a2-9bbbdc746cc1.temperature.max: 13.77 + 7f33317b-a45e-4b0a-94a2-9bbbdc746cc1.humidity.mean: 87.875 + - role: input + timestamp: 1718524800000 + timestamp_iso: '2024-06-16T08:00:00+00:00' + levels: + - resource.metric.aggregation + 7f33317b-a45e-4b0a-94a2-9bbbdc746cc1.temperature.max: 19.27 + 7f33317b-a45e-4b0a-94a2-9bbbdc746cc1.humidity.mean: 73.125 + - role: input + timestamp: 1718553600000 + timestamp_iso: '2024-06-16T16:00:00+00:00' + levels: + - resource.metric.aggregation + 7f33317b-a45e-4b0a-94a2-9bbbdc746cc1.temperature.max: 19.12 + 7f33317b-a45e-4b0a-94a2-9bbbdc746cc1.humidity.mean: 69.75 + messages: + - message: >- + Series ('06e267b9-8714-4c58-ac53-df6a291b59dc', + 'temperature', 'max'), aggregated on freq PT8H + contains 26 null values. These will NOT be + interpolated + level: warning + timestamp: '2024-07-01T12:59:32.689972+00:00' + action: GET /queries/v1/data/weatherHistoryDailyAndHourly + category: data + - message: >- + Series ('06e267b9-8714-4c58-ac53-df6a291b59dc', + 'humidity', 'mean'), aggregated on freq PT8H contains + 26 null values. These will NOT be interpolated + level: warning + timestamp: '2024-07-01T12:59:32.691573+00:00' + action: GET /queries/v1/data/weatherHistoryDailyAndHourly + category: data + query: + freq: PT8H + from_: 2024-06-16 12:00 AM + until: 2024-06-17 12:00 AM + data: + - metric: temperature + resource: 06e267b9-8714-4c58-ac53-df6a291b59dc + seriesId: 97de31f5-7b69-4a56-87e0-6b5c8a6b1872 + aggregation: max + - metric: humidity + resource: 06e267b9-8714-4c58-ac53-df6a291b59dc + seriesId: 8eb0799f-1af7-4af2-8233-517cb4bdc3c6 + aggregation: mean + - metric: temperature + resource: 7f33317b-a45e-4b0a-94a2-9bbbdc746cc1 + seriesId: 5055a943-e1c0-41d6-a6c9-7b20427a742d + aggregation: max + - metric: humidity + resource: 7f33317b-a45e-4b0a-94a2-9bbbdc746cc1 + seriesId: 16ac581f-f5ce-4845-9b6a-1b16249af051 + aggregation: mean + render: + mode: FLAT_DICT + metric_flat_dict: + summary: Query response example for `?render=METRIC_FLAT_DICT` + value: + data: + - - role: input + timestamp: 1717977600000 + timestamp_iso: '2024-06-10T00:00:00+00:00' + humidity: + 06e267b9-8714-4c58-ac53-df6a291b59dc.mean: 80 + 7f33317b-a45e-4b0a-94a2-9bbbdc746cc1.mean: 83.125 + temperature: + 06e267b9-8714-4c58-ac53-df6a291b59dc.max: 12.67 + 7f33317b-a45e-4b0a-94a2-9bbbdc746cc1.max: 12.78 + - role: input + timestamp: 1718006400000 + timestamp_iso: '2024-06-10T08:00:00+00:00' + humidity: + 06e267b9-8714-4c58-ac53-df6a291b59dc.mean: 88 + 7f33317b-a45e-4b0a-94a2-9bbbdc746cc1.mean: 80.875 + temperature: + 06e267b9-8714-4c58-ac53-df6a291b59dc.max: 13.74 + 7f33317b-a45e-4b0a-94a2-9bbbdc746cc1.max: 13.06 + - role: input + timestamp: 1718035200000 + timestamp_iso: '2024-06-10T16:00:00+00:00' + humidity: + 7f33317b-a45e-4b0a-94a2-9bbbdc746cc1.mean: 78.5 + temperature: + 7f33317b-a45e-4b0a-94a2-9bbbdc746cc1.max: 13.35 + - role: input + timestamp: 1718064000000 + timestamp_iso: '2024-06-11T00:00:00+00:00' + humidity: + 06e267b9-8714-4c58-ac53-df6a291b59dc.mean: 88 + 7f33317b-a45e-4b0a-94a2-9bbbdc746cc1.mean: 81.875 + temperature: + 06e267b9-8714-4c58-ac53-df6a291b59dc.max: 7.49 + 7f33317b-a45e-4b0a-94a2-9bbbdc746cc1.max: 13 + - role: input + timestamp: 1718092800000 + timestamp_iso: '2024-06-11T08:00:00+00:00' + humidity: + 7f33317b-a45e-4b0a-94a2-9bbbdc746cc1.mean: 62.375 + temperature: + 7f33317b-a45e-4b0a-94a2-9bbbdc746cc1.max: 14.84 + - role: input + timestamp: 1718121600000 + timestamp_iso: '2024-06-11T16:00:00+00:00' + humidity: + 7f33317b-a45e-4b0a-94a2-9bbbdc746cc1.mean: 76.5 + temperature: + 7f33317b-a45e-4b0a-94a2-9bbbdc746cc1.max: 14.59 + - role: input + timestamp: 1718150400000 + timestamp_iso: '2024-06-12T00:00:00+00:00' + humidity: + 06e267b9-8714-4c58-ac53-df6a291b59dc.mean: 90 + 7f33317b-a45e-4b0a-94a2-9bbbdc746cc1.mean: 85.375 + temperature: + 06e267b9-8714-4c58-ac53-df6a291b59dc.max: 9.34 + 7f33317b-a45e-4b0a-94a2-9bbbdc746cc1.max: 13.08 + - role: input + timestamp: 1718179200000 + timestamp_iso: '2024-06-12T08:00:00+00:00' + humidity: + 7f33317b-a45e-4b0a-94a2-9bbbdc746cc1.mean: 61.75 + temperature: + 7f33317b-a45e-4b0a-94a2-9bbbdc746cc1.max: 15.41 + - role: input + timestamp: 1718208000000 + timestamp_iso: '2024-06-12T16:00:00+00:00' + humidity: + 7f33317b-a45e-4b0a-94a2-9bbbdc746cc1.mean: 74 + temperature: + 7f33317b-a45e-4b0a-94a2-9bbbdc746cc1.max: 15.1 + - role: input + timestamp: 1718236800000 + timestamp_iso: '2024-06-13T00:00:00+00:00' + humidity: + 06e267b9-8714-4c58-ac53-df6a291b59dc.mean: 90 + 7f33317b-a45e-4b0a-94a2-9bbbdc746cc1.mean: 82.875 + temperature: + 06e267b9-8714-4c58-ac53-df6a291b59dc.max: 9.03 + 7f33317b-a45e-4b0a-94a2-9bbbdc746cc1.max: 14.99 + - role: input + timestamp: 1718265600000 + timestamp_iso: '2024-06-13T08:00:00+00:00' + humidity: + 7f33317b-a45e-4b0a-94a2-9bbbdc746cc1.mean: 57.5 + temperature: + 7f33317b-a45e-4b0a-94a2-9bbbdc746cc1.max: 18.64 + - role: input + timestamp: 1718294400000 + timestamp_iso: '2024-06-13T16:00:00+00:00' + humidity: + 7f33317b-a45e-4b0a-94a2-9bbbdc746cc1.mean: 62.5 + temperature: + 7f33317b-a45e-4b0a-94a2-9bbbdc746cc1.max: 18.35 + - role: input + timestamp: 1718323200000 + timestamp_iso: '2024-06-14T00:00:00+00:00' + humidity: + 06e267b9-8714-4c58-ac53-df6a291b59dc.mean: 80 + 7f33317b-a45e-4b0a-94a2-9bbbdc746cc1.mean: 81.625 + temperature: + 06e267b9-8714-4c58-ac53-df6a291b59dc.max: 12.98 + 7f33317b-a45e-4b0a-94a2-9bbbdc746cc1.max: 13.02 + - role: input + timestamp: 1718352000000 + timestamp_iso: '2024-06-14T08:00:00+00:00' + humidity: + 7f33317b-a45e-4b0a-94a2-9bbbdc746cc1.mean: 81.5 + temperature: + 7f33317b-a45e-4b0a-94a2-9bbbdc746cc1.max: 18.19 + - role: input + timestamp: 1718380800000 + timestamp_iso: '2024-06-14T16:00:00+00:00' + humidity: + 7f33317b-a45e-4b0a-94a2-9bbbdc746cc1.mean: 88.875 + temperature: + 7f33317b-a45e-4b0a-94a2-9bbbdc746cc1.max: 17.75 + - role: input + timestamp: 1718409600000 + timestamp_iso: '2024-06-15T00:00:00+00:00' + humidity: + 06e267b9-8714-4c58-ac53-df6a291b59dc.mean: 88 + 7f33317b-a45e-4b0a-94a2-9bbbdc746cc1.mean: 87.25 + temperature: + 06e267b9-8714-4c58-ac53-df6a291b59dc.max: 11.8 + 7f33317b-a45e-4b0a-94a2-9bbbdc746cc1.max: 13.4 + - role: input + timestamp: 1718438400000 + timestamp_iso: '2024-06-15T08:00:00+00:00' + humidity: + 7f33317b-a45e-4b0a-94a2-9bbbdc746cc1.mean: 64.5 + temperature: + 7f33317b-a45e-4b0a-94a2-9bbbdc746cc1.max: 16.53 + - role: input + timestamp: 1718467200000 + timestamp_iso: '2024-06-15T16:00:00+00:00' + humidity: + 7f33317b-a45e-4b0a-94a2-9bbbdc746cc1.mean: 84.875 + temperature: + 7f33317b-a45e-4b0a-94a2-9bbbdc746cc1.max: 14.69 + - role: input + timestamp: 1718496000000 + timestamp_iso: '2024-06-16T00:00:00+00:00' + humidity: + 06e267b9-8714-4c58-ac53-df6a291b59dc.mean: 89 + 7f33317b-a45e-4b0a-94a2-9bbbdc746cc1.mean: 87.875 + temperature: + 06e267b9-8714-4c58-ac53-df6a291b59dc.max: 12.12 + 7f33317b-a45e-4b0a-94a2-9bbbdc746cc1.max: 13.77 + - role: input + timestamp: 1718524800000 + timestamp_iso: '2024-06-16T08:00:00+00:00' + humidity: + 7f33317b-a45e-4b0a-94a2-9bbbdc746cc1.mean: 73.125 + temperature: + 7f33317b-a45e-4b0a-94a2-9bbbdc746cc1.max: 19.27 + - role: input + timestamp: 1718553600000 + timestamp_iso: '2024-06-16T16:00:00+00:00' + humidity: + 7f33317b-a45e-4b0a-94a2-9bbbdc746cc1.mean: 69.75 + temperature: + 7f33317b-a45e-4b0a-94a2-9bbbdc746cc1.max: 19.12 + messages: + - message: >- + Series ('06e267b9-8714-4c58-ac53-df6a291b59dc', + 'temperature', 'max'), aggregated on freq PT8H + contains 26 null values. These will NOT be + interpolated + level: warning + timestamp: '2024-07-01T15:37:41.460083+00:00' + action: GET /queries/v1/data/weatherHistoryDailyAndHourly + category: data + - message: >- + Series ('06e267b9-8714-4c58-ac53-df6a291b59dc', + 'humidity', 'mean'), aggregated on freq PT8H contains + 26 null values. These will NOT be interpolated + level: warning + timestamp: '2024-07-01T15:37:41.461241+00:00' + action: GET /queries/v1/data/weatherHistoryDailyAndHourly + category: data + query: + freq: PT8H + from_: 2024-06-16 12:00 AM + until: 2024-06-17 12:00 AM + data: + - metric: temperature + resource: 06e267b9-8714-4c58-ac53-df6a291b59dc + seriesId: 97de31f5-7b69-4a56-87e0-6b5c8a6b1872 + aggregation: max + - metric: humidity + resource: 06e267b9-8714-4c58-ac53-df6a291b59dc + seriesId: 8eb0799f-1af7-4af2-8233-517cb4bdc3c6 + aggregation: mean + - metric: temperature + resource: 7f33317b-a45e-4b0a-94a2-9bbbdc746cc1 + seriesId: 5055a943-e1c0-41d6-a6c9-7b20427a742d + aggregation: max + - metric: humidity + resource: 7f33317b-a45e-4b0a-94a2-9bbbdc746cc1 + seriesId: 16ac581f-f5ce-4845-9b6a-1b16249af051 + aggregation: mean + render: + mode: METRIC_FLAT_DICT + header_column: + summary: Query response example for `?render=HEADER_COLUMN` + value: + data: + - rows: + - resource + - metric + - aggregation + - timestamp: 1717977600000 + timestamp_iso: '2024-06-10T00:00:00+00:00' + - timestamp: 1718006400000 + timestamp_iso: '2024-06-10T08:00:00+00:00' + - timestamp: 1718035200000 + timestamp_iso: '2024-06-10T16:00:00+00:00' + - timestamp: 1718064000000 + timestamp_iso: '2024-06-11T00:00:00+00:00' + - timestamp: 1718092800000 + timestamp_iso: '2024-06-11T08:00:00+00:00' + - timestamp: 1718121600000 + timestamp_iso: '2024-06-11T16:00:00+00:00' + - timestamp: 1718150400000 + timestamp_iso: '2024-06-12T00:00:00+00:00' + - timestamp: 1718179200000 + timestamp_iso: '2024-06-12T08:00:00+00:00' + - timestamp: 1718208000000 + timestamp_iso: '2024-06-12T16:00:00+00:00' + - timestamp: 1718236800000 + timestamp_iso: '2024-06-13T00:00:00+00:00' + - timestamp: 1718265600000 + timestamp_iso: '2024-06-13T08:00:00+00:00' + - timestamp: 1718294400000 + timestamp_iso: '2024-06-13T16:00:00+00:00' + - timestamp: 1718323200000 + timestamp_iso: '2024-06-14T00:00:00+00:00' + - timestamp: 1718352000000 + timestamp_iso: '2024-06-14T08:00:00+00:00' + - timestamp: 1718380800000 + timestamp_iso: '2024-06-14T16:00:00+00:00' + - timestamp: 1718409600000 + timestamp_iso: '2024-06-15T00:00:00+00:00' + - timestamp: 1718438400000 + timestamp_iso: '2024-06-15T08:00:00+00:00' + - timestamp: 1718467200000 + timestamp_iso: '2024-06-15T16:00:00+00:00' + - timestamp: 1718496000000 + timestamp_iso: '2024-06-16T00:00:00+00:00' + - timestamp: 1718524800000 + timestamp_iso: '2024-06-16T08:00:00+00:00' + - timestamp: 1718553600000 + timestamp_iso: '2024-06-16T16:00:00+00:00' + data: + - - 06e267b9-8714-4c58-ac53-df6a291b59dc + - temperature + - max + - 12.67 + - 13.74 + - null + - 7.49 + - null + - null + - 9.34 + - null + - null + - 9.03 + - null + - null + - 12.98 + - null + - null + - 11.8 + - null + - null + - 12.12 + - null + - null + - - 06e267b9-8714-4c58-ac53-df6a291b59dc + - humidity + - mean + - 80 + - 88 + - null + - 88 + - null + - null + - 90 + - null + - null + - 90 + - null + - null + - 80 + - null + - null + - 88 + - null + - null + - 89 + - null + - null + - - 7f33317b-a45e-4b0a-94a2-9bbbdc746cc1 + - temperature + - max + - 12.78 + - 13.06 + - 13.35 + - 13 + - 14.84 + - 14.59 + - 13.08 + - 15.41 + - 15.1 + - 14.99 + - 18.64 + - 18.35 + - 13.02 + - 18.19 + - 17.75 + - 13.4 + - 16.53 + - 14.69 + - 13.77 + - 19.27 + - 19.12 + - - 7f33317b-a45e-4b0a-94a2-9bbbdc746cc1 + - humidity + - mean + - 83.125 + - 80.875 + - 78.5 + - 81.875 + - 62.375 + - 76.5 + - 85.375 + - 61.75 + - 74 + - 82.875 + - 57.5 + - 62.5 + - 81.625 + - 81.5 + - 88.875 + - 87.25 + - 64.5 + - 84.875 + - 87.875 + - 73.125 + - 69.75 + data_axis: row + attributes: + role: input + messages: + - message: >- + Series ('06e267b9-8714-4c58-ac53-df6a291b59dc', + 'temperature', 'max'), aggregated on freq PT8H + contains 26 null values. These will NOT be + interpolated + level: warning + timestamp: '2024-07-01T13:02:54.733676+00:00' + action: GET /queries/v1/data/weatherHistoryDailyAndHourly + category: data + - message: >- + Series ('06e267b9-8714-4c58-ac53-df6a291b59dc', + 'humidity', 'mean'), aggregated on freq PT8H contains + 26 null values. These will NOT be interpolated + level: warning + timestamp: '2024-07-01T13:02:54.734610+00:00' + action: GET /queries/v1/data/weatherHistoryDailyAndHourly + category: data + query: + freq: PT8H + from_: 2024-06-16 12:00 AM + until: 2024-06-17 12:00 AM + data: + - metric: temperature + resource: 06e267b9-8714-4c58-ac53-df6a291b59dc + seriesId: 97de31f5-7b69-4a56-87e0-6b5c8a6b1872 + aggregation: max + - metric: humidity + resource: 06e267b9-8714-4c58-ac53-df6a291b59dc + seriesId: 8eb0799f-1af7-4af2-8233-517cb4bdc3c6 + aggregation: mean + - metric: temperature + resource: 7f33317b-a45e-4b0a-94a2-9bbbdc746cc1 + seriesId: 5055a943-e1c0-41d6-a6c9-7b20427a742d + aggregation: max + - metric: humidity + resource: 7f33317b-a45e-4b0a-94a2-9bbbdc746cc1 + seriesId: 16ac581f-f5ce-4845-9b6a-1b16249af051 + aggregation: mean + render: + mode: HEADER_COLUMN + series: + summary: Query response example for `?render=SERIES` + value: + data: + - columns: + - timestamp + - resource: 06e267b9-8714-4c58-ac53-df6a291b59dc + metric: temperature + aggregation: max + - resource: 06e267b9-8714-4c58-ac53-df6a291b59dc + metric: humidity + aggregation: mean + - resource: 7f33317b-a45e-4b0a-94a2-9bbbdc746cc1 + metric: temperature + aggregation: max + - resource: 7f33317b-a45e-4b0a-94a2-9bbbdc746cc1 + metric: humidity + aggregation: mean + data: + - - 1717977600000 + - 1718006400000 + - 1718035200000 + - 1718064000000 + - 1718092800000 + - 1718121600000 + - 1718150400000 + - 1718179200000 + - 1718208000000 + - 1718236800000 + - 1718265600000 + - 1718294400000 + - 1718323200000 + - 1718352000000 + - 1718380800000 + - 1718409600000 + - 1718438400000 + - 1718467200000 + - 1718496000000 + - 1718524800000 + - 1718553600000 + - - 12.67 + - 13.74 + - null + - 7.49 + - null + - null + - 9.34 + - null + - null + - 9.03 + - null + - null + - 12.98 + - null + - null + - 11.8 + - null + - null + - 12.12 + - null + - null + - - 80 + - 88 + - null + - 88 + - null + - null + - 90 + - null + - null + - 90 + - null + - null + - 80 + - null + - null + - 88 + - null + - null + - 89 + - null + - null + - - 12.78 + - 13.06 + - 13.35 + - 13 + - 14.84 + - 14.59 + - 13.08 + - 15.41 + - 15.1 + - 14.99 + - 18.64 + - 18.35 + - 13.02 + - 18.19 + - 17.75 + - 13.4 + - 16.53 + - 14.69 + - 13.77 + - 19.27 + - 19.12 + - - 83.125 + - 80.875 + - 78.5 + - 81.875 + - 62.375 + - 76.5 + - 85.375 + - 61.75 + - 74 + - 82.875 + - 57.5 + - 62.5 + - 81.625 + - 81.5 + - 88.875 + - 87.25 + - 64.5 + - 84.875 + - 87.875 + - 73.125 + - 69.75 + data_axis: row + attributes: + role: input + window_spec: + from: 1717977600000 + until: 1718582400000 + window: P7D + freq: PT8H + messages: + - message: >- + Series ('06e267b9-8714-4c58-ac53-df6a291b59dc', + 'temperature', 'max'), aggregated on freq PT8H + contains 26 null values. These will NOT be + interpolated + level: warning + timestamp: '2024-07-01T13:01:39.240450+00:00' + action: GET /queries/v1/data/weatherHistoryDailyAndHourly + category: data + - message: >- + Series ('06e267b9-8714-4c58-ac53-df6a291b59dc', + 'humidity', 'mean'), aggregated on freq PT8H contains + 26 null values. These will NOT be interpolated + level: warning + timestamp: '2024-07-01T13:01:39.241481+00:00' + action: GET /queries/v1/data/weatherHistoryDailyAndHourly + category: data + query: + freq: PT8H + from_: 2024-06-16 12:00 AM + until: 2024-06-17 12:00 AM + data: + - metric: temperature + resource: 06e267b9-8714-4c58-ac53-df6a291b59dc + seriesId: 97de31f5-7b69-4a56-87e0-6b5c8a6b1872 + aggregation: max + - metric: humidity + resource: 06e267b9-8714-4c58-ac53-df6a291b59dc + seriesId: 8eb0799f-1af7-4af2-8233-517cb4bdc3c6 + aggregation: mean + - metric: temperature + resource: 7f33317b-a45e-4b0a-94a2-9bbbdc746cc1 + seriesId: 5055a943-e1c0-41d6-a6c9-7b20427a742d + aggregation: max + - metric: humidity + resource: 7f33317b-a45e-4b0a-94a2-9bbbdc746cc1 + seriesId: 16ac581f-f5ce-4845-9b6a-1b16249af051 + aggregation: mean + render: + mode: SERIES + text/csv: + schema: + title: CSV timeseries data response. + description: >- + A CSV representation of the query result, + + - the first `timestamp` column contains event timestamp in + iso format + + - remaining columns contain the (aggregated or + non-aggregated) series values, using a + `{resource_id}/{metric}` or + `{resource_id}/{metric}/{aggregation}` header. + '422': + description: Validation Error + content: + application/json: + schema: + $ref: '#/components/schemas/HTTPValidationError' + security: + - waylayApiKeySecret: [] + x-py-method: execute + x-consumes-multipart: false + x-consumes-urlencoded: false + x-consumes-json: true + x-consumes-other: false + /queries/v1/queries/v1/data/{query_name}: + get: + tags: + - Execute + summary: Execute Named Query + description: |- + Execute a named timeseries query. + + Retrieves a stored query definition by name, + applies overrides from the url parameters, and executes it. + operationId: executeByName_query_queries_v1_data__query_name__get + parameters: + - name: query_name + in: path + required: true + schema: + type: string + title: Query Name + x-showExample: false + - name: resource + in: query + required: false + schema: + type: string + title: Resource + description: Default Resource Override. + example: 13efb488-75ac-4dac-828a-d49c5c2ebbfc + description: Default Resource Override. + x-example: '''13efb488-75ac-4dac-828a-d49c5c2ebbfc''' + x-showExample: true + - name: metric + in: query + required: false + schema: + type: string + title: Metric + description: Default Metric Override. + example: temperature + description: Default Metric Override. + x-example: '''temperature''' + x-showExample: true + - name: aggregation + in: query + required: false + schema: + title: Aggregation Override. + $ref: '#/components/schemas/AggregationMethod' + x-showExample: false + - name: interpolation + in: query + required: false + schema: + anyOf: + - $ref: '#/components/schemas/InterpolationMethod' + title: Interpolation Override. + - $ref: '#/components/schemas/InterpolationSpec' + title: Interpolation Override. + title: Interpolation + x-showExample: false + - name: freq + in: query + required: false + schema: + type: string + title: Grouping Interval Override + description: Override for the `freq` query attribute. + oneOf: + - type: string + format: period + example: PT3H15M + pattern: >- + ^P([0-9]+Y)?([0-9]+M)?([0-9]+W)?([0-9]+D)?(T([0-9]+H)?([0-9]+M)?([0-9]+(\.[0-9]*)?S)?)?$ + title: 'ISO8601 period ' + description: >- + A period in [ISO8601 + duration](https://en.wikipedia.org/wiki/ISO_8601#Durations) + format. + - type: string + description: >- + When `inferred` is specified, the frequency of aggregation + will be inferred from the main/first time series. This can be + used to regularize the time series + enum: + - inferred + description: Override for the `freq` query attribute. + x-showExample: false + - name: from + in: query + required: false + schema: + type: string + title: From Override. + oneOf: + - title: ISO8601 absolute timestamp + type: string + format: date-time + example: '2018-03-21T12:23:00+01:00' + description: >- + A date or date-time in + [ISO8601](https://en.wikipedia.org/wiki/ISO_8601#Combined_date_and_time_representations) + format. When no timezone is specified, the UTC timezone is + assumed (`+00:00`) + pattern: '[0-9]{4}-[0-9]{2}-[0-9]{2}(T.*)?' + - type: integer + title: UNIX epoch milliseconds + minimum: 0 + description: >- + Absolute timestamp milliseconds in unix epoch since + 1970-01-01. + example: 1534836422284 + - type: string + format: period + example: PT3H15M + pattern: >- + ^P([0-9]+Y)?([0-9]+M)?([0-9]+W)?([0-9]+D)?(T([0-9]+H)?([0-9]+M)?([0-9]+(\.[0-9]*)?S)?)?$ + title: ISO8601 Period Before Now + description: >- + Specifies a timestamp before _now_ as a period in [ISO8601 + duration](https://en.wikipedia.org/wiki/ISO_8601#Durations) + format. + x-showExample: false + - name: until + in: query + required: false + schema: + type: string + title: From Override. + oneOf: + - title: ISO8601 absolute timestamp + type: string + format: date-time + example: '2018-03-21T12:23:00+01:00' + description: >- + A date or date-time in + [ISO8601](https://en.wikipedia.org/wiki/ISO_8601#Combined_date_and_time_representations) + format. When no timezone is specified, the UTC timezone is + assumed (`+00:00`) + pattern: '[0-9]{4}-[0-9]{2}-[0-9]{2}(T.*)?' + - type: integer + title: UNIX epoch milliseconds + minimum: 0 + description: >- + Absolute timestamp milliseconds in unix epoch since + 1970-01-01. + example: 1534836422284 + - type: string + format: period + example: PT3H15M + pattern: >- + ^P([0-9]+Y)?([0-9]+M)?([0-9]+W)?([0-9]+D)?(T([0-9]+H)?([0-9]+M)?([0-9]+(\.[0-9]*)?S)?)?$ + title: ISO8601 Period Before Now + description: >- + Specifies a timestamp before _now_ as a period in [ISO8601 + duration](https://en.wikipedia.org/wiki/ISO_8601#Durations) + format. + x-showExample: false + - name: window + in: query + required: false + schema: + type: string + title: Window Override. + oneOf: + - type: string + format: period + example: PT3H15M + pattern: >- + ^P([0-9]+Y)?([0-9]+M)?([0-9]+W)?([0-9]+D)?(T([0-9]+H)?([0-9]+M)?([0-9]+(\.[0-9]*)?S)?)?$ + title: 'ISO8601 period ' + description: >- + A period in [ISO8601 + duration](https://en.wikipedia.org/wiki/ISO_8601#Durations) + format. + x-showExample: false + - name: periods + in: query + required: false + schema: + type: integer + title: Periods Override. + x-showExample: false + - name: render + in: query + required: false + schema: + anyOf: + - $ref: '#/components/schemas/_RenderMode' + title: Render Mode + - $ref: '#/components/schemas/Render' + title: Render Override. + title: Render + x-showExample: false + - name: accept + in: header + required: false + schema: + anyOf: + - type: string + nullable: true + title: Accept header + description: Use a 'text/csv' accept header to get CSV formatted results. + description: Use a 'text/csv' accept header to get CSV formatted results. + x-showExample: false + responses: + '200': + description: Successful Response + content: + application/json: + schema: + $ref: '#/components/schemas/QueryResult' + examples: + default: + summary: Query response example for `?render=DEFAULT` + value: + data: + - columns: + - timestamp + - resource: 06e267b9-8714-4c58-ac53-df6a291b59dc + metric: temperature + aggregation: max + - resource: 06e267b9-8714-4c58-ac53-df6a291b59dc + metric: humidity + aggregation: mean + - resource: 7f33317b-a45e-4b0a-94a2-9bbbdc746cc1 + metric: temperature + aggregation: max + - resource: 7f33317b-a45e-4b0a-94a2-9bbbdc746cc1 + metric: humidity + aggregation: mean + data: + - - 1717977600000 + - 12.67 + - 80 + - 12.78 + - 83.125 + - - 1718006400000 + - 13.74 + - 88 + - 13.06 + - 80.875 + - - 1718035200000 + - null + - null + - 13.35 + - 78.5 + - - 1718064000000 + - 7.49 + - 88 + - 13 + - 81.875 + - - 1718092800000 + - null + - null + - 14.84 + - 62.375 + - - 1718121600000 + - null + - null + - 14.59 + - 76.5 + - - 1718150400000 + - 9.34 + - 90 + - 13.08 + - 85.375 + - - 1718179200000 + - null + - null + - 15.41 + - 61.75 + - - 1718208000000 + - null + - null + - 15.1 + - 74 + - - 1718236800000 + - 9.03 + - 90 + - 14.99 + - 82.875 + - - 1718265600000 + - null + - null + - 18.64 + - 57.5 + - - 1718294400000 + - null + - null + - 18.35 + - 62.5 + - - 1718323200000 + - 12.98 + - 80 + - 13.02 + - 81.625 + - - 1718352000000 + - null + - null + - 18.19 + - 81.5 + - - 1718380800000 + - null + - null + - 17.75 + - 88.875 + - - 1718409600000 + - 11.8 + - 88 + - 13.4 + - 87.25 + - - 1718438400000 + - null + - null + - 16.53 + - 64.5 + - - 1718467200000 + - null + - null + - 14.69 + - 84.875 + - - 1718496000000 + - 12.12 + - 89 + - 13.77 + - 87.875 + - - 1718524800000 + - null + - null + - 19.27 + - 73.125 + - - 1718553600000 + - null + - null + - 19.12 + - 69.75 + data_axis: column + attributes: + role: input + window_spec: + from: 1717977600000 + until: 1718582400000 + window: P7D + freq: PT8H + messages: + - message: >- + Series ('06e267b9-8714-4c58-ac53-df6a291b59dc', + 'temperature', 'max'), aggregated on freq PT8H + contains 26 null values. These will NOT be + interpolated + level: warning + timestamp: '2024-07-01T13:00:20.886997+00:00' + action: GET /queries/v1/data/weatherHistoryDailyAndHourly + category: data + - message: >- + Series ('06e267b9-8714-4c58-ac53-df6a291b59dc', + 'humidity', 'mean'), aggregated on freq PT8H contains + 26 null values. These will NOT be interpolated + level: warning + timestamp: '2024-07-01T13:00:20.887995+00:00' + action: GET /queries/v1/data/weatherHistoryDailyAndHourly + category: data + query: + freq: PT8H + from_: 2024-06-16 12:00 AM + until: 2024-06-17 12:00 AM + data: + - metric: temperature + resource: 06e267b9-8714-4c58-ac53-df6a291b59dc + seriesId: 97de31f5-7b69-4a56-87e0-6b5c8a6b1872 + aggregation: max + - metric: humidity + resource: 06e267b9-8714-4c58-ac53-df6a291b59dc + seriesId: 8eb0799f-1af7-4af2-8233-517cb4bdc3c6 + aggregation: mean + - metric: temperature + resource: 7f33317b-a45e-4b0a-94a2-9bbbdc746cc1 + seriesId: 5055a943-e1c0-41d6-a6c9-7b20427a742d + aggregation: max + - metric: humidity + resource: 7f33317b-a45e-4b0a-94a2-9bbbdc746cc1 + seriesId: 16ac581f-f5ce-4845-9b6a-1b16249af051 + aggregation: mean + hier_dict: + summary: Query response example for `?render=HIER_DICT` + value: + data: + - - role: input + timestamp: 1717977600000 + timestamp_iso: '2024-06-10T00:00:00+00:00' + levels: + - resource + - metric + - aggregation + 06e267b9-8714-4c58-ac53-df6a291b59dc: + humidity: + mean: 80 + temperature: + max: 12.67 + 7f33317b-a45e-4b0a-94a2-9bbbdc746cc1: + humidity: + mean: 83.125 + temperature: + max: 12.78 + - role: input + timestamp: 1718006400000 + timestamp_iso: '2024-06-10T08:00:00+00:00' + levels: + - resource + - metric + - aggregation + 06e267b9-8714-4c58-ac53-df6a291b59dc: + humidity: + mean: 88 + temperature: + max: 13.74 + 7f33317b-a45e-4b0a-94a2-9bbbdc746cc1: + humidity: + mean: 80.875 + temperature: + max: 13.06 + - role: input + timestamp: 1718035200000 + timestamp_iso: '2024-06-10T16:00:00+00:00' + levels: + - resource + - metric + - aggregation + 06e267b9-8714-4c58-ac53-df6a291b59dc: + humidity: {} + temperature: {} + 7f33317b-a45e-4b0a-94a2-9bbbdc746cc1: + humidity: + mean: 78.5 + temperature: + max: 13.35 + - role: input + timestamp: 1718064000000 + timestamp_iso: '2024-06-11T00:00:00+00:00' + levels: + - resource + - metric + - aggregation + 06e267b9-8714-4c58-ac53-df6a291b59dc: + humidity: + mean: 88 + temperature: + max: 7.49 + 7f33317b-a45e-4b0a-94a2-9bbbdc746cc1: + humidity: + mean: 81.875 + temperature: + max: 13 + - role: input + timestamp: 1718092800000 + timestamp_iso: '2024-06-11T08:00:00+00:00' + levels: + - resource + - metric + - aggregation + 06e267b9-8714-4c58-ac53-df6a291b59dc: + humidity: {} + temperature: {} + 7f33317b-a45e-4b0a-94a2-9bbbdc746cc1: + humidity: + mean: 62.375 + temperature: + max: 14.84 + - role: input + timestamp: 1718121600000 + timestamp_iso: '2024-06-11T16:00:00+00:00' + levels: + - resource + - metric + - aggregation + 06e267b9-8714-4c58-ac53-df6a291b59dc: + humidity: {} + temperature: {} + 7f33317b-a45e-4b0a-94a2-9bbbdc746cc1: + humidity: + mean: 76.5 + temperature: + max: 14.59 + - role: input + timestamp: 1718150400000 + timestamp_iso: '2024-06-12T00:00:00+00:00' + levels: + - resource + - metric + - aggregation + 06e267b9-8714-4c58-ac53-df6a291b59dc: + humidity: + mean: 90 + temperature: + max: 9.34 + 7f33317b-a45e-4b0a-94a2-9bbbdc746cc1: + humidity: + mean: 85.375 + temperature: + max: 13.08 + - role: input + timestamp: 1718179200000 + timestamp_iso: '2024-06-12T08:00:00+00:00' + levels: + - resource + - metric + - aggregation + 06e267b9-8714-4c58-ac53-df6a291b59dc: + humidity: {} + temperature: {} + 7f33317b-a45e-4b0a-94a2-9bbbdc746cc1: + humidity: + mean: 61.75 + temperature: + max: 15.41 + - role: input + timestamp: 1718208000000 + timestamp_iso: '2024-06-12T16:00:00+00:00' + levels: + - resource + - metric + - aggregation + 06e267b9-8714-4c58-ac53-df6a291b59dc: + humidity: {} + temperature: {} + 7f33317b-a45e-4b0a-94a2-9bbbdc746cc1: + humidity: + mean: 74 + temperature: + max: 15.1 + - role: input + timestamp: 1718236800000 + timestamp_iso: '2024-06-13T00:00:00+00:00' + levels: + - resource + - metric + - aggregation + 06e267b9-8714-4c58-ac53-df6a291b59dc: + humidity: + mean: 90 + temperature: + max: 9.03 + 7f33317b-a45e-4b0a-94a2-9bbbdc746cc1: + humidity: + mean: 82.875 + temperature: + max: 14.99 + - role: input + timestamp: 1718265600000 + timestamp_iso: '2024-06-13T08:00:00+00:00' + levels: + - resource + - metric + - aggregation + 06e267b9-8714-4c58-ac53-df6a291b59dc: + humidity: {} + temperature: {} + 7f33317b-a45e-4b0a-94a2-9bbbdc746cc1: + humidity: + mean: 57.5 + temperature: + max: 18.64 + - role: input + timestamp: 1718294400000 + timestamp_iso: '2024-06-13T16:00:00+00:00' + levels: + - resource + - metric + - aggregation + 06e267b9-8714-4c58-ac53-df6a291b59dc: + humidity: {} + temperature: {} + 7f33317b-a45e-4b0a-94a2-9bbbdc746cc1: + humidity: + mean: 62.5 + temperature: + max: 18.35 + - role: input + timestamp: 1718323200000 + timestamp_iso: '2024-06-14T00:00:00+00:00' + levels: + - resource + - metric + - aggregation + 06e267b9-8714-4c58-ac53-df6a291b59dc: + humidity: + mean: 80 + temperature: + max: 12.98 + 7f33317b-a45e-4b0a-94a2-9bbbdc746cc1: + humidity: + mean: 81.625 + temperature: + max: 13.02 + - role: input + timestamp: 1718352000000 + timestamp_iso: '2024-06-14T08:00:00+00:00' + levels: + - resource + - metric + - aggregation + 06e267b9-8714-4c58-ac53-df6a291b59dc: + humidity: {} + temperature: {} + 7f33317b-a45e-4b0a-94a2-9bbbdc746cc1: + humidity: + mean: 81.5 + temperature: + max: 18.19 + - role: input + timestamp: 1718380800000 + timestamp_iso: '2024-06-14T16:00:00+00:00' + levels: + - resource + - metric + - aggregation + 06e267b9-8714-4c58-ac53-df6a291b59dc: + humidity: {} + temperature: {} + 7f33317b-a45e-4b0a-94a2-9bbbdc746cc1: + humidity: + mean: 88.875 + temperature: + max: 17.75 + - role: input + timestamp: 1718409600000 + timestamp_iso: '2024-06-15T00:00:00+00:00' + levels: + - resource + - metric + - aggregation + 06e267b9-8714-4c58-ac53-df6a291b59dc: + humidity: + mean: 88 + temperature: + max: 11.8 + 7f33317b-a45e-4b0a-94a2-9bbbdc746cc1: + humidity: + mean: 87.25 + temperature: + max: 13.4 + - role: input + timestamp: 1718438400000 + timestamp_iso: '2024-06-15T08:00:00+00:00' + levels: + - resource + - metric + - aggregation + 06e267b9-8714-4c58-ac53-df6a291b59dc: + humidity: {} + temperature: {} + 7f33317b-a45e-4b0a-94a2-9bbbdc746cc1: + humidity: + mean: 64.5 + temperature: + max: 16.53 + - role: input + timestamp: 1718467200000 + timestamp_iso: '2024-06-15T16:00:00+00:00' + levels: + - resource + - metric + - aggregation + 06e267b9-8714-4c58-ac53-df6a291b59dc: + humidity: {} + temperature: {} + 7f33317b-a45e-4b0a-94a2-9bbbdc746cc1: + humidity: + mean: 84.875 + temperature: + max: 14.69 + - role: input + timestamp: 1718496000000 + timestamp_iso: '2024-06-16T00:00:00+00:00' + levels: + - resource + - metric + - aggregation + 06e267b9-8714-4c58-ac53-df6a291b59dc: + humidity: + mean: 89 + temperature: + max: 12.12 + 7f33317b-a45e-4b0a-94a2-9bbbdc746cc1: + humidity: + mean: 87.875 + temperature: + max: 13.77 + - role: input + timestamp: 1718524800000 + timestamp_iso: '2024-06-16T08:00:00+00:00' + levels: + - resource + - metric + - aggregation + 06e267b9-8714-4c58-ac53-df6a291b59dc: + humidity: {} + temperature: {} + 7f33317b-a45e-4b0a-94a2-9bbbdc746cc1: + humidity: + mean: 73.125 + temperature: + max: 19.27 + - role: input + timestamp: 1718553600000 + timestamp_iso: '2024-06-16T16:00:00+00:00' + levels: + - resource + - metric + - aggregation + 06e267b9-8714-4c58-ac53-df6a291b59dc: + humidity: {} + temperature: {} + 7f33317b-a45e-4b0a-94a2-9bbbdc746cc1: + humidity: + mean: 69.75 + temperature: + max: 19.12 + messages: + - message: >- + Series ('06e267b9-8714-4c58-ac53-df6a291b59dc', + 'temperature', 'max'), aggregated on freq PT8H + contains 26 null values. These will NOT be + interpolated + level: warning + timestamp: '2024-07-01T12:57:58.698912+00:00' + action: GET /queries/v1/data/weatherHistoryDailyAndHourly + category: data + - message: >- + Series ('06e267b9-8714-4c58-ac53-df6a291b59dc', + 'humidity', 'mean'), aggregated on freq PT8H contains + 26 null values. These will NOT be interpolated + level: warning + timestamp: '2024-07-01T12:57:58.699998+00:00' + action: GET /queries/v1/data/weatherHistoryDailyAndHourly + category: data + query: + freq: PT8H + from_: 2024-06-16 12:00 AM + until: 2024-06-17 12:00 AM + data: + - metric: temperature + resource: 06e267b9-8714-4c58-ac53-df6a291b59dc + seriesId: 97de31f5-7b69-4a56-87e0-6b5c8a6b1872 + aggregation: max + - metric: humidity + resource: 06e267b9-8714-4c58-ac53-df6a291b59dc + seriesId: 8eb0799f-1af7-4af2-8233-517cb4bdc3c6 + aggregation: mean + - metric: temperature + resource: 7f33317b-a45e-4b0a-94a2-9bbbdc746cc1 + seriesId: 5055a943-e1c0-41d6-a6c9-7b20427a742d + aggregation: max + - metric: humidity + resource: 7f33317b-a45e-4b0a-94a2-9bbbdc746cc1 + seriesId: 16ac581f-f5ce-4845-9b6a-1b16249af051 + aggregation: mean + render: + mode: HIER_DICT + upload: + summary: Query response example for `?render=UPLOAD` + value: + data: + - - role: input + timestamp: 1717977600000 + 06e267b9-8714-4c58-ac53-df6a291b59dc.temperature.max: 12.67 + 06e267b9-8714-4c58-ac53-df6a291b59dc.humidity.mean: 80 + 7f33317b-a45e-4b0a-94a2-9bbbdc746cc1.temperature.max: 12.78 + 7f33317b-a45e-4b0a-94a2-9bbbdc746cc1.humidity.mean: 83.125 + - role: input + timestamp: 1718006400000 + 06e267b9-8714-4c58-ac53-df6a291b59dc.temperature.max: 13.74 + 06e267b9-8714-4c58-ac53-df6a291b59dc.humidity.mean: 88 + 7f33317b-a45e-4b0a-94a2-9bbbdc746cc1.temperature.max: 13.06 + 7f33317b-a45e-4b0a-94a2-9bbbdc746cc1.humidity.mean: 80.875 + - role: input + timestamp: 1718035200000 + 7f33317b-a45e-4b0a-94a2-9bbbdc746cc1.temperature.max: 13.35 + 7f33317b-a45e-4b0a-94a2-9bbbdc746cc1.humidity.mean: 78.5 + - role: input + timestamp: 1718064000000 + 06e267b9-8714-4c58-ac53-df6a291b59dc.temperature.max: 7.49 + 06e267b9-8714-4c58-ac53-df6a291b59dc.humidity.mean: 88 + 7f33317b-a45e-4b0a-94a2-9bbbdc746cc1.temperature.max: 13 + 7f33317b-a45e-4b0a-94a2-9bbbdc746cc1.humidity.mean: 81.875 + - role: input + timestamp: 1718092800000 + 7f33317b-a45e-4b0a-94a2-9bbbdc746cc1.temperature.max: 14.84 + 7f33317b-a45e-4b0a-94a2-9bbbdc746cc1.humidity.mean: 62.375 + - role: input + timestamp: 1718121600000 + 7f33317b-a45e-4b0a-94a2-9bbbdc746cc1.temperature.max: 14.59 + 7f33317b-a45e-4b0a-94a2-9bbbdc746cc1.humidity.mean: 76.5 + - role: input + timestamp: 1718150400000 + 06e267b9-8714-4c58-ac53-df6a291b59dc.temperature.max: 9.34 + 06e267b9-8714-4c58-ac53-df6a291b59dc.humidity.mean: 90 + 7f33317b-a45e-4b0a-94a2-9bbbdc746cc1.temperature.max: 13.08 + 7f33317b-a45e-4b0a-94a2-9bbbdc746cc1.humidity.mean: 85.375 + - role: input + timestamp: 1718179200000 + 7f33317b-a45e-4b0a-94a2-9bbbdc746cc1.temperature.max: 15.41 + 7f33317b-a45e-4b0a-94a2-9bbbdc746cc1.humidity.mean: 61.75 + - role: input + timestamp: 1718208000000 + 7f33317b-a45e-4b0a-94a2-9bbbdc746cc1.temperature.max: 15.1 + 7f33317b-a45e-4b0a-94a2-9bbbdc746cc1.humidity.mean: 74 + - role: input + timestamp: 1718236800000 + 06e267b9-8714-4c58-ac53-df6a291b59dc.temperature.max: 9.03 + 06e267b9-8714-4c58-ac53-df6a291b59dc.humidity.mean: 90 + 7f33317b-a45e-4b0a-94a2-9bbbdc746cc1.temperature.max: 14.99 + 7f33317b-a45e-4b0a-94a2-9bbbdc746cc1.humidity.mean: 82.875 + - role: input + timestamp: 1718265600000 + 7f33317b-a45e-4b0a-94a2-9bbbdc746cc1.temperature.max: 18.64 + 7f33317b-a45e-4b0a-94a2-9bbbdc746cc1.humidity.mean: 57.5 + - role: input + timestamp: 1718294400000 + 7f33317b-a45e-4b0a-94a2-9bbbdc746cc1.temperature.max: 18.35 + 7f33317b-a45e-4b0a-94a2-9bbbdc746cc1.humidity.mean: 62.5 + - role: input + timestamp: 1718323200000 + 06e267b9-8714-4c58-ac53-df6a291b59dc.temperature.max: 12.98 + 06e267b9-8714-4c58-ac53-df6a291b59dc.humidity.mean: 80 + 7f33317b-a45e-4b0a-94a2-9bbbdc746cc1.temperature.max: 13.02 + 7f33317b-a45e-4b0a-94a2-9bbbdc746cc1.humidity.mean: 81.625 + - role: input + timestamp: 1718352000000 + 7f33317b-a45e-4b0a-94a2-9bbbdc746cc1.temperature.max: 18.19 + 7f33317b-a45e-4b0a-94a2-9bbbdc746cc1.humidity.mean: 81.5 + - role: input + timestamp: 1718380800000 + 7f33317b-a45e-4b0a-94a2-9bbbdc746cc1.temperature.max: 17.75 + 7f33317b-a45e-4b0a-94a2-9bbbdc746cc1.humidity.mean: 88.875 + - role: input + timestamp: 1718409600000 + 06e267b9-8714-4c58-ac53-df6a291b59dc.temperature.max: 11.8 + 06e267b9-8714-4c58-ac53-df6a291b59dc.humidity.mean: 88 + 7f33317b-a45e-4b0a-94a2-9bbbdc746cc1.temperature.max: 13.4 + 7f33317b-a45e-4b0a-94a2-9bbbdc746cc1.humidity.mean: 87.25 + - role: input + timestamp: 1718438400000 + 7f33317b-a45e-4b0a-94a2-9bbbdc746cc1.temperature.max: 16.53 + 7f33317b-a45e-4b0a-94a2-9bbbdc746cc1.humidity.mean: 64.5 + - role: input + timestamp: 1718467200000 + 7f33317b-a45e-4b0a-94a2-9bbbdc746cc1.temperature.max: 14.69 + 7f33317b-a45e-4b0a-94a2-9bbbdc746cc1.humidity.mean: 84.875 + - role: input + timestamp: 1718496000000 + 06e267b9-8714-4c58-ac53-df6a291b59dc.temperature.max: 12.12 + 06e267b9-8714-4c58-ac53-df6a291b59dc.humidity.mean: 89 + 7f33317b-a45e-4b0a-94a2-9bbbdc746cc1.temperature.max: 13.77 + 7f33317b-a45e-4b0a-94a2-9bbbdc746cc1.humidity.mean: 87.875 + - role: input + timestamp: 1718524800000 + 7f33317b-a45e-4b0a-94a2-9bbbdc746cc1.temperature.max: 19.27 + 7f33317b-a45e-4b0a-94a2-9bbbdc746cc1.humidity.mean: 73.125 + - role: input + timestamp: 1718553600000 + 7f33317b-a45e-4b0a-94a2-9bbbdc746cc1.temperature.max: 19.12 + 7f33317b-a45e-4b0a-94a2-9bbbdc746cc1.humidity.mean: 69.75 + messages: + - message: >- + Series ('06e267b9-8714-4c58-ac53-df6a291b59dc', + 'temperature', 'max'), aggregated on freq PT8H + contains 26 null values. These will NOT be + interpolated + level: warning + timestamp: '2024-07-01T13:03:24.128684+00:00' + action: GET /queries/v1/data/weatherHistoryDailyAndHourly + category: data + - message: >- + Series ('06e267b9-8714-4c58-ac53-df6a291b59dc', + 'humidity', 'mean'), aggregated on freq PT8H contains + 26 null values. These will NOT be interpolated + level: warning + timestamp: '2024-07-01T13:03:24.129391+00:00' + action: GET /queries/v1/data/weatherHistoryDailyAndHourly + category: data + query: + freq: PT8H + from_: 2024-06-16 12:00 AM + until: 2024-06-17 12:00 AM + data: + - metric: temperature + resource: 06e267b9-8714-4c58-ac53-df6a291b59dc + seriesId: 97de31f5-7b69-4a56-87e0-6b5c8a6b1872 + aggregation: max + - metric: humidity + resource: 06e267b9-8714-4c58-ac53-df6a291b59dc + seriesId: 8eb0799f-1af7-4af2-8233-517cb4bdc3c6 + aggregation: mean + - metric: temperature + resource: 7f33317b-a45e-4b0a-94a2-9bbbdc746cc1 + seriesId: 5055a943-e1c0-41d6-a6c9-7b20427a742d + aggregation: max + - metric: humidity + resource: 7f33317b-a45e-4b0a-94a2-9bbbdc746cc1 + seriesId: 16ac581f-f5ce-4845-9b6a-1b16249af051 + aggregation: mean + render: + mode: UPLOAD + flat_dict: + summary: Query response example for `?render=FLAT_DICT` + value: + data: + - - role: input + timestamp: 1717977600000 + timestamp_iso: '2024-06-10T00:00:00+00:00' + levels: + - resource.metric.aggregation + 06e267b9-8714-4c58-ac53-df6a291b59dc.temperature.max: 12.67 + 06e267b9-8714-4c58-ac53-df6a291b59dc.humidity.mean: 80 + 7f33317b-a45e-4b0a-94a2-9bbbdc746cc1.temperature.max: 12.78 + 7f33317b-a45e-4b0a-94a2-9bbbdc746cc1.humidity.mean: 83.125 + - role: input + timestamp: 1718006400000 + timestamp_iso: '2024-06-10T08:00:00+00:00' + levels: + - resource.metric.aggregation + 06e267b9-8714-4c58-ac53-df6a291b59dc.temperature.max: 13.74 + 06e267b9-8714-4c58-ac53-df6a291b59dc.humidity.mean: 88 + 7f33317b-a45e-4b0a-94a2-9bbbdc746cc1.temperature.max: 13.06 + 7f33317b-a45e-4b0a-94a2-9bbbdc746cc1.humidity.mean: 80.875 + - role: input + timestamp: 1718035200000 + timestamp_iso: '2024-06-10T16:00:00+00:00' + levels: + - resource.metric.aggregation + 7f33317b-a45e-4b0a-94a2-9bbbdc746cc1.temperature.max: 13.35 + 7f33317b-a45e-4b0a-94a2-9bbbdc746cc1.humidity.mean: 78.5 + - role: input + timestamp: 1718064000000 + timestamp_iso: '2024-06-11T00:00:00+00:00' + levels: + - resource.metric.aggregation + 06e267b9-8714-4c58-ac53-df6a291b59dc.temperature.max: 7.49 + 06e267b9-8714-4c58-ac53-df6a291b59dc.humidity.mean: 88 + 7f33317b-a45e-4b0a-94a2-9bbbdc746cc1.temperature.max: 13 + 7f33317b-a45e-4b0a-94a2-9bbbdc746cc1.humidity.mean: 81.875 + - role: input + timestamp: 1718092800000 + timestamp_iso: '2024-06-11T08:00:00+00:00' + levels: + - resource.metric.aggregation + 7f33317b-a45e-4b0a-94a2-9bbbdc746cc1.temperature.max: 14.84 + 7f33317b-a45e-4b0a-94a2-9bbbdc746cc1.humidity.mean: 62.375 + - role: input + timestamp: 1718121600000 + timestamp_iso: '2024-06-11T16:00:00+00:00' + levels: + - resource.metric.aggregation + 7f33317b-a45e-4b0a-94a2-9bbbdc746cc1.temperature.max: 14.59 + 7f33317b-a45e-4b0a-94a2-9bbbdc746cc1.humidity.mean: 76.5 + - role: input + timestamp: 1718150400000 + timestamp_iso: '2024-06-12T00:00:00+00:00' + levels: + - resource.metric.aggregation + 06e267b9-8714-4c58-ac53-df6a291b59dc.temperature.max: 9.34 + 06e267b9-8714-4c58-ac53-df6a291b59dc.humidity.mean: 90 + 7f33317b-a45e-4b0a-94a2-9bbbdc746cc1.temperature.max: 13.08 + 7f33317b-a45e-4b0a-94a2-9bbbdc746cc1.humidity.mean: 85.375 + - role: input + timestamp: 1718179200000 + timestamp_iso: '2024-06-12T08:00:00+00:00' + levels: + - resource.metric.aggregation + 7f33317b-a45e-4b0a-94a2-9bbbdc746cc1.temperature.max: 15.41 + 7f33317b-a45e-4b0a-94a2-9bbbdc746cc1.humidity.mean: 61.75 + - role: input + timestamp: 1718208000000 + timestamp_iso: '2024-06-12T16:00:00+00:00' + levels: + - resource.metric.aggregation + 7f33317b-a45e-4b0a-94a2-9bbbdc746cc1.temperature.max: 15.1 + 7f33317b-a45e-4b0a-94a2-9bbbdc746cc1.humidity.mean: 74 + - role: input + timestamp: 1718236800000 + timestamp_iso: '2024-06-13T00:00:00+00:00' + levels: + - resource.metric.aggregation + 06e267b9-8714-4c58-ac53-df6a291b59dc.temperature.max: 9.03 + 06e267b9-8714-4c58-ac53-df6a291b59dc.humidity.mean: 90 + 7f33317b-a45e-4b0a-94a2-9bbbdc746cc1.temperature.max: 14.99 + 7f33317b-a45e-4b0a-94a2-9bbbdc746cc1.humidity.mean: 82.875 + - role: input + timestamp: 1718265600000 + timestamp_iso: '2024-06-13T08:00:00+00:00' + levels: + - resource.metric.aggregation + 7f33317b-a45e-4b0a-94a2-9bbbdc746cc1.temperature.max: 18.64 + 7f33317b-a45e-4b0a-94a2-9bbbdc746cc1.humidity.mean: 57.5 + - role: input + timestamp: 1718294400000 + timestamp_iso: '2024-06-13T16:00:00+00:00' + levels: + - resource.metric.aggregation + 7f33317b-a45e-4b0a-94a2-9bbbdc746cc1.temperature.max: 18.35 + 7f33317b-a45e-4b0a-94a2-9bbbdc746cc1.humidity.mean: 62.5 + - role: input + timestamp: 1718323200000 + timestamp_iso: '2024-06-14T00:00:00+00:00' + levels: + - resource.metric.aggregation + 06e267b9-8714-4c58-ac53-df6a291b59dc.temperature.max: 12.98 + 06e267b9-8714-4c58-ac53-df6a291b59dc.humidity.mean: 80 + 7f33317b-a45e-4b0a-94a2-9bbbdc746cc1.temperature.max: 13.02 + 7f33317b-a45e-4b0a-94a2-9bbbdc746cc1.humidity.mean: 81.625 + - role: input + timestamp: 1718352000000 + timestamp_iso: '2024-06-14T08:00:00+00:00' + levels: + - resource.metric.aggregation + 7f33317b-a45e-4b0a-94a2-9bbbdc746cc1.temperature.max: 18.19 + 7f33317b-a45e-4b0a-94a2-9bbbdc746cc1.humidity.mean: 81.5 + - role: input + timestamp: 1718380800000 + timestamp_iso: '2024-06-14T16:00:00+00:00' + levels: + - resource.metric.aggregation + 7f33317b-a45e-4b0a-94a2-9bbbdc746cc1.temperature.max: 17.75 + 7f33317b-a45e-4b0a-94a2-9bbbdc746cc1.humidity.mean: 88.875 + - role: input + timestamp: 1718409600000 + timestamp_iso: '2024-06-15T00:00:00+00:00' + levels: + - resource.metric.aggregation + 06e267b9-8714-4c58-ac53-df6a291b59dc.temperature.max: 11.8 + 06e267b9-8714-4c58-ac53-df6a291b59dc.humidity.mean: 88 + 7f33317b-a45e-4b0a-94a2-9bbbdc746cc1.temperature.max: 13.4 + 7f33317b-a45e-4b0a-94a2-9bbbdc746cc1.humidity.mean: 87.25 + - role: input + timestamp: 1718438400000 + timestamp_iso: '2024-06-15T08:00:00+00:00' + levels: + - resource.metric.aggregation + 7f33317b-a45e-4b0a-94a2-9bbbdc746cc1.temperature.max: 16.53 + 7f33317b-a45e-4b0a-94a2-9bbbdc746cc1.humidity.mean: 64.5 + - role: input + timestamp: 1718467200000 + timestamp_iso: '2024-06-15T16:00:00+00:00' + levels: + - resource.metric.aggregation + 7f33317b-a45e-4b0a-94a2-9bbbdc746cc1.temperature.max: 14.69 + 7f33317b-a45e-4b0a-94a2-9bbbdc746cc1.humidity.mean: 84.875 + - role: input + timestamp: 1718496000000 + timestamp_iso: '2024-06-16T00:00:00+00:00' + levels: + - resource.metric.aggregation + 06e267b9-8714-4c58-ac53-df6a291b59dc.temperature.max: 12.12 + 06e267b9-8714-4c58-ac53-df6a291b59dc.humidity.mean: 89 + 7f33317b-a45e-4b0a-94a2-9bbbdc746cc1.temperature.max: 13.77 + 7f33317b-a45e-4b0a-94a2-9bbbdc746cc1.humidity.mean: 87.875 + - role: input + timestamp: 1718524800000 + timestamp_iso: '2024-06-16T08:00:00+00:00' + levels: + - resource.metric.aggregation + 7f33317b-a45e-4b0a-94a2-9bbbdc746cc1.temperature.max: 19.27 + 7f33317b-a45e-4b0a-94a2-9bbbdc746cc1.humidity.mean: 73.125 + - role: input + timestamp: 1718553600000 + timestamp_iso: '2024-06-16T16:00:00+00:00' + levels: + - resource.metric.aggregation + 7f33317b-a45e-4b0a-94a2-9bbbdc746cc1.temperature.max: 19.12 + 7f33317b-a45e-4b0a-94a2-9bbbdc746cc1.humidity.mean: 69.75 + messages: + - message: >- + Series ('06e267b9-8714-4c58-ac53-df6a291b59dc', + 'temperature', 'max'), aggregated on freq PT8H + contains 26 null values. These will NOT be + interpolated + level: warning + timestamp: '2024-07-01T12:59:32.689972+00:00' + action: GET /queries/v1/data/weatherHistoryDailyAndHourly + category: data + - message: >- + Series ('06e267b9-8714-4c58-ac53-df6a291b59dc', + 'humidity', 'mean'), aggregated on freq PT8H contains + 26 null values. These will NOT be interpolated + level: warning + timestamp: '2024-07-01T12:59:32.691573+00:00' + action: GET /queries/v1/data/weatherHistoryDailyAndHourly + category: data + query: + freq: PT8H + from_: 2024-06-16 12:00 AM + until: 2024-06-17 12:00 AM + data: + - metric: temperature + resource: 06e267b9-8714-4c58-ac53-df6a291b59dc + seriesId: 97de31f5-7b69-4a56-87e0-6b5c8a6b1872 + aggregation: max + - metric: humidity + resource: 06e267b9-8714-4c58-ac53-df6a291b59dc + seriesId: 8eb0799f-1af7-4af2-8233-517cb4bdc3c6 + aggregation: mean + - metric: temperature + resource: 7f33317b-a45e-4b0a-94a2-9bbbdc746cc1 + seriesId: 5055a943-e1c0-41d6-a6c9-7b20427a742d + aggregation: max + - metric: humidity + resource: 7f33317b-a45e-4b0a-94a2-9bbbdc746cc1 + seriesId: 16ac581f-f5ce-4845-9b6a-1b16249af051 + aggregation: mean + render: + mode: FLAT_DICT + metric_flat_dict: + summary: Query response example for `?render=METRIC_FLAT_DICT` + value: + data: + - - role: input + timestamp: 1717977600000 + timestamp_iso: '2024-06-10T00:00:00+00:00' + humidity: + 06e267b9-8714-4c58-ac53-df6a291b59dc.mean: 80 + 7f33317b-a45e-4b0a-94a2-9bbbdc746cc1.mean: 83.125 + temperature: + 06e267b9-8714-4c58-ac53-df6a291b59dc.max: 12.67 + 7f33317b-a45e-4b0a-94a2-9bbbdc746cc1.max: 12.78 + - role: input + timestamp: 1718006400000 + timestamp_iso: '2024-06-10T08:00:00+00:00' + humidity: + 06e267b9-8714-4c58-ac53-df6a291b59dc.mean: 88 + 7f33317b-a45e-4b0a-94a2-9bbbdc746cc1.mean: 80.875 + temperature: + 06e267b9-8714-4c58-ac53-df6a291b59dc.max: 13.74 + 7f33317b-a45e-4b0a-94a2-9bbbdc746cc1.max: 13.06 + - role: input + timestamp: 1718035200000 + timestamp_iso: '2024-06-10T16:00:00+00:00' + humidity: + 7f33317b-a45e-4b0a-94a2-9bbbdc746cc1.mean: 78.5 + temperature: + 7f33317b-a45e-4b0a-94a2-9bbbdc746cc1.max: 13.35 + - role: input + timestamp: 1718064000000 + timestamp_iso: '2024-06-11T00:00:00+00:00' + humidity: + 06e267b9-8714-4c58-ac53-df6a291b59dc.mean: 88 + 7f33317b-a45e-4b0a-94a2-9bbbdc746cc1.mean: 81.875 + temperature: + 06e267b9-8714-4c58-ac53-df6a291b59dc.max: 7.49 + 7f33317b-a45e-4b0a-94a2-9bbbdc746cc1.max: 13 + - role: input + timestamp: 1718092800000 + timestamp_iso: '2024-06-11T08:00:00+00:00' + humidity: + 7f33317b-a45e-4b0a-94a2-9bbbdc746cc1.mean: 62.375 + temperature: + 7f33317b-a45e-4b0a-94a2-9bbbdc746cc1.max: 14.84 + - role: input + timestamp: 1718121600000 + timestamp_iso: '2024-06-11T16:00:00+00:00' + humidity: + 7f33317b-a45e-4b0a-94a2-9bbbdc746cc1.mean: 76.5 + temperature: + 7f33317b-a45e-4b0a-94a2-9bbbdc746cc1.max: 14.59 + - role: input + timestamp: 1718150400000 + timestamp_iso: '2024-06-12T00:00:00+00:00' + humidity: + 06e267b9-8714-4c58-ac53-df6a291b59dc.mean: 90 + 7f33317b-a45e-4b0a-94a2-9bbbdc746cc1.mean: 85.375 + temperature: + 06e267b9-8714-4c58-ac53-df6a291b59dc.max: 9.34 + 7f33317b-a45e-4b0a-94a2-9bbbdc746cc1.max: 13.08 + - role: input + timestamp: 1718179200000 + timestamp_iso: '2024-06-12T08:00:00+00:00' + humidity: + 7f33317b-a45e-4b0a-94a2-9bbbdc746cc1.mean: 61.75 + temperature: + 7f33317b-a45e-4b0a-94a2-9bbbdc746cc1.max: 15.41 + - role: input + timestamp: 1718208000000 + timestamp_iso: '2024-06-12T16:00:00+00:00' + humidity: + 7f33317b-a45e-4b0a-94a2-9bbbdc746cc1.mean: 74 + temperature: + 7f33317b-a45e-4b0a-94a2-9bbbdc746cc1.max: 15.1 + - role: input + timestamp: 1718236800000 + timestamp_iso: '2024-06-13T00:00:00+00:00' + humidity: + 06e267b9-8714-4c58-ac53-df6a291b59dc.mean: 90 + 7f33317b-a45e-4b0a-94a2-9bbbdc746cc1.mean: 82.875 + temperature: + 06e267b9-8714-4c58-ac53-df6a291b59dc.max: 9.03 + 7f33317b-a45e-4b0a-94a2-9bbbdc746cc1.max: 14.99 + - role: input + timestamp: 1718265600000 + timestamp_iso: '2024-06-13T08:00:00+00:00' + humidity: + 7f33317b-a45e-4b0a-94a2-9bbbdc746cc1.mean: 57.5 + temperature: + 7f33317b-a45e-4b0a-94a2-9bbbdc746cc1.max: 18.64 + - role: input + timestamp: 1718294400000 + timestamp_iso: '2024-06-13T16:00:00+00:00' + humidity: + 7f33317b-a45e-4b0a-94a2-9bbbdc746cc1.mean: 62.5 + temperature: + 7f33317b-a45e-4b0a-94a2-9bbbdc746cc1.max: 18.35 + - role: input + timestamp: 1718323200000 + timestamp_iso: '2024-06-14T00:00:00+00:00' + humidity: + 06e267b9-8714-4c58-ac53-df6a291b59dc.mean: 80 + 7f33317b-a45e-4b0a-94a2-9bbbdc746cc1.mean: 81.625 + temperature: + 06e267b9-8714-4c58-ac53-df6a291b59dc.max: 12.98 + 7f33317b-a45e-4b0a-94a2-9bbbdc746cc1.max: 13.02 + - role: input + timestamp: 1718352000000 + timestamp_iso: '2024-06-14T08:00:00+00:00' + humidity: + 7f33317b-a45e-4b0a-94a2-9bbbdc746cc1.mean: 81.5 + temperature: + 7f33317b-a45e-4b0a-94a2-9bbbdc746cc1.max: 18.19 + - role: input + timestamp: 1718380800000 + timestamp_iso: '2024-06-14T16:00:00+00:00' + humidity: + 7f33317b-a45e-4b0a-94a2-9bbbdc746cc1.mean: 88.875 + temperature: + 7f33317b-a45e-4b0a-94a2-9bbbdc746cc1.max: 17.75 + - role: input + timestamp: 1718409600000 + timestamp_iso: '2024-06-15T00:00:00+00:00' + humidity: + 06e267b9-8714-4c58-ac53-df6a291b59dc.mean: 88 + 7f33317b-a45e-4b0a-94a2-9bbbdc746cc1.mean: 87.25 + temperature: + 06e267b9-8714-4c58-ac53-df6a291b59dc.max: 11.8 + 7f33317b-a45e-4b0a-94a2-9bbbdc746cc1.max: 13.4 + - role: input + timestamp: 1718438400000 + timestamp_iso: '2024-06-15T08:00:00+00:00' + humidity: + 7f33317b-a45e-4b0a-94a2-9bbbdc746cc1.mean: 64.5 + temperature: + 7f33317b-a45e-4b0a-94a2-9bbbdc746cc1.max: 16.53 + - role: input + timestamp: 1718467200000 + timestamp_iso: '2024-06-15T16:00:00+00:00' + humidity: + 7f33317b-a45e-4b0a-94a2-9bbbdc746cc1.mean: 84.875 + temperature: + 7f33317b-a45e-4b0a-94a2-9bbbdc746cc1.max: 14.69 + - role: input + timestamp: 1718496000000 + timestamp_iso: '2024-06-16T00:00:00+00:00' + humidity: + 06e267b9-8714-4c58-ac53-df6a291b59dc.mean: 89 + 7f33317b-a45e-4b0a-94a2-9bbbdc746cc1.mean: 87.875 + temperature: + 06e267b9-8714-4c58-ac53-df6a291b59dc.max: 12.12 + 7f33317b-a45e-4b0a-94a2-9bbbdc746cc1.max: 13.77 + - role: input + timestamp: 1718524800000 + timestamp_iso: '2024-06-16T08:00:00+00:00' + humidity: + 7f33317b-a45e-4b0a-94a2-9bbbdc746cc1.mean: 73.125 + temperature: + 7f33317b-a45e-4b0a-94a2-9bbbdc746cc1.max: 19.27 + - role: input + timestamp: 1718553600000 + timestamp_iso: '2024-06-16T16:00:00+00:00' + humidity: + 7f33317b-a45e-4b0a-94a2-9bbbdc746cc1.mean: 69.75 + temperature: + 7f33317b-a45e-4b0a-94a2-9bbbdc746cc1.max: 19.12 + messages: + - message: >- + Series ('06e267b9-8714-4c58-ac53-df6a291b59dc', + 'temperature', 'max'), aggregated on freq PT8H + contains 26 null values. These will NOT be + interpolated + level: warning + timestamp: '2024-07-01T15:37:41.460083+00:00' + action: GET /queries/v1/data/weatherHistoryDailyAndHourly + category: data + - message: >- + Series ('06e267b9-8714-4c58-ac53-df6a291b59dc', + 'humidity', 'mean'), aggregated on freq PT8H contains + 26 null values. These will NOT be interpolated + level: warning + timestamp: '2024-07-01T15:37:41.461241+00:00' + action: GET /queries/v1/data/weatherHistoryDailyAndHourly + category: data + query: + freq: PT8H + from_: 2024-06-16 12:00 AM + until: 2024-06-17 12:00 AM + data: + - metric: temperature + resource: 06e267b9-8714-4c58-ac53-df6a291b59dc + seriesId: 97de31f5-7b69-4a56-87e0-6b5c8a6b1872 + aggregation: max + - metric: humidity + resource: 06e267b9-8714-4c58-ac53-df6a291b59dc + seriesId: 8eb0799f-1af7-4af2-8233-517cb4bdc3c6 + aggregation: mean + - metric: temperature + resource: 7f33317b-a45e-4b0a-94a2-9bbbdc746cc1 + seriesId: 5055a943-e1c0-41d6-a6c9-7b20427a742d + aggregation: max + - metric: humidity + resource: 7f33317b-a45e-4b0a-94a2-9bbbdc746cc1 + seriesId: 16ac581f-f5ce-4845-9b6a-1b16249af051 + aggregation: mean + render: + mode: METRIC_FLAT_DICT + header_column: + summary: Query response example for `?render=HEADER_COLUMN` + value: + data: + - rows: + - resource + - metric + - aggregation + - timestamp: 1717977600000 + timestamp_iso: '2024-06-10T00:00:00+00:00' + - timestamp: 1718006400000 + timestamp_iso: '2024-06-10T08:00:00+00:00' + - timestamp: 1718035200000 + timestamp_iso: '2024-06-10T16:00:00+00:00' + - timestamp: 1718064000000 + timestamp_iso: '2024-06-11T00:00:00+00:00' + - timestamp: 1718092800000 + timestamp_iso: '2024-06-11T08:00:00+00:00' + - timestamp: 1718121600000 + timestamp_iso: '2024-06-11T16:00:00+00:00' + - timestamp: 1718150400000 + timestamp_iso: '2024-06-12T00:00:00+00:00' + - timestamp: 1718179200000 + timestamp_iso: '2024-06-12T08:00:00+00:00' + - timestamp: 1718208000000 + timestamp_iso: '2024-06-12T16:00:00+00:00' + - timestamp: 1718236800000 + timestamp_iso: '2024-06-13T00:00:00+00:00' + - timestamp: 1718265600000 + timestamp_iso: '2024-06-13T08:00:00+00:00' + - timestamp: 1718294400000 + timestamp_iso: '2024-06-13T16:00:00+00:00' + - timestamp: 1718323200000 + timestamp_iso: '2024-06-14T00:00:00+00:00' + - timestamp: 1718352000000 + timestamp_iso: '2024-06-14T08:00:00+00:00' + - timestamp: 1718380800000 + timestamp_iso: '2024-06-14T16:00:00+00:00' + - timestamp: 1718409600000 + timestamp_iso: '2024-06-15T00:00:00+00:00' + - timestamp: 1718438400000 + timestamp_iso: '2024-06-15T08:00:00+00:00' + - timestamp: 1718467200000 + timestamp_iso: '2024-06-15T16:00:00+00:00' + - timestamp: 1718496000000 + timestamp_iso: '2024-06-16T00:00:00+00:00' + - timestamp: 1718524800000 + timestamp_iso: '2024-06-16T08:00:00+00:00' + - timestamp: 1718553600000 + timestamp_iso: '2024-06-16T16:00:00+00:00' + data: + - - 06e267b9-8714-4c58-ac53-df6a291b59dc + - temperature + - max + - 12.67 + - 13.74 + - null + - 7.49 + - null + - null + - 9.34 + - null + - null + - 9.03 + - null + - null + - 12.98 + - null + - null + - 11.8 + - null + - null + - 12.12 + - null + - null + - - 06e267b9-8714-4c58-ac53-df6a291b59dc + - humidity + - mean + - 80 + - 88 + - null + - 88 + - null + - null + - 90 + - null + - null + - 90 + - null + - null + - 80 + - null + - null + - 88 + - null + - null + - 89 + - null + - null + - - 7f33317b-a45e-4b0a-94a2-9bbbdc746cc1 + - temperature + - max + - 12.78 + - 13.06 + - 13.35 + - 13 + - 14.84 + - 14.59 + - 13.08 + - 15.41 + - 15.1 + - 14.99 + - 18.64 + - 18.35 + - 13.02 + - 18.19 + - 17.75 + - 13.4 + - 16.53 + - 14.69 + - 13.77 + - 19.27 + - 19.12 + - - 7f33317b-a45e-4b0a-94a2-9bbbdc746cc1 + - humidity + - mean + - 83.125 + - 80.875 + - 78.5 + - 81.875 + - 62.375 + - 76.5 + - 85.375 + - 61.75 + - 74 + - 82.875 + - 57.5 + - 62.5 + - 81.625 + - 81.5 + - 88.875 + - 87.25 + - 64.5 + - 84.875 + - 87.875 + - 73.125 + - 69.75 + data_axis: row + attributes: + role: input + messages: + - message: >- + Series ('06e267b9-8714-4c58-ac53-df6a291b59dc', + 'temperature', 'max'), aggregated on freq PT8H + contains 26 null values. These will NOT be + interpolated + level: warning + timestamp: '2024-07-01T13:02:54.733676+00:00' + action: GET /queries/v1/data/weatherHistoryDailyAndHourly + category: data + - message: >- + Series ('06e267b9-8714-4c58-ac53-df6a291b59dc', + 'humidity', 'mean'), aggregated on freq PT8H contains + 26 null values. These will NOT be interpolated + level: warning + timestamp: '2024-07-01T13:02:54.734610+00:00' + action: GET /queries/v1/data/weatherHistoryDailyAndHourly + category: data + query: + freq: PT8H + from_: 2024-06-16 12:00 AM + until: 2024-06-17 12:00 AM + data: + - metric: temperature + resource: 06e267b9-8714-4c58-ac53-df6a291b59dc + seriesId: 97de31f5-7b69-4a56-87e0-6b5c8a6b1872 + aggregation: max + - metric: humidity + resource: 06e267b9-8714-4c58-ac53-df6a291b59dc + seriesId: 8eb0799f-1af7-4af2-8233-517cb4bdc3c6 + aggregation: mean + - metric: temperature + resource: 7f33317b-a45e-4b0a-94a2-9bbbdc746cc1 + seriesId: 5055a943-e1c0-41d6-a6c9-7b20427a742d + aggregation: max + - metric: humidity + resource: 7f33317b-a45e-4b0a-94a2-9bbbdc746cc1 + seriesId: 16ac581f-f5ce-4845-9b6a-1b16249af051 + aggregation: mean + render: + mode: HEADER_COLUMN + series: + summary: Query response example for `?render=SERIES` + value: + data: + - columns: + - timestamp + - resource: 06e267b9-8714-4c58-ac53-df6a291b59dc + metric: temperature + aggregation: max + - resource: 06e267b9-8714-4c58-ac53-df6a291b59dc + metric: humidity + aggregation: mean + - resource: 7f33317b-a45e-4b0a-94a2-9bbbdc746cc1 + metric: temperature + aggregation: max + - resource: 7f33317b-a45e-4b0a-94a2-9bbbdc746cc1 + metric: humidity + aggregation: mean + data: + - - 1717977600000 + - 1718006400000 + - 1718035200000 + - 1718064000000 + - 1718092800000 + - 1718121600000 + - 1718150400000 + - 1718179200000 + - 1718208000000 + - 1718236800000 + - 1718265600000 + - 1718294400000 + - 1718323200000 + - 1718352000000 + - 1718380800000 + - 1718409600000 + - 1718438400000 + - 1718467200000 + - 1718496000000 + - 1718524800000 + - 1718553600000 + - - 12.67 + - 13.74 + - null + - 7.49 + - null + - null + - 9.34 + - null + - null + - 9.03 + - null + - null + - 12.98 + - null + - null + - 11.8 + - null + - null + - 12.12 + - null + - null + - - 80 + - 88 + - null + - 88 + - null + - null + - 90 + - null + - null + - 90 + - null + - null + - 80 + - null + - null + - 88 + - null + - null + - 89 + - null + - null + - - 12.78 + - 13.06 + - 13.35 + - 13 + - 14.84 + - 14.59 + - 13.08 + - 15.41 + - 15.1 + - 14.99 + - 18.64 + - 18.35 + - 13.02 + - 18.19 + - 17.75 + - 13.4 + - 16.53 + - 14.69 + - 13.77 + - 19.27 + - 19.12 + - - 83.125 + - 80.875 + - 78.5 + - 81.875 + - 62.375 + - 76.5 + - 85.375 + - 61.75 + - 74 + - 82.875 + - 57.5 + - 62.5 + - 81.625 + - 81.5 + - 88.875 + - 87.25 + - 64.5 + - 84.875 + - 87.875 + - 73.125 + - 69.75 + data_axis: row + attributes: + role: input + window_spec: + from: 1717977600000 + until: 1718582400000 + window: P7D + freq: PT8H + messages: + - message: >- + Series ('06e267b9-8714-4c58-ac53-df6a291b59dc', + 'temperature', 'max'), aggregated on freq PT8H + contains 26 null values. These will NOT be + interpolated + level: warning + timestamp: '2024-07-01T13:01:39.240450+00:00' + action: GET /queries/v1/data/weatherHistoryDailyAndHourly + category: data + - message: >- + Series ('06e267b9-8714-4c58-ac53-df6a291b59dc', + 'humidity', 'mean'), aggregated on freq PT8H contains + 26 null values. These will NOT be interpolated + level: warning + timestamp: '2024-07-01T13:01:39.241481+00:00' + action: GET /queries/v1/data/weatherHistoryDailyAndHourly + category: data + query: + freq: PT8H + from_: 2024-06-16 12:00 AM + until: 2024-06-17 12:00 AM + data: + - metric: temperature + resource: 06e267b9-8714-4c58-ac53-df6a291b59dc + seriesId: 97de31f5-7b69-4a56-87e0-6b5c8a6b1872 + aggregation: max + - metric: humidity + resource: 06e267b9-8714-4c58-ac53-df6a291b59dc + seriesId: 8eb0799f-1af7-4af2-8233-517cb4bdc3c6 + aggregation: mean + - metric: temperature + resource: 7f33317b-a45e-4b0a-94a2-9bbbdc746cc1 + seriesId: 5055a943-e1c0-41d6-a6c9-7b20427a742d + aggregation: max + - metric: humidity + resource: 7f33317b-a45e-4b0a-94a2-9bbbdc746cc1 + seriesId: 16ac581f-f5ce-4845-9b6a-1b16249af051 + aggregation: mean + render: + mode: SERIES + text/csv: + schema: + title: CSV timeseries data response. + description: >- + A CSV representation of the query result, + + - the first `timestamp` column contains event timestamp in + iso format + + - remaining columns contain the (aggregated or + non-aggregated) series values, using a + `{resource_id}/{metric}` or + `{resource_id}/{metric}/{aggregation}` header. + '422': + description: Validation Error + content: + application/json: + schema: + $ref: '#/components/schemas/HTTPValidationError' + security: + - waylayApiKeySecret: [] + x-py-method: execute_by_name + x-consumes-multipart: false + x-consumes-urlencoded: false + x-consumes-json: false + x-consumes-other: false + /queries/v1/queries/v1/query: + get: + tags: + - Manage + summary: List Queries + description: List named queries. + operationId: list_queries_queries_v1_query_get + parameters: + - name: q + in: query + required: false + schema: + type: string + title: Filter condition + description: >- + The QDSL filter condition for the stored queries. Note that this + value needs to be escaped when passed as an url paramater. + default: '' + description: >- + The QDSL filter condition for the stored queries. Note that this + value needs to be escaped when passed as an url paramater. + examples: + resource: + summary: resource + description: Filter queries that reference a given resource id. + value: resource:APL4995 + user: + summary: current user + description: Filter queries on the user that created or updated the item. + value: user:@me + created: + summary: created after + description: Filter on a creation timestamp interval. + value: created:2020-02-20/ + modified: + summary: last modified more than 2 days ago + description: Filter on a modification timestamp interval. + value: modified:/now-P2D + meta_contains: + summary: metadata contains + description: Filter on a string contained in a metadata property. + value: 'meta.comments:contains(''{ "topic" : "general" }''' + meta_like: + summary: metadata matches + description: Filter on a pattern in a metadata property. + value: meta.description:like(*http*waylay.io*) + tag: + summary: tag combination + description: Filter queries on tag combinations. + value: tag:stable,demo,release_15 tag:demo,release_16 -tag:dummy + x-showExample: true + - name: limit + in: query + required: false + schema: + type: integer + maximum: 100 + title: Page size + description: Maximal number of items return in one response. + default: 10 + description: Maximal number of items return in one response. + x-showExample: true + - name: offset + in: query + required: false + schema: + type: integer + title: Page offset + description: >- + Numbers of items to skip before listing results in the response + page. + default: 0 + description: >- + Numbers of items to skip before listing results in the response + page. + x-showExample: true + responses: + '200': + description: Successful Response + content: + application/json: + schema: + $ref: '#/components/schemas/QueriesListResponse' + '422': + description: Validation Error + content: + application/json: + schema: + $ref: '#/components/schemas/HTTPValidationError' + security: + - waylayApiKeySecret: [] + x-py-method: list + x-consumes-multipart: false + x-consumes-urlencoded: false + x-consumes-json: false + x-consumes-other: false + post: + tags: + - Manage + summary: Post Query + description: Create a new named query. + operationId: create_query_queries_v1_query_post + requestBody: + required: true + content: + application/json: + schema: + $ref: '#/components/schemas/QueryEntityInput' + responses: + '200': + description: Successful Response + content: + application/json: + schema: + $ref: '#/components/schemas/QueryResponse' + '422': + description: Validation Error + content: + application/json: + schema: + $ref: '#/components/schemas/HTTPValidationError' + security: + - waylayApiKeySecret: [] + x-py-method: create + x-consumes-multipart: false + x-consumes-urlencoded: false + x-consumes-json: true + x-consumes-other: false + /queries/v1/queries/v1/query/{query_name}: + get: + tags: + - Manage + summary: Get Query + description: Get the definition of a named query. + operationId: get_query_queries_v1_query__query_name__get + parameters: + - name: query_name + in: path + required: true + schema: + type: string + title: Query Name + description: Name of the stored query. + description: Name of the stored query. + x-showExample: false + responses: + '200': + description: Successful Response + content: + application/json: + schema: + $ref: '#/components/schemas/QueryResponse' + '422': + description: Validation Error + content: + application/json: + schema: + $ref: '#/components/schemas/HTTPValidationError' + security: + - waylayApiKeySecret: [] + x-py-method: get + x-consumes-multipart: false + x-consumes-urlencoded: false + x-consumes-json: false + x-consumes-other: false + put: + tags: + - Manage + summary: Update Query + description: Create or update a named query definition. + operationId: update_query_queries_v1_query__query_name__put + parameters: + - name: query_name + in: path + required: true + schema: + type: string + title: Query Name + description: Name of the stored query. + description: Name of the stored query. + x-showExample: false + requestBody: + required: true + content: + application/json: + schema: + anyOf: + - $ref: '#/components/schemas/QueryUpdateInput' + - $ref: '#/components/schemas/Query-Input' + title: Query Definition + responses: + '200': + description: Successful Response + content: + application/json: + schema: + $ref: '#/components/schemas/QueryResponse' + '422': + description: Validation Error + content: + application/json: + schema: + $ref: '#/components/schemas/HTTPValidationError' + security: + - waylayApiKeySecret: [] + x-py-method: update + x-consumes-multipart: false + x-consumes-urlencoded: false + x-consumes-json: true + x-consumes-other: false + delete: + tags: + - Manage + summary: Remove Query + description: Remove definition of a named query. + operationId: remove_query_queries_v1_query__query_name__delete + parameters: + - name: query_name + in: path + required: true + schema: + type: string + title: Query Name + description: Name of the stored query. + description: Name of the stored query. + x-showExample: false + responses: + '200': + description: Successful Response + content: + application/json: + schema: + $ref: '#/components/schemas/DeleteResponse' + '422': + description: Validation Error + content: + application/json: + schema: + $ref: '#/components/schemas/HTTPValidationError' + security: + - waylayApiKeySecret: [] + x-py-method: remove + x-consumes-multipart: false + x-consumes-urlencoded: false + x-consumes-json: false + x-consumes-other: false +components: + schemas: + AggregationMethod: + type: string + oneOf: + - description: >- + Use the first value (in time) to represent all data for the sample + interval. + enum: + - first + - description: >- + Use the last value (in time) to represent all data for the sample + interval. + enum: + - last + - description: >- + Aggregate data by the mean value: The sum of values divided by + number of observations. + enum: + - mean + - description: >- + Aggregate data by the median value: The n/2-th value when ordered, + the average of the (n-1)/2-th and (n+1)/2-th value when n is uneven. + enum: + - median + - description: The sum of all values summarizes the data for the sample interval. + enum: + - sum + - description: Use the count of observations in the sample interval. + enum: + - count + - description: >- + Use the standard deviation of all observations in the sample + interval. + enum: + - std + - description: Use the maximum of all values in the sample interval. + enum: + - max + - description: Use the minimum of all values in the sample interval. + enum: + - min + - title: Precentile + description: >- + Aggregate data by the p-th percentile, where p is a number between 0 + and 1. + pattern: ^percentile\((1(\.0*)?)|(0\.[0-9]*)\)$ + example: percentile(0.02) + AlignAt: + type: string + enum: + - grid + - boundary + - from + - until + description: |- + Possible values for `align.at`. + + * 'grid' Align to a fixed grid (possibly using timezone information) + * 'from' Align a the `from` boundary + * 'until' Align a the `until` boundary + * 'boundary' Align a the `from` boundary if specified, + otherwise the `until` boundary. + + When not specified, 'grid' is used. + AlignShift: + type: string + enum: + - backward + - forward + - wrap + description: >- + Possible values for `align.shift`. + + + * 'backward': keep the window size of the original interval + specification, + shifting back. + * 'forward': keep the window size of the original interval + specification, + shifting forward. + * 'wrap': enlarge the window size to include all of the original + interval. + + + When not specified, 'backward' is used. + Alignment: + properties: + at: + $ref: '#/components/schemas/AlignAt' + title: Align At + description: >- + Method used to align the aggregation grid. The default value is + system-dependent (normally `grid`) + shift: + $ref: '#/components/schemas/AlignShift' + title: Align Shift + description: | + + Specifies in what direction the query window is shifted + to match the alignment specification. + When not specified, defaults are: + - `backward` when only the `from` boundary is specified. + - `forward` when only the `until` boundary is specified. + - `wrap` otherwise (_none_ or _both_ boundaries specified). + freq: + oneOf: + - type: string + pattern: >- + ^P([0-9]+Y)?([0-9]+M)?([0-9]+W)?([0-9]+D)?(T([0-9]+H)?([0-9]+M)?([0-9]+(\.[0-9]*)?S)?)?$ + format: period + title: 'ISO8601 period ' + description: >- + A period in [ISO8601 + duration](https://en.wikipedia.org/wiki/ISO_8601#Durations) + format. + example: PT3H15M + - type: string + description: >- + When `inferred` is specified, the frequency of aggregation will + be inferred from the main/first time series. This can be used to + regularize the time series + enum: + - inferred + type: string + title: Alignment Grid interval. + description: > + + Defines the grid used to align the aggregation window. + + The window will align at whole-unit multiples of this interval. + + + For intervals like `PT1D`, that are timezone-dependent, use the + + `align.timezone` to fix the absolute timestamp of the grid + boundaries. + + + If not specified, defaults to the `freq` aggregation interval. + timezone: + oneOf: + - type: string + title: Timezone Identifier + description: >- + [ICANN timezone + identifier](https://en.wikipedia.org/wiki/List_of_tz_database_time_zones) + - type: string + pattern: (+|-)\d\d:\d\d + title: UTC Offset + description: '[UTC offset](https://en.wikipedia.org/wiki/UTC_offset)' + type: string + title: Alignment Timezone. + description: | + + The timezone to use when shifting boundaries, especially + at day granularity. + Also affects the rendering of timestamps when + `render.iso_timestamp` is enabled. + + When not specified, the `UTC` timezone is used. + additionalProperties: true + type: object + description: |- + Aggregation Alignment Options. + + Specifies how the aggregation grid is aligned. + CauseException: + properties: + type: + type: string + title: Exception Type + message: + type: string + title: Exception Message + stacktrace: + items: + type: string + type: array + title: Stack Trace + additionalProperties: true + type: object + required: + - type + - message + - stacktrace + description: Describes the exception that caused a message. + ColumnDataSet: + properties: + attributes: + $ref: '#/components/schemas/DataSetAttributes' + window_spec: + $ref: '#/components/schemas/DataSetWindow' + data_axis: + type: string + enum: + - row + default: row + rows: + oneOf: + - x-prefixItems: + - const: resource + title: Index label for the resource attribute. + - const: metric + title: Index label for the metric attribute. + - x-prefixItems: + - const: resource + title: Index label for the resource attribute. + - const: metric + title: Index label for the metric attribute. + - const: aggregation + title: Index label for the aggregation attribute. + items: + anyOf: + - $ref: '#/components/schemas/ColumnIndexRowHeader' + - $ref: '#/components/schemas/RowHeader' + type: array + title: Row Headers + description: >- + Header Attributes for the index data. + + + The initial string-valued headers (normally `resource`, + `metric`,`aggregation`) indicate that row to contain series + attributes. + + + The remaining object-valued row headers contain the index data. + data: + items: + items: + $ref: '#/components/schemas/Datum' + type: array + type: array + title: Series + description: >- + All metric observation values for a single series. Prefixed by the + series attributes. + additionalProperties: true + type: object + required: + - rows + - data + description: |- + Column-oriented dataset with rows header. + + Timeseries data layout with a rows header containing + the index data. + The data array contains series data prefixed by series attributes. + The `rows` index is prefix by the names of these series attributes. + Result for render options `data_axis=row` and `header_array=column`. + ColumnHeader: + properties: + resource: + type: string + title: Series resource id + metric: + type: string + title: Series metric + aggregation: + type: string + title: Aggregation applied to the series. + additionalProperties: true + type: object + required: + - resource + - metric + description: |- + Column attributes. + + Attributes that identify and describe the data in this column. + ColumnIndexRowHeader: + type: string + description: Label for a series attribute + example: resource + DataAxisOption: + type: string + enum: + - row + - column + description: Allowed values for the render.data_axis option. + DataSetAttributes: + properties: + role: + $ref: '#/components/schemas/Role' + additionalProperties: true + type: object + description: |- + Data Set Attributes. + + Data attributes that apply to all data in this set. + DataSetWindow: + properties: + until: + type: integer + title: Time Axis End + description: Exclusive higher bound of the time axis in unix epoch milliseconds. + window: + type: string + format: period + title: Time Axis Length + description: Time axis length as ISO8601 period. + freq: + type: string + format: period + title: Frequency + description: Time axis aggregation interval as an ISO8601 period . + additionalProperties: true + type: object + required: + - until + - window + - freq + description: |- + Data Window. + + Statistics of the time axis of a data set. + Present with render option `include_window_spec=true`.", + Datum: + oneOf: + - type: number + nullable: true + - type: string + nullable: true + - type: boolean + nullable: true + description: >- + A single metric value for a timeseries. + + + A null value indicates that no (aggregated/interpolated) value exists + for the corresponding timestamp. + DeleteResponse: + properties: + messages: + items: + $ref: '#/components/schemas/Message' + type: array + title: Messages + _links: + additionalProperties: + anyOf: + - $ref: '#/components/schemas/HALLink' + - items: + $ref: '#/components/schemas/HALLink' + type: array + type: object + title: ' Links' + description: HAL links, indexed by link relation. + _embeddings: + additionalProperties: + anyOf: + - $ref: '#/components/schemas/HALEmbedding' + - items: + $ref: '#/components/schemas/HALEmbedding' + type: array + type: object + title: ' Embeddings' + description: Hal embeddings, indexed by relation. + additionalProperties: true + type: object + description: Confirmation of a delete request. + HALEmbedding: + properties: {} + additionalProperties: true + type: object + description: Any embedded representation in a HAL response. + HALLink: + properties: + href: + type: string + title: Link URL + description: Target url for this link. + type: + type: string + title: Link type + description: Type of the resource referenced by this link. + method: + $ref: '#/components/schemas/HALLinkMethod' + title: Link method + description: Http method required to resolve the link. + additionalProperties: true + type: object + required: + - href + description: A link target in a HAL response. + HALLinkMethod: + type: string + enum: + - GET + - POST + - PUT + - DELETE + - PATCH + description: An http method that can be specified in a HAL link. + HALLinkRole: + type: string + enum: + - self + - first + - prev + - next + - last + - execute + description: Supported link and embedding roles in HAL representations. + HTTPValidationError: + properties: + detail: + items: + $ref: '#/components/schemas/ValidationError' + type: array + title: Detail + type: object + HeaderArrayOption: + type: string + enum: + - row + - column + description: Allowed values for the render.header_array option. + InterpolationMethod: + type: string + enum: + - pad + - fixed + - backfill + - linear + - zero + - slinear + - quadratic + - cubic + - polynomial + - spline + - from_derivatives + - pchip + - akima + description: Interpolation algorithm specifier. + InterpolationSpec: + properties: + method: + oneOf: + - description: >- + Interpolate with the value of the first observed point. This + method also extrapolates. + enum: + - pad + - description: >- + Interpolate with a fixed, user-specified value. This method also + extrapolates. + enum: + - fixed + - description: >- + Same as pad, but using the last observed value. This method also + extrapolates + enum: + - backfill + - description: >- + Linearly go from the first observed value of the gap to the last + observed oneThis method also extrapolates + enum: + - linear + - description: Use the value that is closest in time. + enum: + - nearest + - description: >- + Interpolate with a spline function of order 0, which is a + piecewise polynomial. + enum: + - zero + - description: >- + Interpolate with a spline function of order 1, which is a + piecewise polynomial. + enum: + - slinear + - description: >- + Interpolate with a spline function of order 2, which is a + piecewise polynomial. + enum: + - quadratic + - description: >- + Interpolate with a spline function of order 3, which is a + piecewise polynomial. + enum: + - cubic + - description: >- + Interpolate with a polynomial of the lowest possible degree + passing trough the data points. + enum: + - polynomial + - description: Interpolate with a spline function of a user-specified order. + enum: + - spline + - description: Interpolate with the derivative of order 1. + enum: + - from_derivatives + - description: Interpolate with a piecewise cubic spline function. + enum: + - pchip + - description: >- + Interpolate with a non-smoothing spline of order 2, called Akima + interpolation. + enum: + - akima + type: string + title: Interpolation method + value: + type: integer + title: Interpolation parameter + description: >- + Optional parameter value for the interpolation method (see method + description). + order: + type: integer + title: Interpolation order + description: >- + Optional order parameter for the interpolation method (see method + description). + additionalProperties: true + type: object + required: + - method + description: >- + Defines whether, and how to treat missing values. + + + This can occur in two circumstances when aggregating (setting a sample + frequency): + + * missing values: if there are missing (or invalid) values stored for + + a given freq-interval, + + "interpolation" specifies how to compute these. + + * down-sampling: when the specified freq is smaller than the series’ + + actual frequency. + + "interpolation" specifies how to compute intermediate values. + Message: + properties: + code: + anyOf: + - type: string + nullable: true + title: Code + message: + type: string + title: Message + level: + type: string + enum: + - debug + - info + - warning + - error + - fatal + default: info + args: + anyOf: + - type: object + nullable: true + title: Args + type: object + required: + - message + description: Individual (info/warning/error) message in a response. + MessageProperties: + properties: + resource: + type: string + title: Series resource id + metric: + type: string + title: Series metric + additionalProperties: true + type: object + description: Additional message arguments. + ObjectData: + properties: + timestamp: + $ref: '#/components/schemas/Timestamp' + timestamp_iso: + $ref: '#/components/schemas/TimestampIso' + role: + $ref: '#/components/schemas/Role' + resource: + type: string + title: Resource + description: Series resource id, if applicable for all values. + metric: + type: string + title: Metric + description: Series metric, if applicable for all values. + aggregation: + type: string + title: Aggregation + description: Series aggregation, if applicable for all values. + levels: + items: + type: string + type: array + title: Hierarchical Levels + description: >- + Attribute level names used to key the values for this observation. + + + Levels that are flattened have a dot-separated key. + + + If all observations have the same attribute for a level, that level + might be omitted. + example: + - resource + - metric + - aggregation + additionalProperties: + oneOf: + - type: object + title: Hierarchical Data + description: >- + Values for the series whose attributes corresponds with the key. + Keyed by sub-levels. + - $ref: '#/components/schemas/Datum' + description: Series value that corresponds with a (flattened) attribute key. + title: 'Data ' + type: object + required: + - timestamp + description: Result data for a timestamp in object format. + ObjectDataSet: + properties: + attributes: + $ref: '#/components/schemas/DataSetAttributes' + window_spec: + $ref: '#/components/schemas/DataSetWindow' + data: + items: + $ref: '#/components/schemas/ObjectData' + type: array + title: Data + additionalProperties: true + type: object + required: + - data + description: >- + Data result in object format. + + + Result item when render option `render.header_array` is not set. + + + The data values are keyed by their attributes (`resource`, `metric`, + `aggregation`), + + according to the render options: + + * _hierachical_: for each level, a sub-object is created + (e.g. `render.mode=hier_dict`) + * _flattened_: the attributes are '.'-separated concatenation + of the attributes (e.g `render.mode=flat_dict`) + * _mixed_: (.e.g. `render.mode=metric_flat_dict`) a single level + (e.g. `metric`) is used as main key, any remaining levels + (`resource`,`aggregation`) are indicated with a flattened subkey. + + When `render.rollup=true`, the attribute levels that are the same for + all series are + + not used as key, but reported as a data or table attribute. + QueriesListResponse: + properties: + messages: + items: + $ref: '#/components/schemas/Message' + type: array + title: Messages + queries: + items: + $ref: '#/components/schemas/QueryListItem' + type: array + title: Query item list + description: One page of matching query definitions. + count: + type: integer + title: Current page size + description: Number of query definitions returned in the current response. + offset: + type: integer + title: Page offset + description: Offset in the full listing (skipped definitions). + limit: + type: integer + title: Page size limit + description: Maximal number of query definitions returned in one response. + total_count: + type: integer + title: Total count + description: Total number of query definitions matching the filter. + _links: + $ref: '#/components/schemas/QueryListHALLinks' + additionalProperties: true + type: object + required: + - queries + - count + - offset + - limit + - _links + description: Listing of named queries, with paging links. + Query-Input: + properties: + resource: + type: string + title: Default Resource + description: Default resource for the series in the query. + metric: + type: string + title: Default Metric + description: Default metric for the series in the query. + aggregation: + anyOf: + - description: Aggregation method for a series in the query. + $ref: '#/components/schemas/AggregationMethod' + nullable: true + - items: + anyOf: + - $ref: '#/components/schemas/AggregationMethod' + nullable: true + type: array + title: Aggregations + description: Aggregation methods, leading to sepearate series. + nullable: true + - additionalProperties: + anyOf: + - $ref: '#/components/schemas/AggregationMethod' + nullable: true + - items: + anyOf: + - $ref: '#/components/schemas/AggregationMethod' + nullable: true + type: array + title: Aggregations + description: Aggregation methods, leading to sepearate series. + nullable: true + type: object + title: Aggregation by Resource or Metric + description: Aggregation methods specified per resource or metric. + nullable: true + - additionalProperties: + anyOf: + - additionalProperties: + anyOf: + - $ref: '#/components/schemas/AggregationMethod' + nullable: true + - items: + anyOf: + - $ref: '#/components/schemas/AggregationMethod' + nullable: true + type: array + title: Aggregations + description: Aggregation methods, leading to sepearate series. + nullable: true + type: object + title: Aggregation by Resource or Metric + description: Aggregation methods specified per resource or metric. + nullable: true + type: object + title: Aggregation by Resource and Metric + description: Aggregation methods specified per resource and metric. + nullable: true + title: Default Aggregation + description: Default aggregation method(s) for the series in the query. + interpolation: + anyOf: + - $ref: '#/components/schemas/InterpolationMethod' + title: Interpolation Method + - $ref: '#/components/schemas/InterpolationSpec' + title: Interpolation specification. + title: Default Interpolation + description: Default Interpolation method for the series (if aggregated). + freq: + oneOf: + - type: string + pattern: >- + ^P([0-9]+Y)?([0-9]+M)?([0-9]+W)?([0-9]+D)?(T([0-9]+H)?([0-9]+M)?([0-9]+(\.[0-9]*)?S)?)?$ + format: period + title: 'ISO8601 period ' + description: >- + A period in [ISO8601 + duration](https://en.wikipedia.org/wiki/ISO_8601#Durations) + format. + example: PT3H15M + - type: string + description: >- + When `inferred` is specified, the frequency of aggregation will + be inferred from the main/first time series. This can be used to + regularize the time series + enum: + - inferred + type: string + title: Grouping interval + description: >- + Interval used to aggregate or regularize data. One of the [time + line](https://docs.waylay.io/#/api/query/?id=time-line-properties) + specifiers. + from: + oneOf: + - type: string + pattern: '[0-9]{4}-[0-9]{2}-[0-9]{2}(T.*)?' + format: date-time + title: ISO8601 absolute timestamp + description: >- + A date or date-time in + [ISO8601](https://en.wikipedia.org/wiki/ISO_8601#Combined_date_and_time_representations) + format. When no timezone is specified, the UTC timezone is + assumed (`+00:00`) + example: '2018-03-21T12:23:00+01:00' + - type: integer + minimum: 0 + title: UNIX epoch milliseconds + description: Absolute timestamp milliseconds in unix epoch since 1970-01-01. + example: 1534836422284 + - type: string + pattern: >- + ^P([0-9]+Y)?([0-9]+M)?([0-9]+W)?([0-9]+D)?(T([0-9]+H)?([0-9]+M)?([0-9]+(\.[0-9]*)?S)?)?$ + format: period + title: ISO8601 Period Before Now + description: >- + Specifies a timestamp before _now_ as a period in [ISO8601 + duration](https://en.wikipedia.org/wiki/ISO_8601#Durations) + format. + example: PT3H15M + title: Time Window From + description: >- + The start of the time window for which results will be returned. One + of the [time + line](https://docs.waylay.io/#/api/query/?id=time-line-properties) + specifiers. + until: + oneOf: + - type: string + pattern: '[0-9]{4}-[0-9]{2}-[0-9]{2}(T.*)?' + format: date-time + title: ISO8601 absolute timestamp + description: >- + A date or date-time in + [ISO8601](https://en.wikipedia.org/wiki/ISO_8601#Combined_date_and_time_representations) + format. When no timezone is specified, the UTC timezone is + assumed (`+00:00`) + example: '2018-03-21T12:23:00+01:00' + - type: integer + minimum: 0 + title: UNIX epoch milliseconds + description: Absolute timestamp milliseconds in unix epoch since 1970-01-01. + example: 1534836422284 + - type: string + pattern: >- + ^P([0-9]+Y)?([0-9]+M)?([0-9]+W)?([0-9]+D)?(T([0-9]+H)?([0-9]+M)?([0-9]+(\.[0-9]*)?S)?)?$ + format: period + title: ISO8601 Period Before Now + description: >- + Specifies a timestamp before _now_ as a period in [ISO8601 + duration](https://en.wikipedia.org/wiki/ISO_8601#Durations) + format. + example: PT3H15M + title: Time Window Until + description: >- + The end (not-inclusive) of the time window for which results will be + returned. One of the [time + line](https://docs.waylay.io/#/api/query/?id=time-line-properties)specifiers. + window: + oneOf: + - type: string + pattern: >- + ^P([0-9]+Y)?([0-9]+M)?([0-9]+W)?([0-9]+D)?(T([0-9]+H)?([0-9]+M)?([0-9]+(\.[0-9]*)?S)?)?$ + format: period + title: 'ISO8601 period ' + description: >- + A period in [ISO8601 + duration](https://en.wikipedia.org/wiki/ISO_8601#Durations) + format. + example: PT3H15M + type: string + title: Window + description: >- + The absolute size of the time window for which results will be + returned. One of the [time + line](https://docs.waylay.io/#/api/query/?id=time-line-properties) + specifiers. + periods: + type: integer + title: Periods + description: >- + The size of the time window in number of `freq` units. One of the + [time + line](https://docs.waylay.io/#/api/query/?id=time-line-properties) + specifiers. + align: + $ref: '#/components/schemas/Alignment' + data: + items: + $ref: '#/components/schemas/SeriesSpec' + type: array + title: Series specifications + description: >- + List of series specifications. When not specified, a single default + series specification is assumed(`[{}]`, using the default + `metric`,`resource`, ... ). + render: + $ref: '#/components/schemas/Render' + additionalProperties: true + type: object + description: >- + Query definition for a Waylay analytics query. + + + See also [api + docs](https://docs.waylay.io/#/api/query/?id=data-query-json-representation). + Query-Output: + properties: + resource: + type: string + title: Default Resource + description: Default resource for the series in the query. + metric: + type: string + title: Default Metric + description: Default metric for the series in the query. + aggregation: + anyOf: + - $ref: '#/components/schemas/AggregationMethod' + nullable: true + - items: + anyOf: + - $ref: '#/components/schemas/AggregationMethod' + nullable: true + type: array + title: Aggregations + description: Aggregation methods, leading to sepearate series. + nullable: true + - additionalProperties: + anyOf: + - $ref: '#/components/schemas/AggregationMethod' + nullable: true + - items: + anyOf: + - $ref: '#/components/schemas/AggregationMethod' + nullable: true + type: array + title: Aggregations + description: Aggregation methods, leading to sepearate series. + nullable: true + type: object + title: Aggregation by Resource or Metric + description: Aggregation methods specified per resource or metric. + nullable: true + - additionalProperties: + anyOf: + - additionalProperties: + anyOf: + - $ref: '#/components/schemas/AggregationMethod' + nullable: true + - items: + anyOf: + - $ref: '#/components/schemas/AggregationMethod' + nullable: true + type: array + title: Aggregations + description: Aggregation methods, leading to sepearate series. + nullable: true + type: object + title: Aggregation by Resource or Metric + description: Aggregation methods specified per resource or metric. + nullable: true + type: object + title: Aggregation by Resource and Metric + description: Aggregation methods specified per resource and metric. + nullable: true + title: Default Aggregation + description: Default aggregation method(s) for the series in the query. + interpolation: + anyOf: + - $ref: '#/components/schemas/InterpolationMethod' + title: Interpolation Method + - $ref: '#/components/schemas/InterpolationSpec' + title: Interpolation specification. + title: Default Interpolation + description: Default Interpolation method for the series (if aggregated). + freq: + oneOf: + - type: string + pattern: >- + ^P([0-9]+Y)?([0-9]+M)?([0-9]+W)?([0-9]+D)?(T([0-9]+H)?([0-9]+M)?([0-9]+(\.[0-9]*)?S)?)?$ + format: period + title: 'ISO8601 period ' + description: >- + A period in [ISO8601 + duration](https://en.wikipedia.org/wiki/ISO_8601#Durations) + format. + example: PT3H15M + - type: string + description: >- + When `inferred` is specified, the frequency of aggregation will + be inferred from the main/first time series. This can be used to + regularize the time series + enum: + - inferred + type: string + title: Grouping interval + description: >- + Interval used to aggregate or regularize data. One of the [time + line](https://docs.waylay.io/#/api/query/?id=time-line-properties) + specifiers. + from: + oneOf: + - type: string + pattern: '[0-9]{4}-[0-9]{2}-[0-9]{2}(T.*)?' + format: date-time + title: ISO8601 absolute timestamp + description: >- + A date or date-time in + [ISO8601](https://en.wikipedia.org/wiki/ISO_8601#Combined_date_and_time_representations) + format. When no timezone is specified, the UTC timezone is + assumed (`+00:00`) + example: '2018-03-21T12:23:00+01:00' + - type: integer + minimum: 0 + title: UNIX epoch milliseconds + description: Absolute timestamp milliseconds in unix epoch since 1970-01-01. + example: 1534836422284 + - type: string + pattern: >- + ^P([0-9]+Y)?([0-9]+M)?([0-9]+W)?([0-9]+D)?(T([0-9]+H)?([0-9]+M)?([0-9]+(\.[0-9]*)?S)?)?$ + format: period + title: ISO8601 Period Before Now + description: >- + Specifies a timestamp before _now_ as a period in [ISO8601 + duration](https://en.wikipedia.org/wiki/ISO_8601#Durations) + format. + example: PT3H15M + title: Time Window From + description: >- + The start of the time window for which results will be returned. One + of the [time + line](https://docs.waylay.io/#/api/query/?id=time-line-properties) + specifiers. + until: + oneOf: + - type: string + pattern: '[0-9]{4}-[0-9]{2}-[0-9]{2}(T.*)?' + format: date-time + title: ISO8601 absolute timestamp + description: >- + A date or date-time in + [ISO8601](https://en.wikipedia.org/wiki/ISO_8601#Combined_date_and_time_representations) + format. When no timezone is specified, the UTC timezone is + assumed (`+00:00`) + example: '2018-03-21T12:23:00+01:00' + - type: integer + minimum: 0 + title: UNIX epoch milliseconds + description: Absolute timestamp milliseconds in unix epoch since 1970-01-01. + example: 1534836422284 + - type: string + pattern: >- + ^P([0-9]+Y)?([0-9]+M)?([0-9]+W)?([0-9]+D)?(T([0-9]+H)?([0-9]+M)?([0-9]+(\.[0-9]*)?S)?)?$ + format: period + title: ISO8601 Period Before Now + description: >- + Specifies a timestamp before _now_ as a period in [ISO8601 + duration](https://en.wikipedia.org/wiki/ISO_8601#Durations) + format. + example: PT3H15M + title: Time Window Until + description: >- + The end (not-inclusive) of the time window for which results will be + returned. One of the [time + line](https://docs.waylay.io/#/api/query/?id=time-line-properties)specifiers. + window: + oneOf: + - type: string + pattern: >- + ^P([0-9]+Y)?([0-9]+M)?([0-9]+W)?([0-9]+D)?(T([0-9]+H)?([0-9]+M)?([0-9]+(\.[0-9]*)?S)?)?$ + format: period + title: 'ISO8601 period ' + description: >- + A period in [ISO8601 + duration](https://en.wikipedia.org/wiki/ISO_8601#Durations) + format. + example: PT3H15M + type: string + title: Window + description: >- + The absolute size of the time window for which results will be + returned. One of the [time + line](https://docs.waylay.io/#/api/query/?id=time-line-properties) + specifiers. + periods: + type: integer + title: Periods + description: >- + The size of the time window in number of `freq` units. One of the + [time + line](https://docs.waylay.io/#/api/query/?id=time-line-properties) + specifiers. + align: + $ref: '#/components/schemas/Alignment' + data: + items: + $ref: '#/components/schemas/SeriesSpec' + type: array + title: Series specifications + description: >- + List of series specifications. When not specified, a single default + series specification is assumed(`[{}]`, using the default + `metric`,`resource`, ... ). + render: + $ref: '#/components/schemas/Render' + additionalProperties: true + type: object + description: >- + Query definition for a Waylay analytics query. + + + See also [api + docs](https://docs.waylay.io/#/api/query/?id=data-query-json-representation). + QueryEntityInput: + properties: + name: + type: string + title: Query name + description: Name of the stored query definition. + meta: + type: object + title: Query metadata + description: User metadata for the query definition. + query: + $ref: '#/components/schemas/Query-Input' + additionalProperties: true + type: object + required: + - name + - query + description: Input data to create a query definition. + QueryExecutionMessage: + properties: + message: + type: string + title: Message + description: A human readable message. + level: + type: string + enum: + - debug + - info + - warning + - error + timestamp: + type: string + format: date-time + title: Timestamp + action: + type: string + title: Action + description: The request action that caused this message. + category: + type: string + title: Message Category + description: The subsystem that issued this message. + example: data + properties: + anyOf: + - type: string + - $ref: '#/components/schemas/MessageProperties' + title: Message Arguments + exception: + $ref: '#/components/schemas/CauseException' + title: '' + description: '' + additionalProperties: true + type: object + required: + - message + - level + - timestamp + - action + - category + description: A message object that informs or warns about a query execution issue. + QueryHALLinks: + properties: + self: + $ref: '#/components/schemas/HALLink' + title: Self link + description: Link to the query definition. + execute: + $ref: '#/components/schemas/HALLink' + title: Execute link + description: Link to the query execution. + additionalProperties: true + type: object + required: + - self + - execute + description: HAL Links for a query entity. + QueryListHALLinks: + properties: + self: + $ref: '#/components/schemas/HALLink' + title: Self link + description: Link to the current page of results. + first: + $ref: '#/components/schemas/HALLink' + title: First page link + description: Link to the first page of results. + prev: + $ref: '#/components/schemas/HALLink' + title: Previous page link + description: Link to the previous page of results. + next: + $ref: '#/components/schemas/HALLink' + title: Next page link + description: Link to the next page of results. + last: + $ref: '#/components/schemas/HALLink' + title: Last page link + description: Link to the last page of results. + additionalProperties: true + type: object + required: + - self + description: HAL Links for a query entity. + QueryListItem: + properties: + _links: + $ref: '#/components/schemas/QueryHALLinks' + attrs: + type: object + title: Query attributes + description: System provided metadata for the query definition. + name: + type: string + title: Query name + description: Name of the stored query definition. + meta: + type: object + title: Query metadata + description: User metadata for the query definition. + additionalProperties: true + type: object + required: + - _links + - attrs + - name + description: Listing of a query definition item. + QueryResponse: + properties: + _links: + $ref: '#/components/schemas/QueryHALLinks' + attrs: + type: object + title: Query attributes + description: System provided metadata for the query definition. + name: + type: string + title: Query name + description: Name of the stored query definition. + meta: + type: object + title: Query metadata + description: User metadata for the query definition. + query: + $ref: '#/components/schemas/Query-Output' + messages: + items: + $ref: '#/components/schemas/Message' + type: array + title: Messages + additionalProperties: true + type: object + required: + - _links + - attrs + - name + - query + description: Represents a single named query. + QueryResult: + properties: + data: + items: + anyOf: + - $ref: '#/components/schemas/RowDataSet' + - $ref: '#/components/schemas/SeriesDataSet' + - $ref: '#/components/schemas/ColumnDataSet' + - $ref: '#/components/schemas/ObjectDataSet' + title: Response Data Set + description: Result timeseries data set, with one time dimension. + type: array + title: Response Data Sets + description: >- + A list of data sets, each with their own time axis. There will be + one dataset for each `role` specified in the query (by default a + single `input` role). + + + The data is represented according to the `render` options in the + query (default `COMPACT_WS`). + query: + $ref: '#/components/schemas/Query-Input' + description: The query that lead to this result. + messages: + items: + $ref: '#/components/schemas/QueryExecutionMessage' + type: array + title: Messages and Warnings + additionalProperties: true + type: object + required: + - data + - query + - messages + description: |- + A json data response. + + Uses the format as specified by the + `render` options of the request (defaults to `COMPACT_WS`). + ' + example: + data: [] + query: + resource: R + metric: temperature + messages: [] + QueryUpdateInput: + properties: + meta: + type: object + title: Query metadata + description: User metadata for the query definition. + query: + $ref: '#/components/schemas/Query-Input' + title: Query definition + additionalProperties: true + type: object + description: Input data to update a query definition. + Render: + properties: + mode: + $ref: '#/components/schemas/_RenderMode' + title: Named configuration of render options. + description: >- + A render mode combines a number of render option under a single + name. Each option can still be overriden by an explicit value. + default: COMPACT_WS + roll_up: + type: boolean + title: Roll Up + description: >- + move up attributes on rows (or columns) that are the same + for all rows (or columns) to a table + attribute. Levels enumerated in 'hierarchical' are + excluded. + hierarchical: + anyOf: + - type: boolean + - items: + type: string + type: array + title: Hierarchical + description: >- + if true, use hierarchical objects to represent multiple row (or + column) dimensions, otherwise multi-keys get concatenated with a + dot-delimiter. If the value is a list, only these levels are kept as + separate levels, while remaining levels get concatenated keys + value_key: + type: string + title: Value Key + description: if set, use this key in the value object to report data values + show_levels: + type: boolean + title: Show Levels + description: >- + if set, report the levels used in the data values (either + hierarchical or flat) + iso_timestamp: + type: boolean + title: Iso Timestamp + description: >- + if set, render timestamps in a row or column index with both epoch + and iso representations + row_key: + type: string + title: Row Key + description: >- + if set, use this key as name of the row-dimension for + single-dimensional rows + column_key: + type: string + title: Column Key + description: >- + if set, use this key as name of the column-dimension for + single-dimensional columns + header_array: + $ref: '#/components/schemas/HeaderArrayOption' + description: 'if set, report data as an header and an array. ' + data_axis: + $ref: '#/components/schemas/DataAxisOption' + description: orientation of the tabular data as a array of arrays + key_seperator: + type: string + title: Key Seperator + description: >- + character used to concatenate multi-key columns or rows when + required + key_skip_empty: + type: boolean + title: Key Skip Empty + description: skip empty values in concatenating multi-key column or row headers + include_window_spec: + type: boolean + title: Include Window Spec + description: if set, include window specification in render modes that support it + additionalProperties: true + type: object + description: Configures the representation of data sets returned by the query API. + Role: + type: string + description: The role of series specification that was used to compile this data set. + example: input + RowDataSet: + properties: + attributes: + $ref: '#/components/schemas/DataSetAttributes' + window_spec: + $ref: '#/components/schemas/DataSetWindow' + data_axis: + type: string + enum: + - column + default: column + columns: + items: + anyOf: + - $ref: '#/components/schemas/RowIndexColumnHeader' + - $ref: '#/components/schemas/ColumnHeader' + type: array + title: Column Headers + description: >- + Header Attributes for the column data. + + + The initial string-valued headers (normally a single `timestamp`) + indicate that column to contain row index data (i.e. timestamps). + + + The remaining object-valued column headers identify and describe the + actual series data. + x-prefixItems: + - const: timestamp + title: Unix epoch milliseconds timestamp. + data: + items: + items: + $ref: '#/components/schemas/Datum' + type: array + title: Observation + description: Row index data (timestamp), and a value for each of the series. + x-prefixItems: + - $ref: '#/components/schemas/Timestamp' + type: array + title: Data + additionalProperties: true + type: object + required: + - columns + - data + description: >- + Row-oriented dataset. + + + Timeseries data layout with a column header and a data row per + timestamp. + + Result for render options `data_axis=column` and `header_array=row`.", + RowHeader: + properties: + timestamp: + $ref: '#/components/schemas/Timestamp' + timestamp_iso: + $ref: '#/components/schemas/TimestampIso' + additionalProperties: true + type: object + required: + - timestamp + description: |- + Index entry attributes. + + Attributes for a timestamp index entry. + RowIndexColumnHeader: + type: string + description: >- + Header for a column containing a (representation of) the row index + value. + + These headers precede the header attributes for row data. + example: timestamp + SeriesDataSet: + properties: + attributes: + $ref: '#/components/schemas/DataSetAttributes' + window_spec: + $ref: '#/components/schemas/DataSetWindow' + data_axis: + type: string + enum: + - row + default: row + columns: + items: + anyOf: + - $ref: '#/components/schemas/RowIndexColumnHeader' + - $ref: '#/components/schemas/ColumnHeader' + type: array + title: Column Headers + description: >- + Header Attributes for the column data. + + + The initial string-valued headers (normally a single `timestamp`) + indicate that column to contain row index data (i.e. timestamps). + + + The remaining object-valued column headers identify and describe the + actual series data. + x-prefixItems: + - const: timestamp + title: Unix epoch milliseconds timestamp. + data: + items: + items: + $ref: '#/components/schemas/Datum' + type: array + title: Series + description: All metric observation values for a single series. + type: array + title: Data + x-prefixItems: + - items: + $ref: '#/components/schemas/Timestamp' + type: array + title: Timestamp Index + description: The timestamp index for this result data. + additionalProperties: true + type: object + required: + - columns + - data + description: |- + Column-oriented dataset. + + Timeseries data layout with a column header + and a seperate data array for the time index and each series. + Result for render options `data_axis=row` and `header_array=row`. + SeriesSpec: + properties: + name: + type: string + title: Name + description: >- + Optional alias name for the series. This name is used when exporting + the dataset to CSV format. + example: demoQuery + resource: + type: string + title: Resource + description: >- + Resource id for the series, required unless it is specified as a + query default. + example: 13efb488-75ac-4dac-828a-d49c5c2ebbfc + metric: + type: string + title: Metric + description: >- + Metric name for the series, required unless it is specified as a + query default. + example: temperature + aggregration: + $ref: '#/components/schemas/AggregationMethod' + interpolation: + anyOf: + - $ref: '#/components/schemas/InterpolationMethod' + title: Interpolation Method + - $ref: '#/components/schemas/InterpolationSpec' + title: Interpolation specification. + title: Interpolation + additionalProperties: true + type: object + description: Query specification for a single series. + Timestamp: + type: integer + description: Unix epoch milliseconds timestamp. + TimestampIso: + type: string + format: date-time + description: >- + ISO8601 rendering of the timestamp, present when + `render.iso_timestamp=true` + ValidationError: + properties: + loc: + items: + anyOf: + - type: string + - type: integer + type: array + title: Location + msg: + type: string + title: Message + type: + type: string + title: Error Type + type: object + required: + - loc + - msg + - type + _RenderMode: + type: string + oneOf: + - description: >- + Render rows of timestamp and values. Show column headers. Includes + an iso timestamp. + + + ###### options + + - `iso_timestamp`: `True` + + - `header_array`: `row` + + - `roll_up`: `False` + + - `data_axis`: `column` + type: string + enum: + - HEADER_ROW + - description: |- + Render rows of timestamp and values. Show column headers. + + ###### options + - `iso_timestamp`: `False` + - `header_array`: `row` + - `roll_up`: `False` + - `data_axis`: `column` + type: string + enum: + - COMPACT + - description: >- + Render rows of timestamp and values. Show column headers. Show the + time window attributes. + + + ###### options + + - `iso_timestamp`: `False` + + - `header_array`: `row` + + - `roll_up`: `False` + + - `data_axis`: `column` + + - `include_window_spec`: `True` + type: string + enum: + - COMPACT_WS + - description: >- + Render timestamps and each series (column) as a values array. Show + column headers. + + + ###### options + + - `iso_timestamp`: `False` + + - `header_array`: `row` + + - `data_axis`: `row` + + - `roll_up`: `True` + + - `include_window_spec`: `True` + type: string + enum: + - SERIES + - description: >- + Renders row index in `rows`, and each series as a values array. + + + The series are prefixed by their series attributes.The `rows` index + is prefixed by the labels for these attributes. + + + ###### options + + - `iso_timestamp`: `True` + + - `header_array`: `column` + + - `roll_up`: `False` + + - `data_axis`: `row` + type: string + enum: + - HEADER_COLUMN + - description: |- + Render an object for each observation. Uses flattened keys. + + ###### options + - `iso_timestamp`: `True` + - `hierarchical`: `False` + - `show_levels`: `True` + - `roll_up`: `False` + type: string + enum: + - FLAT_DICT + - description: >- + Render an hierarchical object for each observation. Shows an iso + timestamp. + + + ###### options + + - `iso_timestamp`: `True` + + - `hierarchical`: `True` + + - `show_levels`: `True` + + - `roll_up`: `True` + type: string + enum: + - HIER_DICT + - description: >- + Render an object with metric keys for each observation. Shows an iso + timestamp. + + + ###### options + + - `iso_timestamp`: `True` + + - `hierarchical`: `['metric']` + + - `show_levels`: `False` + + - `roll_up`: `True` + + - `key_skip_empty`: `True` + type: string + enum: + - METRIC_FLAT_DICT + - description: >- + Render in an object format compatible with the `/data/v1/events` + upload. + + + ###### options + + - `iso_timestamp`: `False` + + - `hierarchical`: `False` + + - `show_levels`: `False` + + - `roll_up`: `True` + type: string + enum: + - UPLOAD + - description: |- + Render in csv format with row headers. + + ###### options + - `iso_timestamp`: `False` + type: string + enum: + - CSV + description: Render mode configuration keys. + securitySchemes: + waylayApiKeySecret: + type: http + description: >- + Waylay apiKey/apiSecret basic authentication. All endpoints support also + Waylay JWT Bearer authentication. + scheme: basic +tags: + - name: Execute + description: Execute a named or ad-hoc query. + - name: Manage + description: List, read, create, update and remove queries that are stored by name. + - name: Status + description: Inspect the technical status of the waylay-query service. +servers: + - url: https://api.waylay.io + description: Waylay enterprise gateway diff --git a/pyproject.toml b/pyproject.toml new file mode 100644 index 0000000..5b2aa9d --- /dev/null +++ b/pyproject.toml @@ -0,0 +1,21 @@ +[tool.ruff] +include = ["pyproject.toml", "test/**/*.py"] + +[tool.ruff.lint] +# allow duplicate imports +ignore=["F811"] +# https://docs.astral.sh/ruff/rules +select= [ + "UP007", "FA102", # convert Union to | (pep-604) + "I001", "F401", # sort and remove unused imports + "PIE790", # remove unnecessary pass statements + "E303", # too many blank lines +] + +[tool.ruff.lint.per-file-ignores] +# do not touch imports here +"__init__.py" = ["F401"] +"conftest.py" = ["F401"] + +[tool.pytest.ini_options] +asyncio_mode = "auto" \ No newline at end of file diff --git a/requirements.txt b/requirements.txt new file mode 100644 index 0000000..85733e4 --- /dev/null +++ b/requirements.txt @@ -0,0 +1,3 @@ +pydantic ~= 2.6 +typing-extensions ~= 4.9 +waylay-sdk-core ~= 0.2.3 diff --git a/test/__init__.py b/test/__init__.py new file mode 100644 index 0000000..3f2c4e3 --- /dev/null +++ b/test/__init__.py @@ -0,0 +1 @@ +"""Waylay Query: timeseries queries (v1 protocol).""" diff --git a/test/api/__init__.py b/test/api/__init__.py new file mode 100644 index 0000000..9e988c9 --- /dev/null +++ b/test/api/__init__.py @@ -0,0 +1 @@ +"""Waylay Query: timeseries queries (v1 protocol) tests.""" diff --git a/test/api/__pycache__/__init__.cpython-311.pyc b/test/api/__pycache__/__init__.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..697ad5b5ea96bf43f25a49e25c450005faab6fd5 GIT binary patch literal 283 zcmZ3^%ge<81PK?`q}c%J#~=<2FhUuhK}x1Gq%cG=q%a0EXfjoqh9_3$BvvW}mZla} zS}Bxd=B5^>7GNosLPv7VnM<1P01_>}zQ`1q9! zpFyVo%GS@w&rQ`YD$UDFEz&Q~FUr<02b-;1P^k+vvn(??wHTWax?FKewl36ipjLg5 zjrxfNnfmeZnR%Hd@$q^EmA^P_a`RJ4b5iY!*noC}yjLs;Bt9@RGBVy^u)Y98MJzy3 E04^U^ivR!s literal 0 HcmV?d00001 diff --git a/test/api/__pycache__/execute_api_test.cpython-311-pytest-8.3.2.pyc b/test/api/__pycache__/execute_api_test.cpython-311-pytest-8.3.2.pyc new file mode 100644 index 0000000000000000000000000000000000000000..af9ecc8150e61b68a6784bb661407d39692ba2bf GIT binary patch literal 10690 zcmdT}TWlLwdOkxAFQTXmMT*wVGUKZ#OVrJ_B+F|{i7#`^|M{!7wh)2mzV`Xb$pJ$C4PWX{&`Lc0g_n?z zh(OXr-~^Avr9CY6%6!hl5!sjab7n~(9bhHFbP!^%)FOw{Ay&pqt#UXWW@(?)Cby^C ztvVg)4&e1mopK}{VR-?mOOB?aEFF|$a(B90j;G`7y+t}C_oRDRIwbYVed#`yZk77w zf%E{R!$O;MSRPCdvUIz2L{6j=EZrf!A|Fj3W$8}on0!2aoTVeu3HfCDBujTmr{tmZ z5KBj;q&%D+X6cx8S{_M{aKuBzkkI{@Bjhvqo6jG4gm{4y4y8xMQQ8i(>5)?MSb7X< zazd{(E>EN<hUKSOR=0zp(F63Z5bblgI zqD8fsD@w^kwvNo54R48=KZhd*fZr92z(!|i3s+N@VV`D|=62>@cjiyLb zs+e0#hC-K%i9%6Lh(cavW6McdMM=onLOCl*8>!GYxSto3oYAt9F9;c>B zjEQ&4MODP&*O!)V{rE;PcMo1dxiv9&FQaah#H7b)St#XSlkzZ8BWzC4e8cKDV40*R zP~*ybVy>);zzW&zxa_dVw?%qCpA)}9v4ZUGh1FFmuCnF2A*yRd;kH^{hJwzku(UVt ziRGLC zi3LHV6Bb9;U09gn184J_gAdsDNx`1M2`DLR*Q8{eud;L%2Homt8CI#wT7g$L7PGR* z%8am;$KI0O#igr8#B4bOA2X9P7u8QiwM+{+8%kld03g}_X#x@-5!F$)Mclv(Tb^5_ zt-zP$XdgrhGAF)M#@33mI7Z6_*uY~CiuB%?+4pE^W3)c8{jwU%6ye^eHGil&hGH@X z!ygmPPtK--nW@r-(dx*ggD{Rs98d(v4*8GPZY_SQ(mJHK4r%<*Q^+Jno3$S1TDaDr z1Ldcd!_3yp8VSU@X<^7OTQlOGNDzvnxNu-_+2ui94UB4j;KPpf=AMH;>bb=RmH5TtnxP@5jXd%*F;_8(8(5Kj1vvtF*VS&Tj`_c+bFSx~@%Yz})yIqxLq8+V{x63GHn2 zYIN_ry6Q3$5zDrCcU||}AA=e99=FZG-?Qx%{2-ly&DkXo4}j;any?T7aFXd9&@_OE zc?BR2G)%t0FdPIfVah{lvj}i5QZ;d6sI)PYR6;+s5{VzMtns8WggIyHMUb$Hrs`Rc zu(BqSHj;(5QFBVS2P)-3ZT@HZsfQyre?ghF>b?vXWwiAQyonlch#aMp-MCB_Tt_ z63whi#pSG&DFBihEg2=d0?SjPM*9L=3{YKHC@oSWnpr7QIjd&G_exT>z%)V9$A)dR zVwdLPO*&uBIA5mC7qgXF1yLY@4?PSiqk|1@@B2_RRj1*v+=QLEL%!zcb$(uB!A$&$ zrGZu)MUXamARpMAMP`nZ|M{F3*M(BML9?zi2ht6h4X-wX-H4q7oOY&J%b8=dLBeJ; z(`HdaM@}AKcs|f0xa1);c;3s%V22p3U@3^89x`Pr86n(V8*E49P$|?Oge#^bzJ!EZ zQSK=SH>iVHa!!S@Znr0Rwz$6}f_KXUl>gZ07VZ6kZOf~ogjmn#KDWXV{6gRnzs-A4 zec2!<1oHqRzu^9igVPWJh-g_fyw|QQ8Qf1c2gWQp8oNK?ObS^wJGL1ZdgoGVIC<#_ zX9NUsB@0%~H(x>DPk6&GGn2~j;&KIYMKGJdVrvCaR?A8T?b#>fNsz{X+i1;E5f(SI zt`rM~hl-qWlhw|Uu)}phO=&T-{tsd&D zwFP?pH3CHAyK9}qH?Z@D&i8BlIEKM7D`CF!<7{Vc#+JYuR+zEP@KKUPAq8e2SZ`Te z#eiitxprqe4F6~FfBHWF7(XN&dJs6+e;%hnCwM_k*?SO-4Eq%7-nXi~e_p`jG-{f) zgSMjeH0|pkJWj)?Nne6b?Wp(FeAJ)&AA@@R%vP~^4iqsOjn=aTa_Lgc-SrYs#|^67 zEwhhdT|cwe7CjdrhxXjoZOPs8u5fjk{237fKlR=rA9??T-}b5fj=p><_=oC`iuSGb ztZ=>cByl4ENO%AwJh*wD83DPhA|^oJBpQSuglgxCDHsVnK?vsAmE{{`yMEvgf#FV(Qd}d~5boy*IH+n_@GBY`o9Tm>Z=Fa9O#pUIdoYAU^atY6|Wh#Dy z!uup-1VN~aWttNibkIC-W%mwfMq3^aUiAZ(!LLy9T_bouOEY*7HhkrRnwJd!19o~c z0?>NCD1dUO>~yu5?4&)=55><4zX>@8k9eh^VTj9G*XJ>&&l?+F1Fj#!UwH=Pzu>n+YF(u3 z$(~)*cj*EuV@m0qbdkOiM3Bro@B1x|T2E|&?$Wz z$sHtjk^C6QlMqc~`uCB%gX9m8`~(PsOi`wPi0@e>%SduS7L)DY6G^CmZ7}q}Riq-2 z=aAv(e#nr)i5JT%^Mff=f{N={`9FcUal#KcQSG@{jUU_XAJ_XYRQfOK{TFu+r}V?; zD~B)WhcE2L#`V~RO6;N@ySN(zTV}ixo77{IF2INn>G3m__&Gg(u6n3A3Xlq-B zHpNQ=dI`xqk}F8A0!i`?OL!4;Zvs(JL+xptKHJuP-o`Bg=LcA&1Z0Qo#*Vox+#Y7( zYJH0j?*TDGrQ@dFadS6%Xdj!l#fLU65VUE-2eN5h0FOY&0RGHuC zO}YP2B^e}qOR%V~gd`g^cpo_I`ze*@BsOg54o6i0Uuutrat z(P5oLZJ!g01v3E~Ek0kP#kYc-t3Vo0m|-WHQx!P=9J&4*h>6?J;-qWvcWKo<>miXN zdS|NAIj(n(*A92IgRBApLoY#mM;>l|I#=PRb$(jor>l`6)36)TB9jn4J!i&R>tsVX zh*{^7aokx<#{brqapnoP4V&hskPE?We)n#7$$m2)TT))o*Fkt}DQVtLgJ-+Rhy?yo z$R+>H_)J-L7)GDfiO7N@6S?nZCM^ogfT*EP7hQ&fCF^C~#P?JOf; z<sY%zFPDl`mGaA}GMvsSDs00K_qcG6$_~#)7`%g6T*^{#SmB}D@S8mv zVaprOJb2WPMJ;#*yjspufuXSxGH>fra6>_Zz(8@Q8}Yr|6kH6Zz?p})q!hP;(O)lY zyh;U5cDG<0X~toB)F_%J#$gwL#1I%hzmyNjhmORym>pbaA)EAn+vbLdBu3iJvDQc7^j=9uVwMp zFM{wQ*Yw$-1~>RZS&|H1rDgCnt-yT^c!^i?@1X~Y-R!d45YuCGi}A}@dd~=Cm5o9! zUo`y6y?iOZLeag#&Q2y!pf;u`?xrP;PJedU@?G!(?3%J9UZf8p4>4FtfH7V3avWFV z0~`+yTOeJ8<95JY-uKtK!+urLvcrB=a$IwVD(TVOp-KidclesL?XX{!9M#;RN)nno zR7pzPFI35p<_=XdskuXyoY&mpYqFrZLzPTx?ocJSG(^~kooy$9yzv`}e2^RtX7$1W(2j{Qy=QVezdAvTr z(U+5U(tWZ*B0Kz!@WB=6&l7xqu;$^o=^_r)T8?LtX*Sr`HkDBq^Wfs>6WHN%Iyv_kXCc2@~8jnTi_v<5eTpPW_I+)kF z`I@Jf8(@&@J5o2O5ivI=vA<+T= literal 0 HcmV?d00001 diff --git a/test/api/__pycache__/manage_api_test.cpython-311-pytest-8.3.2.pyc b/test/api/__pycache__/manage_api_test.cpython-311-pytest-8.3.2.pyc new file mode 100644 index 0000000000000000000000000000000000000000..f4e2f4ce1574b366c9e15992a2dd04bbec69b459 GIT binary patch literal 14492 zcmeG?TWlLwc6T^KQleg@L`jxpE8JMIMcbkzTec&|@gtV(_$7PSvUkgF!=*VRneyH)4whT%PYQShwpy?L_Z-4yN zbM6d>Gb75B4IAyI9bTS$=iYN4bI!Tvocs7iTU&s@b4~kfPTNYzzu`;uX)+U!{@O># zM?@rXB66Zf=Hea}^BE!K;Yh|C_i;vvKkjEGP4Om(dAT_ghzD4iAh%>%DWCr7dEZr`@l!?S6EZrf0EAw*vWtI-gTQfuPA(jrwuVl8xw{gTn zq=49Yha==u_#4lUJz`gu6T|WC(smkzk#@_&nP@zk*%9B7*%{vnEpTFwyel&jAAxl5 z_jy9%vG{0wOzKz|ueKs?lDfq{seeuo`)>$$Ap6s55sB{>2c(`kkGT1U5Z@zikwW62 zGy#||!TVllWnUF_VShDc&%OO>HP;?X+gphk`RrSFJkS^XjYoW0+KjDZFLOR|t9vZ2 zkxknBdAi=kp$2`w(xC4HRZ584fEqq=J5b}bXCKc7s4?7NLz5a;cFoKjjSOE= z)x2_GbTkKD!Wc))(d1}Ml~PxtfxuKQlFg|RNldG3Y$-XZD3MGuTS&_CVl40#YW|rh zr#H`~vtmNYODTBqUd+OfG4XaGr%G7-=IreG@14!1uEI+obwx^DO{j}`DeBRikLJ_I zOkWQ61|pANnfG;f$YvHNtRUUJCc&m zWfkdyTDT0ky(aRRw4%C-x)}GSBp7)bNo>{#v+U`tnpPK2X7dHr%nz}AdmBrG*O?f^ zfcH2OCHA&4vRDSkt;`;e@_M^-SUT$!MsFXG-sWfdL@^UMrk1n zf;oCUN3V_=eUIc9N2(uMFUwt~h*w8UdO+1t6#r2e{wN3!u#$ZV=Ed@hdZ3m^H^V5# za5y0VtK{EX!dmyXV$1eY%XUrJ{s=OO-eyw6poD`0%}|b1c=Y!m79WvivVb+%v%)QN z3l>FIJgT=^Lddd51vj+%INh2RewqJ(Q)1wXc~orQd={+wPRHgNQTo)jDi$FN{%Tqk zswv{)26fh`I>%)F8sIj1M1F(g3D+NwTPCOz&l-gr5BlaEE!HqOrAG$W_%>mkQS+`*dq4IqK|3pg+EwGLqb^(iVA-q_a#h!)%Kf(;>E$1syF> zHS)@Ee(}|)5_s24L|$iEV^L)obM{t?AYm5msb)dK%o>kcYAvu5GbUw071bY$eL-6WMv_^0CG`jB$8C$lu)kZ3bL4>Ql2K}<=o|@oX93KlHQz9l5;?u zJk{HeGE#tcpQbcN^{&KRj%Jc-LV71JgCat`AN8_P>n+%&LAu@cmkImJe&fYxWl}*E z5W$BIKuYgmgR60ePC)Kn_$%i?ELX`x;ZR99q_JQmzGP{DMOzW14IIb^G<%VeW5-{c z^W?fvYBgxowdX+EmFar55UfV59Kf_Pjav2`3k?z$nvph&TpihQ0AX#QTae@d^kLpf zWWcr1Tjs%&0^5)%P&s8SO92aKJF^OZ2MMQLtXYIRP*z(wufR5h-9jv2efEf+W$rJD z$lr45gZerQEDKHt^Z870+7{6(`aTv`cn?}COP`7UG+E~Viu-d87X1XYLDP&boIiJA zR_ES&ymi!^HKW(Y-O0t_?;nosh#tPn>3&g~OBQ7HtNYOPT>++;q+ZF1IuEqb{i$45 zMUSfmrmb2~66lZKC3l-BYBIegMJ1qQVnNAebq|#gKa)?(k}j|;uUN?B6`fa9s<$RZ zoPvhabyuJ$?G!f^^fu&)RiuY%j7nU+o}}}Ng66O`dHND&w~C}Pep+?uIY2xBeo&|SRVcsxPcCsvq zG4RyD4ND@K{HFhtvg8DYit6D#_&@qBfYXG-jV{jam8~azX>NtLOW!icoKtdeLkVQY z>TSXDEkwR5J?|0G^Dcjhe8m5W09Fc}J@Z)>>{6+=SMv#(=P$@W34DKrh z_f>dLyKnXQfBA@a@aDoNJBz};lCVz`_LW21KIr{$uoT*+g~lL!(qqJ0%a|*yPCXFX z-&cQr@z(1%50$!i6os87VW(CNhWrE#`KifHeL?vf80r6BL0Ly2-l!)Kk?U#oO2k+R zIj2n{QSmcTp~yKl^O<g@}qkIHfWysM&@bR14c@?<#oE6 z>li8Ct`0u)I{7U6L_ZiQ!DXbHK+Om?Bh@^k^CzZf=_Gu_<1KE}1WVqk!CD-B>^BV+ zeGQQ5>j(}ZKvhAf0Kl}jED8NX%sq=>27sIEJ&AcR7;BA25^yE>Kl&knwML_t8I5x5 z%m*!6>kNc@JB%3M*Ssef_#FWNdLg{2jtOb=qX_|kCM38a6XIYwt|Q;W!Tk$>>V#hb z%?*0mTBG8+beU68G|b0g6I}j>lhJpe)~8m@^{vG+KgU%W>97}GhrRIH1>~vh1-~@p zR1d%{rU6b!c3Yu$)+Psd=gCZ7mS(_eAQvgxQF;mivlKiu;WiUKmzgkx<`UNVE&v5x zKr~TRSG|ep3T$W|aS&w%fT9&Q&6Y~q?n2N>q!R1`ED~3bMU%`^F3A0yG%qHkbjI7t^qLRpz{UGK|M3^ z4O_X;KLT+4Y6Y$;$Va>FFJ zXBM-})`GXTD5xzYLACpAO99(9CM*T4Z7M?SYW|5!0ok50Z~-W!hfF0XTM>s~pXNvpaqH#Y|++*~a9X)hp9WT2t(1#H=-^1HF5o(tH_ zCO5+_0M0G=D}M&Sn$OL_pZAs9gXPX}xhq`p3!QZ0S=Pl%rtrKt+AV`SoUOJzt>{4OO0QLx_=9Q`=Sp#{a`uNRqpOB_w+KRR~Wx} zALDoXbKrMfO>UdE+>U)8Yyf3) z*Q7eCeF@Nii&d(={kBqgcQHIs3QwSF@Be?_9*6^bh%el?-{ExT42Cg{{~g9V`)-io zxHVB^p4+8|Z8T)HO~r>1tF8lQ?D3ct&}siC_^<1|Z^2!iFABfD@SFZ$CVrJD?mt`F zf3_&hl!O^gn5pgZ++NZ`2O)fZ$%wUW{hg7rkfUr!Y1GBUoV{OgK z|2xW`KY!8K;h|5|{A>@0{s7s4?u~8T-IpljMLb+syJ7Pazh1=;t-mY;rO1wWEK3+Uyu$EAFE%lr1KXcWz7*{kBx z$9z=WBR8KXdfz;F-@=kh`5J^}%J(9pv0M2X`|;5L#k&>s0s^G@8eMEOWYfhxh*ftY z8oJo5@W+4#ha5z~RhMHYrQ&0Ity@dMJ;mVOQgE+(uk|@A==C?^>x?D163 znGG~loccfwZ7~67-sWXK0|WJ(zQv9Khu(0nFOkNJeFhGyT)oeZ3n*Q;t?o2{4%yn=kYa- zfbFf|774`#v*C!LFHO;ZGRy+1bBYtsIF>cuX#8dGjS?S9`5k%gB1di8w8rT@lT)) zh<>w`MQ+f8oeh+@aGCSp82D$d>mRu;ZPTz89@fTBXk1s3d$Yv7S@8t8T{nMNArRd= z#-jUwz@i$!F`eW9857;mVnqP#N`Ji$!b94~Vb=PQ5_hEHY2`MT+XgB;#ydug__Zk( zR|sS>fbAZI4vy41z@otbH-38&$1#3SVUc$J0*l?C?oihG))}n4>s}X&?gI(&TP*ND z_N~ZI5C-HY?`9?DRyNAd4sQ3&w<-jpdmtDP-JfJp4b=HYK&uRGgr7l^pBN)QF-Cqu zTp?9Zho4xq4H$_s3lYjJMB0T*EOvv9^K-cAxLJ wwi@#kBK%f}@LM6OfjZxc<%1jHYrDx;jFGPxBVQq|kSeId*J=?%Vk^u42BJCFasU7T literal 0 HcmV?d00001 diff --git a/test/api/__pycache__/status_api_test.cpython-311-pytest-8.3.2.pyc b/test/api/__pycache__/status_api_test.cpython-311-pytest-8.3.2.pyc new file mode 100644 index 0000000000000000000000000000000000000000..9fb9f67fcc364ba9071f8a62ba1da69f736082fd GIT binary patch literal 5416 zcmc&1OKcm*b(XvQtteR^O0q0R*~CsPIu>QsN&HD-Te19)j>5(6}&?LoWq_o_ok~Rj?>AfB^$Vf#$}-x19QBmRxcft4V+Y z-JN~==FOYm`^}p_^!LjMo*Vubr8{Ya{=q8kC)GlpWn&24M>;AXUC?8uP>AurXi3GG zfUI~SAp|YSLXx+n3Mu%DX4;YqGH;X2J}XnmSp9|m7Vkh|0C?i&E^Dwb$Y}|4$QmvT zb3AE|SlL3>8ZC_SddeKL#tY*dPn)}~iNXZOWpj@;S(p@13}IRCdn6$AIefwMiEmDQegu;J9KPVuC-5X2 zoy}58=zDtC(zCMZ?s>$!PZURp6+rReBbxv9CzGPW_%Jgh4v;#i8e zf|aXfY|p=cQPG`Z#lp6yd4^*vPDwfN!)84o%jd(XHRi@6w; z7L1}t;~&_taMpHVY3co+UU7!o+(#n+N*pXskhD5*JfIqfv&U6d}d+!vo4ng-wC7T%T+3OXk-{xv7aqx z2tW<}voGt9zPjCapx$@DmkvAwBBK2*X#|ppNB{z2Ab~&g0JwoxSr7hf3LC;|D3Q&W z7jL&9v=Q?Xom$kzH^mL{6T!{1FzK=JThD6PKkDQ+kUQb^x495nO}24QYGbHJ8zkDJ z9mdhlJs?QNbn$zxC;R;M^x6c8@`bDD<%7A!$cPYxeRmUGD)?u7Y$s6hDHPV+K)U0hoiuR4xektgQTf(LQUu;v< z6X2W4^9|cyfR&`9?QA% z?G~cE!%2s8?lhyk(QX2y)pVpy0;ENn%Y`vX-pmJ%DsLX*BfXh(bMhvY4cD-t#V%r! zh0T%-fLwx#uBz87hUvl3G+{bL z&2*^@R2DQ;jnLhyyW&(#T_w0o)MeATu9>Q>S(v6(S1W;V%7hNgb5TGXKTC*1=!jZ! zh^2WdzEw6gn;%WNIA1mGV^apA`%!o0_3p~ipc0I7++`s^VGm*9itgfz>u84@WRif- zy$WVoLrgEB4Zx_P6j>;?txTRWfI@7*o$VA|5P%FeNhAA3w zF>hyQ zp43whrA;x0;4BJH3_We24e|HFZv;q*5%{~jNX0c=rHG2>&n{8nXX`J_w!CBZ##|RV z{n4rX!Q3fGC6YQWX%*A^`YTvQPNE45dn=AkMc6$}79HDTX-Qw;S}M!f9y70u5zJbx zvSDH>t-6j)<9fv^yHs>NLNl7qT*@swwu^HTc?||9hXBxiCgZS)4s`^tuHDqgvg@+r zt>X-1>N56J7rsbGG7nsN_}n!BHPjg0^Wfc2F4wL+9UgzOYv|YO{+^2u)&K-$d)KA< zu1ilw#_yeYVEyTuKXQC~A|Gaa8uG!Xz_8f|7!d~fYiU7GZz!>mlrwveDI z9p?73o?U{>&E;7k4_c;)^*l%u(kYF}BH7AgilKgCmF%SX7`|tJ0dN@!U_%Dlj9AY` zY(t1@o?UQ2=b=@th879d*V6vSV2iiK57B+`R}!2f;fcmhjBcy)!jl9ckA>IP(~Xy6 z6Kygo2_3w5Rk{H7Ca%x%^QEY{Sb=B;iM%H>-JQpt@*yTJ%h~5`UAcfY(_7(9i{uzg zkV|q6k}1Hc2;B%jp3{q}=TU;j+}?Ali9;mHT5>Z7l1ONZ*xA-`P$`xp%DqhlKpLtwk)hHw{<|A!&$ zpv=qPQl@g#@K%)I77?}f@2Tc^N6q9c>^4v{vqN$YK(7kN+A37p#7@QIS0tBQ242pu z0@70G@c&Ao+tMU=c<^~vxCV0vX;M|;@~Nsc)y^Qui!eK#P=oX#ADr@F;(3B^62pU> zAtcdci$-38KIAP1m_^b7!zw$(GmY!{if5RF1qhmei=bgI2bRyQgC>GGXr`5_@Gwc( z2}INE*0@~Jh|Yyc<=`HZhvbd0BZRQq1s&^9^KfCxL-=G@LBd2&C)*5!=RF-ku{ps+^StP97y5TjIvSU4$PI#g9X!17f)%e>$=^B3&F#$5dgiE~Ia6DxEqpcF6p=90Od%=T zgiWU#QVJ??*+oM&sixmO3ms#rJ5$Y=AWU!N7|-+{)BM)~{}xefu*K6%#e`E^Z#NPA zdV!o0=C-O$1ivp`{_6!}Y_iF^kZlObJClDGM*b>{_`9e5?6g03-WNu;g$s4zLNk^U zW*#iE&NE+*@ZVRkG^lj|Thm1Wm>Dt(BQ_=0{@e+&`~8_yeDu?G;dC=53ws;=lTDHR e56%Stw-)%niGauf8+RTiINh0`-Nf6u)%^!MVm~hc literal 0 HcmV?d00001 diff --git a/test/api/execute_api_test.py b/test/api/execute_api_test.py new file mode 100644 index 0000000..f203eee --- /dev/null +++ b/test/api/execute_api_test.py @@ -0,0 +1,203 @@ +# coding: utf-8 +"""Waylay Query: timeseries queries (v1 protocol) api tests. + +This code was generated from the OpenAPI documentation of 'Waylay Query: timeseries queries (v1 protocol)' + +Generated by OpenAPI Generator (https://openapi-generator.tech) + +Do not edit the class manually. +""" + +import json +import re +from importlib.util import find_spec +from typing import Union +from urllib.parse import quote + +import pytest +from pytest_httpx import HTTPXMock +from typeguard import check_type +from waylay.sdk import ApiClient, WaylayClient +from waylay.sdk.api._models import Model +from waylay.services.queries.api import ExecuteApi +from waylay.services.queries.service import QueriesService + +from ..types.aggregation_method_stub import AggregationMethodStub +from ..types.from_override_stub import FromOverrideStub +from ..types.grouping_interval_override_stub import GroupingIntervalOverrideStub +from ..types.interpolation_stub import InterpolationStub +from ..types.query_input_stub import QueryInputStub +from ..types.query_result_stub import QueryResultStub +from ..types.render1_stub import Render1Stub +from ..types.window_override_stub import WindowOverrideStub + +MODELS_AVAILABLE = ( + True if find_spec("waylay.services.queries.models") is not None else False +) + +if MODELS_AVAILABLE: + from waylay.services.queries.models import QueryResult + from waylay.services.queries.queries.execute_api import ( + ExecuteByNameQuery, + ExecuteQuery, + ) + + +# some mappings that are needed for some interpolations +null, true, false = None, True, False + + +@pytest.fixture +def execute_api(waylay_api_client: ApiClient) -> ExecuteApi: + return ExecuteApi(waylay_api_client) + + +def test_registered(waylay_client: WaylayClient): + """Test that ExecuteApi api is registered in the sdk client.""" + assert isinstance(waylay_client.queries.execute, ExecuteApi) + + +def _execute_by_name_set_mock_response( + httpx_mock: HTTPXMock, gateway_url: str, query_name: str +): + mock_response = QueryResultStub.create_json() + httpx_mock_kwargs = { + "method": "GET", + "url": re.compile( + f"^{gateway_url}/queries/v1/queries/v1/data/{query_name}(\\?.*)?" + ), + "content": json.dumps(mock_response, default=str), + "status_code": 200, + } + httpx_mock.add_response(**httpx_mock_kwargs) + + +@pytest.mark.asyncio +@pytest.mark.skipif(not MODELS_AVAILABLE, reason="Types not installed.") +async def test_execute_by_name( + service: QueriesService, gateway_url: str, httpx_mock: HTTPXMock +): + """Test case for execute_by_name + Execute Named Query + """ + # set path params + query_name = "query_name_example" + + kwargs = { + # optionally use ExecuteByNameQuery to validate and reuse parameters + "query": ExecuteByNameQuery( + resource="13efb488-75ac-4dac-828a-d49c5c2ebbfc", + metric="temperature", + aggregation=AggregationMethodStub.create_json(), + interpolation=InterpolationStub.create_json(), + freq=GroupingIntervalOverrideStub.create_json(), + var_from=FromOverrideStub.create_json(), + until=FromOverrideStub.create_json(), + window=WindowOverrideStub.create_json(), + periods=56, + render=Render1Stub.create_json(), + ), + } + _execute_by_name_set_mock_response(httpx_mock, gateway_url, quote(str(query_name))) + resp = await service.execute.execute_by_name(query_name, **kwargs) + check_type(resp, Union[QueryResult,]) + + +@pytest.mark.asyncio +@pytest.mark.skipif(MODELS_AVAILABLE, reason="Types installed.") +async def test_execute_by_name_without_types( + service: QueriesService, gateway_url: str, httpx_mock: HTTPXMock +): + """Test case for execute_by_name with models not installed + Execute Named Query + """ + # set path params + query_name = "query_name_example" + + kwargs = { + "query": { + "resource": "13efb488-75ac-4dac-828a-d49c5c2ebbfc", + "metric": "temperature", + "aggregation": AggregationMethodStub.create_json(), + "interpolation": InterpolationStub.create_json(), + "freq": GroupingIntervalOverrideStub.create_json(), + "from": FromOverrideStub.create_json(), + "until": FromOverrideStub.create_json(), + "window": WindowOverrideStub.create_json(), + "periods": 56, + "render": Render1Stub.create_json(), + }, + } + _execute_by_name_set_mock_response(httpx_mock, gateway_url, quote(str(query_name))) + resp = await service.execute.execute_by_name(query_name, **kwargs) + check_type(resp, Model) + + +def _execute_set_mock_response(httpx_mock: HTTPXMock, gateway_url: str): + mock_response = QueryResultStub.create_json() + httpx_mock_kwargs = { + "method": "POST", + "url": re.compile(f"^{gateway_url}/queries/v1/queries/v1/data(\\?.*)?"), + "content": json.dumps(mock_response, default=str), + "status_code": 200, + } + httpx_mock.add_response(**httpx_mock_kwargs) + + +@pytest.mark.asyncio +@pytest.mark.skipif(not MODELS_AVAILABLE, reason="Types not installed.") +async def test_execute( + service: QueriesService, gateway_url: str, httpx_mock: HTTPXMock +): + """Test case for execute + Execute Query + """ + # set path params + kwargs = { + # optionally use ExecuteQuery to validate and reuse parameters + "query": ExecuteQuery( + resource="13efb488-75ac-4dac-828a-d49c5c2ebbfc", + metric="temperature", + aggregation=AggregationMethodStub.create_json(), + interpolation=InterpolationStub.create_json(), + freq=GroupingIntervalOverrideStub.create_json(), + var_from=FromOverrideStub.create_json(), + until=FromOverrideStub.create_json(), + window=WindowOverrideStub.create_json(), + periods=56, + render=Render1Stub.create_json(), + ), + "json": QueryInputStub.create_instance(), + } + _execute_set_mock_response(httpx_mock, gateway_url) + resp = await service.execute.execute(**kwargs) + check_type(resp, Union[QueryResult,]) + + +@pytest.mark.asyncio +@pytest.mark.skipif(MODELS_AVAILABLE, reason="Types installed.") +async def test_execute_without_types( + service: QueriesService, gateway_url: str, httpx_mock: HTTPXMock +): + """Test case for execute with models not installed + Execute Query + """ + # set path params + kwargs = { + "query": { + "resource": "13efb488-75ac-4dac-828a-d49c5c2ebbfc", + "metric": "temperature", + "aggregation": AggregationMethodStub.create_json(), + "interpolation": InterpolationStub.create_json(), + "freq": GroupingIntervalOverrideStub.create_json(), + "from": FromOverrideStub.create_json(), + "until": FromOverrideStub.create_json(), + "window": WindowOverrideStub.create_json(), + "periods": 56, + "render": Render1Stub.create_json(), + }, + "json": QueryInputStub.create_json(), + } + _execute_set_mock_response(httpx_mock, gateway_url) + resp = await service.execute.execute(**kwargs) + check_type(resp, Model) diff --git a/test/api/manage_api_test.py b/test/api/manage_api_test.py new file mode 100644 index 0000000..fea61ed --- /dev/null +++ b/test/api/manage_api_test.py @@ -0,0 +1,289 @@ +# coding: utf-8 +"""Waylay Query: timeseries queries (v1 protocol) api tests. + +This code was generated from the OpenAPI documentation of 'Waylay Query: timeseries queries (v1 protocol)' + +Generated by OpenAPI Generator (https://openapi-generator.tech) + +Do not edit the class manually. +""" + +import json +import re +from importlib.util import find_spec +from typing import Union +from urllib.parse import quote + +import pytest +from pytest_httpx import HTTPXMock +from typeguard import check_type +from waylay.sdk import ApiClient, WaylayClient +from waylay.sdk.api._models import Model +from waylay.services.queries.api import ManageApi +from waylay.services.queries.service import QueriesService + +from ..types.delete_response_stub import DeleteResponseStub +from ..types.queries_list_response_stub import QueriesListResponseStub +from ..types.query_definition_stub import QueryDefinitionStub +from ..types.query_entity_input_stub import QueryEntityInputStub +from ..types.query_response_stub import QueryResponseStub + +MODELS_AVAILABLE = ( + True if find_spec("waylay.services.queries.models") is not None else False +) + +if MODELS_AVAILABLE: + from waylay.services.queries.models import ( + DeleteResponse, + QueriesListResponse, + QueryResponse, + ) + from waylay.services.queries.queries.manage_api import ListQuery + + +# some mappings that are needed for some interpolations +null, true, false = None, True, False + + +@pytest.fixture +def manage_api(waylay_api_client: ApiClient) -> ManageApi: + return ManageApi(waylay_api_client) + + +def test_registered(waylay_client: WaylayClient): + """Test that ManageApi api is registered in the sdk client.""" + assert isinstance(waylay_client.queries.manage, ManageApi) + + +def _create_set_mock_response(httpx_mock: HTTPXMock, gateway_url: str): + mock_response = QueryResponseStub.create_json() + httpx_mock_kwargs = { + "method": "POST", + "url": re.compile(f"^{gateway_url}/queries/v1/queries/v1/query(\\?.*)?"), + "content": json.dumps(mock_response, default=str), + "status_code": 200, + } + httpx_mock.add_response(**httpx_mock_kwargs) + + +@pytest.mark.asyncio +@pytest.mark.skipif(not MODELS_AVAILABLE, reason="Types not installed.") +async def test_create(service: QueriesService, gateway_url: str, httpx_mock: HTTPXMock): + """Test case for create + Post Query + """ + # set path params + kwargs = { + "json": QueryEntityInputStub.create_instance(), + } + _create_set_mock_response(httpx_mock, gateway_url) + resp = await service.manage.create(**kwargs) + check_type(resp, Union[QueryResponse,]) + + +@pytest.mark.asyncio +@pytest.mark.skipif(MODELS_AVAILABLE, reason="Types installed.") +async def test_create_without_types( + service: QueriesService, gateway_url: str, httpx_mock: HTTPXMock +): + """Test case for create with models not installed + Post Query + """ + # set path params + kwargs = { + "json": QueryEntityInputStub.create_json(), + } + _create_set_mock_response(httpx_mock, gateway_url) + resp = await service.manage.create(**kwargs) + check_type(resp, Model) + + +def _get_set_mock_response(httpx_mock: HTTPXMock, gateway_url: str, query_name: str): + mock_response = QueryResponseStub.create_json() + httpx_mock_kwargs = { + "method": "GET", + "url": re.compile( + f"^{gateway_url}/queries/v1/queries/v1/query/{query_name}(\\?.*)?" + ), + "content": json.dumps(mock_response, default=str), + "status_code": 200, + } + httpx_mock.add_response(**httpx_mock_kwargs) + + +@pytest.mark.asyncio +@pytest.mark.skipif(not MODELS_AVAILABLE, reason="Types not installed.") +async def test_get(service: QueriesService, gateway_url: str, httpx_mock: HTTPXMock): + """Test case for get + Get Query + """ + # set path params + query_name = "query_name_example" + + kwargs = {} + _get_set_mock_response(httpx_mock, gateway_url, quote(str(query_name))) + resp = await service.manage.get(query_name, **kwargs) + check_type(resp, Union[QueryResponse,]) + + +@pytest.mark.asyncio +@pytest.mark.skipif(MODELS_AVAILABLE, reason="Types installed.") +async def test_get_without_types( + service: QueriesService, gateway_url: str, httpx_mock: HTTPXMock +): + """Test case for get with models not installed + Get Query + """ + # set path params + query_name = "query_name_example" + + kwargs = {} + _get_set_mock_response(httpx_mock, gateway_url, quote(str(query_name))) + resp = await service.manage.get(query_name, **kwargs) + check_type(resp, Model) + + +def _list_set_mock_response(httpx_mock: HTTPXMock, gateway_url: str): + mock_response = QueriesListResponseStub.create_json() + httpx_mock_kwargs = { + "method": "GET", + "url": re.compile(f"^{gateway_url}/queries/v1/queries/v1/query(\\?.*)?"), + "content": json.dumps(mock_response, default=str), + "status_code": 200, + } + httpx_mock.add_response(**httpx_mock_kwargs) + + +@pytest.mark.asyncio +@pytest.mark.skipif(not MODELS_AVAILABLE, reason="Types not installed.") +async def test_list(service: QueriesService, gateway_url: str, httpx_mock: HTTPXMock): + """Test case for list + List Queries + """ + # set path params + kwargs = { + # optionally use ListQuery to validate and reuse parameters + "query": ListQuery( + q="", + limit=10, + offset=0, + ), + } + _list_set_mock_response(httpx_mock, gateway_url) + resp = await service.manage.list(**kwargs) + check_type(resp, Union[QueriesListResponse,]) + + +@pytest.mark.asyncio +@pytest.mark.skipif(MODELS_AVAILABLE, reason="Types installed.") +async def test_list_without_types( + service: QueriesService, gateway_url: str, httpx_mock: HTTPXMock +): + """Test case for list with models not installed + List Queries + """ + # set path params + kwargs = { + "query": { + "q": "", + "limit": 10, + "offset": 0, + }, + } + _list_set_mock_response(httpx_mock, gateway_url) + resp = await service.manage.list(**kwargs) + check_type(resp, Model) + + +def _remove_set_mock_response(httpx_mock: HTTPXMock, gateway_url: str, query_name: str): + mock_response = DeleteResponseStub.create_json() + httpx_mock_kwargs = { + "method": "DELETE", + "url": re.compile( + f"^{gateway_url}/queries/v1/queries/v1/query/{query_name}(\\?.*)?" + ), + "content": json.dumps(mock_response, default=str), + "status_code": 200, + } + httpx_mock.add_response(**httpx_mock_kwargs) + + +@pytest.mark.asyncio +@pytest.mark.skipif(not MODELS_AVAILABLE, reason="Types not installed.") +async def test_remove(service: QueriesService, gateway_url: str, httpx_mock: HTTPXMock): + """Test case for remove + Remove Query + """ + # set path params + query_name = "query_name_example" + + kwargs = {} + _remove_set_mock_response(httpx_mock, gateway_url, quote(str(query_name))) + resp = await service.manage.remove(query_name, **kwargs) + check_type(resp, Union[DeleteResponse,]) + + +@pytest.mark.asyncio +@pytest.mark.skipif(MODELS_AVAILABLE, reason="Types installed.") +async def test_remove_without_types( + service: QueriesService, gateway_url: str, httpx_mock: HTTPXMock +): + """Test case for remove with models not installed + Remove Query + """ + # set path params + query_name = "query_name_example" + + kwargs = {} + _remove_set_mock_response(httpx_mock, gateway_url, quote(str(query_name))) + resp = await service.manage.remove(query_name, **kwargs) + check_type(resp, Model) + + +def _update_set_mock_response(httpx_mock: HTTPXMock, gateway_url: str, query_name: str): + mock_response = QueryResponseStub.create_json() + httpx_mock_kwargs = { + "method": "PUT", + "url": re.compile( + f"^{gateway_url}/queries/v1/queries/v1/query/{query_name}(\\?.*)?" + ), + "content": json.dumps(mock_response, default=str), + "status_code": 200, + } + httpx_mock.add_response(**httpx_mock_kwargs) + + +@pytest.mark.asyncio +@pytest.mark.skipif(not MODELS_AVAILABLE, reason="Types not installed.") +async def test_update(service: QueriesService, gateway_url: str, httpx_mock: HTTPXMock): + """Test case for update + Update Query + """ + # set path params + query_name = "query_name_example" + + kwargs = { + "json": QueryDefinitionStub.create_instance(), + } + _update_set_mock_response(httpx_mock, gateway_url, quote(str(query_name))) + resp = await service.manage.update(query_name, **kwargs) + check_type(resp, Union[QueryResponse,]) + + +@pytest.mark.asyncio +@pytest.mark.skipif(MODELS_AVAILABLE, reason="Types installed.") +async def test_update_without_types( + service: QueriesService, gateway_url: str, httpx_mock: HTTPXMock +): + """Test case for update with models not installed + Update Query + """ + # set path params + query_name = "query_name_example" + + kwargs = { + "json": QueryDefinitionStub.create_json(), + } + _update_set_mock_response(httpx_mock, gateway_url, quote(str(query_name))) + resp = await service.manage.update(query_name, **kwargs) + check_type(resp, Model) diff --git a/test/api/status_api_test.py b/test/api/status_api_test.py new file mode 100644 index 0000000..e6835da --- /dev/null +++ b/test/api/status_api_test.py @@ -0,0 +1,82 @@ +# coding: utf-8 +"""Waylay Query: timeseries queries (v1 protocol) api tests. + +This code was generated from the OpenAPI documentation of 'Waylay Query: timeseries queries (v1 protocol)' + +Generated by OpenAPI Generator (https://openapi-generator.tech) + +Do not edit the class manually. +""" + +import json +import re +from importlib.util import find_spec +from typing import Dict, Union + +import pytest +from pytest_httpx import HTTPXMock +from typeguard import check_type +from waylay.sdk import ApiClient, WaylayClient +from waylay.sdk.api._models import Model +from waylay.services.queries.api import StatusApi +from waylay.services.queries.service import QueriesService + +MODELS_AVAILABLE = ( + True if find_spec("waylay.services.queries.models") is not None else False +) + +if MODELS_AVAILABLE: + pass + + +# some mappings that are needed for some interpolations +null, true, false = None, True, False + + +@pytest.fixture +def status_api(waylay_api_client: ApiClient) -> StatusApi: + return StatusApi(waylay_api_client) + + +def test_registered(waylay_client: WaylayClient): + """Test that StatusApi api is registered in the sdk client.""" + assert isinstance(waylay_client.queries.status, StatusApi) + + +def _get_set_mock_response(httpx_mock: HTTPXMock, gateway_url: str): + mock_response = {"key": ""} + httpx_mock_kwargs = { + "method": "GET", + "url": re.compile(f"^{gateway_url}/queries/v1/queries/v1(\\?.*)?"), + "content": json.dumps(mock_response, default=str), + "status_code": 200, + } + httpx_mock.add_response(**httpx_mock_kwargs) + + +@pytest.mark.asyncio +@pytest.mark.skipif(not MODELS_AVAILABLE, reason="Types not installed.") +async def test_get(service: QueriesService, gateway_url: str, httpx_mock: HTTPXMock): + """Test case for get + Get Version And Health + """ + # set path params + kwargs = {} + _get_set_mock_response(httpx_mock, gateway_url) + resp = await service.status.get(**kwargs) + check_type(resp, Union[Dict[str, str],]) + + +@pytest.mark.asyncio +@pytest.mark.skipif(MODELS_AVAILABLE, reason="Types installed.") +async def test_get_without_types( + service: QueriesService, gateway_url: str, httpx_mock: HTTPXMock +): + """Test case for get with models not installed + Get Version And Health + """ + # set path params + kwargs = {} + _get_set_mock_response(httpx_mock, gateway_url) + resp = await service.status.get(**kwargs) + check_type(resp, Model) diff --git a/test/conftest.py b/test/conftest.py new file mode 100644 index 0000000..2de03b8 --- /dev/null +++ b/test/conftest.py @@ -0,0 +1,71 @@ +"""Automatic pytest fixtures.""" + +import random + +import httpx +import pytest +import starlette.requests as req +import starlette.responses as res +from waylay.sdk import ApiClient, WaylayClient, WaylayConfig +from waylay.sdk.auth import NoCredentials +from waylay.services.queries.service import QueriesService + +random.seed(10) +GATEWAY_URL = "http://example.io" + + +@pytest.fixture(name="gateway_url") +def fixture_gateway_url() -> str: + return GATEWAY_URL + + +@pytest.fixture(name="waylay_config") +def fixture_config(gateway_url) -> WaylayConfig: + return WaylayConfig(credentials=NoCredentials(gateway_url=gateway_url)) + + +@pytest.fixture(name="waylay_api_client") +def fixture_api_client(waylay_config: WaylayConfig) -> ApiClient: + return ApiClient(waylay_config, {"auth": None}) + + +@pytest.fixture(name="service") +def fixture_service(waylay_api_client: ApiClient) -> QueriesService: + return QueriesService(waylay_api_client) + + +@pytest.fixture(name="waylay_client") +def fixture_waylay_client(waylay_config: WaylayConfig) -> WaylayClient: + return WaylayClient(waylay_config, {"auth": None}) + + +@pytest.fixture(name="test_app", scope="module") +def fixture_my_app(): + async def echo_app(scope, receive, send): + request = req.Request(scope, receive) + content_type = request.headers.get("content-type", "application/octet-stream") + if content_type.startswith("application/json"): + response = res.JSONResponse(await request.json()) + elif content_type.startswith("multipart/form-data") or content_type.startswith( + "application/x-www-form-urlencoded" + ): + form = await request.form() + response = res.JSONResponse({ + key: (value if isinstance(value, str) else {"size": value.size}) + for key, value in form.items() + }) + else: + bytes = await request.body() + response = res.JSONResponse({"bytes": str(bytes, encoding="utf-8")}) + await response(scope, receive, send) + + return echo_app + + +@pytest.fixture(name="echo_service") +async def fixture_echo_client(service, test_app): + async with service({ + "transport": httpx.ASGITransport(test_app), + "auth": None, + }) as srv: + yield srv diff --git a/test/openapi.py b/test/openapi.py new file mode 100644 index 0000000..23239bc --- /dev/null +++ b/test/openapi.py @@ -0,0 +1,2315 @@ +import json + +import yaml + + +def with_example_provider(dct): + has_example = False + if "example" in dct: + example, has_example = dct["example"], True + elif "examples" in dct: + examples = dct["examples"] + if isinstance(examples, list) and list: + example, has_example = examples[0], True + elif "default" in dct: + example, has_example = dct["default"], True + + if has_example: + provider = ( + example + if example is None or isinstance(example, (dict, list, int, float, bool)) + else f"'{example}'" + ) + dct.update({"$provider": f"lambda: {provider}"}) + return dct + + +with open("openapi/queries.transformed.openapi.yaml", "r") as file: + OPENAPI_SPEC = yaml.safe_load(file) + +MODEL_DEFINITIONS = OPENAPI_SPEC["components"]["schemas"] + +_aggregation_by_resource_and_metric_model_schema = json.loads( + r"""{ + "anyOf" : [ { + "title" : "Aggregation by Resource or Metric", + "type" : "object", + "additionalProperties" : { + "$ref" : "#/components/schemas/Aggregation_by_Resource_or_Metric" + }, + "description" : "Aggregation methods specified per resource or metric.", + "nullable" : true + } ] +} +""", + object_hook=with_example_provider, +) +MODEL_DEFINITIONS.update({ + "Aggregation_by_Resource_and_Metric": _aggregation_by_resource_and_metric_model_schema +}) + +_aggregation_by_resource_or_metric_model_schema = json.loads( + r"""{ + "anyOf" : [ { + "$ref" : "#/components/schemas/AggregationMethod" + }, { + "title" : "Aggregations", + "type" : "array", + "description" : "Aggregation methods, leading to sepearate series.", + "nullable" : true, + "items" : { + "$ref" : "#/components/schemas/Aggregations_inner" + } + } ] +} +""", + object_hook=with_example_provider, +) +MODEL_DEFINITIONS.update({ + "Aggregation_by_Resource_or_Metric": _aggregation_by_resource_or_metric_model_schema +}) + +_aggregation_method_model_schema = json.loads( + r"""{ + "type" : "string", + "nullable" : true, + "oneOf" : [ { + "$ref" : "#/components/schemas/AggregationMethod_oneOf" + }, { + "$ref" : "#/components/schemas/AggregationMethod_oneOf_1" + }, { + "$ref" : "#/components/schemas/AggregationMethod_oneOf_2" + }, { + "$ref" : "#/components/schemas/AggregationMethod_oneOf_3" + }, { + "$ref" : "#/components/schemas/AggregationMethod_oneOf_4" + }, { + "$ref" : "#/components/schemas/AggregationMethod_oneOf_5" + }, { + "$ref" : "#/components/schemas/AggregationMethod_oneOf_6" + }, { + "$ref" : "#/components/schemas/AggregationMethod_oneOf_7" + }, { + "$ref" : "#/components/schemas/AggregationMethod_oneOf_8" + } ] +} +""", + object_hook=with_example_provider, +) +MODEL_DEFINITIONS.update({"AggregationMethod": _aggregation_method_model_schema}) + +_aggregation_method_one_of_model_schema = json.loads( + r"""{ + "title" : "AggregationMethod_oneOf", + "type" : "string", + "description" : "Use the first value (in time) to represent all data for the sample interval.", + "enum" : [ "first" ] +} +""", + object_hook=with_example_provider, +) +MODEL_DEFINITIONS.update({ + "AggregationMethod_oneOf": _aggregation_method_one_of_model_schema +}) + +_aggregation_method_one_of_1_model_schema = json.loads( + r"""{ + "title" : "AggregationMethod_oneOf_1", + "type" : "string", + "description" : "Use the last value (in time) to represent all data for the sample interval.", + "enum" : [ "last" ] +} +""", + object_hook=with_example_provider, +) +MODEL_DEFINITIONS.update({ + "AggregationMethod_oneOf_1": _aggregation_method_one_of_1_model_schema +}) + +_aggregation_method_one_of_2_model_schema = json.loads( + r"""{ + "title" : "AggregationMethod_oneOf_2", + "type" : "string", + "description" : "Aggregate data by the mean value: The sum of values divided by number of observations.", + "enum" : [ "mean" ] +} +""", + object_hook=with_example_provider, +) +MODEL_DEFINITIONS.update({ + "AggregationMethod_oneOf_2": _aggregation_method_one_of_2_model_schema +}) + +_aggregation_method_one_of_3_model_schema = json.loads( + r"""{ + "title" : "AggregationMethod_oneOf_3", + "type" : "string", + "description" : "Aggregate data by the median value: The n/2-th value when ordered, the average of the (n-1)/2-th and (n+1)/2-th value when n is uneven.", + "enum" : [ "median" ] +} +""", + object_hook=with_example_provider, +) +MODEL_DEFINITIONS.update({ + "AggregationMethod_oneOf_3": _aggregation_method_one_of_3_model_schema +}) + +_aggregation_method_one_of_4_model_schema = json.loads( + r"""{ + "title" : "AggregationMethod_oneOf_4", + "type" : "string", + "description" : "The sum of all values summarizes the data for the sample interval.", + "enum" : [ "sum" ] +} +""", + object_hook=with_example_provider, +) +MODEL_DEFINITIONS.update({ + "AggregationMethod_oneOf_4": _aggregation_method_one_of_4_model_schema +}) + +_aggregation_method_one_of_5_model_schema = json.loads( + r"""{ + "title" : "AggregationMethod_oneOf_5", + "type" : "string", + "description" : "Use the count of observations in the sample interval.", + "enum" : [ "count" ] +} +""", + object_hook=with_example_provider, +) +MODEL_DEFINITIONS.update({ + "AggregationMethod_oneOf_5": _aggregation_method_one_of_5_model_schema +}) + +_aggregation_method_one_of_6_model_schema = json.loads( + r"""{ + "title" : "AggregationMethod_oneOf_6", + "type" : "string", + "description" : "Use the standard deviation of all observations in the sample interval.", + "enum" : [ "std" ] +} +""", + object_hook=with_example_provider, +) +MODEL_DEFINITIONS.update({ + "AggregationMethod_oneOf_6": _aggregation_method_one_of_6_model_schema +}) + +_aggregation_method_one_of_7_model_schema = json.loads( + r"""{ + "title" : "AggregationMethod_oneOf_7", + "type" : "string", + "description" : "Use the maximum of all values in the sample interval.", + "enum" : [ "max" ] +} +""", + object_hook=with_example_provider, +) +MODEL_DEFINITIONS.update({ + "AggregationMethod_oneOf_7": _aggregation_method_one_of_7_model_schema +}) + +_aggregation_method_one_of_8_model_schema = json.loads( + r"""{ + "title" : "AggregationMethod_oneOf_8", + "type" : "string", + "description" : "Use the minimum of all values in the sample interval.", + "enum" : [ "min" ] +} +""", + object_hook=with_example_provider, +) +MODEL_DEFINITIONS.update({ + "AggregationMethod_oneOf_8": _aggregation_method_one_of_8_model_schema +}) + +_aggregations_inner_model_schema = json.loads( + r"""{ + "anyOf" : [ { + "$ref" : "#/components/schemas/AggregationMethod" + } ] +} +""", + object_hook=with_example_provider, +) +MODEL_DEFINITIONS.update({"Aggregations_inner": _aggregations_inner_model_schema}) + +_align_at_model_schema = json.loads( + r"""{ + "type" : "string", + "description" : "Possible values for `align.at`.\n\n* 'grid' Align to a fixed grid (possibly using timezone information)\n* 'from' Align a the `from` boundary\n* 'until' Align a the `until` boundary\n* 'boundary' Align a the `from` boundary if specified,\n otherwise the `until` boundary.\n\nWhen not specified, 'grid' is used.", + "enum" : [ "grid", "boundary", "from", "until" ] +} +""", + object_hook=with_example_provider, +) +MODEL_DEFINITIONS.update({"AlignAt": _align_at_model_schema}) + +_align_shift_model_schema = json.loads( + r"""{ + "type" : "string", + "description" : "Possible values for `align.shift`.\n\n* 'backward': keep the window size of the original interval specification,\n shifting back.\n* 'forward': keep the window size of the original interval specification,\n shifting forward.\n* 'wrap': enlarge the window size to include all of the original interval.\n\nWhen not specified, 'backward' is used.", + "enum" : [ "backward", "forward", "wrap" ] +} +""", + object_hook=with_example_provider, +) +MODEL_DEFINITIONS.update({"AlignShift": _align_shift_model_schema}) + +_alignment_model_schema = json.loads( + r"""{ + "type" : "object", + "properties" : { + "at" : { + "$ref" : "#/components/schemas/AlignAt" + }, + "shift" : { + "$ref" : "#/components/schemas/AlignShift" + }, + "freq" : { + "$ref" : "#/components/schemas/Alignment_Grid_interval_" + }, + "timezone" : { + "$ref" : "#/components/schemas/Alignment_Timezone_" + } + }, + "additionalProperties" : true, + "description" : "Aggregation Alignment Options.\n\nSpecifies how the aggregation grid is aligned." +} +""", + object_hook=with_example_provider, +) +MODEL_DEFINITIONS.update({"Alignment": _alignment_model_schema}) + +_alignment_grid_interval__model_schema = json.loads( + r"""{ + "title" : "Alignment Grid interval.", + "type" : "string", + "description" : "\nDefines the grid used to align the aggregation window.\nThe window will align at whole-unit multiples of this interval.\n\nFor intervals like `PT1D`, that are timezone-dependent, use the \n`align.timezone` to fix the absolute timestamp of the grid boundaries.\n\nIf not specified, defaults to the `freq` aggregation interval.\n", + "oneOf" : [ { + "title" : "ISO8601 period ", + "pattern" : "^P([0-9]+Y)?([0-9]+M)?([0-9]+W)?([0-9]+D)?(T([0-9]+H)?([0-9]+M)?([0-9]+(\\.[0-9]*)?S)?)?$", + "type" : "string", + "description" : "A period in [ISO8601 duration](https://en.wikipedia.org/wiki/ISO_8601#Durations) format.", + "format" : "period", + "example" : "PT3H15M" + }, { + "$ref" : "#/components/schemas/Grouping_Interval_Override_oneOf" + } ] +} +""", + object_hook=with_example_provider, +) +MODEL_DEFINITIONS.update({ + "Alignment_Grid_interval_": _alignment_grid_interval__model_schema +}) + +_alignment_timezone__model_schema = json.loads( + r"""{ + "title" : "Alignment Timezone.", + "type" : "string", + "description" : "\nThe timezone to use when shifting boundaries, especially\nat day granularity.\nAlso affects the rendering of timestamps when\n`render.iso_timestamp` is enabled.\n\nWhen not specified, the `UTC` timezone is used.\n", + "oneOf" : [ { + "title" : "Timezone Identifier", + "type" : "string", + "description" : "[ICANN timezone identifier](https://en.wikipedia.org/wiki/List_of_tz_database_time_zones)" + }, { + "title" : "UTC Offset", + "pattern" : "(+|-)\\d\\d:\\d\\d", + "type" : "string", + "description" : "[UTC offset](https://en.wikipedia.org/wiki/UTC_offset)" + } ] +} +""", + object_hook=with_example_provider, +) +MODEL_DEFINITIONS.update({"Alignment_Timezone_": _alignment_timezone__model_schema}) + +_cause_exception_model_schema = json.loads( + r"""{ + "required" : [ "message", "stacktrace", "type" ], + "type" : "object", + "properties" : { + "type" : { + "title" : "Exception Type", + "type" : "string" + }, + "message" : { + "title" : "Exception Message", + "type" : "string" + }, + "stacktrace" : { + "title" : "Stack Trace", + "type" : "array", + "items" : { + "type" : "string" + } + } + }, + "additionalProperties" : true, + "description" : "Describes the exception that caused a message." +} +""", + object_hook=with_example_provider, +) +MODEL_DEFINITIONS.update({"CauseException": _cause_exception_model_schema}) + +_column_data_set_model_schema = json.loads( + r"""{ + "required" : [ "data", "rows" ], + "type" : "object", + "properties" : { + "attributes" : { + "$ref" : "#/components/schemas/DataSetAttributes" + }, + "window_spec" : { + "$ref" : "#/components/schemas/DataSetWindow" + }, + "data_axis" : { + "$ref" : "#/components/schemas/ColumnDataSet_data_axis" + }, + "rows" : { + "title" : "Row Headers", + "type" : "array", + "description" : "Header Attributes for the index data.\n\nThe initial string-valued headers (normally `resource`, `metric`,`aggregation`) indicate that row to contain series attributes.\n\nThe remaining object-valued row headers contain the index data.", + "items" : { + "$ref" : "#/components/schemas/Row_Headers_inner" + } + }, + "data" : { + "title" : "Series", + "type" : "array", + "description" : "All metric observation values for a single series. Prefixed by the series attributes.", + "items" : { + "type" : "array", + "items" : { + "$ref" : "#/components/schemas/Datum" + } + } + } + }, + "additionalProperties" : true, + "description" : "Column-oriented dataset with rows header.\n\nTimeseries data layout with a rows header containing\nthe index data.\nThe data array contains series data prefixed by series attributes.\nThe `rows` index is prefix by the names of these series attributes.\nResult for render options `data_axis=row` and `header_array=column`." +} +""", + object_hook=with_example_provider, +) +MODEL_DEFINITIONS.update({"ColumnDataSet": _column_data_set_model_schema}) + +_column_data_set_data_axis_model_schema = json.loads( + r"""{ + "title" : "ColumnDataSet_data_axis", + "type" : "string", + "default" : "row", + "enum" : [ "row" ] +} +""", + object_hook=with_example_provider, +) +MODEL_DEFINITIONS.update({ + "ColumnDataSet_data_axis": _column_data_set_data_axis_model_schema +}) + +_column_header_model_schema = json.loads( + r"""{ + "required" : [ "metric", "resource" ], + "type" : "object", + "properties" : { + "resource" : { + "title" : "Series resource id", + "type" : "string" + }, + "metric" : { + "title" : "Series metric", + "type" : "string" + }, + "aggregation" : { + "title" : "Aggregation applied to the series.", + "type" : "string" + } + }, + "additionalProperties" : true, + "description" : "Column attributes.\n\nAttributes that identify and describe the data in this column." +} +""", + object_hook=with_example_provider, +) +MODEL_DEFINITIONS.update({"ColumnHeader": _column_header_model_schema}) + +_column_headers_inner_model_schema = json.loads( + r"""{ + "title" : "Column_Headers_inner", + "anyOf" : [ { + "$ref" : "#/components/schemas/RowIndexColumnHeader" + }, { + "$ref" : "#/components/schemas/ColumnHeader" + } ] +} +""", + object_hook=with_example_provider, +) +MODEL_DEFINITIONS.update({"Column_Headers_inner": _column_headers_inner_model_schema}) + +_data_axis_option_model_schema = json.loads( + r"""{ + "type" : "string", + "description" : "Allowed values for the render.data_axis option.", + "enum" : [ "row", "column" ] +} +""", + object_hook=with_example_provider, +) +MODEL_DEFINITIONS.update({"DataAxisOption": _data_axis_option_model_schema}) + +_data_set_attributes_model_schema = json.loads( + r"""{ + "title" : "DataSetAttributes", + "type" : "object", + "properties" : { + "role" : { + "$ref" : "#/components/schemas/Role" + } + }, + "additionalProperties" : true, + "description" : "Data Set Attributes.\n\nData attributes that apply to all data in this set." +} +""", + object_hook=with_example_provider, +) +MODEL_DEFINITIONS.update({"DataSetAttributes": _data_set_attributes_model_schema}) + +_data_set_window_model_schema = json.loads( + r"""{ + "title" : "DataSetWindow", + "required" : [ "freq", "until", "window" ], + "type" : "object", + "properties" : { + "until" : { + "title" : "Time Axis End", + "type" : "integer", + "description" : "Exclusive higher bound of the time axis in unix epoch milliseconds." + }, + "window" : { + "title" : "Time Axis Length", + "type" : "string", + "description" : "Time axis length as ISO8601 period.", + "format" : "period" + }, + "freq" : { + "title" : "Frequency", + "type" : "string", + "description" : "Time axis aggregation interval as an ISO8601 period .", + "format" : "period" + } + }, + "additionalProperties" : true, + "description" : "Data Window.\n\nStatistics of the time axis of a data set.\nPresent with render option `include_window_spec=true`.\"," +} +""", + object_hook=with_example_provider, +) +MODEL_DEFINITIONS.update({"DataSetWindow": _data_set_window_model_schema}) + +_datum_model_schema = json.loads( + r"""{ + "title" : "Datum", + "description" : "A single metric value for a timeseries.\n\nA null value indicates that no (aggregated/interpolated) value exists for the corresponding timestamp.", + "oneOf" : [ { + "type" : "number", + "nullable" : true + }, { + "type" : "string", + "nullable" : true + }, { + "type" : "boolean", + "nullable" : true + } ] +} +""", + object_hook=with_example_provider, +) +MODEL_DEFINITIONS.update({"Datum": _datum_model_schema}) + +_default_aggregation_model_schema = json.loads( + r"""{ + "title" : "Default Aggregation", + "description" : "Default aggregation method(s) for the series in the query.", + "anyOf" : [ { + "$ref" : "#/components/schemas/AggregationMethod" + }, { + "title" : "Aggregations", + "type" : "array", + "description" : "Aggregation methods, leading to sepearate series.", + "nullable" : true, + "items" : { + "$ref" : "#/components/schemas/Aggregations_inner" + } + }, { + "title" : "Aggregation by Resource or Metric", + "type" : "object", + "additionalProperties" : { + "$ref" : "#/components/schemas/Aggregation_by_Resource_or_Metric" + }, + "description" : "Aggregation methods specified per resource or metric.", + "nullable" : true + }, { + "title" : "Aggregation by Resource and Metric", + "type" : "object", + "additionalProperties" : { + "$ref" : "#/components/schemas/Aggregation_by_Resource_and_Metric" + }, + "description" : "Aggregation methods specified per resource and metric.", + "nullable" : true + } ] +} +""", + object_hook=with_example_provider, +) +MODEL_DEFINITIONS.update({"Default_Aggregation": _default_aggregation_model_schema}) + +_default_interpolation_model_schema = json.loads( + r"""{ + "title" : "Default Interpolation", + "description" : "Default Interpolation method for the series (if aggregated).", + "anyOf" : [ { + "$ref" : "#/components/schemas/InterpolationMethod" + }, { + "$ref" : "#/components/schemas/InterpolationSpec" + } ] +} +""", + object_hook=with_example_provider, +) +MODEL_DEFINITIONS.update({"Default_Interpolation": _default_interpolation_model_schema}) + +_delete_response_model_schema = json.loads( + r"""{ + "type" : "object", + "properties" : { + "messages" : { + "title" : "Messages", + "type" : "array", + "items" : { + "$ref" : "#/components/schemas/Message" + } + }, + "_links" : { + "title" : " Links", + "type" : "object", + "additionalProperties" : { + "$ref" : "#/components/schemas/_Links" + }, + "description" : "HAL links, indexed by link relation." + }, + "_embeddings" : { + "title" : " Embeddings", + "type" : "object", + "additionalProperties" : { + "$ref" : "#/components/schemas/_Embeddings" + }, + "description" : "Hal embeddings, indexed by relation." + } + }, + "additionalProperties" : true, + "description" : "Confirmation of a delete request." +} +""", + object_hook=with_example_provider, +) +MODEL_DEFINITIONS.update({"DeleteResponse": _delete_response_model_schema}) + +_embeddings_model_schema = json.loads( + r"""{ + "title" : "_Embeddings", + "anyOf" : [ { + "$ref" : "#/components/schemas/HALEmbedding" + }, { + "type" : "array", + "items" : { + "$ref" : "#/components/schemas/HALEmbedding" + } + } ] +} +""", + object_hook=with_example_provider, +) +MODEL_DEFINITIONS.update({"_Embeddings": _embeddings_model_schema}) + +_from_override__model_schema = json.loads( + r"""{ + "title" : "From Override.", + "type" : "string", + "oneOf" : [ { + "title" : "ISO8601 absolute timestamp", + "pattern" : "[0-9]{4}-[0-9]{2}-[0-9]{2}(T.*)?", + "type" : "string", + "description" : "A date or date-time in [ISO8601](https://en.wikipedia.org/wiki/ISO_8601#Combined_date_and_time_representations) format. When no timezone is specified, the UTC timezone is assumed (`+00:00`)", + "format" : "date-time", + "example" : "2018-03-21T12:23:00+01:00" + }, { + "title" : "UNIX epoch milliseconds", + "minimum" : 0, + "type" : "integer", + "description" : "Absolute timestamp milliseconds in unix epoch since 1970-01-01.", + "example" : 1534836422284 + }, { + "title" : "ISO8601 Period Before Now", + "pattern" : "^P([0-9]+Y)?([0-9]+M)?([0-9]+W)?([0-9]+D)?(T([0-9]+H)?([0-9]+M)?([0-9]+(\\.[0-9]*)?S)?)?$", + "type" : "string", + "description" : "Specifies a timestamp before _now_ as a period in [ISO8601 duration](https://en.wikipedia.org/wiki/ISO_8601#Durations) format.", + "format" : "period", + "example" : "PT3H15M" + } ] +} +""", + object_hook=with_example_provider, +) +MODEL_DEFINITIONS.update({"From_Override_": _from_override__model_schema}) + +_grouping_interval_model_schema = json.loads( + r"""{ + "title" : "Grouping interval", + "type" : "string", + "description" : "Interval used to aggregate or regularize data. One of the [time line](https://docs.waylay.io/#/api/query/?id=time-line-properties) specifiers.", + "oneOf" : [ { + "title" : "ISO8601 period ", + "pattern" : "^P([0-9]+Y)?([0-9]+M)?([0-9]+W)?([0-9]+D)?(T([0-9]+H)?([0-9]+M)?([0-9]+(\\.[0-9]*)?S)?)?$", + "type" : "string", + "description" : "A period in [ISO8601 duration](https://en.wikipedia.org/wiki/ISO_8601#Durations) format.", + "format" : "period", + "example" : "PT3H15M" + }, { + "$ref" : "#/components/schemas/Grouping_Interval_Override_oneOf" + } ] +} +""", + object_hook=with_example_provider, +) +MODEL_DEFINITIONS.update({"Grouping_interval": _grouping_interval_model_schema}) + +_grouping_interval_override_model_schema = json.loads( + r"""{ + "title" : "Grouping Interval Override", + "type" : "string", + "description" : "Override for the `freq` query attribute.", + "oneOf" : [ { + "title" : "ISO8601 period ", + "pattern" : "^P([0-9]+Y)?([0-9]+M)?([0-9]+W)?([0-9]+D)?(T([0-9]+H)?([0-9]+M)?([0-9]+(\\.[0-9]*)?S)?)?$", + "type" : "string", + "description" : "A period in [ISO8601 duration](https://en.wikipedia.org/wiki/ISO_8601#Durations) format.", + "format" : "period", + "example" : "PT3H15M" + }, { + "$ref" : "#/components/schemas/Grouping_Interval_Override_oneOf" + } ] +} +""", + object_hook=with_example_provider, +) +MODEL_DEFINITIONS.update({ + "Grouping_Interval_Override": _grouping_interval_override_model_schema +}) + +_grouping_interval_override_one_of_model_schema = json.loads( + r"""{ + "type" : "string", + "description" : "When `inferred` is specified, the frequency of aggregation will be inferred from the main/first time series. This can be used to regularize the time series", + "enum" : [ "inferred" ] +} +""", + object_hook=with_example_provider, +) +MODEL_DEFINITIONS.update({ + "Grouping_Interval_Override_oneOf": _grouping_interval_override_one_of_model_schema +}) + +_hal_link_model_schema = json.loads( + r"""{ + "required" : [ "href" ], + "type" : "object", + "properties" : { + "href" : { + "title" : "Link URL", + "type" : "string", + "description" : "Target url for this link." + }, + "type" : { + "title" : "Link type", + "type" : "string", + "description" : "Type of the resource referenced by this link." + }, + "method" : { + "$ref" : "#/components/schemas/HALLinkMethod" + } + }, + "additionalProperties" : true, + "description" : "A link target in a HAL response." +} +""", + object_hook=with_example_provider, +) +MODEL_DEFINITIONS.update({"HALLink": _hal_link_model_schema}) + +_hal_link_method_model_schema = json.loads( + r"""{ + "title" : "HALLinkMethod", + "type" : "string", + "description" : "An http method that can be specified in a HAL link.", + "enum" : [ "GET", "POST", "PUT", "DELETE", "PATCH" ] +} +""", + object_hook=with_example_provider, +) +MODEL_DEFINITIONS.update({"HALLinkMethod": _hal_link_method_model_schema}) + +_hal_link_role_model_schema = json.loads( + r"""{ + "type" : "string", + "description" : "Supported link and embedding roles in HAL representations.", + "enum" : [ "self", "first", "prev", "next", "last", "execute" ] +} +""", + object_hook=with_example_provider, +) +MODEL_DEFINITIONS.update({"HALLinkRole": _hal_link_role_model_schema}) + +_http_validation_error_model_schema = json.loads( + r"""{ + "type" : "object", + "properties" : { + "detail" : { + "title" : "Detail", + "type" : "array", + "items" : { + "$ref" : "#/components/schemas/ValidationError" + } + } + } +} +""", + object_hook=with_example_provider, +) +MODEL_DEFINITIONS.update({"HTTPValidationError": _http_validation_error_model_schema}) + +_header_array_option_model_schema = json.loads( + r"""{ + "type" : "string", + "description" : "Allowed values for the render.header_array option.", + "enum" : [ "row", "column" ] +} +""", + object_hook=with_example_provider, +) +MODEL_DEFINITIONS.update({"HeaderArrayOption": _header_array_option_model_schema}) + +_hierarchical_model_schema = json.loads( + r"""{ + "title" : "Hierarchical", + "description" : "if true, use hierarchical objects to represent multiple row (or column) dimensions, otherwise multi-keys get concatenated with a dot-delimiter. If the value is a list, only these levels are kept as separate levels, while remaining levels get concatenated keys", + "anyOf" : [ { + "type" : "boolean" + }, { + "type" : "array", + "items" : { + "type" : "string" + } + } ] +} +""", + object_hook=with_example_provider, +) +MODEL_DEFINITIONS.update({"Hierarchical": _hierarchical_model_schema}) + +_interpolation_model_schema = json.loads( + r"""{ + "title" : "Interpolation", + "anyOf" : [ { + "$ref" : "#/components/schemas/InterpolationMethod" + }, { + "$ref" : "#/components/schemas/InterpolationSpec" + } ] +} +""", + object_hook=with_example_provider, +) +MODEL_DEFINITIONS.update({"Interpolation": _interpolation_model_schema}) + +_interpolation_method_model_schema = json.loads( + r"""{ + "title" : "Interpolation method", + "type" : "string", + "oneOf" : [ { + "$ref" : "#/components/schemas/Interpolation_method_oneOf" + }, { + "$ref" : "#/components/schemas/Interpolation_method_oneOf_1" + }, { + "$ref" : "#/components/schemas/Interpolation_method_oneOf_2" + }, { + "$ref" : "#/components/schemas/Interpolation_method_oneOf_3" + }, { + "$ref" : "#/components/schemas/Interpolation_method_oneOf_4" + }, { + "$ref" : "#/components/schemas/Interpolation_method_oneOf_5" + }, { + "$ref" : "#/components/schemas/Interpolation_method_oneOf_6" + }, { + "$ref" : "#/components/schemas/Interpolation_method_oneOf_7" + }, { + "$ref" : "#/components/schemas/Interpolation_method_oneOf_8" + }, { + "$ref" : "#/components/schemas/Interpolation_method_oneOf_9" + }, { + "$ref" : "#/components/schemas/Interpolation_method_oneOf_10" + }, { + "$ref" : "#/components/schemas/Interpolation_method_oneOf_11" + }, { + "$ref" : "#/components/schemas/Interpolation_method_oneOf_12" + }, { + "$ref" : "#/components/schemas/Interpolation_method_oneOf_13" + } ] +} +""", + object_hook=with_example_provider, +) +MODEL_DEFINITIONS.update({"Interpolation_method": _interpolation_method_model_schema}) + +_interpolation_method_one_of_model_schema = json.loads( + r"""{ + "type" : "string", + "description" : "Interpolate with the value of the first observed point. This method also extrapolates.", + "enum" : [ "pad" ] +} +""", + object_hook=with_example_provider, +) +MODEL_DEFINITIONS.update({ + "Interpolation_method_oneOf": _interpolation_method_one_of_model_schema +}) + +_interpolation_method_one_of_1_model_schema = json.loads( + r"""{ + "type" : "string", + "description" : "Interpolate with a fixed, user-specified value. This method also extrapolates.", + "enum" : [ "fixed" ] +} +""", + object_hook=with_example_provider, +) +MODEL_DEFINITIONS.update({ + "Interpolation_method_oneOf_1": _interpolation_method_one_of_1_model_schema +}) + +_interpolation_method_one_of_10_model_schema = json.loads( + r"""{ + "type" : "string", + "description" : "Interpolate with a spline function of a user-specified order.", + "enum" : [ "spline" ] +} +""", + object_hook=with_example_provider, +) +MODEL_DEFINITIONS.update({ + "Interpolation_method_oneOf_10": _interpolation_method_one_of_10_model_schema +}) + +_interpolation_method_one_of_11_model_schema = json.loads( + r"""{ + "type" : "string", + "description" : "Interpolate with the derivative of order 1.", + "enum" : [ "from_derivatives" ] +} +""", + object_hook=with_example_provider, +) +MODEL_DEFINITIONS.update({ + "Interpolation_method_oneOf_11": _interpolation_method_one_of_11_model_schema +}) + +_interpolation_method_one_of_12_model_schema = json.loads( + r"""{ + "type" : "string", + "description" : "Interpolate with a piecewise cubic spline function.", + "enum" : [ "pchip" ] +} +""", + object_hook=with_example_provider, +) +MODEL_DEFINITIONS.update({ + "Interpolation_method_oneOf_12": _interpolation_method_one_of_12_model_schema +}) + +_interpolation_method_one_of_13_model_schema = json.loads( + r"""{ + "type" : "string", + "description" : "Interpolate with a non-smoothing spline of order 2, called Akima interpolation.", + "enum" : [ "akima" ] +} +""", + object_hook=with_example_provider, +) +MODEL_DEFINITIONS.update({ + "Interpolation_method_oneOf_13": _interpolation_method_one_of_13_model_schema +}) + +_interpolation_method_one_of_2_model_schema = json.loads( + r"""{ + "type" : "string", + "description" : "Same as pad, but using the last observed value. This method also extrapolates", + "enum" : [ "backfill" ] +} +""", + object_hook=with_example_provider, +) +MODEL_DEFINITIONS.update({ + "Interpolation_method_oneOf_2": _interpolation_method_one_of_2_model_schema +}) + +_interpolation_method_one_of_3_model_schema = json.loads( + r"""{ + "type" : "string", + "description" : "Linearly go from the first observed value of the gap to the last observed oneThis method also extrapolates", + "enum" : [ "linear" ] +} +""", + object_hook=with_example_provider, +) +MODEL_DEFINITIONS.update({ + "Interpolation_method_oneOf_3": _interpolation_method_one_of_3_model_schema +}) + +_interpolation_method_one_of_4_model_schema = json.loads( + r"""{ + "type" : "string", + "description" : "Use the value that is closest in time.", + "enum" : [ "nearest" ] +} +""", + object_hook=with_example_provider, +) +MODEL_DEFINITIONS.update({ + "Interpolation_method_oneOf_4": _interpolation_method_one_of_4_model_schema +}) + +_interpolation_method_one_of_5_model_schema = json.loads( + r"""{ + "type" : "string", + "description" : "Interpolate with a spline function of order 0, which is a piecewise polynomial.", + "enum" : [ "zero" ] +} +""", + object_hook=with_example_provider, +) +MODEL_DEFINITIONS.update({ + "Interpolation_method_oneOf_5": _interpolation_method_one_of_5_model_schema +}) + +_interpolation_method_one_of_6_model_schema = json.loads( + r"""{ + "type" : "string", + "description" : "Interpolate with a spline function of order 1, which is a piecewise polynomial.", + "enum" : [ "slinear" ] +} +""", + object_hook=with_example_provider, +) +MODEL_DEFINITIONS.update({ + "Interpolation_method_oneOf_6": _interpolation_method_one_of_6_model_schema +}) + +_interpolation_method_one_of_7_model_schema = json.loads( + r"""{ + "type" : "string", + "description" : "Interpolate with a spline function of order 2, which is a piecewise polynomial.", + "enum" : [ "quadratic" ] +} +""", + object_hook=with_example_provider, +) +MODEL_DEFINITIONS.update({ + "Interpolation_method_oneOf_7": _interpolation_method_one_of_7_model_schema +}) + +_interpolation_method_one_of_8_model_schema = json.loads( + r"""{ + "type" : "string", + "description" : "Interpolate with a spline function of order 3, which is a piecewise polynomial.", + "enum" : [ "cubic" ] +} +""", + object_hook=with_example_provider, +) +MODEL_DEFINITIONS.update({ + "Interpolation_method_oneOf_8": _interpolation_method_one_of_8_model_schema +}) + +_interpolation_method_one_of_9_model_schema = json.loads( + r"""{ + "type" : "string", + "description" : "Interpolate with a polynomial of the lowest possible degree passing trough the data points.", + "enum" : [ "polynomial" ] +} +""", + object_hook=with_example_provider, +) +MODEL_DEFINITIONS.update({ + "Interpolation_method_oneOf_9": _interpolation_method_one_of_9_model_schema +}) + +_interpolation_spec_model_schema = json.loads( + r"""{ + "required" : [ "method" ], + "type" : "object", + "properties" : { + "method" : { + "$ref" : "#/components/schemas/Interpolation_method" + }, + "value" : { + "title" : "Interpolation parameter", + "type" : "integer", + "description" : "Optional parameter value for the interpolation method (see method description)." + }, + "order" : { + "title" : "Interpolation order", + "type" : "integer", + "description" : "Optional order parameter for the interpolation method (see method description)." + } + }, + "additionalProperties" : true, + "description" : "Defines whether, and how to treat missing values.\n\nThis can occur in two circumstances when aggregating (setting a sample frequency):\n* missing values: if there are missing (or invalid) values stored for\na given freq-interval,\n\"interpolation\" specifies how to compute these.\n* down-sampling: when the specified freq is smaller than the series’\nactual frequency.\n\"interpolation\" specifies how to compute intermediate values." +} +""", + object_hook=with_example_provider, +) +MODEL_DEFINITIONS.update({"InterpolationSpec": _interpolation_spec_model_schema}) + +_links_model_schema = json.loads( + r"""{ + "title" : "_Links", + "anyOf" : [ { + "$ref" : "#/components/schemas/HALLink" + }, { + "type" : "array", + "items" : { + "$ref" : "#/components/schemas/HALLink" + } + } ] +} +""", + object_hook=with_example_provider, +) +MODEL_DEFINITIONS.update({"_Links": _links_model_schema}) + +_location_inner_model_schema = json.loads( + r"""{ + "title" : "Location_inner", + "anyOf" : [ { + "type" : "string" + }, { + "type" : "integer" + } ] +} +""", + object_hook=with_example_provider, +) +MODEL_DEFINITIONS.update({"Location_inner": _location_inner_model_schema}) + +_message_model_schema = json.loads( + r"""{ + "title" : "Message", + "required" : [ "message" ], + "type" : "object", + "properties" : { + "code" : { + "title" : "code", + "type" : "string", + "nullable" : true + }, + "message" : { + "title" : "Message", + "type" : "string" + }, + "level" : { + "$ref" : "#/components/schemas/Message_level" + }, + "args" : { + "title" : "args", + "type" : "object", + "nullable" : true + } + }, + "description" : "Individual (info/warning/error) message in a response." +} +""", + object_hook=with_example_provider, +) +MODEL_DEFINITIONS.update({"Message": _message_model_schema}) + +_message_arguments_model_schema = json.loads( + r"""{ + "title" : "Message Arguments", + "anyOf" : [ { + "type" : "string" + }, { + "$ref" : "#/components/schemas/MessageProperties" + } ] +} +""", + object_hook=with_example_provider, +) +MODEL_DEFINITIONS.update({"Message_Arguments": _message_arguments_model_schema}) + +_message_level_model_schema = json.loads( + r"""{ + "title" : "Message_level", + "type" : "string", + "default" : "info", + "enum" : [ "debug", "info", "warning", "error", "fatal" ] +} +""", + object_hook=with_example_provider, +) +MODEL_DEFINITIONS.update({"Message_level": _message_level_model_schema}) + +_message_properties_model_schema = json.loads( + r"""{ + "type" : "object", + "properties" : { + "resource" : { + "title" : "Series resource id", + "type" : "string" + }, + "metric" : { + "title" : "Series metric", + "type" : "string" + } + }, + "additionalProperties" : true, + "description" : "Additional message arguments." +} +""", + object_hook=with_example_provider, +) +MODEL_DEFINITIONS.update({"MessageProperties": _message_properties_model_schema}) + +_object_data_model_schema = json.loads( + r"""{ + "required" : [ "timestamp" ], + "type" : "object", + "properties" : { + "timestamp" : { + "$ref" : "#/components/schemas/Timestamp" + }, + "timestamp_iso" : { + "$ref" : "#/components/schemas/TimestampIso" + }, + "role" : { + "$ref" : "#/components/schemas/Role" + }, + "resource" : { + "title" : "Resource", + "type" : "string", + "description" : "Series resource id, if applicable for all values." + }, + "metric" : { + "title" : "Metric", + "type" : "string", + "description" : "Series metric, if applicable for all values." + }, + "aggregation" : { + "title" : "Aggregation", + "type" : "string", + "description" : "Series aggregation, if applicable for all values." + }, + "levels" : { + "title" : "Hierarchical Levels", + "type" : "array", + "description" : "Attribute level names used to key the values for this observation.\n\nLevels that are flattened have a dot-separated key.\n\nIf all observations have the same attribute for a level, that level might be omitted.", + "example" : [ "resource", "metric", "aggregation" ], + "items" : { + "type" : "string" + } + } + }, + "additionalProperties" : { + "$ref" : "#/components/schemas/ObjectData_value" + }, + "description" : "Result data for a timestamp in object format." +} +""", + object_hook=with_example_provider, +) +MODEL_DEFINITIONS.update({"ObjectData": _object_data_model_schema}) + +_object_data_set_model_schema = json.loads( + r"""{ + "required" : [ "data" ], + "type" : "object", + "properties" : { + "attributes" : { + "$ref" : "#/components/schemas/DataSetAttributes" + }, + "window_spec" : { + "$ref" : "#/components/schemas/DataSetWindow" + }, + "data" : { + "title" : "Data", + "type" : "array", + "items" : { + "$ref" : "#/components/schemas/ObjectData" + } + } + }, + "additionalProperties" : true, + "description" : "Data result in object format.\n\nResult item when render option `render.header_array` is not set.\n\nThe data values are keyed by their attributes (`resource`, `metric`, `aggregation`),\naccording to the render options:\n* _hierachical_: for each level, a sub-object is created\n (e.g. `render.mode=hier_dict`)\n* _flattened_: the attributes are '.'-separated concatenation\n of the attributes (e.g `render.mode=flat_dict`)\n* _mixed_: (.e.g. `render.mode=metric_flat_dict`) a single level\n (e.g. `metric`) is used as main key, any remaining levels\n (`resource`,`aggregation`) are indicated with a flattened subkey.\n\nWhen `render.rollup=true`, the attribute levels that are the same for all series are\nnot used as key, but reported as a data or table attribute." +} +""", + object_hook=with_example_provider, +) +MODEL_DEFINITIONS.update({"ObjectDataSet": _object_data_set_model_schema}) + +_object_data_value_model_schema = json.loads( + r"""{ + "title" : "Data ", + "oneOf" : [ { + "title" : "Hierarchical Data", + "type" : "object", + "description" : "Values for the series whose attributes corresponds with the key. Keyed by sub-levels." + }, { + "$ref" : "#/components/schemas/Datum" + } ] +} +""", + object_hook=with_example_provider, +) +MODEL_DEFINITIONS.update({"ObjectData_value": _object_data_value_model_schema}) + +_queries_list_response_model_schema = json.loads( + r"""{ + "required" : [ "_links", "count", "limit", "offset", "queries" ], + "type" : "object", + "properties" : { + "messages" : { + "title" : "Messages", + "type" : "array", + "items" : { + "$ref" : "#/components/schemas/Message" + } + }, + "queries" : { + "title" : "Query item list", + "type" : "array", + "description" : "One page of matching query definitions.", + "items" : { + "$ref" : "#/components/schemas/QueryListItem" + } + }, + "count" : { + "title" : "Current page size", + "type" : "integer", + "description" : "Number of query definitions returned in the current response." + }, + "offset" : { + "title" : "Page offset", + "type" : "integer", + "description" : "Offset in the full listing (skipped definitions)." + }, + "limit" : { + "title" : "Page size limit", + "type" : "integer", + "description" : "Maximal number of query definitions returned in one response." + }, + "total_count" : { + "title" : "Total count", + "type" : "integer", + "description" : "Total number of query definitions matching the filter." + }, + "_links" : { + "$ref" : "#/components/schemas/QueryListHALLinks" + } + }, + "additionalProperties" : true, + "description" : "Listing of named queries, with paging links." +} +""", + object_hook=with_example_provider, +) +MODEL_DEFINITIONS.update({"QueriesListResponse": _queries_list_response_model_schema}) + +_query_definition_model_schema = json.loads( + r"""{ + "title" : "Query Definition", + "anyOf" : [ { + "$ref" : "#/components/schemas/QueryUpdateInput" + }, { + "$ref" : "#/components/schemas/Query-Input" + } ] +} +""", + object_hook=with_example_provider, +) +MODEL_DEFINITIONS.update({"Query_Definition": _query_definition_model_schema}) + +_query_entity_input_model_schema = json.loads( + r"""{ + "required" : [ "name", "query" ], + "type" : "object", + "properties" : { + "name" : { + "title" : "Query name", + "type" : "string", + "description" : "Name of the stored query definition." + }, + "meta" : { + "title" : "Query metadata", + "type" : "object", + "description" : "User metadata for the query definition." + }, + "query" : { + "$ref" : "#/components/schemas/Query-Input" + } + }, + "additionalProperties" : true, + "description" : "Input data to create a query definition." +} +""", + object_hook=with_example_provider, +) +MODEL_DEFINITIONS.update({"QueryEntityInput": _query_entity_input_model_schema}) + +_query_execution_message_model_schema = json.loads( + r"""{ + "required" : [ "action", "category", "level", "message", "timestamp" ], + "type" : "object", + "properties" : { + "message" : { + "title" : "Message", + "type" : "string", + "description" : "A human readable message." + }, + "level" : { + "$ref" : "#/components/schemas/QueryExecutionMessage_level" + }, + "timestamp" : { + "title" : "Timestamp", + "type" : "string", + "format" : "date-time" + }, + "action" : { + "title" : "Action", + "type" : "string", + "description" : "The request action that caused this message." + }, + "category" : { + "title" : "Message Category", + "type" : "string", + "description" : "The subsystem that issued this message.", + "example" : "data" + }, + "properties" : { + "$ref" : "#/components/schemas/Message_Arguments" + }, + "exception" : { + "$ref" : "#/components/schemas/CauseException" + } + }, + "additionalProperties" : true, + "description" : "A message object that informs or warns about a query execution issue." +} +""", + object_hook=with_example_provider, +) +MODEL_DEFINITIONS.update({ + "QueryExecutionMessage": _query_execution_message_model_schema +}) + +_query_execution_message_level_model_schema = json.loads( + r"""{ + "title" : "QueryExecutionMessage_level", + "type" : "string", + "enum" : [ "debug", "info", "warning", "error" ] +} +""", + object_hook=with_example_provider, +) +MODEL_DEFINITIONS.update({ + "QueryExecutionMessage_level": _query_execution_message_level_model_schema +}) + +_query_hal_links_model_schema = json.loads( + r"""{ + "required" : [ "execute", "self" ], + "type" : "object", + "properties" : { + "self" : { + "$ref" : "#/components/schemas/HALLink" + }, + "execute" : { + "$ref" : "#/components/schemas/HALLink" + } + }, + "additionalProperties" : true, + "description" : "HAL Links for a query entity." +} +""", + object_hook=with_example_provider, +) +MODEL_DEFINITIONS.update({"QueryHALLinks": _query_hal_links_model_schema}) + +_query_input_model_schema = json.loads( + r"""{ + "type" : "object", + "properties" : { + "resource" : { + "title" : "Default Resource", + "type" : "string", + "description" : "Default resource for the series in the query." + }, + "metric" : { + "title" : "Default Metric", + "type" : "string", + "description" : "Default metric for the series in the query." + }, + "aggregation" : { + "$ref" : "#/components/schemas/Default_Aggregation" + }, + "interpolation" : { + "$ref" : "#/components/schemas/Default_Interpolation" + }, + "freq" : { + "$ref" : "#/components/schemas/Grouping_interval" + }, + "from" : { + "$ref" : "#/components/schemas/Time_Window_From" + }, + "until" : { + "$ref" : "#/components/schemas/Time_Window_Until" + }, + "window" : { + "$ref" : "#/components/schemas/Window" + }, + "periods" : { + "title" : "Periods", + "type" : "integer", + "description" : "The size of the time window in number of `freq` units. One of the [time line](https://docs.waylay.io/#/api/query/?id=time-line-properties) specifiers." + }, + "align" : { + "$ref" : "#/components/schemas/Alignment" + }, + "data" : { + "title" : "Series specifications", + "type" : "array", + "description" : "List of series specifications. When not specified, a single default series specification is assumed(`[{}]`, using the default `metric`,`resource`, ... ).", + "items" : { + "$ref" : "#/components/schemas/SeriesSpec" + } + }, + "render" : { + "$ref" : "#/components/schemas/Render" + } + }, + "additionalProperties" : true, + "description" : "Query definition for a Waylay analytics query.\n\nSee also [api docs](https://docs.waylay.io/#/api/query/?id=data-query-json-representation)." +} +""", + object_hook=with_example_provider, +) +MODEL_DEFINITIONS.update({"Query-Input": _query_input_model_schema}) + +_query_list_hal_links_model_schema = json.loads( + r"""{ + "title" : "QueryListHALLinks", + "required" : [ "self" ], + "type" : "object", + "properties" : { + "self" : { + "$ref" : "#/components/schemas/HALLink" + }, + "first" : { + "$ref" : "#/components/schemas/HALLink" + }, + "prev" : { + "$ref" : "#/components/schemas/HALLink" + }, + "next" : { + "$ref" : "#/components/schemas/HALLink" + }, + "last" : { + "$ref" : "#/components/schemas/HALLink" + } + }, + "additionalProperties" : true, + "description" : "HAL Links for a query entity." +} +""", + object_hook=with_example_provider, +) +MODEL_DEFINITIONS.update({"QueryListHALLinks": _query_list_hal_links_model_schema}) + +_query_list_item_model_schema = json.loads( + r"""{ + "title" : "QueryListItem", + "required" : [ "_links", "attrs", "name" ], + "type" : "object", + "properties" : { + "_links" : { + "$ref" : "#/components/schemas/QueryHALLinks" + }, + "attrs" : { + "title" : "Query attributes", + "type" : "object", + "description" : "System provided metadata for the query definition." + }, + "name" : { + "title" : "Query name", + "type" : "string", + "description" : "Name of the stored query definition." + }, + "meta" : { + "title" : "Query metadata", + "type" : "object", + "description" : "User metadata for the query definition." + } + }, + "additionalProperties" : true, + "description" : "Listing of a query definition item." +} +""", + object_hook=with_example_provider, +) +MODEL_DEFINITIONS.update({"QueryListItem": _query_list_item_model_schema}) + +_query_output_model_schema = json.loads( + r"""{ + "type" : "object", + "properties" : { + "resource" : { + "title" : "Default Resource", + "type" : "string", + "description" : "Default resource for the series in the query." + }, + "metric" : { + "title" : "Default Metric", + "type" : "string", + "description" : "Default metric for the series in the query." + }, + "aggregation" : { + "$ref" : "#/components/schemas/Default_Aggregation" + }, + "interpolation" : { + "$ref" : "#/components/schemas/Default_Interpolation" + }, + "freq" : { + "$ref" : "#/components/schemas/Grouping_interval" + }, + "from" : { + "$ref" : "#/components/schemas/Time_Window_From" + }, + "until" : { + "$ref" : "#/components/schemas/Time_Window_Until" + }, + "window" : { + "$ref" : "#/components/schemas/Window" + }, + "periods" : { + "title" : "Periods", + "type" : "integer", + "description" : "The size of the time window in number of `freq` units. One of the [time line](https://docs.waylay.io/#/api/query/?id=time-line-properties) specifiers." + }, + "align" : { + "$ref" : "#/components/schemas/Alignment" + }, + "data" : { + "title" : "Series specifications", + "type" : "array", + "description" : "List of series specifications. When not specified, a single default series specification is assumed(`[{}]`, using the default `metric`,`resource`, ... ).", + "items" : { + "$ref" : "#/components/schemas/SeriesSpec" + } + }, + "render" : { + "$ref" : "#/components/schemas/Render" + } + }, + "additionalProperties" : true, + "description" : "Query definition for a Waylay analytics query.\n\nSee also [api docs](https://docs.waylay.io/#/api/query/?id=data-query-json-representation)." +} +""", + object_hook=with_example_provider, +) +MODEL_DEFINITIONS.update({"Query-Output": _query_output_model_schema}) + +_query_response_model_schema = json.loads( + r"""{ + "required" : [ "_links", "attrs", "name", "query" ], + "type" : "object", + "properties" : { + "_links" : { + "$ref" : "#/components/schemas/QueryHALLinks" + }, + "attrs" : { + "title" : "Query attributes", + "type" : "object", + "description" : "System provided metadata for the query definition." + }, + "name" : { + "title" : "Query name", + "type" : "string", + "description" : "Name of the stored query definition." + }, + "meta" : { + "title" : "Query metadata", + "type" : "object", + "description" : "User metadata for the query definition." + }, + "query" : { + "$ref" : "#/components/schemas/Query-Output" + }, + "messages" : { + "title" : "Messages", + "type" : "array", + "items" : { + "$ref" : "#/components/schemas/Message" + } + } + }, + "additionalProperties" : true, + "description" : "Represents a single named query." +} +""", + object_hook=with_example_provider, +) +MODEL_DEFINITIONS.update({"QueryResponse": _query_response_model_schema}) + +_query_result_model_schema = json.loads( + r"""{ + "required" : [ "data", "messages", "query" ], + "type" : "object", + "properties" : { + "data" : { + "title" : "Response Data Sets", + "type" : "array", + "description" : "A list of data sets, each with their own time axis. There will be one dataset for each `role` specified in the query (by default a single `input` role).\n\nThe data is represented according to the `render` options in the query (default `COMPACT_WS`).", + "items" : { + "$ref" : "#/components/schemas/Response_Data_Set" + } + }, + "query" : { + "$ref" : "#/components/schemas/Query-Input" + }, + "messages" : { + "title" : "Messages and Warnings", + "type" : "array", + "items" : { + "$ref" : "#/components/schemas/QueryExecutionMessage" + } + } + }, + "additionalProperties" : true, + "description" : "A json data response.\n\nUses the format as specified by the\n`render` options of the request (defaults to `COMPACT_WS`).\n'", + "example" : { + "data" : [ ], + "query" : { + "resource" : "R", + "metric" : "temperature" + }, + "messages" : [ ] + } +} +""", + object_hook=with_example_provider, +) +MODEL_DEFINITIONS.update({"QueryResult": _query_result_model_schema}) + +_query_update_input_model_schema = json.loads( + r"""{ + "type" : "object", + "properties" : { + "meta" : { + "title" : "Query metadata", + "type" : "object", + "description" : "User metadata for the query definition." + }, + "query" : { + "$ref" : "#/components/schemas/Query-Input" + } + }, + "additionalProperties" : true, + "description" : "Input data to update a query definition." +} +""", + object_hook=with_example_provider, +) +MODEL_DEFINITIONS.update({"QueryUpdateInput": _query_update_input_model_schema}) + +_render_model_schema = json.loads( + r"""{ + "title" : "Render", + "type" : "object", + "properties" : { + "mode" : { + "$ref" : "#/components/schemas/_RenderMode" + }, + "roll_up" : { + "title" : "Roll Up", + "type" : "boolean", + "description" : "move up attributes on rows (or columns) that are the same for all rows (or columns) to a table attribute. Levels enumerated in 'hierarchical' are excluded." + }, + "hierarchical" : { + "$ref" : "#/components/schemas/Hierarchical" + }, + "value_key" : { + "title" : "Value Key", + "type" : "string", + "description" : "if set, use this key in the value object to report data values" + }, + "show_levels" : { + "title" : "Show Levels", + "type" : "boolean", + "description" : "if set, report the levels used in the data values (either hierarchical or flat)" + }, + "iso_timestamp" : { + "title" : "Iso Timestamp", + "type" : "boolean", + "description" : "if set, render timestamps in a row or column index with both epoch and iso representations" + }, + "row_key" : { + "title" : "Row Key", + "type" : "string", + "description" : "if set, use this key as name of the row-dimension for single-dimensional rows" + }, + "column_key" : { + "title" : "Column Key", + "type" : "string", + "description" : "if set, use this key as name of the column-dimension for single-dimensional columns" + }, + "header_array" : { + "$ref" : "#/components/schemas/HeaderArrayOption" + }, + "data_axis" : { + "$ref" : "#/components/schemas/DataAxisOption" + }, + "key_seperator" : { + "title" : "Key Seperator", + "type" : "string", + "description" : "character used to concatenate multi-key columns or rows when required" + }, + "key_skip_empty" : { + "title" : "Key Skip Empty", + "type" : "boolean", + "description" : "skip empty values in concatenating multi-key column or row headers" + }, + "include_window_spec" : { + "title" : "Include Window Spec", + "type" : "boolean", + "description" : "if set, include window specification in render modes that support it" + } + }, + "additionalProperties" : true, + "description" : "Configures the representation of data sets returned by the query API." +} +""", + object_hook=with_example_provider, +) +MODEL_DEFINITIONS.update({"Render": _render_model_schema}) + +_render_1_model_schema = json.loads( + r"""{ + "title" : "Render", + "anyOf" : [ { + "$ref" : "#/components/schemas/_RenderMode" + }, { + "$ref" : "#/components/schemas/Render" + } ] +} +""", + object_hook=with_example_provider, +) +MODEL_DEFINITIONS.update({"Render_1": _render_1_model_schema}) + +_render_mode_model_schema = json.loads( + r"""{ + "title" : "_RenderMode", + "type" : "string", + "description" : "Render mode configuration keys.", + "oneOf" : [ { + "$ref" : "#/components/schemas/_RenderMode_oneOf" + }, { + "$ref" : "#/components/schemas/_RenderMode_oneOf_1" + }, { + "$ref" : "#/components/schemas/_RenderMode_oneOf_2" + }, { + "$ref" : "#/components/schemas/_RenderMode_oneOf_3" + }, { + "$ref" : "#/components/schemas/_RenderMode_oneOf_4" + }, { + "$ref" : "#/components/schemas/_RenderMode_oneOf_5" + }, { + "$ref" : "#/components/schemas/_RenderMode_oneOf_6" + }, { + "$ref" : "#/components/schemas/_RenderMode_oneOf_7" + }, { + "$ref" : "#/components/schemas/_RenderMode_oneOf_8" + }, { + "$ref" : "#/components/schemas/_RenderMode_oneOf_9" + } ] +} +""", + object_hook=with_example_provider, +) +MODEL_DEFINITIONS.update({"_RenderMode": _render_mode_model_schema}) + +_render_mode_one_of_model_schema = json.loads( + r"""{ + "title" : "_RenderMode_oneOf", + "type" : "string", + "description" : "Render rows of timestamp and values. Show column headers. Includes an iso timestamp.\n\n###### options\n- `iso_timestamp`: `True`\n- `header_array`: `row`\n- `roll_up`: `False`\n- `data_axis`: `column`", + "enum" : [ "HEADER_ROW" ] +} +""", + object_hook=with_example_provider, +) +MODEL_DEFINITIONS.update({"_RenderMode_oneOf": _render_mode_one_of_model_schema}) + +_render_mode_one_of_1_model_schema = json.loads( + r"""{ + "title" : "_RenderMode_oneOf_1", + "type" : "string", + "description" : "Render rows of timestamp and values. Show column headers.\n\n###### options\n- `iso_timestamp`: `False`\n- `header_array`: `row`\n- `roll_up`: `False`\n- `data_axis`: `column`", + "enum" : [ "COMPACT" ] +} +""", + object_hook=with_example_provider, +) +MODEL_DEFINITIONS.update({"_RenderMode_oneOf_1": _render_mode_one_of_1_model_schema}) + +_render_mode_one_of_2_model_schema = json.loads( + r"""{ + "title" : "_RenderMode_oneOf_2", + "type" : "string", + "description" : "Render rows of timestamp and values. Show column headers. Show the time window attributes.\n\n###### options\n- `iso_timestamp`: `False`\n- `header_array`: `row`\n- `roll_up`: `False`\n- `data_axis`: `column`\n- `include_window_spec`: `True`", + "enum" : [ "COMPACT_WS" ] +} +""", + object_hook=with_example_provider, +) +MODEL_DEFINITIONS.update({"_RenderMode_oneOf_2": _render_mode_one_of_2_model_schema}) + +_render_mode_one_of_3_model_schema = json.loads( + r"""{ + "title" : "_RenderMode_oneOf_3", + "type" : "string", + "description" : "Render timestamps and each series (column) as a values array. Show column headers.\n\n###### options\n- `iso_timestamp`: `False`\n- `header_array`: `row`\n- `data_axis`: `row`\n- `roll_up`: `True`\n- `include_window_spec`: `True`", + "enum" : [ "SERIES" ] +} +""", + object_hook=with_example_provider, +) +MODEL_DEFINITIONS.update({"_RenderMode_oneOf_3": _render_mode_one_of_3_model_schema}) + +_render_mode_one_of_4_model_schema = json.loads( + r"""{ + "title" : "_RenderMode_oneOf_4", + "type" : "string", + "description" : "Renders row index in `rows`, and each series as a values array.\n\nThe series are prefixed by their series attributes.The `rows` index is prefixed by the labels for these attributes.\n\n###### options\n- `iso_timestamp`: `True`\n- `header_array`: `column`\n- `roll_up`: `False`\n- `data_axis`: `row`", + "enum" : [ "HEADER_COLUMN" ] +} +""", + object_hook=with_example_provider, +) +MODEL_DEFINITIONS.update({"_RenderMode_oneOf_4": _render_mode_one_of_4_model_schema}) + +_render_mode_one_of_5_model_schema = json.loads( + r"""{ + "title" : "_RenderMode_oneOf_5", + "type" : "string", + "description" : "Render an object for each observation. Uses flattened keys.\n\n###### options\n- `iso_timestamp`: `True`\n- `hierarchical`: `False`\n- `show_levels`: `True`\n- `roll_up`: `False`", + "enum" : [ "FLAT_DICT" ] +} +""", + object_hook=with_example_provider, +) +MODEL_DEFINITIONS.update({"_RenderMode_oneOf_5": _render_mode_one_of_5_model_schema}) + +_render_mode_one_of_6_model_schema = json.loads( + r"""{ + "title" : "_RenderMode_oneOf_6", + "type" : "string", + "description" : "Render an hierarchical object for each observation. Shows an iso timestamp.\n\n###### options\n- `iso_timestamp`: `True`\n- `hierarchical`: `True`\n- `show_levels`: `True`\n- `roll_up`: `True`", + "enum" : [ "HIER_DICT" ] +} +""", + object_hook=with_example_provider, +) +MODEL_DEFINITIONS.update({"_RenderMode_oneOf_6": _render_mode_one_of_6_model_schema}) + +_render_mode_one_of_7_model_schema = json.loads( + r"""{ + "title" : "_RenderMode_oneOf_7", + "type" : "string", + "description" : "Render an object with metric keys for each observation. Shows an iso timestamp.\n\n###### options\n- `iso_timestamp`: `True`\n- `hierarchical`: `['metric']`\n- `show_levels`: `False`\n- `roll_up`: `True`\n- `key_skip_empty`: `True`", + "enum" : [ "METRIC_FLAT_DICT" ] +} +""", + object_hook=with_example_provider, +) +MODEL_DEFINITIONS.update({"_RenderMode_oneOf_7": _render_mode_one_of_7_model_schema}) + +_render_mode_one_of_8_model_schema = json.loads( + r"""{ + "title" : "_RenderMode_oneOf_8", + "type" : "string", + "description" : "Render in an object format compatible with the `/data/v1/events` upload.\n\n###### options\n- `iso_timestamp`: `False`\n- `hierarchical`: `False`\n- `show_levels`: `False`\n- `roll_up`: `True`", + "enum" : [ "UPLOAD" ] +} +""", + object_hook=with_example_provider, +) +MODEL_DEFINITIONS.update({"_RenderMode_oneOf_8": _render_mode_one_of_8_model_schema}) + +_render_mode_one_of_9_model_schema = json.loads( + r"""{ + "title" : "_RenderMode_oneOf_9", + "type" : "string", + "description" : "Render in csv format with row headers.\n\n###### options\n- `iso_timestamp`: `False`", + "enum" : [ "CSV" ] +} +""", + object_hook=with_example_provider, +) +MODEL_DEFINITIONS.update({"_RenderMode_oneOf_9": _render_mode_one_of_9_model_schema}) + +_response_data_set_model_schema = json.loads( + r"""{ + "title" : "Response Data Set", + "description" : "Result timeseries data set, with one time dimension.", + "anyOf" : [ { + "$ref" : "#/components/schemas/RowDataSet" + }, { + "$ref" : "#/components/schemas/SeriesDataSet" + }, { + "$ref" : "#/components/schemas/ColumnDataSet" + }, { + "$ref" : "#/components/schemas/ObjectDataSet" + } ] +} +""", + object_hook=with_example_provider, +) +MODEL_DEFINITIONS.update({"Response_Data_Set": _response_data_set_model_schema}) + +_row_data_set_model_schema = json.loads( + r"""{ + "required" : [ "columns", "data" ], + "type" : "object", + "properties" : { + "attributes" : { + "$ref" : "#/components/schemas/DataSetAttributes" + }, + "window_spec" : { + "$ref" : "#/components/schemas/DataSetWindow" + }, + "data_axis" : { + "$ref" : "#/components/schemas/RowDataSet_data_axis" + }, + "columns" : { + "title" : "Column Headers", + "type" : "array", + "description" : "Header Attributes for the column data.\n\nThe initial string-valued headers (normally a single `timestamp`) indicate that column to contain row index data (i.e. timestamps).\n\nThe remaining object-valued column headers identify and describe the actual series data.", + "items" : { + "$ref" : "#/components/schemas/Column_Headers_inner" + }, + "x-prefixItems" : [ { + "const" : "timestamp", + "title" : "Unix epoch milliseconds timestamp." + } ] + }, + "data" : { + "title" : "Data", + "type" : "array", + "items" : { + "title" : "Observation", + "type" : "array", + "description" : "Row index data (timestamp), and a value for each of the series.", + "items" : { + "$ref" : "#/components/schemas/Datum" + }, + "x-prefixItems" : [ { + "$ref" : "#/components/schemas/Timestamp" + } ] + } + } + }, + "additionalProperties" : true, + "description" : "Row-oriented dataset.\n\nTimeseries data layout with a column header and a data row per timestamp.\nResult for render options `data_axis=column` and `header_array=row`.\"," +} +""", + object_hook=with_example_provider, +) +MODEL_DEFINITIONS.update({"RowDataSet": _row_data_set_model_schema}) + +_row_data_set_data_axis_model_schema = json.loads( + r"""{ + "title" : "RowDataSet_data_axis", + "type" : "string", + "default" : "column", + "enum" : [ "column" ] +} +""", + object_hook=with_example_provider, +) +MODEL_DEFINITIONS.update({"RowDataSet_data_axis": _row_data_set_data_axis_model_schema}) + +_row_header_model_schema = json.loads( + r"""{ + "required" : [ "timestamp" ], + "type" : "object", + "properties" : { + "timestamp" : { + "$ref" : "#/components/schemas/Timestamp" + }, + "timestamp_iso" : { + "$ref" : "#/components/schemas/TimestampIso" + } + }, + "additionalProperties" : true, + "description" : "Index entry attributes.\n\nAttributes for a timestamp index entry." +} +""", + object_hook=with_example_provider, +) +MODEL_DEFINITIONS.update({"RowHeader": _row_header_model_schema}) + +_row_headers_inner_model_schema = json.loads( + r"""{ + "title" : "Row_Headers_inner", + "anyOf" : [ { + "$ref" : "#/components/schemas/ColumnIndexRowHeader" + }, { + "$ref" : "#/components/schemas/RowHeader" + } ] +} +""", + object_hook=with_example_provider, +) +MODEL_DEFINITIONS.update({"Row_Headers_inner": _row_headers_inner_model_schema}) + +_series_data_set_model_schema = json.loads( + r"""{ + "required" : [ "columns", "data" ], + "type" : "object", + "properties" : { + "attributes" : { + "$ref" : "#/components/schemas/DataSetAttributes" + }, + "window_spec" : { + "$ref" : "#/components/schemas/DataSetWindow" + }, + "data_axis" : { + "$ref" : "#/components/schemas/ColumnDataSet_data_axis" + }, + "columns" : { + "title" : "Column Headers", + "type" : "array", + "description" : "Header Attributes for the column data.\n\nThe initial string-valued headers (normally a single `timestamp`) indicate that column to contain row index data (i.e. timestamps).\n\nThe remaining object-valued column headers identify and describe the actual series data.", + "items" : { + "$ref" : "#/components/schemas/Column_Headers_inner" + }, + "x-prefixItems" : [ { + "const" : "timestamp", + "title" : "Unix epoch milliseconds timestamp." + } ] + }, + "data" : { + "title" : "Data", + "type" : "array", + "items" : { + "title" : "Series", + "type" : "array", + "description" : "All metric observation values for a single series.", + "items" : { + "$ref" : "#/components/schemas/Datum" + } + }, + "x-prefixItems" : [ { + "items" : { + "$ref" : "#/components/schemas/Timestamp" + }, + "type" : "array", + "title" : "Timestamp Index", + "description" : "The timestamp index for this result data." + } ] + } + }, + "additionalProperties" : true, + "description" : "Column-oriented dataset.\n\nTimeseries data layout with a column header\nand a seperate data array for the time index and each series.\nResult for render options `data_axis=row` and `header_array=row`." +} +""", + object_hook=with_example_provider, +) +MODEL_DEFINITIONS.update({"SeriesDataSet": _series_data_set_model_schema}) + +_series_spec_model_schema = json.loads( + r"""{ + "title" : "SeriesSpec", + "type" : "object", + "properties" : { + "name" : { + "title" : "Name", + "type" : "string", + "description" : "Optional alias name for the series. This name is used when exporting the dataset to CSV format.", + "example" : "demoQuery" + }, + "resource" : { + "title" : "Resource", + "type" : "string", + "description" : "Resource id for the series, required unless it is specified as a query default.", + "example" : "13efb488-75ac-4dac-828a-d49c5c2ebbfc" + }, + "metric" : { + "title" : "Metric", + "type" : "string", + "description" : "Metric name for the series, required unless it is specified as a query default.", + "example" : "temperature" + }, + "aggregration" : { + "$ref" : "#/components/schemas/AggregationMethod" + }, + "interpolation" : { + "$ref" : "#/components/schemas/Interpolation" + } + }, + "additionalProperties" : true, + "description" : "Query specification for a single series." +} +""", + object_hook=with_example_provider, +) +MODEL_DEFINITIONS.update({"SeriesSpec": _series_spec_model_schema}) + +_time_window_from_model_schema = json.loads( + r"""{ + "title" : "Time Window From", + "description" : "The start of the time window for which results will be returned. One of the [time line](https://docs.waylay.io/#/api/query/?id=time-line-properties) specifiers.", + "oneOf" : [ { + "title" : "ISO8601 absolute timestamp", + "pattern" : "[0-9]{4}-[0-9]{2}-[0-9]{2}(T.*)?", + "type" : "string", + "description" : "A date or date-time in [ISO8601](https://en.wikipedia.org/wiki/ISO_8601#Combined_date_and_time_representations) format. When no timezone is specified, the UTC timezone is assumed (`+00:00`)", + "format" : "date-time", + "example" : "2018-03-21T12:23:00+01:00" + }, { + "title" : "UNIX epoch milliseconds", + "minimum" : 0, + "type" : "integer", + "description" : "Absolute timestamp milliseconds in unix epoch since 1970-01-01.", + "example" : 1534836422284 + }, { + "title" : "ISO8601 Period Before Now", + "pattern" : "^P([0-9]+Y)?([0-9]+M)?([0-9]+W)?([0-9]+D)?(T([0-9]+H)?([0-9]+M)?([0-9]+(\\.[0-9]*)?S)?)?$", + "type" : "string", + "description" : "Specifies a timestamp before _now_ as a period in [ISO8601 duration](https://en.wikipedia.org/wiki/ISO_8601#Durations) format.", + "format" : "period", + "example" : "PT3H15M" + } ] +} +""", + object_hook=with_example_provider, +) +MODEL_DEFINITIONS.update({"Time_Window_From": _time_window_from_model_schema}) + +_time_window_until_model_schema = json.loads( + r"""{ + "title" : "Time Window Until", + "description" : "The end (not-inclusive) of the time window for which results will be returned. One of the [time line](https://docs.waylay.io/#/api/query/?id=time-line-properties)specifiers.", + "oneOf" : [ { + "title" : "ISO8601 absolute timestamp", + "pattern" : "[0-9]{4}-[0-9]{2}-[0-9]{2}(T.*)?", + "type" : "string", + "description" : "A date or date-time in [ISO8601](https://en.wikipedia.org/wiki/ISO_8601#Combined_date_and_time_representations) format. When no timezone is specified, the UTC timezone is assumed (`+00:00`)", + "format" : "date-time", + "example" : "2018-03-21T12:23:00+01:00" + }, { + "title" : "UNIX epoch milliseconds", + "minimum" : 0, + "type" : "integer", + "description" : "Absolute timestamp milliseconds in unix epoch since 1970-01-01.", + "example" : 1534836422284 + }, { + "title" : "ISO8601 Period Before Now", + "pattern" : "^P([0-9]+Y)?([0-9]+M)?([0-9]+W)?([0-9]+D)?(T([0-9]+H)?([0-9]+M)?([0-9]+(\\.[0-9]*)?S)?)?$", + "type" : "string", + "description" : "Specifies a timestamp before _now_ as a period in [ISO8601 duration](https://en.wikipedia.org/wiki/ISO_8601#Durations) format.", + "format" : "period", + "example" : "PT3H15M" + } ] +} +""", + object_hook=with_example_provider, +) +MODEL_DEFINITIONS.update({"Time_Window_Until": _time_window_until_model_schema}) + +_validation_error_model_schema = json.loads( + r"""{ + "title" : "ValidationError", + "required" : [ "loc", "msg", "type" ], + "type" : "object", + "properties" : { + "loc" : { + "title" : "Location", + "type" : "array", + "items" : { + "$ref" : "#/components/schemas/Location_inner" + } + }, + "msg" : { + "title" : "Message", + "type" : "string" + }, + "type" : { + "title" : "Error Type", + "type" : "string" + } + } +} +""", + object_hook=with_example_provider, +) +MODEL_DEFINITIONS.update({"ValidationError": _validation_error_model_schema}) + +_window_model_schema = json.loads( + r"""{ + "title" : "Window", + "type" : "string", + "description" : "The absolute size of the time window for which results will be returned. One of the [time line](https://docs.waylay.io/#/api/query/?id=time-line-properties) specifiers.", + "oneOf" : [ { + "title" : "ISO8601 period ", + "pattern" : "^P([0-9]+Y)?([0-9]+M)?([0-9]+W)?([0-9]+D)?(T([0-9]+H)?([0-9]+M)?([0-9]+(\\.[0-9]*)?S)?)?$", + "type" : "string", + "description" : "A period in [ISO8601 duration](https://en.wikipedia.org/wiki/ISO_8601#Durations) format.", + "format" : "period", + "example" : "PT3H15M" + } ] +} +""", + object_hook=with_example_provider, +) +MODEL_DEFINITIONS.update({"Window": _window_model_schema}) + +_window_override__model_schema = json.loads( + r"""{ + "title" : "Window Override.", + "type" : "string", + "oneOf" : [ { + "title" : "ISO8601 period ", + "pattern" : "^P([0-9]+Y)?([0-9]+M)?([0-9]+W)?([0-9]+D)?(T([0-9]+H)?([0-9]+M)?([0-9]+(\\.[0-9]*)?S)?)?$", + "type" : "string", + "description" : "A period in [ISO8601 duration](https://en.wikipedia.org/wiki/ISO_8601#Durations) format.", + "format" : "period", + "example" : "PT3H15M" + } ] +} +""", + object_hook=with_example_provider, +) +MODEL_DEFINITIONS.update({"Window_Override_": _window_override__model_schema}) diff --git a/test/types/__init__.py b/test/types/__init__.py new file mode 100644 index 0000000..81e66c8 --- /dev/null +++ b/test/types/__init__.py @@ -0,0 +1 @@ +"""Waylay Query: timeseries queries (v1 protocol) REST model tests.""" diff --git a/test/types/__pycache__/__init__.cpython-311.pyc b/test/types/__pycache__/__init__.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..a05ed69c03ac3547582f40aee6fb06612ca1d7a2 GIT binary patch literal 296 zcmZ3^%ge<81PK?`q`3p>#~=<2FhUuhK}x1Gq%cG=q%a0EXfjnfgeO+!BvvW}mZla} zS}Bxd=B5^>7GkZW*=LT-LaYK}rlYH>-io}VV; zE%x~Ml>FrQ_>~NwK^FbW)z8S!P1P?d&C5$I(l5_1%GNIjTccZ0sS7l|EHgQ^7@H8f zTyaXaF4P@Bt@H|GD-hS0ynOQWgv!Rsywp~r}z0wNNTZK)tZuh?=? zDJYWQskT~-6e2K=kfJHPL8%Bk@EAMEKVc(=@%_ z*?8OElO&BGG&!Z z*t3e1Q)W?)zXXox2ba&{5_3J*bnPrIx`f);quk>;O`Be{I5vTWR}799s6(0IQG(~0 zTg2WX#girKjD9+fiEEaN)bR|@avki>NNyddw=K`LFi}u4gushhXHc#FhI^9 z2FPy@1LVSCfLuHbkdHzT{DpR36EWb<-KD0dFS_nhkRWv4ax4+T{H4f%&!nImV#i(4 z9dI$-Er}_^=B9|GMpNp8*T09sV?+_8UsRBZR8Xi&tO>E%k)BB*mAgMI3~?aKa+!GnNuD1&M4a+uf5gN1&5S!%y^q7 z^kSGN^m${6vLN0_sBjR9X>%^@!auL&7u_Pwv$6x}HoxMsrTj{m#D`0jVMyM~mPz@$ zSO@1gSsJcqd03hkNj)#p63@TGB(a6LQYA>3;n(VSx$CU{x@FVFS>*PKTmh5$DIgEf zf1@Zp_&hbTl^Xd6@o#_Tr$#nYGux>dKR)wXY;zE0)GITG#o?vtup+<+533utp!u+P z%4>KS2$2Kj@lVnkTHhJ2_x!lUFdIV%?L!^P@0|NzPu){ zM_ZNwgQ!H^h#ZiXnl$dSWhfS`ink19dlSIg$e&xthBrYB*HBGWYNt zt@)~LL)rFRTst~ktBqmUuml*ul0c@JxRwMdzGRj3Wy7{eSlhrmW2WnP^qvRdnGP%D zls-B$I(~EX=2)Zu~qmxRn|Ff&AF*X9hPj6Wf`IN7r7Y2A-!bZlx~n zB-4J+&{N_cKUY;y`XgAL)?j&Bt0K8gW4{9XCbBX+4t*Fh*;o+Qb;l@DT@N%}hr3!C zt|WSp)b%gnl2f0F={j7;fSm|Wxt4Nj2lGBaJwqXKxPMICR6`=NB%cBDVDGo14*BZP zZX{im<;biAMge`LplIjAJ9SnZUaE3?1T1clJ%I)zoT{l5+Opj&E0p#F36#5hzUD3Q zQiT|fXPHbD6S4X&kBRtVB3Od6wIrBpWVu{DwdKMqE6*7%X*S$6h6RGiP^?$LDD<8g zL~Pd}Jm_s*BQ}-Vb>|GClfAcY*RYj7d zsv48jDiWj%Ny!HZ@!Lfizxmlg*l&Jz(N+IlPgRXdCwJ5-zxmni{otFg{0}d0_FmcU zz2d7Uc8>P=YBxMT?ZmpkwWX79$?Cqt480Gz)f1oE5Up7jtSlc+xfT52>Ky1Dk*=LFDw5PgZ}{%tmZ2K literal 0 HcmV?d00001 diff --git a/test/types/__pycache__/delete_response_stub.cpython-311.pyc b/test/types/__pycache__/delete_response_stub.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..0ae2bc682ad1c17043c6a264f32fef0721b0ab8f GIT binary patch literal 3642 zcmb^zO>Y~=b@qcFA}Nugq*#e1XCf)J*ji)_t4Lu4Zq-Ou)yk4x2`R#$SgdwN)>_M5 zdS)q!s)ZPZ4@NIN+CX#A$&C>maw*V5e}IoGL4bt?3JODan+E0$bQ%8Dd# zs-;$9^((Cv}jk5Y>?3xwI zDKja@w*e#O$*qgH${g1*9IJpU4xtuyDR+4>m0H~}IW_==w{?zhQkyc}r39}tr-I!L zikGX@p1Hn&iDT3%)OK~(bZqRb9y~Q^|It)*4xNenSE|nY*saMUZ zNE?S0U21F;QmI)7+m4GVG2K8n!_qm&72U4smQ^pNo(o?u6(nEz)yh?v(yR3C#FY;{Z3o=z5^Wc*$@ope00zm$^SlyvHKWd%?UH z3L4Wa)86dh*QOO-3>M$ismGLgy( zRf&8LJp%mK(I$k-F~BBB?4H_%kCQl5zNDY;Jew}Xcc{s zBbtj)>g8ns50DG6IriK4HIbr`NC$FfAqG{H-H}fig`$bUd#2$AvLHvftJ?-Gu0EFi zOpQ|wyr$PImxo_bwc${ahC-ifEGjeFy1q%7pKKOm@V{bMoC~G!clFYSQ=uhRv!PU% zwjH)v+724PRJA?@g@4O5D1RHOdySLLsi;E$X-PDMlE{5t>efd%uUM`7X(O;xyTu)Q z_gts1h5w6f>$9LN9|dq1{VR@gA3n`a9c8EfHvNQn*{Q?q%5iqZORl^W&h_Jrx;19A zBz$y)C^XNY*#ZDtf~B3(W857Hg9-|EM(p*1?QX-~Q%@t?Vg)-rO164BTf z^4}Pp9Eg0Nbf(0fd`I4ozd;5Fq7wBW*0o#ekl3clYYulL5+|xD9V9ww#W~oWh?1`} z99>DcTf8Q^KJ>~Ockvnx)6=q`h`J6A!-m6d8k`iC2I(vVV3moBjGyJ3W>wqLEt3Sr z0&+58IJQf7TsVulpr@{AGoQ{ZEYAF5an4UKKr>?Q9Age+!-AQJmOs>~Wz?Gew8$te z>{@InkQa%9c3gKi9J`>fcLZJ)JN?X>Zfw@7;X&boGc+1@CLoM*uzCJ=$2vu}=V^1# z0ub^)0|;{!H;~kGU3!)u_0BCF=9iE2%U)*rB%A-!7k~WXFpH0~_`Z6Q9cZ9f&$9H- zv*(^cdgm@4DNTcWT@9`;nxE0M+i)R@RuY;9S2sYXgZNe`xRZn-`4Ct=Mgix*c}(1D z126+G{8IpTTfY;v;HibvSgs+wP3_oT$I^q6E7lCjmwW6H#iNXpzzi{B|4@H(FpguTw^6kYM&_B7PEGL5Jdo+R>+)6(c`aB^lOTx*Bl!VnsdiaCz( z4)tUeR literal 0 HcmV?d00001 diff --git a/test/types/__pycache__/from_override_stub.cpython-311.pyc b/test/types/__pycache__/from_override_stub.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..23c48d943c51b399c13531be2f34f253b1c0257b GIT binary patch literal 3940 zcmb7H&2JmW6`x&xilR+gQlds5_CR)Ov6lEDDUKr;Q5DNdRM?_pF>y`D-K;o6bFJkr zGqaQ|#YT+62cwtv<^at>C$~m)$R$7y{R4bl83HUUV8B4pgKsqK0zpoFv)rXf$pzZc z^6l)KnfKnj_nUc7e>-$2hM=w5Tjf+YLjM#WehYe?S3MF!4-i2`L?j~XQc;3;K$ok5 zVn7nSpdPG-iXrHSNLUY7BgIHHT8v7lON>VJu4=3plaP#Ph{hg*wC~~9Y{hO8Eyj($ zGDw7!X&zqP zh4mVpC2Gy0?1czVN_LK1%+H;_pv;}0UszlyEaVrLoVV6AtD?|bYPF_Q1w6H?5z1hF zd>*`zU!{xzqcE>#0gzwEFdnfqOQ$1v8jpw>*q@Rf8FNQLt2@XorWrSyOw*wGvfy6B zLPUp>U-5GCoCiXg`h4gPy zGyWRu4Q7BSLV1a4H4#Qv+$<&#aSQ_$d> zWnh{jj6Z(PtS)N?C5jNEs0LAlD234)13-Gf;VE1;Syi>t_)3Ku5Kecm8{i!bK;$)A z(#jeoV{UvuE1c^XhG+u@2_F6OR5m-E&3>8k_u3Td?x(d2f6NQ4J2;Weof*$gj!)zY zxrynCNf2@>n*%xmF}X8#Ff^YnF8m(Tnpvvgs;282rzO)M+?QR|46RzP3fWl^dl6RO z?V4fH8dIdx|8^wh+} z#F?r8vL7F6m*8qJ3I2$J=O|t@*L*YEk@km6qb|lyT}{n+y^F2hl~!*KdIfL%lNNVx z=I9q+q+K}x&ZX2$YUYHmtmUh=lkx_LE_txvSlv4sc)4l2Vwh_RhRaLEwdSVU(2GeO z?lXY;{|w_fZ^0f?ePi1&)>PyVw1r^gQepCw+5>6{Cj@Gonbidm%@RyQEWW!6l# zl38;z=Xh;>95UvrR-*h(to>u0tc-i96_#d%mofs#Jkx28@LamK?sS*jO)59JX>1I& zyID9s-8MP{hVo$`chSGYD0$*(V(dv`?57it3wB~`J8^j@aoLVuekJ_sgc-H!%wSRY z=!i}T7;bd>VBek5;R(wJ5=M)(N6J(rt;)SdrE+vV;*{+Z6f_ zv`z^`-U@W0;f{P;-V7gD1`HA;!L87~*;0qbHcR#-+?Gg~1T|?Z(z#Z^e`CbMU3)NG zr0=0`BYja6N>Eu+dA`FUGs2+h7n5g}n1czLytg5;O z83|51pfLiu!=kq=aRA*iWJ#I*e0Jf&>_->QJKYP_n#rv5jG2u6N(d9Na(dfs^lBNW zTVP4yr3$U8>@8QDrwHnob*lo}0_<(U4~m&id|556)N9QH!i8MORIJ}!=;6;lb{n`| zVLL+o8FR3V{}o6RrMQ8lu1nIho?-jw;&xAdrzda6^Sg&v*-qwmlDWrHBOnhQeu;p*7UcegMi}+sr@f<3dPjdCkNfQ2 z(e2*Fo!-U!bI%eZPZJYQ5)-@eq&+zHcVZ7rHUcO)3Coi)Se}eEklYnx?|^-aDVYtx z+dU(xh!a&5Lxqw=abk)BWpEv;J;jMD%2!Z7dLt1lw@OY(H&w!&!H(&!FRAXq(FxaUq6A}oVyWw*Q=%sV z;=1jZ=-H<4KV(zD6PGhT2ec88B&iXMNWlgYqz6gyyWQgNIqJ1LpIwCQ&gVJ$(0C5B!DOgQp*VYWL^2`|~^fc^maL!f#7}jf3Q+;Jtps0Pg{3e%G5tKZItb Mz>o6Tz&}LiKl9)(Bme*a literal 0 HcmV?d00001 diff --git a/test/types/__pycache__/grouping_interval_override_stub.cpython-311.pyc b/test/types/__pycache__/grouping_interval_override_stub.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..182ceffd3994a81dc8f1eb6308d60525e2d5a71a GIT binary patch literal 3585 zcmb6bOKcm*b#}S@h@?b{Qfeobor$DMVq}p{)C9JZSWzq6QDTdVr8YGkceCP*q_vj2 z^vqH+RU0t^9gJRj^d$$K92?QWm)?5lu}4Y}AYuUn28tehqhS{aa_XD?FrsV~=y3UV z_Psany?MWxA38hZ2*zrCYcT?|e~FJ^DE{O{MndR5BB+RnL}WuMO7IRDaye8CNdl)B zN;zB%!#qqPMx-1qM$55cOhO%k8Z|n~@nT#;GNNG`e*n^cguge62@)$N&E5e-I|mU< z7Q0ACF?kgcx!85B%Zz#NHE9jq3SC8O63CElq=MBXPGeh%2Qo;6zb`RO)0^GF*Zwz2 z(x@)A>vydR(KPAY>N+4NBcqFmq&5&qAE5LQc@AZ}HP{pSN~;-K4S!jstacXLdYN*{ zbjtBfz=-$A>U+4tEZZtsMi!SXLJe$FZu49`KEJGUTmlqc(>PwDCS{sU30`DY8QaSg z7b?`8oSnwRDpkwWv^86|Ol&RU;r~zXa6EpoC4HgRlItTahDVldyTZ@r^A@PoD*Bjj zjm2^{EiGr`@hJdAOnpxEhqn3+56TY6wN>1qWxeM@0%-1S(l4up1 zvS%VZS=s5nT$nn4Nu4@>VR~kIe!4I-=e)6|+si7wrIjlNRl!rMI-v~KAHB$|YDG7f zrcIErsu_h<$`}ymFKDA6@6U0J`)%DeXg@xS`vYzqu;YNg|D?+a*0_w^W+2o<63R04-;+rM&pc1HURZ zIxyug;923kvSxcu0)5`6>tD|sfqj0^UCQkI_-F5ZaJe7+c;{r`&Ot_9|Mm~$OIEo8 z{x)r%=cQ#@)_6XMxEe%U4Z^2-krA@+_4u8*$VO}71})j@vSqC}2|^cjQy2T=&qObJ zBssm1#nzf?!cx_8GeR?XN#t}eLjL5%r!cvXD1t_aiZYRkA*v9013duzk3JJZ#V}x_ zB)p*>wS1i5xi9zLRdF&DMzs46V_gig%>j5}&Z6Ei$r&5&qZ| z`d=CC5{SGNYR{cJ@@;uD^2#zm5QQjP;RD=Ko5p>X{37ADL?T4drLAcDT2VynIX_De zi_n3*UC&(>Cor5_Rc_-2>SeTHz@ckf*o!3gPByo=SOV-|NdWUqTq>LthZd;9X`~ak zKSJ(COBQ7KEgMQY?VfLQ>f|3Lr!P(Z_R@JLF%5l-+2Fa6O@`lIdiC%frS>hr&EhUC63sD!>QsD!?*dzYFK)Qk6eMs|8e9+Q9e z)_X>_duDcfX6{WrN#*uZ=XO%(8p(A1*vW^a{?@oCq=^HC#NGr0XR{BDqOs(aKBKUq^jP88;ehgsw&*A0G)7yUZ&t#;>GFLAnFlvCA)rP;@atg z4`IUR0Nic;8p?QG8Gjm1H)SOZ#SP$j2t~R#u6c+g%$stjAO)aB4-hWN($Kr9&ID>p6yn zq!R+XEyRWBt&$TqERAqy`0%yD!_@FI)`?UrP#=`_3NfzZM#W5o$#v$>v5&oooMXQM zoap@gj{ut?Ns^jMR8pEqfDDq7cN60G6!p~Gp9aG9_U9=&SAX5pRASQcrYwge&~^_2 zF*N-C=1Tqj&$oxZ*d6+!t_(De9IGq6@ch(>W+3fBL<=;I^m(-X@Fy5z1INWXf<`}h zIJot0Q%;4ICPv*u&4J9Q{2T#zDL@?!H;0fkvWIdzDEGLtJ~3O*f4PmW?4m1mbmi&5 z(B^nU8U4pQP%ne94gl24Agsg9_)!Tm=~eJt;9kClz%$_C?|V+6$KgpS^f&qA(BH-6 Ezr>}{cmMzZ literal 0 HcmV?d00001 diff --git a/test/types/__pycache__/interpolation_stub.cpython-311.pyc b/test/types/__pycache__/interpolation_stub.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..e1cf8e49b8198ce202c32a2aa100a5b854cc585a GIT binary patch literal 3042 zcmbVO&2JmW6`%d!hnAE`k+kecmNJ&yM1*b9v7L*Xrd2IDP+&=MB_s%qV6oa6m1`|` znVF?%sup4tJ{Y~UHwS1AI=MBXLoNY&=pW$YN)TXT0RsYx9(1z{>CU;VgWUvT#&tjHlw}<<0 zM`x0z2}_Fl52I3OmJIF;9kY{@(I<#x?jw>tCdm_d85M^O_$Ks)(Xx#ezS*FxbrpM7 zjdIE?%JJ905%cuM2e{5$&oy1Uh-)sPHufm@cuCV%suss4uyE7h`1jPI%2j}I!vjRR-Mie zqwZ1mTx?HK4u%(&X6J6`vvb$y7w1>zmll_U6HUvj>hz9LtJ_qEOl??%GSDBKcR;i5 z+Tlm9T;JUJgNE^>XL&ZA#8>fTL_T?52o0yTv?heNuviS7vy6s}$*HpG*6OYUS>$DI zR%y-P<%o#|>Q!Ab33^-S{}1)$IyFOO{FSz)i3GT-x2fsrRo7h)QiQHqjwSYwKNs+S zECmHfoZHkL2ugSBLS)$76lv@arT6giH}LQfQ3SPzDl(BO3RQ`GA3Xy8_q|03Rbs$R zkl20o7(Y(pfY@X(9Qoj7ud%v05n>EJ*eX2y(BOHs>NF{ByHhb!)WD8V;0Kx#_a?ax*O23-#6oDAo%N}5ym!r{$#Fgr;AZ3Q%sNd$UvpF6~v&ekuh`0oi@^K*d(0}46 zJM}bkZZC80AB88ge&*b6=H`Cprk}j|Qsgy=GwL;%!;D>m#PK54yo}hcSpo2L@g^dWl zDpm&RRl{6w)Vnppg<)um>}06eLtww~HqS&n9tCNC$z{;ve+AM7D()a@;4|r2Zrq<( z+|4cR=a&5RQah9T^EZF`W;cWPGx&kp&g45NHn1f9du-xa_UzN_#l7ss-R!0P?4>8e z9YsDp^a25SCCGytoj5Asr}^o<{PYjxNx{!g@8%cx^NSB=pJkvfF7IV7x6@gF?EK$} zKYF>NpzIY;&uXBa)jCKX(AYZ=-(pc_qcDeMQcMI%U3ZKc)%8HrbvT6^aM{aK78_O8tIT>NT-a_-BNdtfRd&%ooE#c|wqPg$0G)F@u=x8iWU< zk>w(l)b7DCh&Sqhc*+VwGt7|4&g-oGocySp`j6Qa5QzTFuL12Sk|cH1grs(mAUPzZ z@1?}=0OkGY)kfHlUI*x7|7}-CjZ5Qg^;1839gMyA?Ju{tcE>*4AN$Z(Pqj~u`Dy{K zpW2BW;8_}fP1+|WPWK0A;{9floYC?X2fV>jKN28rn zNE&;J&g`Kx+rRQJUGpbrchTHFn)A`z!N@y*G5ygiPd@NR7IsG#_D2@rgFEpN383*N ec_DbO-Xh>RNalC>i|B{gjHLW1f290VJp31{crXe8 literal 0 HcmV?d00001 diff --git a/test/types/__pycache__/queries_list_response_stub.cpython-311.pyc b/test/types/__pycache__/queries_list_response_stub.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..975eef87582e81878e1b7b5701aff31fb48629ea GIT binary patch literal 4300 zcmb7H&2JmW6`x%$KSa?YEh%+k`D0AGwwTyt0vkarq-oU1PSxtesf4tlkuFv{Lu;-5 zpl61bsoJnn_+a$XqYJbL9SYY*bjT$@4*3IeqznNj7BFC-=)pG{c7Y(LzS&(;B+a_@ za`|@l&CHwMysvrtk3DcD~G<^@GeFgvUDi4!XIpdBW zMRd&LWR8s>Nh3_%I5 zFwenamEy%Jb*C@PV&a)Khq}TLmgi!xf=|5Ox+l`K(Ze(_?sYRfsB|DwRA~ z(x_UeA~YT=3Tmzv(&-rwyPm+5SR%k?+6L#?G2EJA+x24lsnqpCLGfe1S~?Gp;pKXj zP7|XlD0?c+Q&9cA^NTa*=Jc6!=VupYmuD9jmi#x?EwQT8Ylc&`sScXDY7xp{{+QG$ zXmHNr;y096J(ttv^TydYLVrkOoM-e(&0>_~@f5y@^SW)hYdn7v=S{EX3fZtN#|j!= zrNU{@imZ~yU!IgQ1VEJY^WMs3YQhM~1PoQm1S~DP`FH%m^pgdNVGZ+A-x z!Gw-zgE6BXNDlaxpiYa%BWm{Cz`m4;o zEJr}@3_|_&v4+!Mg|y@CG7ncQ8?sm*$SC7<>+{ut-0}2ZPS4E+*(wZWpn><~4Fbs( z0?M#2^yDDHYBWeq{eCOMMp_>n*EJllzI0zmTqm*2sxl^IZ;%-Q{Ef6s%VDb1S3Pgd zAMWy&r}9vKp!nmE&b@Wr1@q`$kO>T%n=-k#uUOQ0{xLM}B8s3QKxLIELz|D^XxrP3nK)H7wWlulMo^HN%@cv9IhH__~AvKqNAxR6VL+R&I z?S3N6s4N99J;sBRJv81p=%d$oJS*B>2ZKmo757KwI@;`1fH0tQ^?KY5<+{RuE|Q&Y zBqWIF+LY_RboELg>Q=1RS#GG;)y>39(||!VqHV?dMk_rlb|Kl7a9tq@qFKsTvUjeG zm5oB=mII8_=c60Nd0A{iiB{tRuh7tYZ5y(L@Nj5E92RjwAhBV9z~CzYEi+j^`&oIU z=vNKfB0=2=&YCnmI7+Vx2-;jw$}Q>BpHI)uP5)x?e}1$&r3$#W2@u)i8{>6c6E?D8?_}{E zt(hHbq4?0E@~??Qk8^K7%Dw+E_x^V7gPq(5-(P9P)B_{n`3FY8^AC*NnQJA`IDRxX z`EYFVYx4bgV{CGJY++|?;m*wCY~fM%?8EHYW+vB|IC-Bm_Meu4Gu0P3>@C2zP*B-^ zcm{z}Nct&Vmq}mO{j{#bheZwQXWh@}`W2|iqn@O$!?y#lhXYGH6m&{LtaR_E0&tfRC_x8n*k%4wg-6Ol&q|@JK1YO~J za;d^NE65d(0`X&)c_nn0RJBeFS6C*~WJfak9$_-Xn2Z`u z!KU`RM(_RP$jQx##;K3Dk4*0znQmx@n)@ai+Bn=lG?Sy?-O9mT(%g3-?CYjKz$GCc zl+Oe@{_f`T-^(qv7}r|ASJ2+$Ekk+lxcUqMc_B#y&Dx2 z+h~3V%{S2elS4=TVm7to-+l(6aTq27fzUV%6DL~fHx+Q2m&r59doiGckAhnNHuf(1 QIzFw$zEMAneJ30L0YTcLmH+?% literal 0 HcmV?d00001 diff --git a/test/types/__pycache__/query_definition_stub.cpython-311.pyc b/test/types/__pycache__/query_definition_stub.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..8f5314ff7ee23e446a116142354600b6b3a256ee GIT binary patch literal 3063 zcmb6bOKcm*b@s!LmXt`5vK-l_J(2B1N-VNT>;e&jv})y#3P(&LB|&Hui`CAkT5GvW z&kQ9~wGpH6!RVz&2WSpD6mE>@kV}CcdasWwL4b(`3KWgl|(gJNh)YSQWNe#)uQW1?&;{j;<4&L^tq)4)o_C`)4I(P=L zbY+MPRMKA}qE?2k4SC7-ysoUHo7$IXT>%}+^-Ncq7&N(+dZ2AamC@-1{7YmIQ|p$D6<45c$xWCELJEk z*Qhu1@f;?;U9VD4Si@VXtf0^Ak4de2@_NB(Y-VV}dcw$9}8lNted@yO%oT-jC zJ}U}puS^=otdBikU`iYj`DVKo=eTNlb<1@dMdPWA_57p~YJXU`1XF6UQKK`&stL-T z%Hx?-!{Lw0vlp+LvllPT&Ce~)mFE}2BkPV>G3iaKT63uhky>*IWgwr4VmeEg9nX>5 zUc9vN;Lire!B`dPALY6=#)la_r0gY zGoqVTz(o3*;a`+nXmh`j0>l33O{v?;ErtI^z=hErLORhIo6`PEqgMk_x3u1@xUJq& zH{&mf0fOj6--`8dD?Jtud2*oPmO|o0ca*I}udFPFjkBHn>pPFWMBFHTB>OdVxjGkk ziMCVJb)iKIAGgm9xBFmJEi47*SsK71lUGof;j2!~T(evUx(n1eq-DbPJwa~@sK{*8 z4HwLr&u8YY&iwA`#V|Do-HC~djQNbcCY8zK3P=0g>~z&IC6mf*_c3-PGT5;NowOlV zz@WxPC0>`DVS353SL?NQv2dvxx+6Op33jruTZ9{@`)tZ~(M{DZ(|aJv{|=y?uDFGi zfsd6Zxk7Mqemhs*&6R_6xtYoR?W@0jwVlDc8GKJ~X7Vi*8z?LPKYsEFWO(-7o$R~Y z+4H;E^N-$XY3hlgX9&Ox3GQ8O#nA|UoS)dqPkc`vjRg6L?fm?1e*WI)8UM$;E)!1hWI0f*ThT_9_uXRvKShUo^7i3kf^67)7GO(L z6s4sn6upHc$RQR~F7%ep!la3F+(K?cP zU44cCypSM3h1P3GIr$i!*+FMEtHFg!!P(2(=*lj-5}+%4V<*1O2Zib2lTU-Oh3&D0 r-LZuLjke;W3S`L3;F-j|cm;vyAe!Ige}%q}%_!Qx)DN`($d8`^nKC!( literal 0 HcmV?d00001 diff --git a/test/types/__pycache__/query_entity_input_stub.cpython-311.pyc b/test/types/__pycache__/query_entity_input_stub.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..e6b1a2c6d21b870231e8eb521ee55387c210d769 GIT binary patch literal 3451 zcmb6bOK%&;d3N~}Ntx8ck4CmUrCeEzEz+r*q>uwQYAvTS6v?S%387IeRy(6`t>rE~ zGn7nKMvTG-qn92XAU)_%xG|zbE(Ln%56E#P2#~OV0Rcr1zR|D?1UdDaAt{NpdgyTZ z&CWO9Yrfa)-@3aK2*!%Pxir;<(7)uOHNwr8*S#7-PZ2>yL^Ps1T2X^J-#R$AdNYsgzW5rlGUW{v~OYX*;u5zN7(2$O3geIPWv~S_x7{w%s7gKKk5Te}| z5K9$Lkgj6tb42vwiMuD2Z``+O3cvAMo(*X zbS5bpv$b~p%Bm2}knYVB9ddeg^a&#A$B1M)cKV1ui*h|CoCz(MHOH*s&#IKw#;~x< zlv8F?j_(6T&Lb=D;R^GFXL(KzmpwuqEGQQ|pGeG=Y>q8J;Z>94FQ`kIDJa29%qwG2 zqIjl4-SOL#n0QvTOkH6L+jFtEgfISodM_ptpBzYEtR2X0B0YvjNVnYxX8g$+=pEjuW#Y zD0?ZxlhcEqPiJmSOc^&OZca{5&P~ot&ju$~ZBa7l1G8Llr~#f@u?c0spHV)YaD^>u zlWwId=5Cs&K+Yc$7-t#1U$q$}Sv-dC;;d_yY4$SCN~hPd`1hA3jR5^}KkF^tqn5}j zBq*p*CLl6$OUeRD#eT4qthR6(yvhjNkgtf33g&{@?iWh1l0zuBm|c-UQi`X+EEz2s zN-jLGSEWS_6S`!(wxr8vmDGpQI1pW?!aOwW7)vApF@dPTaMYS3$2``WJCK>U#gCUD z=+Z9bvj1&R)1xg{fxZijE~(QE6)dk@@m$DDUf@=VmQ7wz{u)*BYMu-ZrcReN38W4j z*>rBV1wpVXRk7)GpOS**X|eFI#V8a9HjlITVL~Qc!vRLg^Ol3;p^N!T*>0X|K|ds_ zw`#axvf-&HnGUyP+O|fh`SSW>czKE_f?kJ;I?;+D8YcQ<^bGLdHi-}_MgSWlk;mZ< ze3V3?L&SrA<&GmcJS(b;Yd`J8;wmJA>I#r1)kU7S4jLrrl8smz_IeD!QzQVk#>P>) z7E(4{ZBuV=T3}9S?d)$_J|wm!lrC($T$rv!^K;MjAXVkm0MD6KNASj~S(zNF_l!yg z1L6%OY1pzRjU{uLvLN2-T@Z$l@y?}^xTtt7=*3rhnB?bfsqdm1AYU>*Rm53c|BO#4wjt!~*tl@Lx*Z@JoB)l2vpw`+n9M0!lNZ zuA*6Ee13d#YW&wz6G3tkx)~D_jCqWmk-}uWg43OLHt)0`DHF?RG(L7xX>2Nkd#ol( zpfSWwNqksR2B}5UTCP?aCBvm`Xw&SpVr(X2s~FcVbSj;dN!>y9F|hKl0W?w;*OAtB zTYJ%a&L5oK>Ydr?o$*sMd+FXkfBB~`x6*hgjh}?~(tULl>6+30Juvtpb8$Cwbvtu) zEA#$N=Kb%->mmK@iB|}~8ws9F)uX5%@Ai#s_lr&2I!L!?+LM63v~MVZc`pppz=baBr17(g@4XK-6=jBrEqZ`9Y|_FX4sH19)`s z+Y4Xv!E(lo6ej%ndKlAsr9sYglq+edwV`?H6z-~Q~Q>;7?1Jsj1}?S+5mw?F%X zxv!S}cgMB{uk8$8^TPvsrw9CSKRiF|#d;yNwR4AH@ATQm-ck4i3~BN?IY-gZ=*ES= zzFXH%M#A;WsAsrdI5VWbLIB=K;G^^PpCb+LqTy{c{7tw2;cxwmlUwN44!Y%|Tl)ip zUtRUjU-$3K`vVJG0}DF?3qCqikDk&XP2L8tB<{^I8@w0X`Io*c=)1_c7W%vXQRtuY F<-hUes%!uN literal 0 HcmV?d00001 diff --git a/test/types/__pycache__/query_input_stub.cpython-311.pyc b/test/types/__pycache__/query_input_stub.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..d9478c21682b96b9876b491201de5263b1dc1428 GIT binary patch literal 4608 zcmbVPO>7j&6|V02^^9TsGXyWjxME<}li(SzvWgT$*m(KVtiUE~FBSuX1DD)#$Z?Ntbr&sGt%4p~fEC zv(ejn+I=P6G-WDL`_iiz?IHU%_wUiur=kmptHV2?S-oND4gA|W zWsQ^AHLH|UW>StH$TKR=D3dGSOr{l2(_?Fxyy^0%*>L>u>mZ+s&l+ZZOU|) z61>2iDt4DBo~luM;&K@i$Ea7S?dq=S*w|UXAH1F24>FkxZSC`ow%(BGFg&{Cx;1{X zRC2(iUNgr+ZyZ*1sj*bZWX?L+c3ez}=}O-WOXnO{b-S)xR->4CCSpBVQ2f}Z)92xm zooUqQ1kr0QWzR%<3aa0GY3l5`i`v<9=gX7jnex=+w0~gLbeA-GORv@}szIb~nuIct z&&ZgT?ONTPIj{daiO`oBj7MD1I)YE)5oi7eHQbRCf(c?Z%3O%I7!vb<$tZW~%#gDK zmJl~xE08}+7xcR2;?G*sgeEE2Ho;wH+KbYJ93Ye%%&dtdNEccvT9)tvL{j7}#DHnb zCjo^X$#^{24<)bCTsn#4D zz{pG7SfW*(m%=z`6T74%Z)@5Bf|_H!tKxD*KB9Vo(UrGw^#XJ1HAt!^UAn1T(X@z_ z_ZHe_V7+UzrcInx?Yt0;xK_7a(|Sj3pG(<@x>afCE%XJBMSX&0Vmf5kGKm21aya@b z;zYO>Df{1RVMf5-T%)2oi6tOPAr4%|unz2cb)GUYI43eThwHWpH4snPZHa4A#4>IA zMY|e7;p4?sS!0W)Q#x9L(o~Y`sr0c)ek~-%gv3~<0u(T>QNvs?DdT$Ys;-D< zmncLOigD{r$qB4O^zB89ViMN1*U4hoZ=hH>(7JUwvMac(P6e(<_6A$-Ga_szKvL|lqKfM{++lT4)NoBB*wGus>-Kefno_J= z+`-oXj$(7>|2JX@2wG zK4jdX@5q7U#kt{A0be}<3 zD1RMm?-(b`GTYFZfM`iHekD-^cu>SbU&Mt>BoAT0AFGN87B%^Mf*(?nYk+dX$A=8qFcaElo z=iC;0U=rEWGyhJxjW*i-HcV(AQRJ*Ew-x@en`#duS2z(K8^Zo8M^pn*H)By4tgE-x zjpQq0z#wrF-%RY8twb#D@}#5TwnCC5ZYrCpsI0*J8V&*1NyQ$}trahcjvo5pI#ld= z8o<%Apow=K9Ha~fow8gREDM%dH;@@7K2rP~Up8wR^dTlx1}Hv&!<6B`W_!zpHP<8i zO8M8|k$()2KN&vtc=*)T z@agU0)86M-yusP6!P)J>*?Sjv`iGzNk3Q}neMG*?d;OzZ{gd1MllRVkpTkdbYy^c$MvGw~dPI<6 zAs?f+3_oExI^q6+kPRn`Fj6Z7pr5SQ0N|A6g`AAe&&8d{g^bvb=~F@2PqUAJC(1BC z540Im6r~wYDe)!}qz@_Gce3L56!m-2a|dBBdOk&`z1N-1cv2bKiJ$YL=hK0sUuQQy z-5Mxu50t$4ft`bcUOW%y4?C$o0I@REAv*^T2V=YG4{!*Nhr~6B4!{5PN8g-ms=rLc zo3?^_-*2uczdEcwM?hW*;-P`2t03jQCusOF8r~T4#wR@d$rd`Zjm~)J%+vhAKc4Xh z#{a(J<;z?7@^-%Lq26XPuK+S$CC>%#l%s-BAdP2Bt!O-2fP literal 0 HcmV?d00001 diff --git a/test/types/__pycache__/query_response_stub.cpython-311.pyc b/test/types/__pycache__/query_response_stub.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..ae0f381e701500296c7db233470642f80e0be886 GIT binary patch literal 3813 zcmb7G&2JmW6`x&xilR(PVxrWt>?!5O5-O2yob=!ZY1K+{sVPFESgbfBYpvxj zJu|dS)k2KI2cwtv<^at>m%1^cLoNk!$RFV2N)TXS0Rsk#9(u|ab6T{Jio+DcP3lK``*CQWWkQ(~gaP?3K8Fp%$DxJAB?wyf+=+5gBtubhE0Df#@4iK;@mJn&B7tpnxlEoj?n6d7<8-DLG`uH>1`X6e34w{C$ zX*f_whO6Lg+PorLNP9rFtMTGjaJ!Evf_(>-b)uCcG)nZl=mGG*P)j5!$AFt4vAfYO zew@UiTPOW~Rc-BlvMlPWTc<-TT!#u#y%`W&U*(0$(KZG8<#s4tdT|lReI$Uk$4=+E zHdAhW+O8hnI>3?0)~Vkx3T+Y(+ z<`gas$bxE&#+tc7nV)R$9uWLU#pYc4gulI2Tz9Lq$m$O4EyYcjZ4@`vjx||pOhQrI zv?`Rpj@3QK$;PBK42=>*i*g4m%JSpIE_Y<;3blscTTx$WT<5N{H4+N6jD4YF`ZBo6 zM}XWx|Ba*U*~giQ{mjHyXCJM2nTfs3(m`g)OD?^Tk@e$@iaK*x5?(_2i2+09CkJ01 z&JWLsHke=$={f@ZS-XvPj*bto;An(_w5{FN_%B7`Xc`IWL~HCw`>%|!2BPmq!g$!$ zZ|ghpSHyrpq9nQ->sqaaEOvNutl_ps;v{NmyNR%@EP<`j7V<*b=mOwYVL_fzU}vv$ zfmdk&P1}YF7cLI6hJ(FdRSD|_<17tig~?-=pWz!;&A4gW7VJaNS^$uVit7k^OF$K7 z)d^tPnEGgHZhq?5^D}<$9Bijd%rNFM_Lfv8ljY|^PPWbwey@a+5p28c4P~xn3C<1; zu@2@U>`lp!%9Vb4)vRpPYeA84sTg`D8&ZNT1hz|W>&GFBogi&5DS;gSJCFdVxQVo$ zE83HR5%2Wk-azSKpyZ`Xhna!De)5-3_A>Y&gYQKTGlNYO>nUmf89x04u$?`>pFO{q zedi$i&ZGWjL_c-nIRf%hl6&*bILhJ2gJb)HV_%X-Id5=mZ*cKoaPi*slg#Mj%!U2T zg~N2#8=m-_cqcD3BPjbWh-XtEo=r88-jiZK0{<4rb#@Z&s!YZce$p^xlQs-LWf*V< zt;12v@Y9BI0}gMknS^1$F%#ImD!Z`TuDc{i$WK7kL!>mT*fDtmSL6~r@Q;ApIr<$& z$Gqs+(^$5t>#=1GoC5khg5v#mueMl8cxmc=G4Qxejux~TYAP@(t&Qi{xHLKn#E)F( zYXM4G1|4KPnxPKv4+{Zu~5jHtMMn|wbA{s-(`;K>%v zXMr{&nx-|Q2`$=0k_;d%eWzFco}xi7d>ta}g|DaR1MhWLGaA=M4x_*G!q?N`w?F;G z&i3B$dk4esdC|8Hhlagq4z6zw69a%~ZRD674xI|-I_Wnsq{k!j9!F=!KP8`CZ|Y}b z(dK0h^}pR*(9WIFpCceICGpU3^NNPFQ;$)8ALVxzybIIb=*%9PJwUS_nteKS@^9Q5 z{`sR1y`j?HQ0ZW(${{Xqo B3JU-L literal 0 HcmV?d00001 diff --git a/test/types/__pycache__/query_result_stub.cpython-311.pyc b/test/types/__pycache__/query_result_stub.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..7296450c6289f4bb978ed2a96f733299b0202217 GIT binary patch literal 3960 zcmb7H&2JP(7O(F4^o(Kbu^nQJaWN3^5InQa=7f^44mPX<*v{GkGO%hlU1g?mPxnyO zV|%=ypcMzSm)%1oa>&6ac2RuDWu-mrAHcDVyuxZJ64Gi9+y=o)QBM1+x@SCN*wv=p z^Sb+0y^nhDSMQboyl-C$!L{OTE*(lE^iT28yrSXDtE__1Lqt#s5rwFhQc~aByPnkiBh7HEF~4xB}NlgS0z$MpKVK+jsB_u2PyLOWk(= zQAGD0L#(^BpLCVFzeGeW?Z39)P6p3aWfiSOzC^1E=umEDn$jdilbh*BDrkgXsIiCk zZ1gt2+MlGGCQPN%zVs?Wd&s`c{d@FeRdgPa%zZ?9_Kfrqbspt=byyR+qSr0Gjz6za zRzHnhvqCv#Cgu1xaKv+TWgJ(T<2r_8<#EL!)WR<1E-$1~3uTjI16X)f=lCYIDbrm_ z@Dg(>*ez2$Tc!5I+%zVRQL9kf)m_uEv9p9v{5-oSQmOMT?KkQzy&=7QlMc2W7gJ)o(l^7>ImZ>Qy>H^r}nQ3z43@>i1rnot(O;O-`Mgo|#^lo}HQZ2UbnDtkE^SQnjcCkyjNY!9jFKEajj!Px(Oo@v3g;m3T)#=Vco(s+=kRY&iTN(L zA?D_s8@H(8<|GsBR4H>IL1IYgg_%-S>r;rDt`*3F8&${V6i9fF9#rfJ`_C|)$}YRz55 zLNZ^tZeO>-PT&;)lF=#y6x#xcx?wnsfE0EesdbT28}hS=u_IT;_n2$iT0A>@X>Q`| zf_7zoF<;mXis{lyTg+wLk1@I=BXqQAI2DL9*ycrUlxaoh#b)R=5qb?mp9=$jS3d6s zd1&UmnM}yb|5hu}H8w2*5h!dbY60o(NVpW@4C^+*S9E4WaQ+W4{QPxG2dCDkQ4!!7@o{dXnHCnQ2HA0m5K!>u!zF|DIW}A%d5>n-ZlaC=FWKahClw_-@)Vn*4=mRF4(E zA4;6Fs@VWdEm*Q{aYGcm<`oHFUi}JQ9wLgMOQMoWlv0F7iFzMB0{(a5B!o&a;3i1y zesm8%PU6s8l72>}AFvM_ciyetSU=Rpz%}qsb`i{Bj2DbnLj?<>aSL}|od)s{xj>uO zM*F-bQ#5I1Q|)YW;6!Bo&{;;IAwl6Frr}Cku-&<<+XgKxJXZbg8mC$_*TGkqRu0uZ zE7PYz%3u-NlDwemhE7ZhhSRZN&v50x0ZSdFNCLacJ z5B)oidUDS)C!c0c{w@0CLoai3D>Jv9ne&o!uS87!IHLeQn-_ zx)Fav3>YLzqMNZjvy~2uZJz9ExTBCbiJHo0qEl7?fBi^^xwc&F0p5Dyk~l@d*`o%f z2HK*8q-8<7f@%}w3s6!EfdNg6it9)!f>G9t+}xC zdgK{pUYoc)F@163(~DDndK#J%bEg<{7<*SJ6RGmEZ7zoA96v39qy?>u4M=059XQ+6 z-7*-9uy+JMDrWlKH*{mURt+`>7iys+vI9~uL|=2mt&g77cl1#x1zYOGF z>u)D|+>0K69_wkSYV30boC5kXg5tgRuZ656d^FT_3_Na<)`TWQ4h1HKwR}Iz3!_JY z_>o(DDS$?@S|_^gng)xCfkb$yW?~yLu_yfZgYs5r)~~|tplB83e+XQD*2B^%!^NUZNOrBk2j{3_lDJ%2*_(eJT%z2s37IwGlZWayfNmDf9f4MyM-pV(WHkapAWqI zr+IJigD1V-z=f@W3)=%1Jd|z3`xU^(o8+b7y?)C8&q6%E?fV7#J~p95{;GZy`MY@e E4|nuJGynhq literal 0 HcmV?d00001 diff --git a/test/types/__pycache__/render1_stub.cpython-311.pyc b/test/types/__pycache__/render1_stub.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..1976d1be2574eab887480f6c26e03129e3fae4e8 GIT binary patch literal 2950 zcmb6bOKcm*b@s!LNLnkBQe;<_HIP$9Y$LKpdx_&ZR{aUo%90zg4nntBtae7#TFYH} zW+|Df-3WybMtf+`i*rZ;o!lDH!I$28$g#(zKtRF*0R$91_(sDi5aiT1yGuz_T%aB9 zzL|M%-e=!$_?J_sG6=@Hzq67|A@onN=?yhryedctJwXK35Rr&%OEn2*#g^+zO_2mn zwbgo}mVkAFB<*B9RZG>=wX}o=1T|$3)HAh=gk(e$H1iaseGYFlYFU!5<(%R3h@N^A zv0QDC4AgQTAtKiX?+iNWXx@-E(0%12v>|~E>8{q}CK;OE$v%}qBD}H0Av(03@9mDy zBu7)0)UQ9ZN})sK)Xv}uIRzQLkBIgNk)acmB9WI+DR00xp%0CgZM5*uo0PRKV$Z5m zPMJkHz6TgFPp@CV4d!~T>Dnb+cL}wzN4dw#nM`%n;@AWf-Y_`+HFYR6JWB8ibL-e! zrFgMHo!MJ+n7C%MP94wiEZ4#A3V!SV)B9E?^Zudq<<_Cx80j)Rz3O=lez8(Fdp{IcVJU)a_EdkgRNjy?d z;FBZ?8JP~UvCo#g=JMw0c!Qf@SD15{1D==7!}0^kqRfREuPy?3f;@n|v3>kp4=GAo z+L8N90+cJ8XRk5}>5C0aEYk~hVaws3;h3~seI^IFCZ{_1$!OXhk9Kj~IpoG53*)U{ z&{vE#%7S#S9>CR#X>%^D!Qb4gth#ktVND0BrLy6&waP|VgENiR4AkDbWm5h+)JYmA zYcp|?0&7LoWW|G&<(0^g3%c-DxzP%;X82+HUG6%YqsLraK1L{mb$lGa7W#J*4V~N5 zrgpWd=hwdQd~K?&&3CkUKRy3SxG_jF>NT0e(y-|ZMgkCFFoxk{`-8zXua_-wh@9wS zzmp!I?ZX}j2M$MnraY7$Nc=qydVOzr!iacm3;o|3{St`0qx1*=q5MGJPJW9G5JV;F zPU6IAsZZlEOO7NwkVulKmb8=V=M_1=IUc83FS|vQj`D1?EGpZE#?<5zGgM_b;Gtu*lk58GF```_dO`Ep|F81>9e|gRDp%J!(R1BvcgZfTq{-R$Zs0ur~x=6(@t- zvSF?@8&NHAAre{}8x0xbtn1a*=GbdevPb+OaPU6>h|&^wku-2i`m!+YpIc}b7CVJS zKexEA75@0~?>}y9xTE36>b_R&B4uDv`q$XGKmT@b;+@@zciI#0b|&8SKUng|s_n6A zXRP{oe!n=eSDfB0PCqCA81{?P?czeGxbXPem)iKAHnXeE{FV4WUhr>K{Y$^_wVAed zyQAIq)3@0fuxFtpv+uwh7C|W$q;=gf>QvW*jIP5q*@W9b4|2MG5AK(klG1g!2?3oA zBUq>4HxfDhyCCWr3MGeLV&YFi2)+*s{!0K`hrfMw(pM)B5<^{CPTZ8bNWhm0O6DKk ziBW0Tbmf7>hd@1ohi8sZ5jj#Ube4u$NvJ*#AW-h|l_($5jTSK+&oY@R2&wp*Wuk7F zD1u-rYGdVIpDM@AsT}@i;AIwFhoQe17HsDPm=L@Qy>A8y+cgLeMxukzM?=Oq=YnLj z0SQgnuwV+EBOG(&uy4|rBClU&KLUbiw)|%RyNV=9T{R`CT_ivONx7}8_#L34-~a3* z?Dszh=(7L1r>iEV@qP8O-~Swp;7{&skG4ljosrVk!v5%(uMWfW^?s@VnJbMSf&J05 z5$!nq8ip`@GU{Y2BZ> z?2o_KMpruMijS@wW(1X1d+P6v$0iP3`aJ&4 zo8R~RzTW(;w^u>1*4)kIzef@JH-Bg^IoP~T2?#ww1eFjGh-e5U0q&9^R-}?7aGY$& zl~5@J`w$5m;Yy?wsYFXr0rhZd#OSFgB}G6Yq9Lk01#RELzqLv+5-r8efm4X~jv*E= z^^u-Z{1zf&sc*5*jJED|p^olJw@_UG9m3s2Tbd{|x*2;af=2iU8k01+(cgYLcqefh z(S>gNzE=`WlHSd}LwZsox`s&N5hBS$lr#|wDATXOJE5Ce!_XS|(;8)sN$ltqYE!0D z8-D>9eji^ukE_gbtg>ZfaK$3jzz($?JF6(g72U>VK;gP(<2%%(Omir~%gm}^XNBT? zm73Ex<}k6!wF)&I&Cx9rTg&*&|7Z7%qFn1}Uutyp21twH@fF9Z+LO7Q1tztsJ`s3h zv8+SOD;Y(Zv9M`5m=fLbeJdN9ZR3h&)-=OtWR;gZ)(aWIlYU*e3b$CXQKi#Ft2&gu zyk3dW<3?ih3wPvX%Q4{kGMM?doEVA&_z4%5v$Eu>}A{4&QbVy>i1&0Hb> zv!9-WL_y9hf_(vCsA>*4Z~Cf!e`9>{+{DjspS_it3U>3I-ObK!26n}OKHI^*C! zkS;B2u{$~blmmX1zv!u%K)}x6Ws6lbrxiJ{*Lw6#wW87XFG!J3xlz0@d;Ze=D8%sr zzO6h^c)qQryR_`6E0(qD#Ry&2O`ZE>zvSKiOz;MvPOQ3WLLyYle<97V%e-pZOA0ox ze*v2(h$0v@s3a1hBvF}&kI+-Ve;Y6%R0;t$LPC$^L-;TWLxV=WRCfs#oZ8a*2i-Va z126rC#5R!aY`HU=zz&~*+^N@-0G=QRV0&#GbL=qV1sp36RQ$ zZF8^i4~^W4RiQanGhw9U>K0qg)%`&=QEg1XfLhbb)P5i8FwG{b6Tu_{(HtLKIbNtB ze8?dly==AN#mfGRs&{S6Tp#HUHcvqI0R1Q6tUV0iA^L9^B|qFvWVaL9f6hF2+(dRO zQQS!s-DvSOkFFPH)TuF(!7+upaufoDpQ8bI_wF3o38!6Bz(fws{yz%$(MIRo0EW)$ zE~f{=eZih`A{{bvxD&zJ;P&5H-5Q9vDRtMx1M$AN5q?Ju5JV>OX6O*N&}H#}CvP>} z7f6`My097PmgSAGJ{DA8cRCJL;d*wSpH48-Yqo=zXsbRA0}dp|!mYI7*3|b~g~h-+ zivuV!e&Biu8wQTLrWrc%rxDa-q->cEz2`tPCjHr8P^Ukep1VH%%j;LX*j%M*G3N?n z7Gpo+%6PWCBi&vGM~D~W6{Xtc6PTM?}LD2p)fL5*ICK7sX2rp8@?#RMcD!-G;yYc*9 zBK4;)zxr}3fp-%4vAmZ^H&Li3FZ}1k$cyCZ-Q@Z0$zIMnwF0eHi~ z)9@e54}B`<+^ zQUUR#(nMm9!Un;=g^b9K!`<(cOvH<-s;O0|s(Om5!uLlFj#<@S}8dVs-7WVvmZRhzrK8sgN^+efQOymo}6*z%zh}@6vfc*1aJ!AD+z`B zA1wx`C_FU9-Vk`)1|5br!Y8#%a%-6Zmf=QE0q~@|_HwIEqSXe`Oh+#>nG+(xmkZ-< z#dwc++1Aj@wx?P)7-d=iGt7n)l7C@zhN>SihPn6%2On@961`XULWZRg+Z#S4;K!31 zK~Z|)S``YPvH>pahv_We@uc{n`yu*qEB>Fbi-6;!+MWT}lmtO&$`L_sA`VhWh(C<+ z-#$va-Paz%Zuhm1K5^f7HRZ4{yeH4Q-PiumnXiBIP2bkg<(;9+t~|JR?1U>1!1euJ zBn3q+48H|?$A((8gYbJ;+~Z+>52KT3H{`!6O)(ylo5xZAht1){N%0i|@P-2y4L30o zMt0HIHX7TgxR||H*&Q_NqS^hyp|8{K@TB|cZ{5Md)?i_0u;8Mj&G1nH3glhz disRnAhhV25ntw^3L*Ip_1?eB+$I`#}=6~d*aUTEx literal 0 HcmV?d00001 diff --git a/test/types/aggregation_by_resource_and_metric_stub.py b/test/types/aggregation_by_resource_and_metric_stub.py new file mode 100644 index 0000000..ca4d1b5 --- /dev/null +++ b/test/types/aggregation_by_resource_and_metric_stub.py @@ -0,0 +1,77 @@ +# coding: utf-8 +"""Waylay Query: timeseries queries (v1 protocol) model tests. + +This code was generated from the OpenAPI documentation of 'Waylay Query: timeseries queries (v1 protocol)' + +Generated by OpenAPI Generator (https://openapi-generator.tech) + +Do not edit the class manually. +""" + +import json + +from jsf import JSF +from pydantic import TypeAdapter + +from ..openapi import MODEL_DEFINITIONS, with_example_provider + +try: + from waylay.services.queries.models.aggregation_by_resource_and_metric import ( + AggregationByResourceAndMetric, + ) + + AggregationByResourceAndMetricAdapter = TypeAdapter(AggregationByResourceAndMetric) + MODELS_AVAILABLE = True +except ImportError as exc: + MODELS_AVAILABLE = False + +aggregation_by_resource_and_metric_model_schema = json.loads( + r"""{ + "anyOf" : [ { + "title" : "Aggregation by Resource or Metric", + "type" : "object", + "additionalProperties" : { + "$ref" : "#/components/schemas/Aggregation_by_Resource_or_Metric" + }, + "description" : "Aggregation methods specified per resource or metric.", + "nullable" : true + } ] +} +""", + object_hook=with_example_provider, +) +aggregation_by_resource_and_metric_model_schema.update({ + "definitions": MODEL_DEFINITIONS +}) + +aggregation_by_resource_and_metric_faker = JSF( + aggregation_by_resource_and_metric_model_schema, allow_none_optionals=1 +) + + +class AggregationByResourceAndMetricStub: + """AggregationByResourceAndMetric unit test stubs.""" + + @classmethod + def create_json(cls): + """Create a dict stub instance.""" + return aggregation_by_resource_and_metric_faker.generate( + use_defaults=True, use_examples=True + ) + + @classmethod + def create_instance(cls) -> "AggregationByResourceAndMetric": + """Create AggregationByResourceAndMetric stub instance.""" + if not MODELS_AVAILABLE: + raise ImportError("Models must be installed to create class stubs") + json = cls.create_json() + if not json: + # use backup example based on the pydantic model schema + backup_faker = JSF( + AggregationByResourceAndMetricAdapter.json_schema(), + allow_none_optionals=1, + ) + json = backup_faker.generate(use_defaults=True, use_examples=True) + return AggregationByResourceAndMetricAdapter.validate_python( + json, context={"skip_validation": True} + ) diff --git a/test/types/aggregation_by_resource_or_metric_stub.py b/test/types/aggregation_by_resource_or_metric_stub.py new file mode 100644 index 0000000..ccd6b14 --- /dev/null +++ b/test/types/aggregation_by_resource_or_metric_stub.py @@ -0,0 +1,79 @@ +# coding: utf-8 +"""Waylay Query: timeseries queries (v1 protocol) model tests. + +This code was generated from the OpenAPI documentation of 'Waylay Query: timeseries queries (v1 protocol)' + +Generated by OpenAPI Generator (https://openapi-generator.tech) + +Do not edit the class manually. +""" + +import json + +from jsf import JSF +from pydantic import TypeAdapter + +from ..openapi import MODEL_DEFINITIONS, with_example_provider + +try: + from waylay.services.queries.models.aggregation_by_resource_or_metric import ( + AggregationByResourceOrMetric, + ) + + AggregationByResourceOrMetricAdapter = TypeAdapter(AggregationByResourceOrMetric) + MODELS_AVAILABLE = True +except ImportError as exc: + MODELS_AVAILABLE = False + +aggregation_by_resource_or_metric_model_schema = json.loads( + r"""{ + "anyOf" : [ { + "$ref" : "#/components/schemas/AggregationMethod" + }, { + "title" : "Aggregations", + "type" : "array", + "description" : "Aggregation methods, leading to sepearate series.", + "nullable" : true, + "items" : { + "$ref" : "#/components/schemas/Aggregations_inner" + } + } ] +} +""", + object_hook=with_example_provider, +) +aggregation_by_resource_or_metric_model_schema.update({ + "definitions": MODEL_DEFINITIONS +}) + +aggregation_by_resource_or_metric_faker = JSF( + aggregation_by_resource_or_metric_model_schema, allow_none_optionals=1 +) + + +class AggregationByResourceOrMetricStub: + """AggregationByResourceOrMetric unit test stubs.""" + + @classmethod + def create_json(cls): + """Create a dict stub instance.""" + return aggregation_by_resource_or_metric_faker.generate( + use_defaults=True, use_examples=True + ) + + @classmethod + def create_instance(cls) -> "AggregationByResourceOrMetric": + """Create AggregationByResourceOrMetric stub instance.""" + if not MODELS_AVAILABLE: + raise ImportError("Models must be installed to create class stubs") + json = cls.create_json() + if not json: + # use backup example based on the pydantic model schema + backup_faker = JSF( + AggregationByResourceOrMetricAdapter.json_schema(), + allow_none_optionals=1, + ) + json = backup_faker.generate(use_defaults=True, use_examples=True) + return AggregationByResourceOrMetricAdapter.validate_python( + json, context={"skip_validation": True} + ) diff --git a/test/types/aggregation_method_one_of1_stub.py b/test/types/aggregation_method_one_of1_stub.py new file mode 100644 index 0000000..72a5f81 --- /dev/null +++ b/test/types/aggregation_method_one_of1_stub.py @@ -0,0 +1,69 @@ +# coding: utf-8 +"""Waylay Query: timeseries queries (v1 protocol) model tests. + +This code was generated from the OpenAPI documentation of 'Waylay Query: timeseries queries (v1 protocol)' + +Generated by OpenAPI Generator (https://openapi-generator.tech) + +Do not edit the class manually. +""" + +import json + +from jsf import JSF +from pydantic import TypeAdapter + +from ..openapi import MODEL_DEFINITIONS, with_example_provider + +try: + from waylay.services.queries.models.aggregation_method_one_of1 import ( + AggregationMethodOneOf1, + ) + + AggregationMethodOneOf1Adapter = TypeAdapter(AggregationMethodOneOf1) + MODELS_AVAILABLE = True +except ImportError as exc: + MODELS_AVAILABLE = False + +aggregation_method_one_of_1_model_schema = json.loads( + r"""{ + "title" : "AggregationMethod_oneOf_1", + "type" : "string", + "description" : "Use the last value (in time) to represent all data for the sample interval.", + "enum" : [ "last" ] +} +""", + object_hook=with_example_provider, +) +aggregation_method_one_of_1_model_schema.update({"definitions": MODEL_DEFINITIONS}) + +aggregation_method_one_of_1_faker = JSF( + aggregation_method_one_of_1_model_schema, allow_none_optionals=1 +) + + +class AggregationMethodOneOf1Stub: + """AggregationMethodOneOf1 unit test stubs.""" + + @classmethod + def create_json(cls): + """Create a dict stub instance.""" + return aggregation_method_one_of_1_faker.generate( + use_defaults=True, use_examples=True + ) + + @classmethod + def create_instance(cls) -> "AggregationMethodOneOf1": + """Create AggregationMethodOneOf1 stub instance.""" + if not MODELS_AVAILABLE: + raise ImportError("Models must be installed to create class stubs") + json = cls.create_json() + if not json: + # use backup example based on the pydantic model schema + backup_faker = JSF( + AggregationMethodOneOf1Adapter.json_schema(), allow_none_optionals=1 + ) + json = backup_faker.generate(use_defaults=True, use_examples=True) + return AggregationMethodOneOf1Adapter.validate_python( + json, context={"skip_validation": True} + ) diff --git a/test/types/aggregation_method_one_of2_stub.py b/test/types/aggregation_method_one_of2_stub.py new file mode 100644 index 0000000..1abb11a --- /dev/null +++ b/test/types/aggregation_method_one_of2_stub.py @@ -0,0 +1,69 @@ +# coding: utf-8 +"""Waylay Query: timeseries queries (v1 protocol) model tests. + +This code was generated from the OpenAPI documentation of 'Waylay Query: timeseries queries (v1 protocol)' + +Generated by OpenAPI Generator (https://openapi-generator.tech) + +Do not edit the class manually. +""" + +import json + +from jsf import JSF +from pydantic import TypeAdapter + +from ..openapi import MODEL_DEFINITIONS, with_example_provider + +try: + from waylay.services.queries.models.aggregation_method_one_of2 import ( + AggregationMethodOneOf2, + ) + + AggregationMethodOneOf2Adapter = TypeAdapter(AggregationMethodOneOf2) + MODELS_AVAILABLE = True +except ImportError as exc: + MODELS_AVAILABLE = False + +aggregation_method_one_of_2_model_schema = json.loads( + r"""{ + "title" : "AggregationMethod_oneOf_2", + "type" : "string", + "description" : "Aggregate data by the mean value: The sum of values divided by number of observations.", + "enum" : [ "mean" ] +} +""", + object_hook=with_example_provider, +) +aggregation_method_one_of_2_model_schema.update({"definitions": MODEL_DEFINITIONS}) + +aggregation_method_one_of_2_faker = JSF( + aggregation_method_one_of_2_model_schema, allow_none_optionals=1 +) + + +class AggregationMethodOneOf2Stub: + """AggregationMethodOneOf2 unit test stubs.""" + + @classmethod + def create_json(cls): + """Create a dict stub instance.""" + return aggregation_method_one_of_2_faker.generate( + use_defaults=True, use_examples=True + ) + + @classmethod + def create_instance(cls) -> "AggregationMethodOneOf2": + """Create AggregationMethodOneOf2 stub instance.""" + if not MODELS_AVAILABLE: + raise ImportError("Models must be installed to create class stubs") + json = cls.create_json() + if not json: + # use backup example based on the pydantic model schema + backup_faker = JSF( + AggregationMethodOneOf2Adapter.json_schema(), allow_none_optionals=1 + ) + json = backup_faker.generate(use_defaults=True, use_examples=True) + return AggregationMethodOneOf2Adapter.validate_python( + json, context={"skip_validation": True} + ) diff --git a/test/types/aggregation_method_one_of3_stub.py b/test/types/aggregation_method_one_of3_stub.py new file mode 100644 index 0000000..880b45e --- /dev/null +++ b/test/types/aggregation_method_one_of3_stub.py @@ -0,0 +1,69 @@ +# coding: utf-8 +"""Waylay Query: timeseries queries (v1 protocol) model tests. + +This code was generated from the OpenAPI documentation of 'Waylay Query: timeseries queries (v1 protocol)' + +Generated by OpenAPI Generator (https://openapi-generator.tech) + +Do not edit the class manually. +""" + +import json + +from jsf import JSF +from pydantic import TypeAdapter + +from ..openapi import MODEL_DEFINITIONS, with_example_provider + +try: + from waylay.services.queries.models.aggregation_method_one_of3 import ( + AggregationMethodOneOf3, + ) + + AggregationMethodOneOf3Adapter = TypeAdapter(AggregationMethodOneOf3) + MODELS_AVAILABLE = True +except ImportError as exc: + MODELS_AVAILABLE = False + +aggregation_method_one_of_3_model_schema = json.loads( + r"""{ + "title" : "AggregationMethod_oneOf_3", + "type" : "string", + "description" : "Aggregate data by the median value: The n/2-th value when ordered, the average of the (n-1)/2-th and (n+1)/2-th value when n is uneven.", + "enum" : [ "median" ] +} +""", + object_hook=with_example_provider, +) +aggregation_method_one_of_3_model_schema.update({"definitions": MODEL_DEFINITIONS}) + +aggregation_method_one_of_3_faker = JSF( + aggregation_method_one_of_3_model_schema, allow_none_optionals=1 +) + + +class AggregationMethodOneOf3Stub: + """AggregationMethodOneOf3 unit test stubs.""" + + @classmethod + def create_json(cls): + """Create a dict stub instance.""" + return aggregation_method_one_of_3_faker.generate( + use_defaults=True, use_examples=True + ) + + @classmethod + def create_instance(cls) -> "AggregationMethodOneOf3": + """Create AggregationMethodOneOf3 stub instance.""" + if not MODELS_AVAILABLE: + raise ImportError("Models must be installed to create class stubs") + json = cls.create_json() + if not json: + # use backup example based on the pydantic model schema + backup_faker = JSF( + AggregationMethodOneOf3Adapter.json_schema(), allow_none_optionals=1 + ) + json = backup_faker.generate(use_defaults=True, use_examples=True) + return AggregationMethodOneOf3Adapter.validate_python( + json, context={"skip_validation": True} + ) diff --git a/test/types/aggregation_method_one_of4_stub.py b/test/types/aggregation_method_one_of4_stub.py new file mode 100644 index 0000000..40187cb --- /dev/null +++ b/test/types/aggregation_method_one_of4_stub.py @@ -0,0 +1,69 @@ +# coding: utf-8 +"""Waylay Query: timeseries queries (v1 protocol) model tests. + +This code was generated from the OpenAPI documentation of 'Waylay Query: timeseries queries (v1 protocol)' + +Generated by OpenAPI Generator (https://openapi-generator.tech) + +Do not edit the class manually. +""" + +import json + +from jsf import JSF +from pydantic import TypeAdapter + +from ..openapi import MODEL_DEFINITIONS, with_example_provider + +try: + from waylay.services.queries.models.aggregation_method_one_of4 import ( + AggregationMethodOneOf4, + ) + + AggregationMethodOneOf4Adapter = TypeAdapter(AggregationMethodOneOf4) + MODELS_AVAILABLE = True +except ImportError as exc: + MODELS_AVAILABLE = False + +aggregation_method_one_of_4_model_schema = json.loads( + r"""{ + "title" : "AggregationMethod_oneOf_4", + "type" : "string", + "description" : "The sum of all values summarizes the data for the sample interval.", + "enum" : [ "sum" ] +} +""", + object_hook=with_example_provider, +) +aggregation_method_one_of_4_model_schema.update({"definitions": MODEL_DEFINITIONS}) + +aggregation_method_one_of_4_faker = JSF( + aggregation_method_one_of_4_model_schema, allow_none_optionals=1 +) + + +class AggregationMethodOneOf4Stub: + """AggregationMethodOneOf4 unit test stubs.""" + + @classmethod + def create_json(cls): + """Create a dict stub instance.""" + return aggregation_method_one_of_4_faker.generate( + use_defaults=True, use_examples=True + ) + + @classmethod + def create_instance(cls) -> "AggregationMethodOneOf4": + """Create AggregationMethodOneOf4 stub instance.""" + if not MODELS_AVAILABLE: + raise ImportError("Models must be installed to create class stubs") + json = cls.create_json() + if not json: + # use backup example based on the pydantic model schema + backup_faker = JSF( + AggregationMethodOneOf4Adapter.json_schema(), allow_none_optionals=1 + ) + json = backup_faker.generate(use_defaults=True, use_examples=True) + return AggregationMethodOneOf4Adapter.validate_python( + json, context={"skip_validation": True} + ) diff --git a/test/types/aggregation_method_one_of5_stub.py b/test/types/aggregation_method_one_of5_stub.py new file mode 100644 index 0000000..309932b --- /dev/null +++ b/test/types/aggregation_method_one_of5_stub.py @@ -0,0 +1,69 @@ +# coding: utf-8 +"""Waylay Query: timeseries queries (v1 protocol) model tests. + +This code was generated from the OpenAPI documentation of 'Waylay Query: timeseries queries (v1 protocol)' + +Generated by OpenAPI Generator (https://openapi-generator.tech) + +Do not edit the class manually. +""" + +import json + +from jsf import JSF +from pydantic import TypeAdapter + +from ..openapi import MODEL_DEFINITIONS, with_example_provider + +try: + from waylay.services.queries.models.aggregation_method_one_of5 import ( + AggregationMethodOneOf5, + ) + + AggregationMethodOneOf5Adapter = TypeAdapter(AggregationMethodOneOf5) + MODELS_AVAILABLE = True +except ImportError as exc: + MODELS_AVAILABLE = False + +aggregation_method_one_of_5_model_schema = json.loads( + r"""{ + "title" : "AggregationMethod_oneOf_5", + "type" : "string", + "description" : "Use the count of observations in the sample interval.", + "enum" : [ "count" ] +} +""", + object_hook=with_example_provider, +) +aggregation_method_one_of_5_model_schema.update({"definitions": MODEL_DEFINITIONS}) + +aggregation_method_one_of_5_faker = JSF( + aggregation_method_one_of_5_model_schema, allow_none_optionals=1 +) + + +class AggregationMethodOneOf5Stub: + """AggregationMethodOneOf5 unit test stubs.""" + + @classmethod + def create_json(cls): + """Create a dict stub instance.""" + return aggregation_method_one_of_5_faker.generate( + use_defaults=True, use_examples=True + ) + + @classmethod + def create_instance(cls) -> "AggregationMethodOneOf5": + """Create AggregationMethodOneOf5 stub instance.""" + if not MODELS_AVAILABLE: + raise ImportError("Models must be installed to create class stubs") + json = cls.create_json() + if not json: + # use backup example based on the pydantic model schema + backup_faker = JSF( + AggregationMethodOneOf5Adapter.json_schema(), allow_none_optionals=1 + ) + json = backup_faker.generate(use_defaults=True, use_examples=True) + return AggregationMethodOneOf5Adapter.validate_python( + json, context={"skip_validation": True} + ) diff --git a/test/types/aggregation_method_one_of6_stub.py b/test/types/aggregation_method_one_of6_stub.py new file mode 100644 index 0000000..0cb80fe --- /dev/null +++ b/test/types/aggregation_method_one_of6_stub.py @@ -0,0 +1,69 @@ +# coding: utf-8 +"""Waylay Query: timeseries queries (v1 protocol) model tests. + +This code was generated from the OpenAPI documentation of 'Waylay Query: timeseries queries (v1 protocol)' + +Generated by OpenAPI Generator (https://openapi-generator.tech) + +Do not edit the class manually. +""" + +import json + +from jsf import JSF +from pydantic import TypeAdapter + +from ..openapi import MODEL_DEFINITIONS, with_example_provider + +try: + from waylay.services.queries.models.aggregation_method_one_of6 import ( + AggregationMethodOneOf6, + ) + + AggregationMethodOneOf6Adapter = TypeAdapter(AggregationMethodOneOf6) + MODELS_AVAILABLE = True +except ImportError as exc: + MODELS_AVAILABLE = False + +aggregation_method_one_of_6_model_schema = json.loads( + r"""{ + "title" : "AggregationMethod_oneOf_6", + "type" : "string", + "description" : "Use the standard deviation of all observations in the sample interval.", + "enum" : [ "std" ] +} +""", + object_hook=with_example_provider, +) +aggregation_method_one_of_6_model_schema.update({"definitions": MODEL_DEFINITIONS}) + +aggregation_method_one_of_6_faker = JSF( + aggregation_method_one_of_6_model_schema, allow_none_optionals=1 +) + + +class AggregationMethodOneOf6Stub: + """AggregationMethodOneOf6 unit test stubs.""" + + @classmethod + def create_json(cls): + """Create a dict stub instance.""" + return aggregation_method_one_of_6_faker.generate( + use_defaults=True, use_examples=True + ) + + @classmethod + def create_instance(cls) -> "AggregationMethodOneOf6": + """Create AggregationMethodOneOf6 stub instance.""" + if not MODELS_AVAILABLE: + raise ImportError("Models must be installed to create class stubs") + json = cls.create_json() + if not json: + # use backup example based on the pydantic model schema + backup_faker = JSF( + AggregationMethodOneOf6Adapter.json_schema(), allow_none_optionals=1 + ) + json = backup_faker.generate(use_defaults=True, use_examples=True) + return AggregationMethodOneOf6Adapter.validate_python( + json, context={"skip_validation": True} + ) diff --git a/test/types/aggregation_method_one_of7_stub.py b/test/types/aggregation_method_one_of7_stub.py new file mode 100644 index 0000000..4de5489 --- /dev/null +++ b/test/types/aggregation_method_one_of7_stub.py @@ -0,0 +1,69 @@ +# coding: utf-8 +"""Waylay Query: timeseries queries (v1 protocol) model tests. + +This code was generated from the OpenAPI documentation of 'Waylay Query: timeseries queries (v1 protocol)' + +Generated by OpenAPI Generator (https://openapi-generator.tech) + +Do not edit the class manually. +""" + +import json + +from jsf import JSF +from pydantic import TypeAdapter + +from ..openapi import MODEL_DEFINITIONS, with_example_provider + +try: + from waylay.services.queries.models.aggregation_method_one_of7 import ( + AggregationMethodOneOf7, + ) + + AggregationMethodOneOf7Adapter = TypeAdapter(AggregationMethodOneOf7) + MODELS_AVAILABLE = True +except ImportError as exc: + MODELS_AVAILABLE = False + +aggregation_method_one_of_7_model_schema = json.loads( + r"""{ + "title" : "AggregationMethod_oneOf_7", + "type" : "string", + "description" : "Use the maximum of all values in the sample interval.", + "enum" : [ "max" ] +} +""", + object_hook=with_example_provider, +) +aggregation_method_one_of_7_model_schema.update({"definitions": MODEL_DEFINITIONS}) + +aggregation_method_one_of_7_faker = JSF( + aggregation_method_one_of_7_model_schema, allow_none_optionals=1 +) + + +class AggregationMethodOneOf7Stub: + """AggregationMethodOneOf7 unit test stubs.""" + + @classmethod + def create_json(cls): + """Create a dict stub instance.""" + return aggregation_method_one_of_7_faker.generate( + use_defaults=True, use_examples=True + ) + + @classmethod + def create_instance(cls) -> "AggregationMethodOneOf7": + """Create AggregationMethodOneOf7 stub instance.""" + if not MODELS_AVAILABLE: + raise ImportError("Models must be installed to create class stubs") + json = cls.create_json() + if not json: + # use backup example based on the pydantic model schema + backup_faker = JSF( + AggregationMethodOneOf7Adapter.json_schema(), allow_none_optionals=1 + ) + json = backup_faker.generate(use_defaults=True, use_examples=True) + return AggregationMethodOneOf7Adapter.validate_python( + json, context={"skip_validation": True} + ) diff --git a/test/types/aggregation_method_one_of8_stub.py b/test/types/aggregation_method_one_of8_stub.py new file mode 100644 index 0000000..ba8f966 --- /dev/null +++ b/test/types/aggregation_method_one_of8_stub.py @@ -0,0 +1,69 @@ +# coding: utf-8 +"""Waylay Query: timeseries queries (v1 protocol) model tests. + +This code was generated from the OpenAPI documentation of 'Waylay Query: timeseries queries (v1 protocol)' + +Generated by OpenAPI Generator (https://openapi-generator.tech) + +Do not edit the class manually. +""" + +import json + +from jsf import JSF +from pydantic import TypeAdapter + +from ..openapi import MODEL_DEFINITIONS, with_example_provider + +try: + from waylay.services.queries.models.aggregation_method_one_of8 import ( + AggregationMethodOneOf8, + ) + + AggregationMethodOneOf8Adapter = TypeAdapter(AggregationMethodOneOf8) + MODELS_AVAILABLE = True +except ImportError as exc: + MODELS_AVAILABLE = False + +aggregation_method_one_of_8_model_schema = json.loads( + r"""{ + "title" : "AggregationMethod_oneOf_8", + "type" : "string", + "description" : "Use the minimum of all values in the sample interval.", + "enum" : [ "min" ] +} +""", + object_hook=with_example_provider, +) +aggregation_method_one_of_8_model_schema.update({"definitions": MODEL_DEFINITIONS}) + +aggregation_method_one_of_8_faker = JSF( + aggregation_method_one_of_8_model_schema, allow_none_optionals=1 +) + + +class AggregationMethodOneOf8Stub: + """AggregationMethodOneOf8 unit test stubs.""" + + @classmethod + def create_json(cls): + """Create a dict stub instance.""" + return aggregation_method_one_of_8_faker.generate( + use_defaults=True, use_examples=True + ) + + @classmethod + def create_instance(cls) -> "AggregationMethodOneOf8": + """Create AggregationMethodOneOf8 stub instance.""" + if not MODELS_AVAILABLE: + raise ImportError("Models must be installed to create class stubs") + json = cls.create_json() + if not json: + # use backup example based on the pydantic model schema + backup_faker = JSF( + AggregationMethodOneOf8Adapter.json_schema(), allow_none_optionals=1 + ) + json = backup_faker.generate(use_defaults=True, use_examples=True) + return AggregationMethodOneOf8Adapter.validate_python( + json, context={"skip_validation": True} + ) diff --git a/test/types/aggregation_method_one_of_stub.py b/test/types/aggregation_method_one_of_stub.py new file mode 100644 index 0000000..60561e6 --- /dev/null +++ b/test/types/aggregation_method_one_of_stub.py @@ -0,0 +1,69 @@ +# coding: utf-8 +"""Waylay Query: timeseries queries (v1 protocol) model tests. + +This code was generated from the OpenAPI documentation of 'Waylay Query: timeseries queries (v1 protocol)' + +Generated by OpenAPI Generator (https://openapi-generator.tech) + +Do not edit the class manually. +""" + +import json + +from jsf import JSF +from pydantic import TypeAdapter + +from ..openapi import MODEL_DEFINITIONS, with_example_provider + +try: + from waylay.services.queries.models.aggregation_method_one_of import ( + AggregationMethodOneOf, + ) + + AggregationMethodOneOfAdapter = TypeAdapter(AggregationMethodOneOf) + MODELS_AVAILABLE = True +except ImportError as exc: + MODELS_AVAILABLE = False + +aggregation_method_one_of_model_schema = json.loads( + r"""{ + "title" : "AggregationMethod_oneOf", + "type" : "string", + "description" : "Use the first value (in time) to represent all data for the sample interval.", + "enum" : [ "first" ] +} +""", + object_hook=with_example_provider, +) +aggregation_method_one_of_model_schema.update({"definitions": MODEL_DEFINITIONS}) + +aggregation_method_one_of_faker = JSF( + aggregation_method_one_of_model_schema, allow_none_optionals=1 +) + + +class AggregationMethodOneOfStub: + """AggregationMethodOneOf unit test stubs.""" + + @classmethod + def create_json(cls): + """Create a dict stub instance.""" + return aggregation_method_one_of_faker.generate( + use_defaults=True, use_examples=True + ) + + @classmethod + def create_instance(cls) -> "AggregationMethodOneOf": + """Create AggregationMethodOneOf stub instance.""" + if not MODELS_AVAILABLE: + raise ImportError("Models must be installed to create class stubs") + json = cls.create_json() + if not json: + # use backup example based on the pydantic model schema + backup_faker = JSF( + AggregationMethodOneOfAdapter.json_schema(), allow_none_optionals=1 + ) + json = backup_faker.generate(use_defaults=True, use_examples=True) + return AggregationMethodOneOfAdapter.validate_python( + json, context={"skip_validation": True} + ) diff --git a/test/types/aggregation_method_stub.py b/test/types/aggregation_method_stub.py new file mode 100644 index 0000000..4d5f54e --- /dev/null +++ b/test/types/aggregation_method_stub.py @@ -0,0 +1,80 @@ +# coding: utf-8 +"""Waylay Query: timeseries queries (v1 protocol) model tests. + +This code was generated from the OpenAPI documentation of 'Waylay Query: timeseries queries (v1 protocol)' + +Generated by OpenAPI Generator (https://openapi-generator.tech) + +Do not edit the class manually. +""" + +import json + +from jsf import JSF +from pydantic import TypeAdapter + +from ..openapi import MODEL_DEFINITIONS, with_example_provider + +try: + from waylay.services.queries.models.aggregation_method import AggregationMethod + + AggregationMethodAdapter = TypeAdapter(AggregationMethod) + MODELS_AVAILABLE = True +except ImportError as exc: + MODELS_AVAILABLE = False + +aggregation_method_model_schema = json.loads( + r"""{ + "type" : "string", + "nullable" : true, + "oneOf" : [ { + "$ref" : "#/components/schemas/AggregationMethod_oneOf" + }, { + "$ref" : "#/components/schemas/AggregationMethod_oneOf_1" + }, { + "$ref" : "#/components/schemas/AggregationMethod_oneOf_2" + }, { + "$ref" : "#/components/schemas/AggregationMethod_oneOf_3" + }, { + "$ref" : "#/components/schemas/AggregationMethod_oneOf_4" + }, { + "$ref" : "#/components/schemas/AggregationMethod_oneOf_5" + }, { + "$ref" : "#/components/schemas/AggregationMethod_oneOf_6" + }, { + "$ref" : "#/components/schemas/AggregationMethod_oneOf_7" + }, { + "$ref" : "#/components/schemas/AggregationMethod_oneOf_8" + } ] +} +""", + object_hook=with_example_provider, +) +aggregation_method_model_schema.update({"definitions": MODEL_DEFINITIONS}) + +aggregation_method_faker = JSF(aggregation_method_model_schema, allow_none_optionals=1) + + +class AggregationMethodStub: + """AggregationMethod unit test stubs.""" + + @classmethod + def create_json(cls): + """Create a dict stub instance.""" + return aggregation_method_faker.generate(use_defaults=True, use_examples=True) + + @classmethod + def create_instance(cls) -> "AggregationMethod": + """Create AggregationMethod stub instance.""" + if not MODELS_AVAILABLE: + raise ImportError("Models must be installed to create class stubs") + json = cls.create_json() + if not json: + # use backup example based on the pydantic model schema + backup_faker = JSF( + AggregationMethodAdapter.json_schema(), allow_none_optionals=1 + ) + json = backup_faker.generate(use_defaults=True, use_examples=True) + return AggregationMethodAdapter.validate_python( + json, context={"skip_validation": True} + ) diff --git a/test/types/aggregations_inner_stub.py b/test/types/aggregations_inner_stub.py new file mode 100644 index 0000000..6d77087 --- /dev/null +++ b/test/types/aggregations_inner_stub.py @@ -0,0 +1,62 @@ +# coding: utf-8 +"""Waylay Query: timeseries queries (v1 protocol) model tests. + +This code was generated from the OpenAPI documentation of 'Waylay Query: timeseries queries (v1 protocol)' + +Generated by OpenAPI Generator (https://openapi-generator.tech) + +Do not edit the class manually. +""" + +import json + +from jsf import JSF +from pydantic import TypeAdapter + +from ..openapi import MODEL_DEFINITIONS, with_example_provider + +try: + from waylay.services.queries.models.aggregations_inner import AggregationsInner + + AggregationsInnerAdapter = TypeAdapter(AggregationsInner) + MODELS_AVAILABLE = True +except ImportError as exc: + MODELS_AVAILABLE = False + +aggregations_inner_model_schema = json.loads( + r"""{ + "anyOf" : [ { + "$ref" : "#/components/schemas/AggregationMethod" + } ] +} +""", + object_hook=with_example_provider, +) +aggregations_inner_model_schema.update({"definitions": MODEL_DEFINITIONS}) + +aggregations_inner_faker = JSF(aggregations_inner_model_schema, allow_none_optionals=1) + + +class AggregationsInnerStub: + """AggregationsInner unit test stubs.""" + + @classmethod + def create_json(cls): + """Create a dict stub instance.""" + return aggregations_inner_faker.generate(use_defaults=True, use_examples=True) + + @classmethod + def create_instance(cls) -> "AggregationsInner": + """Create AggregationsInner stub instance.""" + if not MODELS_AVAILABLE: + raise ImportError("Models must be installed to create class stubs") + json = cls.create_json() + if not json: + # use backup example based on the pydantic model schema + backup_faker = JSF( + AggregationsInnerAdapter.json_schema(), allow_none_optionals=1 + ) + json = backup_faker.generate(use_defaults=True, use_examples=True) + return AggregationsInnerAdapter.validate_python( + json, context={"skip_validation": True} + ) diff --git a/test/types/align_at_stub.py b/test/types/align_at_stub.py new file mode 100644 index 0000000..3aecf35 --- /dev/null +++ b/test/types/align_at_stub.py @@ -0,0 +1,58 @@ +# coding: utf-8 +"""Waylay Query: timeseries queries (v1 protocol) model tests. + +This code was generated from the OpenAPI documentation of 'Waylay Query: timeseries queries (v1 protocol)' + +Generated by OpenAPI Generator (https://openapi-generator.tech) + +Do not edit the class manually. +""" + +import json + +from jsf import JSF +from pydantic import TypeAdapter + +from ..openapi import MODEL_DEFINITIONS, with_example_provider + +try: + from waylay.services.queries.models.align_at import AlignAt + + AlignAtAdapter = TypeAdapter(AlignAt) + MODELS_AVAILABLE = True +except ImportError as exc: + MODELS_AVAILABLE = False + +align_at_model_schema = json.loads( + r"""{ + "type" : "string", + "description" : "Possible values for `align.at`.\n\n* 'grid' Align to a fixed grid (possibly using timezone information)\n* 'from' Align a the `from` boundary\n* 'until' Align a the `until` boundary\n* 'boundary' Align a the `from` boundary if specified,\n otherwise the `until` boundary.\n\nWhen not specified, 'grid' is used.", + "enum" : [ "grid", "boundary", "from", "until" ] +} +""", + object_hook=with_example_provider, +) +align_at_model_schema.update({"definitions": MODEL_DEFINITIONS}) + +align_at_faker = JSF(align_at_model_schema, allow_none_optionals=1) + + +class AlignAtStub: + """AlignAt unit test stubs.""" + + @classmethod + def create_json(cls): + """Create a dict stub instance.""" + return align_at_faker.generate(use_defaults=True, use_examples=True) + + @classmethod + def create_instance(cls) -> "AlignAt": + """Create AlignAt stub instance.""" + if not MODELS_AVAILABLE: + raise ImportError("Models must be installed to create class stubs") + json = cls.create_json() + if not json: + # use backup example based on the pydantic model schema + backup_faker = JSF(AlignAtAdapter.json_schema(), allow_none_optionals=1) + json = backup_faker.generate(use_defaults=True, use_examples=True) + return AlignAtAdapter.validate_python(json, context={"skip_validation": True}) diff --git a/test/types/align_shift_stub.py b/test/types/align_shift_stub.py new file mode 100644 index 0000000..8534d66 --- /dev/null +++ b/test/types/align_shift_stub.py @@ -0,0 +1,60 @@ +# coding: utf-8 +"""Waylay Query: timeseries queries (v1 protocol) model tests. + +This code was generated from the OpenAPI documentation of 'Waylay Query: timeseries queries (v1 protocol)' + +Generated by OpenAPI Generator (https://openapi-generator.tech) + +Do not edit the class manually. +""" + +import json + +from jsf import JSF +from pydantic import TypeAdapter + +from ..openapi import MODEL_DEFINITIONS, with_example_provider + +try: + from waylay.services.queries.models.align_shift import AlignShift + + AlignShiftAdapter = TypeAdapter(AlignShift) + MODELS_AVAILABLE = True +except ImportError as exc: + MODELS_AVAILABLE = False + +align_shift_model_schema = json.loads( + r"""{ + "type" : "string", + "description" : "Possible values for `align.shift`.\n\n* 'backward': keep the window size of the original interval specification,\n shifting back.\n* 'forward': keep the window size of the original interval specification,\n shifting forward.\n* 'wrap': enlarge the window size to include all of the original interval.\n\nWhen not specified, 'backward' is used.", + "enum" : [ "backward", "forward", "wrap" ] +} +""", + object_hook=with_example_provider, +) +align_shift_model_schema.update({"definitions": MODEL_DEFINITIONS}) + +align_shift_faker = JSF(align_shift_model_schema, allow_none_optionals=1) + + +class AlignShiftStub: + """AlignShift unit test stubs.""" + + @classmethod + def create_json(cls): + """Create a dict stub instance.""" + return align_shift_faker.generate(use_defaults=True, use_examples=True) + + @classmethod + def create_instance(cls) -> "AlignShift": + """Create AlignShift stub instance.""" + if not MODELS_AVAILABLE: + raise ImportError("Models must be installed to create class stubs") + json = cls.create_json() + if not json: + # use backup example based on the pydantic model schema + backup_faker = JSF(AlignShiftAdapter.json_schema(), allow_none_optionals=1) + json = backup_faker.generate(use_defaults=True, use_examples=True) + return AlignShiftAdapter.validate_python( + json, context={"skip_validation": True} + ) diff --git a/test/types/alignment_grid_interval_stub.py b/test/types/alignment_grid_interval_stub.py new file mode 100644 index 0000000..a8f4aa3 --- /dev/null +++ b/test/types/alignment_grid_interval_stub.py @@ -0,0 +1,78 @@ +# coding: utf-8 +"""Waylay Query: timeseries queries (v1 protocol) model tests. + +This code was generated from the OpenAPI documentation of 'Waylay Query: timeseries queries (v1 protocol)' + +Generated by OpenAPI Generator (https://openapi-generator.tech) + +Do not edit the class manually. +""" + +import json + +from jsf import JSF +from pydantic import TypeAdapter + +from ..openapi import MODEL_DEFINITIONS, with_example_provider + +try: + from waylay.services.queries.models.alignment_grid_interval import ( + AlignmentGridInterval, + ) + + AlignmentGridIntervalAdapter = TypeAdapter(AlignmentGridInterval) + MODELS_AVAILABLE = True +except ImportError as exc: + MODELS_AVAILABLE = False + +alignment_grid_interval__model_schema = json.loads( + r"""{ + "title" : "Alignment Grid interval.", + "type" : "string", + "description" : "\nDefines the grid used to align the aggregation window.\nThe window will align at whole-unit multiples of this interval.\n\nFor intervals like `PT1D`, that are timezone-dependent, use the \n`align.timezone` to fix the absolute timestamp of the grid boundaries.\n\nIf not specified, defaults to the `freq` aggregation interval.\n", + "oneOf" : [ { + "title" : "ISO8601 period ", + "pattern" : "^P([0-9]+Y)?([0-9]+M)?([0-9]+W)?([0-9]+D)?(T([0-9]+H)?([0-9]+M)?([0-9]+(\\.[0-9]*)?S)?)?$", + "type" : "string", + "description" : "A period in [ISO8601 duration](https://en.wikipedia.org/wiki/ISO_8601#Durations) format.", + "format" : "period", + "example" : "PT3H15M" + }, { + "$ref" : "#/components/schemas/Grouping_Interval_Override_oneOf" + } ] +} +""", + object_hook=with_example_provider, +) +alignment_grid_interval__model_schema.update({"definitions": MODEL_DEFINITIONS}) + +alignment_grid_interval__faker = JSF( + alignment_grid_interval__model_schema, allow_none_optionals=1 +) + + +class AlignmentGridIntervalStub: + """AlignmentGridInterval unit test stubs.""" + + @classmethod + def create_json(cls): + """Create a dict stub instance.""" + return alignment_grid_interval__faker.generate( + use_defaults=True, use_examples=True + ) + + @classmethod + def create_instance(cls) -> "AlignmentGridInterval": + """Create AlignmentGridInterval stub instance.""" + if not MODELS_AVAILABLE: + raise ImportError("Models must be installed to create class stubs") + json = cls.create_json() + if not json: + # use backup example based on the pydantic model schema + backup_faker = JSF( + AlignmentGridIntervalAdapter.json_schema(), allow_none_optionals=1 + ) + json = backup_faker.generate(use_defaults=True, use_examples=True) + return AlignmentGridIntervalAdapter.validate_python( + json, context={"skip_validation": True} + ) diff --git a/test/types/alignment_stub.py b/test/types/alignment_stub.py new file mode 100644 index 0000000..90e1483 --- /dev/null +++ b/test/types/alignment_stub.py @@ -0,0 +1,72 @@ +# coding: utf-8 +"""Waylay Query: timeseries queries (v1 protocol) model tests. + +This code was generated from the OpenAPI documentation of 'Waylay Query: timeseries queries (v1 protocol)' + +Generated by OpenAPI Generator (https://openapi-generator.tech) + +Do not edit the class manually. +""" + +import json + +from jsf import JSF +from pydantic import TypeAdapter + +from ..openapi import MODEL_DEFINITIONS, with_example_provider + +try: + from waylay.services.queries.models.alignment import Alignment + + AlignmentAdapter = TypeAdapter(Alignment) + MODELS_AVAILABLE = True +except ImportError as exc: + MODELS_AVAILABLE = False + +alignment_model_schema = json.loads( + r"""{ + "type" : "object", + "properties" : { + "at" : { + "$ref" : "#/components/schemas/AlignAt" + }, + "shift" : { + "$ref" : "#/components/schemas/AlignShift" + }, + "freq" : { + "$ref" : "#/components/schemas/Alignment_Grid_interval_" + }, + "timezone" : { + "$ref" : "#/components/schemas/Alignment_Timezone_" + } + }, + "additionalProperties" : true, + "description" : "Aggregation Alignment Options.\n\nSpecifies how the aggregation grid is aligned." +} +""", + object_hook=with_example_provider, +) +alignment_model_schema.update({"definitions": MODEL_DEFINITIONS}) + +alignment_faker = JSF(alignment_model_schema, allow_none_optionals=1) + + +class AlignmentStub: + """Alignment unit test stubs.""" + + @classmethod + def create_json(cls): + """Create a dict stub instance.""" + return alignment_faker.generate(use_defaults=True, use_examples=True) + + @classmethod + def create_instance(cls) -> "Alignment": + """Create Alignment stub instance.""" + if not MODELS_AVAILABLE: + raise ImportError("Models must be installed to create class stubs") + json = cls.create_json() + if not json: + # use backup example based on the pydantic model schema + backup_faker = JSF(AlignmentAdapter.json_schema(), allow_none_optionals=1) + json = backup_faker.generate(use_defaults=True, use_examples=True) + return AlignmentAdapter.validate_python(json, context={"skip_validation": True}) diff --git a/test/types/alignment_timezone_stub.py b/test/types/alignment_timezone_stub.py new file mode 100644 index 0000000..86b3a02 --- /dev/null +++ b/test/types/alignment_timezone_stub.py @@ -0,0 +1,74 @@ +# coding: utf-8 +"""Waylay Query: timeseries queries (v1 protocol) model tests. + +This code was generated from the OpenAPI documentation of 'Waylay Query: timeseries queries (v1 protocol)' + +Generated by OpenAPI Generator (https://openapi-generator.tech) + +Do not edit the class manually. +""" + +import json + +from jsf import JSF +from pydantic import TypeAdapter + +from ..openapi import MODEL_DEFINITIONS, with_example_provider + +try: + from waylay.services.queries.models.alignment_timezone import AlignmentTimezone + + AlignmentTimezoneAdapter = TypeAdapter(AlignmentTimezone) + MODELS_AVAILABLE = True +except ImportError as exc: + MODELS_AVAILABLE = False + +alignment_timezone__model_schema = json.loads( + r"""{ + "title" : "Alignment Timezone.", + "type" : "string", + "description" : "\nThe timezone to use when shifting boundaries, especially\nat day granularity.\nAlso affects the rendering of timestamps when\n`render.iso_timestamp` is enabled.\n\nWhen not specified, the `UTC` timezone is used.\n", + "oneOf" : [ { + "title" : "Timezone Identifier", + "type" : "string", + "description" : "[ICANN timezone identifier](https://en.wikipedia.org/wiki/List_of_tz_database_time_zones)" + }, { + "title" : "UTC Offset", + "pattern" : "(+|-)\\d\\d:\\d\\d", + "type" : "string", + "description" : "[UTC offset](https://en.wikipedia.org/wiki/UTC_offset)" + } ] +} +""", + object_hook=with_example_provider, +) +alignment_timezone__model_schema.update({"definitions": MODEL_DEFINITIONS}) + +alignment_timezone__faker = JSF( + alignment_timezone__model_schema, allow_none_optionals=1 +) + + +class AlignmentTimezoneStub: + """AlignmentTimezone unit test stubs.""" + + @classmethod + def create_json(cls): + """Create a dict stub instance.""" + return alignment_timezone__faker.generate(use_defaults=True, use_examples=True) + + @classmethod + def create_instance(cls) -> "AlignmentTimezone": + """Create AlignmentTimezone stub instance.""" + if not MODELS_AVAILABLE: + raise ImportError("Models must be installed to create class stubs") + json = cls.create_json() + if not json: + # use backup example based on the pydantic model schema + backup_faker = JSF( + AlignmentTimezoneAdapter.json_schema(), allow_none_optionals=1 + ) + json = backup_faker.generate(use_defaults=True, use_examples=True) + return AlignmentTimezoneAdapter.validate_python( + json, context={"skip_validation": True} + ) diff --git a/test/types/cause_exception_stub.py b/test/types/cause_exception_stub.py new file mode 100644 index 0000000..50a9da4 --- /dev/null +++ b/test/types/cause_exception_stub.py @@ -0,0 +1,80 @@ +# coding: utf-8 +"""Waylay Query: timeseries queries (v1 protocol) model tests. + +This code was generated from the OpenAPI documentation of 'Waylay Query: timeseries queries (v1 protocol)' + +Generated by OpenAPI Generator (https://openapi-generator.tech) + +Do not edit the class manually. +""" + +import json + +from jsf import JSF +from pydantic import TypeAdapter + +from ..openapi import MODEL_DEFINITIONS, with_example_provider + +try: + from waylay.services.queries.models.cause_exception import CauseException + + CauseExceptionAdapter = TypeAdapter(CauseException) + MODELS_AVAILABLE = True +except ImportError as exc: + MODELS_AVAILABLE = False + +cause_exception_model_schema = json.loads( + r"""{ + "required" : [ "message", "stacktrace", "type" ], + "type" : "object", + "properties" : { + "type" : { + "title" : "Exception Type", + "type" : "string" + }, + "message" : { + "title" : "Exception Message", + "type" : "string" + }, + "stacktrace" : { + "title" : "Stack Trace", + "type" : "array", + "items" : { + "type" : "string" + } + } + }, + "additionalProperties" : true, + "description" : "Describes the exception that caused a message." +} +""", + object_hook=with_example_provider, +) +cause_exception_model_schema.update({"definitions": MODEL_DEFINITIONS}) + +cause_exception_faker = JSF(cause_exception_model_schema, allow_none_optionals=1) + + +class CauseExceptionStub: + """CauseException unit test stubs.""" + + @classmethod + def create_json(cls): + """Create a dict stub instance.""" + return cause_exception_faker.generate(use_defaults=True, use_examples=True) + + @classmethod + def create_instance(cls) -> "CauseException": + """Create CauseException stub instance.""" + if not MODELS_AVAILABLE: + raise ImportError("Models must be installed to create class stubs") + json = cls.create_json() + if not json: + # use backup example based on the pydantic model schema + backup_faker = JSF( + CauseExceptionAdapter.json_schema(), allow_none_optionals=1 + ) + json = backup_faker.generate(use_defaults=True, use_examples=True) + return CauseExceptionAdapter.validate_python( + json, context={"skip_validation": True} + ) diff --git a/test/types/column_data_set_data_axis_stub.py b/test/types/column_data_set_data_axis_stub.py new file mode 100644 index 0000000..cd85c8b --- /dev/null +++ b/test/types/column_data_set_data_axis_stub.py @@ -0,0 +1,69 @@ +# coding: utf-8 +"""Waylay Query: timeseries queries (v1 protocol) model tests. + +This code was generated from the OpenAPI documentation of 'Waylay Query: timeseries queries (v1 protocol)' + +Generated by OpenAPI Generator (https://openapi-generator.tech) + +Do not edit the class manually. +""" + +import json + +from jsf import JSF +from pydantic import TypeAdapter + +from ..openapi import MODEL_DEFINITIONS, with_example_provider + +try: + from waylay.services.queries.models.column_data_set_data_axis import ( + ColumnDataSetDataAxis, + ) + + ColumnDataSetDataAxisAdapter = TypeAdapter(ColumnDataSetDataAxis) + MODELS_AVAILABLE = True +except ImportError as exc: + MODELS_AVAILABLE = False + +column_data_set_data_axis_model_schema = json.loads( + r"""{ + "title" : "ColumnDataSet_data_axis", + "type" : "string", + "default" : "row", + "enum" : [ "row" ] +} +""", + object_hook=with_example_provider, +) +column_data_set_data_axis_model_schema.update({"definitions": MODEL_DEFINITIONS}) + +column_data_set_data_axis_faker = JSF( + column_data_set_data_axis_model_schema, allow_none_optionals=1 +) + + +class ColumnDataSetDataAxisStub: + """ColumnDataSetDataAxis unit test stubs.""" + + @classmethod + def create_json(cls): + """Create a dict stub instance.""" + return column_data_set_data_axis_faker.generate( + use_defaults=True, use_examples=True + ) + + @classmethod + def create_instance(cls) -> "ColumnDataSetDataAxis": + """Create ColumnDataSetDataAxis stub instance.""" + if not MODELS_AVAILABLE: + raise ImportError("Models must be installed to create class stubs") + json = cls.create_json() + if not json: + # use backup example based on the pydantic model schema + backup_faker = JSF( + ColumnDataSetDataAxisAdapter.json_schema(), allow_none_optionals=1 + ) + json = backup_faker.generate(use_defaults=True, use_examples=True) + return ColumnDataSetDataAxisAdapter.validate_python( + json, context={"skip_validation": True} + ) diff --git a/test/types/column_data_set_stub.py b/test/types/column_data_set_stub.py new file mode 100644 index 0000000..9e3d668 --- /dev/null +++ b/test/types/column_data_set_stub.py @@ -0,0 +1,93 @@ +# coding: utf-8 +"""Waylay Query: timeseries queries (v1 protocol) model tests. + +This code was generated from the OpenAPI documentation of 'Waylay Query: timeseries queries (v1 protocol)' + +Generated by OpenAPI Generator (https://openapi-generator.tech) + +Do not edit the class manually. +""" + +import json + +from jsf import JSF +from pydantic import TypeAdapter + +from ..openapi import MODEL_DEFINITIONS, with_example_provider + +try: + from waylay.services.queries.models.column_data_set import ColumnDataSet + + ColumnDataSetAdapter = TypeAdapter(ColumnDataSet) + MODELS_AVAILABLE = True +except ImportError as exc: + MODELS_AVAILABLE = False + +column_data_set_model_schema = json.loads( + r"""{ + "required" : [ "data", "rows" ], + "type" : "object", + "properties" : { + "attributes" : { + "$ref" : "#/components/schemas/DataSetAttributes" + }, + "window_spec" : { + "$ref" : "#/components/schemas/DataSetWindow" + }, + "data_axis" : { + "$ref" : "#/components/schemas/ColumnDataSet_data_axis" + }, + "rows" : { + "title" : "Row Headers", + "type" : "array", + "description" : "Header Attributes for the index data.\n\nThe initial string-valued headers (normally `resource`, `metric`,`aggregation`) indicate that row to contain series attributes.\n\nThe remaining object-valued row headers contain the index data.", + "items" : { + "$ref" : "#/components/schemas/Row_Headers_inner" + } + }, + "data" : { + "title" : "Series", + "type" : "array", + "description" : "All metric observation values for a single series. Prefixed by the series attributes.", + "items" : { + "type" : "array", + "items" : { + "$ref" : "#/components/schemas/Datum" + } + } + } + }, + "additionalProperties" : true, + "description" : "Column-oriented dataset with rows header.\n\nTimeseries data layout with a rows header containing\nthe index data.\nThe data array contains series data prefixed by series attributes.\nThe `rows` index is prefix by the names of these series attributes.\nResult for render options `data_axis=row` and `header_array=column`." +} +""", + object_hook=with_example_provider, +) +column_data_set_model_schema.update({"definitions": MODEL_DEFINITIONS}) + +column_data_set_faker = JSF(column_data_set_model_schema, allow_none_optionals=1) + + +class ColumnDataSetStub: + """ColumnDataSet unit test stubs.""" + + @classmethod + def create_json(cls): + """Create a dict stub instance.""" + return column_data_set_faker.generate(use_defaults=True, use_examples=True) + + @classmethod + def create_instance(cls) -> "ColumnDataSet": + """Create ColumnDataSet stub instance.""" + if not MODELS_AVAILABLE: + raise ImportError("Models must be installed to create class stubs") + json = cls.create_json() + if not json: + # use backup example based on the pydantic model schema + backup_faker = JSF( + ColumnDataSetAdapter.json_schema(), allow_none_optionals=1 + ) + json = backup_faker.generate(use_defaults=True, use_examples=True) + return ColumnDataSetAdapter.validate_python( + json, context={"skip_validation": True} + ) diff --git a/test/types/column_header_stub.py b/test/types/column_header_stub.py new file mode 100644 index 0000000..ae011cc --- /dev/null +++ b/test/types/column_header_stub.py @@ -0,0 +1,77 @@ +# coding: utf-8 +"""Waylay Query: timeseries queries (v1 protocol) model tests. + +This code was generated from the OpenAPI documentation of 'Waylay Query: timeseries queries (v1 protocol)' + +Generated by OpenAPI Generator (https://openapi-generator.tech) + +Do not edit the class manually. +""" + +import json + +from jsf import JSF +from pydantic import TypeAdapter + +from ..openapi import MODEL_DEFINITIONS, with_example_provider + +try: + from waylay.services.queries.models.column_header import ColumnHeader + + ColumnHeaderAdapter = TypeAdapter(ColumnHeader) + MODELS_AVAILABLE = True +except ImportError as exc: + MODELS_AVAILABLE = False + +column_header_model_schema = json.loads( + r"""{ + "required" : [ "metric", "resource" ], + "type" : "object", + "properties" : { + "resource" : { + "title" : "Series resource id", + "type" : "string" + }, + "metric" : { + "title" : "Series metric", + "type" : "string" + }, + "aggregation" : { + "title" : "Aggregation applied to the series.", + "type" : "string" + } + }, + "additionalProperties" : true, + "description" : "Column attributes.\n\nAttributes that identify and describe the data in this column." +} +""", + object_hook=with_example_provider, +) +column_header_model_schema.update({"definitions": MODEL_DEFINITIONS}) + +column_header_faker = JSF(column_header_model_schema, allow_none_optionals=1) + + +class ColumnHeaderStub: + """ColumnHeader unit test stubs.""" + + @classmethod + def create_json(cls): + """Create a dict stub instance.""" + return column_header_faker.generate(use_defaults=True, use_examples=True) + + @classmethod + def create_instance(cls) -> "ColumnHeader": + """Create ColumnHeader stub instance.""" + if not MODELS_AVAILABLE: + raise ImportError("Models must be installed to create class stubs") + json = cls.create_json() + if not json: + # use backup example based on the pydantic model schema + backup_faker = JSF( + ColumnHeaderAdapter.json_schema(), allow_none_optionals=1 + ) + json = backup_faker.generate(use_defaults=True, use_examples=True) + return ColumnHeaderAdapter.validate_python( + json, context={"skip_validation": True} + ) diff --git a/test/types/column_headers_inner_stub.py b/test/types/column_headers_inner_stub.py new file mode 100644 index 0000000..bdf14a0 --- /dev/null +++ b/test/types/column_headers_inner_stub.py @@ -0,0 +1,67 @@ +# coding: utf-8 +"""Waylay Query: timeseries queries (v1 protocol) model tests. + +This code was generated from the OpenAPI documentation of 'Waylay Query: timeseries queries (v1 protocol)' + +Generated by OpenAPI Generator (https://openapi-generator.tech) + +Do not edit the class manually. +""" + +import json + +from jsf import JSF +from pydantic import TypeAdapter + +from ..openapi import MODEL_DEFINITIONS, with_example_provider + +try: + from waylay.services.queries.models.column_headers_inner import ColumnHeadersInner + + ColumnHeadersInnerAdapter = TypeAdapter(ColumnHeadersInner) + MODELS_AVAILABLE = True +except ImportError as exc: + MODELS_AVAILABLE = False + +column_headers_inner_model_schema = json.loads( + r"""{ + "title" : "Column_Headers_inner", + "anyOf" : [ { + "$ref" : "#/components/schemas/RowIndexColumnHeader" + }, { + "$ref" : "#/components/schemas/ColumnHeader" + } ] +} +""", + object_hook=with_example_provider, +) +column_headers_inner_model_schema.update({"definitions": MODEL_DEFINITIONS}) + +column_headers_inner_faker = JSF( + column_headers_inner_model_schema, allow_none_optionals=1 +) + + +class ColumnHeadersInnerStub: + """ColumnHeadersInner unit test stubs.""" + + @classmethod + def create_json(cls): + """Create a dict stub instance.""" + return column_headers_inner_faker.generate(use_defaults=True, use_examples=True) + + @classmethod + def create_instance(cls) -> "ColumnHeadersInner": + """Create ColumnHeadersInner stub instance.""" + if not MODELS_AVAILABLE: + raise ImportError("Models must be installed to create class stubs") + json = cls.create_json() + if not json: + # use backup example based on the pydantic model schema + backup_faker = JSF( + ColumnHeadersInnerAdapter.json_schema(), allow_none_optionals=1 + ) + json = backup_faker.generate(use_defaults=True, use_examples=True) + return ColumnHeadersInnerAdapter.validate_python( + json, context={"skip_validation": True} + ) diff --git a/test/types/data_axis_option_stub.py b/test/types/data_axis_option_stub.py new file mode 100644 index 0000000..a362d11 --- /dev/null +++ b/test/types/data_axis_option_stub.py @@ -0,0 +1,62 @@ +# coding: utf-8 +"""Waylay Query: timeseries queries (v1 protocol) model tests. + +This code was generated from the OpenAPI documentation of 'Waylay Query: timeseries queries (v1 protocol)' + +Generated by OpenAPI Generator (https://openapi-generator.tech) + +Do not edit the class manually. +""" + +import json + +from jsf import JSF +from pydantic import TypeAdapter + +from ..openapi import MODEL_DEFINITIONS, with_example_provider + +try: + from waylay.services.queries.models.data_axis_option import DataAxisOption + + DataAxisOptionAdapter = TypeAdapter(DataAxisOption) + MODELS_AVAILABLE = True +except ImportError as exc: + MODELS_AVAILABLE = False + +data_axis_option_model_schema = json.loads( + r"""{ + "type" : "string", + "description" : "Allowed values for the render.data_axis option.", + "enum" : [ "row", "column" ] +} +""", + object_hook=with_example_provider, +) +data_axis_option_model_schema.update({"definitions": MODEL_DEFINITIONS}) + +data_axis_option_faker = JSF(data_axis_option_model_schema, allow_none_optionals=1) + + +class DataAxisOptionStub: + """DataAxisOption unit test stubs.""" + + @classmethod + def create_json(cls): + """Create a dict stub instance.""" + return data_axis_option_faker.generate(use_defaults=True, use_examples=True) + + @classmethod + def create_instance(cls) -> "DataAxisOption": + """Create DataAxisOption stub instance.""" + if not MODELS_AVAILABLE: + raise ImportError("Models must be installed to create class stubs") + json = cls.create_json() + if not json: + # use backup example based on the pydantic model schema + backup_faker = JSF( + DataAxisOptionAdapter.json_schema(), allow_none_optionals=1 + ) + json = backup_faker.generate(use_defaults=True, use_examples=True) + return DataAxisOptionAdapter.validate_python( + json, context={"skip_validation": True} + ) diff --git a/test/types/data_set_attributes_stub.py b/test/types/data_set_attributes_stub.py new file mode 100644 index 0000000..0258bc6 --- /dev/null +++ b/test/types/data_set_attributes_stub.py @@ -0,0 +1,70 @@ +# coding: utf-8 +"""Waylay Query: timeseries queries (v1 protocol) model tests. + +This code was generated from the OpenAPI documentation of 'Waylay Query: timeseries queries (v1 protocol)' + +Generated by OpenAPI Generator (https://openapi-generator.tech) + +Do not edit the class manually. +""" + +import json + +from jsf import JSF +from pydantic import TypeAdapter + +from ..openapi import MODEL_DEFINITIONS, with_example_provider + +try: + from waylay.services.queries.models.data_set_attributes import DataSetAttributes + + DataSetAttributesAdapter = TypeAdapter(DataSetAttributes) + MODELS_AVAILABLE = True +except ImportError as exc: + MODELS_AVAILABLE = False + +data_set_attributes_model_schema = json.loads( + r"""{ + "title" : "DataSetAttributes", + "type" : "object", + "properties" : { + "role" : { + "$ref" : "#/components/schemas/Role" + } + }, + "additionalProperties" : true, + "description" : "Data Set Attributes.\n\nData attributes that apply to all data in this set." +} +""", + object_hook=with_example_provider, +) +data_set_attributes_model_schema.update({"definitions": MODEL_DEFINITIONS}) + +data_set_attributes_faker = JSF( + data_set_attributes_model_schema, allow_none_optionals=1 +) + + +class DataSetAttributesStub: + """DataSetAttributes unit test stubs.""" + + @classmethod + def create_json(cls): + """Create a dict stub instance.""" + return data_set_attributes_faker.generate(use_defaults=True, use_examples=True) + + @classmethod + def create_instance(cls) -> "DataSetAttributes": + """Create DataSetAttributes stub instance.""" + if not MODELS_AVAILABLE: + raise ImportError("Models must be installed to create class stubs") + json = cls.create_json() + if not json: + # use backup example based on the pydantic model schema + backup_faker = JSF( + DataSetAttributesAdapter.json_schema(), allow_none_optionals=1 + ) + json = backup_faker.generate(use_defaults=True, use_examples=True) + return DataSetAttributesAdapter.validate_python( + json, context={"skip_validation": True} + ) diff --git a/test/types/data_set_window_stub.py b/test/types/data_set_window_stub.py new file mode 100644 index 0000000..2558bef --- /dev/null +++ b/test/types/data_set_window_stub.py @@ -0,0 +1,83 @@ +# coding: utf-8 +"""Waylay Query: timeseries queries (v1 protocol) model tests. + +This code was generated from the OpenAPI documentation of 'Waylay Query: timeseries queries (v1 protocol)' + +Generated by OpenAPI Generator (https://openapi-generator.tech) + +Do not edit the class manually. +""" + +import json + +from jsf import JSF +from pydantic import TypeAdapter + +from ..openapi import MODEL_DEFINITIONS, with_example_provider + +try: + from waylay.services.queries.models.data_set_window import DataSetWindow + + DataSetWindowAdapter = TypeAdapter(DataSetWindow) + MODELS_AVAILABLE = True +except ImportError as exc: + MODELS_AVAILABLE = False + +data_set_window_model_schema = json.loads( + r"""{ + "title" : "DataSetWindow", + "required" : [ "freq", "until", "window" ], + "type" : "object", + "properties" : { + "until" : { + "title" : "Time Axis End", + "type" : "integer", + "description" : "Exclusive higher bound of the time axis in unix epoch milliseconds." + }, + "window" : { + "title" : "Time Axis Length", + "type" : "string", + "description" : "Time axis length as ISO8601 period.", + "format" : "period" + }, + "freq" : { + "title" : "Frequency", + "type" : "string", + "description" : "Time axis aggregation interval as an ISO8601 period .", + "format" : "period" + } + }, + "additionalProperties" : true, + "description" : "Data Window.\n\nStatistics of the time axis of a data set.\nPresent with render option `include_window_spec=true`.\"," +} +""", + object_hook=with_example_provider, +) +data_set_window_model_schema.update({"definitions": MODEL_DEFINITIONS}) + +data_set_window_faker = JSF(data_set_window_model_schema, allow_none_optionals=1) + + +class DataSetWindowStub: + """DataSetWindow unit test stubs.""" + + @classmethod + def create_json(cls): + """Create a dict stub instance.""" + return data_set_window_faker.generate(use_defaults=True, use_examples=True) + + @classmethod + def create_instance(cls) -> "DataSetWindow": + """Create DataSetWindow stub instance.""" + if not MODELS_AVAILABLE: + raise ImportError("Models must be installed to create class stubs") + json = cls.create_json() + if not json: + # use backup example based on the pydantic model schema + backup_faker = JSF( + DataSetWindowAdapter.json_schema(), allow_none_optionals=1 + ) + json = backup_faker.generate(use_defaults=True, use_examples=True) + return DataSetWindowAdapter.validate_python( + json, context={"skip_validation": True} + ) diff --git a/test/types/datum_stub.py b/test/types/datum_stub.py new file mode 100644 index 0000000..1365a38 --- /dev/null +++ b/test/types/datum_stub.py @@ -0,0 +1,67 @@ +# coding: utf-8 +"""Waylay Query: timeseries queries (v1 protocol) model tests. + +This code was generated from the OpenAPI documentation of 'Waylay Query: timeseries queries (v1 protocol)' + +Generated by OpenAPI Generator (https://openapi-generator.tech) + +Do not edit the class manually. +""" + +import json + +from jsf import JSF +from pydantic import TypeAdapter + +from ..openapi import MODEL_DEFINITIONS, with_example_provider + +try: + from waylay.services.queries.models.datum import Datum + + DatumAdapter = TypeAdapter(Datum) + MODELS_AVAILABLE = True +except ImportError as exc: + MODELS_AVAILABLE = False + +datum_model_schema = json.loads( + r"""{ + "title" : "Datum", + "description" : "A single metric value for a timeseries.\n\nA null value indicates that no (aggregated/interpolated) value exists for the corresponding timestamp.", + "oneOf" : [ { + "type" : "number", + "nullable" : true + }, { + "type" : "string", + "nullable" : true + }, { + "type" : "boolean", + "nullable" : true + } ] +} +""", + object_hook=with_example_provider, +) +datum_model_schema.update({"definitions": MODEL_DEFINITIONS}) + +datum_faker = JSF(datum_model_schema, allow_none_optionals=1) + + +class DatumStub: + """Datum unit test stubs.""" + + @classmethod + def create_json(cls): + """Create a dict stub instance.""" + return datum_faker.generate(use_defaults=True, use_examples=True) + + @classmethod + def create_instance(cls) -> "Datum": + """Create Datum stub instance.""" + if not MODELS_AVAILABLE: + raise ImportError("Models must be installed to create class stubs") + json = cls.create_json() + if not json: + # use backup example based on the pydantic model schema + backup_faker = JSF(DatumAdapter.json_schema(), allow_none_optionals=1) + json = backup_faker.generate(use_defaults=True, use_examples=True) + return DatumAdapter.validate_python(json, context={"skip_validation": True}) diff --git a/test/types/default_aggregation_stub.py b/test/types/default_aggregation_stub.py new file mode 100644 index 0000000..6120d1f --- /dev/null +++ b/test/types/default_aggregation_stub.py @@ -0,0 +1,90 @@ +# coding: utf-8 +"""Waylay Query: timeseries queries (v1 protocol) model tests. + +This code was generated from the OpenAPI documentation of 'Waylay Query: timeseries queries (v1 protocol)' + +Generated by OpenAPI Generator (https://openapi-generator.tech) + +Do not edit the class manually. +""" + +import json + +from jsf import JSF +from pydantic import TypeAdapter + +from ..openapi import MODEL_DEFINITIONS, with_example_provider + +try: + from waylay.services.queries.models.default_aggregation import DefaultAggregation + + DefaultAggregationAdapter = TypeAdapter(DefaultAggregation) + MODELS_AVAILABLE = True +except ImportError as exc: + MODELS_AVAILABLE = False + +default_aggregation_model_schema = json.loads( + r"""{ + "title" : "Default Aggregation", + "description" : "Default aggregation method(s) for the series in the query.", + "anyOf" : [ { + "$ref" : "#/components/schemas/AggregationMethod" + }, { + "title" : "Aggregations", + "type" : "array", + "description" : "Aggregation methods, leading to sepearate series.", + "nullable" : true, + "items" : { + "$ref" : "#/components/schemas/Aggregations_inner" + } + }, { + "title" : "Aggregation by Resource or Metric", + "type" : "object", + "additionalProperties" : { + "$ref" : "#/components/schemas/Aggregation_by_Resource_or_Metric" + }, + "description" : "Aggregation methods specified per resource or metric.", + "nullable" : true + }, { + "title" : "Aggregation by Resource and Metric", + "type" : "object", + "additionalProperties" : { + "$ref" : "#/components/schemas/Aggregation_by_Resource_and_Metric" + }, + "description" : "Aggregation methods specified per resource and metric.", + "nullable" : true + } ] +} +""", + object_hook=with_example_provider, +) +default_aggregation_model_schema.update({"definitions": MODEL_DEFINITIONS}) + +default_aggregation_faker = JSF( + default_aggregation_model_schema, allow_none_optionals=1 +) + + +class DefaultAggregationStub: + """DefaultAggregation unit test stubs.""" + + @classmethod + def create_json(cls): + """Create a dict stub instance.""" + return default_aggregation_faker.generate(use_defaults=True, use_examples=True) + + @classmethod + def create_instance(cls) -> "DefaultAggregation": + """Create DefaultAggregation stub instance.""" + if not MODELS_AVAILABLE: + raise ImportError("Models must be installed to create class stubs") + json = cls.create_json() + if not json: + # use backup example based on the pydantic model schema + backup_faker = JSF( + DefaultAggregationAdapter.json_schema(), allow_none_optionals=1 + ) + json = backup_faker.generate(use_defaults=True, use_examples=True) + return DefaultAggregationAdapter.validate_python( + json, context={"skip_validation": True} + ) diff --git a/test/types/default_interpolation_stub.py b/test/types/default_interpolation_stub.py new file mode 100644 index 0000000..1d9c1c8 --- /dev/null +++ b/test/types/default_interpolation_stub.py @@ -0,0 +1,72 @@ +# coding: utf-8 +"""Waylay Query: timeseries queries (v1 protocol) model tests. + +This code was generated from the OpenAPI documentation of 'Waylay Query: timeseries queries (v1 protocol)' + +Generated by OpenAPI Generator (https://openapi-generator.tech) + +Do not edit the class manually. +""" + +import json + +from jsf import JSF +from pydantic import TypeAdapter + +from ..openapi import MODEL_DEFINITIONS, with_example_provider + +try: + from waylay.services.queries.models.default_interpolation import ( + DefaultInterpolation, + ) + + DefaultInterpolationAdapter = TypeAdapter(DefaultInterpolation) + MODELS_AVAILABLE = True +except ImportError as exc: + MODELS_AVAILABLE = False + +default_interpolation_model_schema = json.loads( + r"""{ + "title" : "Default Interpolation", + "description" : "Default Interpolation method for the series (if aggregated).", + "anyOf" : [ { + "$ref" : "#/components/schemas/InterpolationMethod" + }, { + "$ref" : "#/components/schemas/InterpolationSpec" + } ] +} +""", + object_hook=with_example_provider, +) +default_interpolation_model_schema.update({"definitions": MODEL_DEFINITIONS}) + +default_interpolation_faker = JSF( + default_interpolation_model_schema, allow_none_optionals=1 +) + + +class DefaultInterpolationStub: + """DefaultInterpolation unit test stubs.""" + + @classmethod + def create_json(cls): + """Create a dict stub instance.""" + return default_interpolation_faker.generate( + use_defaults=True, use_examples=True + ) + + @classmethod + def create_instance(cls) -> "DefaultInterpolation": + """Create DefaultInterpolation stub instance.""" + if not MODELS_AVAILABLE: + raise ImportError("Models must be installed to create class stubs") + json = cls.create_json() + if not json: + # use backup example based on the pydantic model schema + backup_faker = JSF( + DefaultInterpolationAdapter.json_schema(), allow_none_optionals=1 + ) + json = backup_faker.generate(use_defaults=True, use_examples=True) + return DefaultInterpolationAdapter.validate_python( + json, context={"skip_validation": True} + ) diff --git a/test/types/delete_response_stub.py b/test/types/delete_response_stub.py new file mode 100644 index 0000000..8ec8137 --- /dev/null +++ b/test/types/delete_response_stub.py @@ -0,0 +1,87 @@ +# coding: utf-8 +"""Waylay Query: timeseries queries (v1 protocol) model tests. + +This code was generated from the OpenAPI documentation of 'Waylay Query: timeseries queries (v1 protocol)' + +Generated by OpenAPI Generator (https://openapi-generator.tech) + +Do not edit the class manually. +""" + +import json + +from jsf import JSF +from pydantic import TypeAdapter + +from ..openapi import MODEL_DEFINITIONS, with_example_provider + +try: + from waylay.services.queries.models.delete_response import DeleteResponse + + DeleteResponseAdapter = TypeAdapter(DeleteResponse) + MODELS_AVAILABLE = True +except ImportError as exc: + MODELS_AVAILABLE = False + +delete_response_model_schema = json.loads( + r"""{ + "type" : "object", + "properties" : { + "messages" : { + "title" : "Messages", + "type" : "array", + "items" : { + "$ref" : "#/components/schemas/Message" + } + }, + "_links" : { + "title" : " Links", + "type" : "object", + "additionalProperties" : { + "$ref" : "#/components/schemas/_Links" + }, + "description" : "HAL links, indexed by link relation." + }, + "_embeddings" : { + "title" : " Embeddings", + "type" : "object", + "additionalProperties" : { + "$ref" : "#/components/schemas/_Embeddings" + }, + "description" : "Hal embeddings, indexed by relation." + } + }, + "additionalProperties" : true, + "description" : "Confirmation of a delete request." +} +""", + object_hook=with_example_provider, +) +delete_response_model_schema.update({"definitions": MODEL_DEFINITIONS}) + +delete_response_faker = JSF(delete_response_model_schema, allow_none_optionals=1) + + +class DeleteResponseStub: + """DeleteResponse unit test stubs.""" + + @classmethod + def create_json(cls): + """Create a dict stub instance.""" + return delete_response_faker.generate(use_defaults=True, use_examples=True) + + @classmethod + def create_instance(cls) -> "DeleteResponse": + """Create DeleteResponse stub instance.""" + if not MODELS_AVAILABLE: + raise ImportError("Models must be installed to create class stubs") + json = cls.create_json() + if not json: + # use backup example based on the pydantic model schema + backup_faker = JSF( + DeleteResponseAdapter.json_schema(), allow_none_optionals=1 + ) + json = backup_faker.generate(use_defaults=True, use_examples=True) + return DeleteResponseAdapter.validate_python( + json, context={"skip_validation": True} + ) diff --git a/test/types/embeddings_stub.py b/test/types/embeddings_stub.py new file mode 100644 index 0000000..fa4ff67 --- /dev/null +++ b/test/types/embeddings_stub.py @@ -0,0 +1,66 @@ +# coding: utf-8 +"""Waylay Query: timeseries queries (v1 protocol) model tests. + +This code was generated from the OpenAPI documentation of 'Waylay Query: timeseries queries (v1 protocol)' + +Generated by OpenAPI Generator (https://openapi-generator.tech) + +Do not edit the class manually. +""" + +import json + +from jsf import JSF +from pydantic import TypeAdapter + +from ..openapi import MODEL_DEFINITIONS, with_example_provider + +try: + from waylay.services.queries.models.embeddings import Embeddings + + EmbeddingsAdapter = TypeAdapter(Embeddings) + MODELS_AVAILABLE = True +except ImportError as exc: + MODELS_AVAILABLE = False + +embeddings_model_schema = json.loads( + r"""{ + "title" : "_Embeddings", + "anyOf" : [ { + "$ref" : "#/components/schemas/HALEmbedding" + }, { + "type" : "array", + "items" : { + "$ref" : "#/components/schemas/HALEmbedding" + } + } ] +} +""", + object_hook=with_example_provider, +) +embeddings_model_schema.update({"definitions": MODEL_DEFINITIONS}) + +embeddings_faker = JSF(embeddings_model_schema, allow_none_optionals=1) + + +class EmbeddingsStub: + """Embeddings unit test stubs.""" + + @classmethod + def create_json(cls): + """Create a dict stub instance.""" + return embeddings_faker.generate(use_defaults=True, use_examples=True) + + @classmethod + def create_instance(cls) -> "Embeddings": + """Create Embeddings stub instance.""" + if not MODELS_AVAILABLE: + raise ImportError("Models must be installed to create class stubs") + json = cls.create_json() + if not json: + # use backup example based on the pydantic model schema + backup_faker = JSF(EmbeddingsAdapter.json_schema(), allow_none_optionals=1) + json = backup_faker.generate(use_defaults=True, use_examples=True) + return EmbeddingsAdapter.validate_python( + json, context={"skip_validation": True} + ) diff --git a/test/types/from_override_stub.py b/test/types/from_override_stub.py new file mode 100644 index 0000000..6700d95 --- /dev/null +++ b/test/types/from_override_stub.py @@ -0,0 +1,82 @@ +# coding: utf-8 +"""Waylay Query: timeseries queries (v1 protocol) model tests. + +This code was generated from the OpenAPI documentation of 'Waylay Query: timeseries queries (v1 protocol)' + +Generated by OpenAPI Generator (https://openapi-generator.tech) + +Do not edit the class manually. +""" + +import json + +from jsf import JSF +from pydantic import TypeAdapter + +from ..openapi import MODEL_DEFINITIONS, with_example_provider + +try: + from waylay.services.queries.models.from_override import FromOverride + + FromOverrideAdapter = TypeAdapter(FromOverride) + MODELS_AVAILABLE = True +except ImportError as exc: + MODELS_AVAILABLE = False + +from_override__model_schema = json.loads( + r"""{ + "title" : "From Override.", + "type" : "string", + "oneOf" : [ { + "title" : "ISO8601 absolute timestamp", + "pattern" : "[0-9]{4}-[0-9]{2}-[0-9]{2}(T.*)?", + "type" : "string", + "description" : "A date or date-time in [ISO8601](https://en.wikipedia.org/wiki/ISO_8601#Combined_date_and_time_representations) format. When no timezone is specified, the UTC timezone is assumed (`+00:00`)", + "format" : "date-time", + "example" : "2018-03-21T12:23:00+01:00" + }, { + "title" : "UNIX epoch milliseconds", + "minimum" : 0, + "type" : "integer", + "description" : "Absolute timestamp milliseconds in unix epoch since 1970-01-01.", + "example" : 1534836422284 + }, { + "title" : "ISO8601 Period Before Now", + "pattern" : "^P([0-9]+Y)?([0-9]+M)?([0-9]+W)?([0-9]+D)?(T([0-9]+H)?([0-9]+M)?([0-9]+(\\.[0-9]*)?S)?)?$", + "type" : "string", + "description" : "Specifies a timestamp before _now_ as a period in [ISO8601 duration](https://en.wikipedia.org/wiki/ISO_8601#Durations) format.", + "format" : "period", + "example" : "PT3H15M" + } ] +} +""", + object_hook=with_example_provider, +) +from_override__model_schema.update({"definitions": MODEL_DEFINITIONS}) + +from_override__faker = JSF(from_override__model_schema, allow_none_optionals=1) + + +class FromOverrideStub: + """FromOverride unit test stubs.""" + + @classmethod + def create_json(cls): + """Create a dict stub instance.""" + return from_override__faker.generate(use_defaults=True, use_examples=True) + + @classmethod + def create_instance(cls) -> "FromOverride": + """Create FromOverride stub instance.""" + if not MODELS_AVAILABLE: + raise ImportError("Models must be installed to create class stubs") + json = cls.create_json() + if not json: + # use backup example based on the pydantic model schema + backup_faker = JSF( + FromOverrideAdapter.json_schema(), allow_none_optionals=1 + ) + json = backup_faker.generate(use_defaults=True, use_examples=True) + return FromOverrideAdapter.validate_python( + json, context={"skip_validation": True} + ) diff --git a/test/types/grouping_interval_override_one_of_stub.py b/test/types/grouping_interval_override_one_of_stub.py new file mode 100644 index 0000000..65ddf4b --- /dev/null +++ b/test/types/grouping_interval_override_one_of_stub.py @@ -0,0 +1,71 @@ +# coding: utf-8 +"""Waylay Query: timeseries queries (v1 protocol) model tests. + +This code was generated from the OpenAPI documentation of 'Waylay Query: timeseries queries (v1 protocol)' + +Generated by OpenAPI Generator (https://openapi-generator.tech) + +Do not edit the class manually. +""" + +import json + +from jsf import JSF +from pydantic import TypeAdapter + +from ..openapi import MODEL_DEFINITIONS, with_example_provider + +try: + from waylay.services.queries.models.grouping_interval_override_one_of import ( + GroupingIntervalOverrideOneOf, + ) + + GroupingIntervalOverrideOneOfAdapter = TypeAdapter(GroupingIntervalOverrideOneOf) + MODELS_AVAILABLE = True +except ImportError as exc: + MODELS_AVAILABLE = False + +grouping_interval_override_one_of_model_schema = json.loads( + r"""{ + "type" : "string", + "description" : "When `inferred` is specified, the frequency of aggregation will be inferred from the main/first time series. This can be used to regularize the time series", + "enum" : [ "inferred" ] +} +""", + object_hook=with_example_provider, +) +grouping_interval_override_one_of_model_schema.update({ + "definitions": MODEL_DEFINITIONS +}) + +grouping_interval_override_one_of_faker = JSF( + grouping_interval_override_one_of_model_schema, allow_none_optionals=1 +) + + +class GroupingIntervalOverrideOneOfStub: + """GroupingIntervalOverrideOneOf unit test stubs.""" + + @classmethod + def create_json(cls): + """Create a dict stub instance.""" + return grouping_interval_override_one_of_faker.generate( + use_defaults=True, use_examples=True + ) + + @classmethod + def create_instance(cls) -> "GroupingIntervalOverrideOneOf": + """Create GroupingIntervalOverrideOneOf stub instance.""" + if not MODELS_AVAILABLE: + raise ImportError("Models must be installed to create class stubs") + json = cls.create_json() + if not json: + # use backup example based on the pydantic model schema + backup_faker = JSF( + GroupingIntervalOverrideOneOfAdapter.json_schema(), + allow_none_optionals=1, + ) + json = backup_faker.generate(use_defaults=True, use_examples=True) + return GroupingIntervalOverrideOneOfAdapter.validate_python( + json, context={"skip_validation": True} + ) diff --git a/test/types/grouping_interval_override_stub.py b/test/types/grouping_interval_override_stub.py new file mode 100644 index 0000000..3b34ce4 --- /dev/null +++ b/test/types/grouping_interval_override_stub.py @@ -0,0 +1,78 @@ +# coding: utf-8 +"""Waylay Query: timeseries queries (v1 protocol) model tests. + +This code was generated from the OpenAPI documentation of 'Waylay Query: timeseries queries (v1 protocol)' + +Generated by OpenAPI Generator (https://openapi-generator.tech) + +Do not edit the class manually. +""" + +import json + +from jsf import JSF +from pydantic import TypeAdapter + +from ..openapi import MODEL_DEFINITIONS, with_example_provider + +try: + from waylay.services.queries.models.grouping_interval_override import ( + GroupingIntervalOverride, + ) + + GroupingIntervalOverrideAdapter = TypeAdapter(GroupingIntervalOverride) + MODELS_AVAILABLE = True +except ImportError as exc: + MODELS_AVAILABLE = False + +grouping_interval_override_model_schema = json.loads( + r"""{ + "title" : "Grouping Interval Override", + "type" : "string", + "description" : "Override for the `freq` query attribute.", + "oneOf" : [ { + "title" : "ISO8601 period ", + "pattern" : "^P([0-9]+Y)?([0-9]+M)?([0-9]+W)?([0-9]+D)?(T([0-9]+H)?([0-9]+M)?([0-9]+(\\.[0-9]*)?S)?)?$", + "type" : "string", + "description" : "A period in [ISO8601 duration](https://en.wikipedia.org/wiki/ISO_8601#Durations) format.", + "format" : "period", + "example" : "PT3H15M" + }, { + "$ref" : "#/components/schemas/Grouping_Interval_Override_oneOf" + } ] +} +""", + object_hook=with_example_provider, +) +grouping_interval_override_model_schema.update({"definitions": MODEL_DEFINITIONS}) + +grouping_interval_override_faker = JSF( + grouping_interval_override_model_schema, allow_none_optionals=1 +) + + +class GroupingIntervalOverrideStub: + """GroupingIntervalOverride unit test stubs.""" + + @classmethod + def create_json(cls): + """Create a dict stub instance.""" + return grouping_interval_override_faker.generate( + use_defaults=True, use_examples=True + ) + + @classmethod + def create_instance(cls) -> "GroupingIntervalOverride": + """Create GroupingIntervalOverride stub instance.""" + if not MODELS_AVAILABLE: + raise ImportError("Models must be installed to create class stubs") + json = cls.create_json() + if not json: + # use backup example based on the pydantic model schema + backup_faker = JSF( + GroupingIntervalOverrideAdapter.json_schema(), allow_none_optionals=1 + ) + json = backup_faker.generate(use_defaults=True, use_examples=True) + return GroupingIntervalOverrideAdapter.validate_python( + json, context={"skip_validation": True} + ) diff --git a/test/types/grouping_interval_stub.py b/test/types/grouping_interval_stub.py new file mode 100644 index 0000000..0e84994 --- /dev/null +++ b/test/types/grouping_interval_stub.py @@ -0,0 +1,72 @@ +# coding: utf-8 +"""Waylay Query: timeseries queries (v1 protocol) model tests. + +This code was generated from the OpenAPI documentation of 'Waylay Query: timeseries queries (v1 protocol)' + +Generated by OpenAPI Generator (https://openapi-generator.tech) + +Do not edit the class manually. +""" + +import json + +from jsf import JSF +from pydantic import TypeAdapter + +from ..openapi import MODEL_DEFINITIONS, with_example_provider + +try: + from waylay.services.queries.models.grouping_interval import GroupingInterval + + GroupingIntervalAdapter = TypeAdapter(GroupingInterval) + MODELS_AVAILABLE = True +except ImportError as exc: + MODELS_AVAILABLE = False + +grouping_interval_model_schema = json.loads( + r"""{ + "title" : "Grouping interval", + "type" : "string", + "description" : "Interval used to aggregate or regularize data. One of the [time line](https://docs.waylay.io/#/api/query/?id=time-line-properties) specifiers.", + "oneOf" : [ { + "title" : "ISO8601 period ", + "pattern" : "^P([0-9]+Y)?([0-9]+M)?([0-9]+W)?([0-9]+D)?(T([0-9]+H)?([0-9]+M)?([0-9]+(\\.[0-9]*)?S)?)?$", + "type" : "string", + "description" : "A period in [ISO8601 duration](https://en.wikipedia.org/wiki/ISO_8601#Durations) format.", + "format" : "period", + "example" : "PT3H15M" + }, { + "$ref" : "#/components/schemas/Grouping_Interval_Override_oneOf" + } ] +} +""", + object_hook=with_example_provider, +) +grouping_interval_model_schema.update({"definitions": MODEL_DEFINITIONS}) + +grouping_interval_faker = JSF(grouping_interval_model_schema, allow_none_optionals=1) + + +class GroupingIntervalStub: + """GroupingInterval unit test stubs.""" + + @classmethod + def create_json(cls): + """Create a dict stub instance.""" + return grouping_interval_faker.generate(use_defaults=True, use_examples=True) + + @classmethod + def create_instance(cls) -> "GroupingInterval": + """Create GroupingInterval stub instance.""" + if not MODELS_AVAILABLE: + raise ImportError("Models must be installed to create class stubs") + json = cls.create_json() + if not json: + # use backup example based on the pydantic model schema + backup_faker = JSF( + GroupingIntervalAdapter.json_schema(), allow_none_optionals=1 + ) + json = backup_faker.generate(use_defaults=True, use_examples=True) + return GroupingIntervalAdapter.validate_python( + json, context={"skip_validation": True} + ) diff --git a/test/types/hal_link_method_stub.py b/test/types/hal_link_method_stub.py new file mode 100644 index 0000000..2a0c0dd --- /dev/null +++ b/test/types/hal_link_method_stub.py @@ -0,0 +1,63 @@ +# coding: utf-8 +"""Waylay Query: timeseries queries (v1 protocol) model tests. + +This code was generated from the OpenAPI documentation of 'Waylay Query: timeseries queries (v1 protocol)' + +Generated by OpenAPI Generator (https://openapi-generator.tech) + +Do not edit the class manually. +""" + +import json + +from jsf import JSF +from pydantic import TypeAdapter + +from ..openapi import MODEL_DEFINITIONS, with_example_provider + +try: + from waylay.services.queries.models.hal_link_method import HALLinkMethod + + HALLinkMethodAdapter = TypeAdapter(HALLinkMethod) + MODELS_AVAILABLE = True +except ImportError as exc: + MODELS_AVAILABLE = False + +hal_link_method_model_schema = json.loads( + r"""{ + "title" : "HALLinkMethod", + "type" : "string", + "description" : "An http method that can be specified in a HAL link.", + "enum" : [ "GET", "POST", "PUT", "DELETE", "PATCH" ] +} +""", + object_hook=with_example_provider, +) +hal_link_method_model_schema.update({"definitions": MODEL_DEFINITIONS}) + +hal_link_method_faker = JSF(hal_link_method_model_schema, allow_none_optionals=1) + + +class HALLinkMethodStub: + """HALLinkMethod unit test stubs.""" + + @classmethod + def create_json(cls): + """Create a dict stub instance.""" + return hal_link_method_faker.generate(use_defaults=True, use_examples=True) + + @classmethod + def create_instance(cls) -> "HALLinkMethod": + """Create HALLinkMethod stub instance.""" + if not MODELS_AVAILABLE: + raise ImportError("Models must be installed to create class stubs") + json = cls.create_json() + if not json: + # use backup example based on the pydantic model schema + backup_faker = JSF( + HALLinkMethodAdapter.json_schema(), allow_none_optionals=1 + ) + json = backup_faker.generate(use_defaults=True, use_examples=True) + return HALLinkMethodAdapter.validate_python( + json, context={"skip_validation": True} + ) diff --git a/test/types/hal_link_role_stub.py b/test/types/hal_link_role_stub.py new file mode 100644 index 0000000..f0ab95c --- /dev/null +++ b/test/types/hal_link_role_stub.py @@ -0,0 +1,60 @@ +# coding: utf-8 +"""Waylay Query: timeseries queries (v1 protocol) model tests. + +This code was generated from the OpenAPI documentation of 'Waylay Query: timeseries queries (v1 protocol)' + +Generated by OpenAPI Generator (https://openapi-generator.tech) + +Do not edit the class manually. +""" + +import json + +from jsf import JSF +from pydantic import TypeAdapter + +from ..openapi import MODEL_DEFINITIONS, with_example_provider + +try: + from waylay.services.queries.models.hal_link_role import HALLinkRole + + HALLinkRoleAdapter = TypeAdapter(HALLinkRole) + MODELS_AVAILABLE = True +except ImportError as exc: + MODELS_AVAILABLE = False + +hal_link_role_model_schema = json.loads( + r"""{ + "type" : "string", + "description" : "Supported link and embedding roles in HAL representations.", + "enum" : [ "self", "first", "prev", "next", "last", "execute" ] +} +""", + object_hook=with_example_provider, +) +hal_link_role_model_schema.update({"definitions": MODEL_DEFINITIONS}) + +hal_link_role_faker = JSF(hal_link_role_model_schema, allow_none_optionals=1) + + +class HALLinkRoleStub: + """HALLinkRole unit test stubs.""" + + @classmethod + def create_json(cls): + """Create a dict stub instance.""" + return hal_link_role_faker.generate(use_defaults=True, use_examples=True) + + @classmethod + def create_instance(cls) -> "HALLinkRole": + """Create HALLinkRole stub instance.""" + if not MODELS_AVAILABLE: + raise ImportError("Models must be installed to create class stubs") + json = cls.create_json() + if not json: + # use backup example based on the pydantic model schema + backup_faker = JSF(HALLinkRoleAdapter.json_schema(), allow_none_optionals=1) + json = backup_faker.generate(use_defaults=True, use_examples=True) + return HALLinkRoleAdapter.validate_python( + json, context={"skip_validation": True} + ) diff --git a/test/types/hal_link_stub.py b/test/types/hal_link_stub.py new file mode 100644 index 0000000..222255c --- /dev/null +++ b/test/types/hal_link_stub.py @@ -0,0 +1,74 @@ +# coding: utf-8 +"""Waylay Query: timeseries queries (v1 protocol) model tests. + +This code was generated from the OpenAPI documentation of 'Waylay Query: timeseries queries (v1 protocol)' + +Generated by OpenAPI Generator (https://openapi-generator.tech) + +Do not edit the class manually. +""" + +import json + +from jsf import JSF +from pydantic import TypeAdapter + +from ..openapi import MODEL_DEFINITIONS, with_example_provider + +try: + from waylay.services.queries.models.hal_link import HALLink + + HALLinkAdapter = TypeAdapter(HALLink) + MODELS_AVAILABLE = True +except ImportError as exc: + MODELS_AVAILABLE = False + +hal_link_model_schema = json.loads( + r"""{ + "required" : [ "href" ], + "type" : "object", + "properties" : { + "href" : { + "title" : "Link URL", + "type" : "string", + "description" : "Target url for this link." + }, + "type" : { + "title" : "Link type", + "type" : "string", + "description" : "Type of the resource referenced by this link." + }, + "method" : { + "$ref" : "#/components/schemas/HALLinkMethod" + } + }, + "additionalProperties" : true, + "description" : "A link target in a HAL response." +} +""", + object_hook=with_example_provider, +) +hal_link_model_schema.update({"definitions": MODEL_DEFINITIONS}) + +hal_link_faker = JSF(hal_link_model_schema, allow_none_optionals=1) + + +class HALLinkStub: + """HALLink unit test stubs.""" + + @classmethod + def create_json(cls): + """Create a dict stub instance.""" + return hal_link_faker.generate(use_defaults=True, use_examples=True) + + @classmethod + def create_instance(cls) -> "HALLink": + """Create HALLink stub instance.""" + if not MODELS_AVAILABLE: + raise ImportError("Models must be installed to create class stubs") + json = cls.create_json() + if not json: + # use backup example based on the pydantic model schema + backup_faker = JSF(HALLinkAdapter.json_schema(), allow_none_optionals=1) + json = backup_faker.generate(use_defaults=True, use_examples=True) + return HALLinkAdapter.validate_python(json, context={"skip_validation": True}) diff --git a/test/types/header_array_option_stub.py b/test/types/header_array_option_stub.py new file mode 100644 index 0000000..f14b5c7 --- /dev/null +++ b/test/types/header_array_option_stub.py @@ -0,0 +1,64 @@ +# coding: utf-8 +"""Waylay Query: timeseries queries (v1 protocol) model tests. + +This code was generated from the OpenAPI documentation of 'Waylay Query: timeseries queries (v1 protocol)' + +Generated by OpenAPI Generator (https://openapi-generator.tech) + +Do not edit the class manually. +""" + +import json + +from jsf import JSF +from pydantic import TypeAdapter + +from ..openapi import MODEL_DEFINITIONS, with_example_provider + +try: + from waylay.services.queries.models.header_array_option import HeaderArrayOption + + HeaderArrayOptionAdapter = TypeAdapter(HeaderArrayOption) + MODELS_AVAILABLE = True +except ImportError as exc: + MODELS_AVAILABLE = False + +header_array_option_model_schema = json.loads( + r"""{ + "type" : "string", + "description" : "Allowed values for the render.header_array option.", + "enum" : [ "row", "column" ] +} +""", + object_hook=with_example_provider, +) +header_array_option_model_schema.update({"definitions": MODEL_DEFINITIONS}) + +header_array_option_faker = JSF( + header_array_option_model_schema, allow_none_optionals=1 +) + + +class HeaderArrayOptionStub: + """HeaderArrayOption unit test stubs.""" + + @classmethod + def create_json(cls): + """Create a dict stub instance.""" + return header_array_option_faker.generate(use_defaults=True, use_examples=True) + + @classmethod + def create_instance(cls) -> "HeaderArrayOption": + """Create HeaderArrayOption stub instance.""" + if not MODELS_AVAILABLE: + raise ImportError("Models must be installed to create class stubs") + json = cls.create_json() + if not json: + # use backup example based on the pydantic model schema + backup_faker = JSF( + HeaderArrayOptionAdapter.json_schema(), allow_none_optionals=1 + ) + json = backup_faker.generate(use_defaults=True, use_examples=True) + return HeaderArrayOptionAdapter.validate_python( + json, context={"skip_validation": True} + ) diff --git a/test/types/hierarchical_stub.py b/test/types/hierarchical_stub.py new file mode 100644 index 0000000..05d952e --- /dev/null +++ b/test/types/hierarchical_stub.py @@ -0,0 +1,69 @@ +# coding: utf-8 +"""Waylay Query: timeseries queries (v1 protocol) model tests. + +This code was generated from the OpenAPI documentation of 'Waylay Query: timeseries queries (v1 protocol)' + +Generated by OpenAPI Generator (https://openapi-generator.tech) + +Do not edit the class manually. +""" + +import json + +from jsf import JSF +from pydantic import TypeAdapter + +from ..openapi import MODEL_DEFINITIONS, with_example_provider + +try: + from waylay.services.queries.models.hierarchical import Hierarchical + + HierarchicalAdapter = TypeAdapter(Hierarchical) + MODELS_AVAILABLE = True +except ImportError as exc: + MODELS_AVAILABLE = False + +hierarchical_model_schema = json.loads( + r"""{ + "title" : "Hierarchical", + "description" : "if true, use hierarchical objects to represent multiple row (or column) dimensions, otherwise multi-keys get concatenated with a dot-delimiter. If the value is a list, only these levels are kept as separate levels, while remaining levels get concatenated keys", + "anyOf" : [ { + "type" : "boolean" + }, { + "type" : "array", + "items" : { + "type" : "string" + } + } ] +} +""", + object_hook=with_example_provider, +) +hierarchical_model_schema.update({"definitions": MODEL_DEFINITIONS}) + +hierarchical_faker = JSF(hierarchical_model_schema, allow_none_optionals=1) + + +class HierarchicalStub: + """Hierarchical unit test stubs.""" + + @classmethod + def create_json(cls): + """Create a dict stub instance.""" + return hierarchical_faker.generate(use_defaults=True, use_examples=True) + + @classmethod + def create_instance(cls) -> "Hierarchical": + """Create Hierarchical stub instance.""" + if not MODELS_AVAILABLE: + raise ImportError("Models must be installed to create class stubs") + json = cls.create_json() + if not json: + # use backup example based on the pydantic model schema + backup_faker = JSF( + HierarchicalAdapter.json_schema(), allow_none_optionals=1 + ) + json = backup_faker.generate(use_defaults=True, use_examples=True) + return HierarchicalAdapter.validate_python( + json, context={"skip_validation": True} + ) diff --git a/test/types/http_validation_error_stub.py b/test/types/http_validation_error_stub.py new file mode 100644 index 0000000..8cffe43 --- /dev/null +++ b/test/types/http_validation_error_stub.py @@ -0,0 +1,73 @@ +# coding: utf-8 +"""Waylay Query: timeseries queries (v1 protocol) model tests. + +This code was generated from the OpenAPI documentation of 'Waylay Query: timeseries queries (v1 protocol)' + +Generated by OpenAPI Generator (https://openapi-generator.tech) + +Do not edit the class manually. +""" + +import json + +from jsf import JSF +from pydantic import TypeAdapter + +from ..openapi import MODEL_DEFINITIONS, with_example_provider + +try: + from waylay.services.queries.models.http_validation_error import HTTPValidationError + + HTTPValidationErrorAdapter = TypeAdapter(HTTPValidationError) + MODELS_AVAILABLE = True +except ImportError as exc: + MODELS_AVAILABLE = False + +http_validation_error_model_schema = json.loads( + r"""{ + "type" : "object", + "properties" : { + "detail" : { + "title" : "Detail", + "type" : "array", + "items" : { + "$ref" : "#/components/schemas/ValidationError" + } + } + } +} +""", + object_hook=with_example_provider, +) +http_validation_error_model_schema.update({"definitions": MODEL_DEFINITIONS}) + +http_validation_error_faker = JSF( + http_validation_error_model_schema, allow_none_optionals=1 +) + + +class HTTPValidationErrorStub: + """HTTPValidationError unit test stubs.""" + + @classmethod + def create_json(cls): + """Create a dict stub instance.""" + return http_validation_error_faker.generate( + use_defaults=True, use_examples=True + ) + + @classmethod + def create_instance(cls) -> "HTTPValidationError": + """Create HTTPValidationError stub instance.""" + if not MODELS_AVAILABLE: + raise ImportError("Models must be installed to create class stubs") + json = cls.create_json() + if not json: + # use backup example based on the pydantic model schema + backup_faker = JSF( + HTTPValidationErrorAdapter.json_schema(), allow_none_optionals=1 + ) + json = backup_faker.generate(use_defaults=True, use_examples=True) + return HTTPValidationErrorAdapter.validate_python( + json, context={"skip_validation": True} + ) diff --git a/test/types/interpolation_method_one_of10_stub.py b/test/types/interpolation_method_one_of10_stub.py new file mode 100644 index 0000000..e15b602 --- /dev/null +++ b/test/types/interpolation_method_one_of10_stub.py @@ -0,0 +1,68 @@ +# coding: utf-8 +"""Waylay Query: timeseries queries (v1 protocol) model tests. + +This code was generated from the OpenAPI documentation of 'Waylay Query: timeseries queries (v1 protocol)' + +Generated by OpenAPI Generator (https://openapi-generator.tech) + +Do not edit the class manually. +""" + +import json + +from jsf import JSF +from pydantic import TypeAdapter + +from ..openapi import MODEL_DEFINITIONS, with_example_provider + +try: + from waylay.services.queries.models.interpolation_method_one_of10 import ( + InterpolationMethodOneOf10, + ) + + InterpolationMethodOneOf10Adapter = TypeAdapter(InterpolationMethodOneOf10) + MODELS_AVAILABLE = True +except ImportError as exc: + MODELS_AVAILABLE = False + +interpolation_method_one_of_10_model_schema = json.loads( + r"""{ + "type" : "string", + "description" : "Interpolate with a spline function of a user-specified order.", + "enum" : [ "spline" ] +} +""", + object_hook=with_example_provider, +) +interpolation_method_one_of_10_model_schema.update({"definitions": MODEL_DEFINITIONS}) + +interpolation_method_one_of_10_faker = JSF( + interpolation_method_one_of_10_model_schema, allow_none_optionals=1 +) + + +class InterpolationMethodOneOf10Stub: + """InterpolationMethodOneOf10 unit test stubs.""" + + @classmethod + def create_json(cls): + """Create a dict stub instance.""" + return interpolation_method_one_of_10_faker.generate( + use_defaults=True, use_examples=True + ) + + @classmethod + def create_instance(cls) -> "InterpolationMethodOneOf10": + """Create InterpolationMethodOneOf10 stub instance.""" + if not MODELS_AVAILABLE: + raise ImportError("Models must be installed to create class stubs") + json = cls.create_json() + if not json: + # use backup example based on the pydantic model schema + backup_faker = JSF( + InterpolationMethodOneOf10Adapter.json_schema(), allow_none_optionals=1 + ) + json = backup_faker.generate(use_defaults=True, use_examples=True) + return InterpolationMethodOneOf10Adapter.validate_python( + json, context={"skip_validation": True} + ) diff --git a/test/types/interpolation_method_one_of11_stub.py b/test/types/interpolation_method_one_of11_stub.py new file mode 100644 index 0000000..a4c040a --- /dev/null +++ b/test/types/interpolation_method_one_of11_stub.py @@ -0,0 +1,68 @@ +# coding: utf-8 +"""Waylay Query: timeseries queries (v1 protocol) model tests. + +This code was generated from the OpenAPI documentation of 'Waylay Query: timeseries queries (v1 protocol)' + +Generated by OpenAPI Generator (https://openapi-generator.tech) + +Do not edit the class manually. +""" + +import json + +from jsf import JSF +from pydantic import TypeAdapter + +from ..openapi import MODEL_DEFINITIONS, with_example_provider + +try: + from waylay.services.queries.models.interpolation_method_one_of11 import ( + InterpolationMethodOneOf11, + ) + + InterpolationMethodOneOf11Adapter = TypeAdapter(InterpolationMethodOneOf11) + MODELS_AVAILABLE = True +except ImportError as exc: + MODELS_AVAILABLE = False + +interpolation_method_one_of_11_model_schema = json.loads( + r"""{ + "type" : "string", + "description" : "Interpolate with the derivative of order 1.", + "enum" : [ "from_derivatives" ] +} +""", + object_hook=with_example_provider, +) +interpolation_method_one_of_11_model_schema.update({"definitions": MODEL_DEFINITIONS}) + +interpolation_method_one_of_11_faker = JSF( + interpolation_method_one_of_11_model_schema, allow_none_optionals=1 +) + + +class InterpolationMethodOneOf11Stub: + """InterpolationMethodOneOf11 unit test stubs.""" + + @classmethod + def create_json(cls): + """Create a dict stub instance.""" + return interpolation_method_one_of_11_faker.generate( + use_defaults=True, use_examples=True + ) + + @classmethod + def create_instance(cls) -> "InterpolationMethodOneOf11": + """Create InterpolationMethodOneOf11 stub instance.""" + if not MODELS_AVAILABLE: + raise ImportError("Models must be installed to create class stubs") + json = cls.create_json() + if not json: + # use backup example based on the pydantic model schema + backup_faker = JSF( + InterpolationMethodOneOf11Adapter.json_schema(), allow_none_optionals=1 + ) + json = backup_faker.generate(use_defaults=True, use_examples=True) + return InterpolationMethodOneOf11Adapter.validate_python( + json, context={"skip_validation": True} + ) diff --git a/test/types/interpolation_method_one_of12_stub.py b/test/types/interpolation_method_one_of12_stub.py new file mode 100644 index 0000000..c5ae03b --- /dev/null +++ b/test/types/interpolation_method_one_of12_stub.py @@ -0,0 +1,68 @@ +# coding: utf-8 +"""Waylay Query: timeseries queries (v1 protocol) model tests. + +This code was generated from the OpenAPI documentation of 'Waylay Query: timeseries queries (v1 protocol)' + +Generated by OpenAPI Generator (https://openapi-generator.tech) + +Do not edit the class manually. +""" + +import json + +from jsf import JSF +from pydantic import TypeAdapter + +from ..openapi import MODEL_DEFINITIONS, with_example_provider + +try: + from waylay.services.queries.models.interpolation_method_one_of12 import ( + InterpolationMethodOneOf12, + ) + + InterpolationMethodOneOf12Adapter = TypeAdapter(InterpolationMethodOneOf12) + MODELS_AVAILABLE = True +except ImportError as exc: + MODELS_AVAILABLE = False + +interpolation_method_one_of_12_model_schema = json.loads( + r"""{ + "type" : "string", + "description" : "Interpolate with a piecewise cubic spline function.", + "enum" : [ "pchip" ] +} +""", + object_hook=with_example_provider, +) +interpolation_method_one_of_12_model_schema.update({"definitions": MODEL_DEFINITIONS}) + +interpolation_method_one_of_12_faker = JSF( + interpolation_method_one_of_12_model_schema, allow_none_optionals=1 +) + + +class InterpolationMethodOneOf12Stub: + """InterpolationMethodOneOf12 unit test stubs.""" + + @classmethod + def create_json(cls): + """Create a dict stub instance.""" + return interpolation_method_one_of_12_faker.generate( + use_defaults=True, use_examples=True + ) + + @classmethod + def create_instance(cls) -> "InterpolationMethodOneOf12": + """Create InterpolationMethodOneOf12 stub instance.""" + if not MODELS_AVAILABLE: + raise ImportError("Models must be installed to create class stubs") + json = cls.create_json() + if not json: + # use backup example based on the pydantic model schema + backup_faker = JSF( + InterpolationMethodOneOf12Adapter.json_schema(), allow_none_optionals=1 + ) + json = backup_faker.generate(use_defaults=True, use_examples=True) + return InterpolationMethodOneOf12Adapter.validate_python( + json, context={"skip_validation": True} + ) diff --git a/test/types/interpolation_method_one_of13_stub.py b/test/types/interpolation_method_one_of13_stub.py new file mode 100644 index 0000000..fadd44a --- /dev/null +++ b/test/types/interpolation_method_one_of13_stub.py @@ -0,0 +1,68 @@ +# coding: utf-8 +"""Waylay Query: timeseries queries (v1 protocol) model tests. + +This code was generated from the OpenAPI documentation of 'Waylay Query: timeseries queries (v1 protocol)' + +Generated by OpenAPI Generator (https://openapi-generator.tech) + +Do not edit the class manually. +""" + +import json + +from jsf import JSF +from pydantic import TypeAdapter + +from ..openapi import MODEL_DEFINITIONS, with_example_provider + +try: + from waylay.services.queries.models.interpolation_method_one_of13 import ( + InterpolationMethodOneOf13, + ) + + InterpolationMethodOneOf13Adapter = TypeAdapter(InterpolationMethodOneOf13) + MODELS_AVAILABLE = True +except ImportError as exc: + MODELS_AVAILABLE = False + +interpolation_method_one_of_13_model_schema = json.loads( + r"""{ + "type" : "string", + "description" : "Interpolate with a non-smoothing spline of order 2, called Akima interpolation.", + "enum" : [ "akima" ] +} +""", + object_hook=with_example_provider, +) +interpolation_method_one_of_13_model_schema.update({"definitions": MODEL_DEFINITIONS}) + +interpolation_method_one_of_13_faker = JSF( + interpolation_method_one_of_13_model_schema, allow_none_optionals=1 +) + + +class InterpolationMethodOneOf13Stub: + """InterpolationMethodOneOf13 unit test stubs.""" + + @classmethod + def create_json(cls): + """Create a dict stub instance.""" + return interpolation_method_one_of_13_faker.generate( + use_defaults=True, use_examples=True + ) + + @classmethod + def create_instance(cls) -> "InterpolationMethodOneOf13": + """Create InterpolationMethodOneOf13 stub instance.""" + if not MODELS_AVAILABLE: + raise ImportError("Models must be installed to create class stubs") + json = cls.create_json() + if not json: + # use backup example based on the pydantic model schema + backup_faker = JSF( + InterpolationMethodOneOf13Adapter.json_schema(), allow_none_optionals=1 + ) + json = backup_faker.generate(use_defaults=True, use_examples=True) + return InterpolationMethodOneOf13Adapter.validate_python( + json, context={"skip_validation": True} + ) diff --git a/test/types/interpolation_method_one_of1_stub.py b/test/types/interpolation_method_one_of1_stub.py new file mode 100644 index 0000000..d36706d --- /dev/null +++ b/test/types/interpolation_method_one_of1_stub.py @@ -0,0 +1,68 @@ +# coding: utf-8 +"""Waylay Query: timeseries queries (v1 protocol) model tests. + +This code was generated from the OpenAPI documentation of 'Waylay Query: timeseries queries (v1 protocol)' + +Generated by OpenAPI Generator (https://openapi-generator.tech) + +Do not edit the class manually. +""" + +import json + +from jsf import JSF +from pydantic import TypeAdapter + +from ..openapi import MODEL_DEFINITIONS, with_example_provider + +try: + from waylay.services.queries.models.interpolation_method_one_of1 import ( + InterpolationMethodOneOf1, + ) + + InterpolationMethodOneOf1Adapter = TypeAdapter(InterpolationMethodOneOf1) + MODELS_AVAILABLE = True +except ImportError as exc: + MODELS_AVAILABLE = False + +interpolation_method_one_of_1_model_schema = json.loads( + r"""{ + "type" : "string", + "description" : "Interpolate with a fixed, user-specified value. This method also extrapolates.", + "enum" : [ "fixed" ] +} +""", + object_hook=with_example_provider, +) +interpolation_method_one_of_1_model_schema.update({"definitions": MODEL_DEFINITIONS}) + +interpolation_method_one_of_1_faker = JSF( + interpolation_method_one_of_1_model_schema, allow_none_optionals=1 +) + + +class InterpolationMethodOneOf1Stub: + """InterpolationMethodOneOf1 unit test stubs.""" + + @classmethod + def create_json(cls): + """Create a dict stub instance.""" + return interpolation_method_one_of_1_faker.generate( + use_defaults=True, use_examples=True + ) + + @classmethod + def create_instance(cls) -> "InterpolationMethodOneOf1": + """Create InterpolationMethodOneOf1 stub instance.""" + if not MODELS_AVAILABLE: + raise ImportError("Models must be installed to create class stubs") + json = cls.create_json() + if not json: + # use backup example based on the pydantic model schema + backup_faker = JSF( + InterpolationMethodOneOf1Adapter.json_schema(), allow_none_optionals=1 + ) + json = backup_faker.generate(use_defaults=True, use_examples=True) + return InterpolationMethodOneOf1Adapter.validate_python( + json, context={"skip_validation": True} + ) diff --git a/test/types/interpolation_method_one_of2_stub.py b/test/types/interpolation_method_one_of2_stub.py new file mode 100644 index 0000000..9caefdb --- /dev/null +++ b/test/types/interpolation_method_one_of2_stub.py @@ -0,0 +1,68 @@ +# coding: utf-8 +"""Waylay Query: timeseries queries (v1 protocol) model tests. + +This code was generated from the OpenAPI documentation of 'Waylay Query: timeseries queries (v1 protocol)' + +Generated by OpenAPI Generator (https://openapi-generator.tech) + +Do not edit the class manually. +""" + +import json + +from jsf import JSF +from pydantic import TypeAdapter + +from ..openapi import MODEL_DEFINITIONS, with_example_provider + +try: + from waylay.services.queries.models.interpolation_method_one_of2 import ( + InterpolationMethodOneOf2, + ) + + InterpolationMethodOneOf2Adapter = TypeAdapter(InterpolationMethodOneOf2) + MODELS_AVAILABLE = True +except ImportError as exc: + MODELS_AVAILABLE = False + +interpolation_method_one_of_2_model_schema = json.loads( + r"""{ + "type" : "string", + "description" : "Same as pad, but using the last observed value. This method also extrapolates", + "enum" : [ "backfill" ] +} +""", + object_hook=with_example_provider, +) +interpolation_method_one_of_2_model_schema.update({"definitions": MODEL_DEFINITIONS}) + +interpolation_method_one_of_2_faker = JSF( + interpolation_method_one_of_2_model_schema, allow_none_optionals=1 +) + + +class InterpolationMethodOneOf2Stub: + """InterpolationMethodOneOf2 unit test stubs.""" + + @classmethod + def create_json(cls): + """Create a dict stub instance.""" + return interpolation_method_one_of_2_faker.generate( + use_defaults=True, use_examples=True + ) + + @classmethod + def create_instance(cls) -> "InterpolationMethodOneOf2": + """Create InterpolationMethodOneOf2 stub instance.""" + if not MODELS_AVAILABLE: + raise ImportError("Models must be installed to create class stubs") + json = cls.create_json() + if not json: + # use backup example based on the pydantic model schema + backup_faker = JSF( + InterpolationMethodOneOf2Adapter.json_schema(), allow_none_optionals=1 + ) + json = backup_faker.generate(use_defaults=True, use_examples=True) + return InterpolationMethodOneOf2Adapter.validate_python( + json, context={"skip_validation": True} + ) diff --git a/test/types/interpolation_method_one_of3_stub.py b/test/types/interpolation_method_one_of3_stub.py new file mode 100644 index 0000000..4cff7b1 --- /dev/null +++ b/test/types/interpolation_method_one_of3_stub.py @@ -0,0 +1,68 @@ +# coding: utf-8 +"""Waylay Query: timeseries queries (v1 protocol) model tests. + +This code was generated from the OpenAPI documentation of 'Waylay Query: timeseries queries (v1 protocol)' + +Generated by OpenAPI Generator (https://openapi-generator.tech) + +Do not edit the class manually. +""" + +import json + +from jsf import JSF +from pydantic import TypeAdapter + +from ..openapi import MODEL_DEFINITIONS, with_example_provider + +try: + from waylay.services.queries.models.interpolation_method_one_of3 import ( + InterpolationMethodOneOf3, + ) + + InterpolationMethodOneOf3Adapter = TypeAdapter(InterpolationMethodOneOf3) + MODELS_AVAILABLE = True +except ImportError as exc: + MODELS_AVAILABLE = False + +interpolation_method_one_of_3_model_schema = json.loads( + r"""{ + "type" : "string", + "description" : "Linearly go from the first observed value of the gap to the last observed oneThis method also extrapolates", + "enum" : [ "linear" ] +} +""", + object_hook=with_example_provider, +) +interpolation_method_one_of_3_model_schema.update({"definitions": MODEL_DEFINITIONS}) + +interpolation_method_one_of_3_faker = JSF( + interpolation_method_one_of_3_model_schema, allow_none_optionals=1 +) + + +class InterpolationMethodOneOf3Stub: + """InterpolationMethodOneOf3 unit test stubs.""" + + @classmethod + def create_json(cls): + """Create a dict stub instance.""" + return interpolation_method_one_of_3_faker.generate( + use_defaults=True, use_examples=True + ) + + @classmethod + def create_instance(cls) -> "InterpolationMethodOneOf3": + """Create InterpolationMethodOneOf3 stub instance.""" + if not MODELS_AVAILABLE: + raise ImportError("Models must be installed to create class stubs") + json = cls.create_json() + if not json: + # use backup example based on the pydantic model schema + backup_faker = JSF( + InterpolationMethodOneOf3Adapter.json_schema(), allow_none_optionals=1 + ) + json = backup_faker.generate(use_defaults=True, use_examples=True) + return InterpolationMethodOneOf3Adapter.validate_python( + json, context={"skip_validation": True} + ) diff --git a/test/types/interpolation_method_one_of4_stub.py b/test/types/interpolation_method_one_of4_stub.py new file mode 100644 index 0000000..b667c57 --- /dev/null +++ b/test/types/interpolation_method_one_of4_stub.py @@ -0,0 +1,68 @@ +# coding: utf-8 +"""Waylay Query: timeseries queries (v1 protocol) model tests. + +This code was generated from the OpenAPI documentation of 'Waylay Query: timeseries queries (v1 protocol)' + +Generated by OpenAPI Generator (https://openapi-generator.tech) + +Do not edit the class manually. +""" + +import json + +from jsf import JSF +from pydantic import TypeAdapter + +from ..openapi import MODEL_DEFINITIONS, with_example_provider + +try: + from waylay.services.queries.models.interpolation_method_one_of4 import ( + InterpolationMethodOneOf4, + ) + + InterpolationMethodOneOf4Adapter = TypeAdapter(InterpolationMethodOneOf4) + MODELS_AVAILABLE = True +except ImportError as exc: + MODELS_AVAILABLE = False + +interpolation_method_one_of_4_model_schema = json.loads( + r"""{ + "type" : "string", + "description" : "Use the value that is closest in time.", + "enum" : [ "nearest" ] +} +""", + object_hook=with_example_provider, +) +interpolation_method_one_of_4_model_schema.update({"definitions": MODEL_DEFINITIONS}) + +interpolation_method_one_of_4_faker = JSF( + interpolation_method_one_of_4_model_schema, allow_none_optionals=1 +) + + +class InterpolationMethodOneOf4Stub: + """InterpolationMethodOneOf4 unit test stubs.""" + + @classmethod + def create_json(cls): + """Create a dict stub instance.""" + return interpolation_method_one_of_4_faker.generate( + use_defaults=True, use_examples=True + ) + + @classmethod + def create_instance(cls) -> "InterpolationMethodOneOf4": + """Create InterpolationMethodOneOf4 stub instance.""" + if not MODELS_AVAILABLE: + raise ImportError("Models must be installed to create class stubs") + json = cls.create_json() + if not json: + # use backup example based on the pydantic model schema + backup_faker = JSF( + InterpolationMethodOneOf4Adapter.json_schema(), allow_none_optionals=1 + ) + json = backup_faker.generate(use_defaults=True, use_examples=True) + return InterpolationMethodOneOf4Adapter.validate_python( + json, context={"skip_validation": True} + ) diff --git a/test/types/interpolation_method_one_of5_stub.py b/test/types/interpolation_method_one_of5_stub.py new file mode 100644 index 0000000..487a46e --- /dev/null +++ b/test/types/interpolation_method_one_of5_stub.py @@ -0,0 +1,68 @@ +# coding: utf-8 +"""Waylay Query: timeseries queries (v1 protocol) model tests. + +This code was generated from the OpenAPI documentation of 'Waylay Query: timeseries queries (v1 protocol)' + +Generated by OpenAPI Generator (https://openapi-generator.tech) + +Do not edit the class manually. +""" + +import json + +from jsf import JSF +from pydantic import TypeAdapter + +from ..openapi import MODEL_DEFINITIONS, with_example_provider + +try: + from waylay.services.queries.models.interpolation_method_one_of5 import ( + InterpolationMethodOneOf5, + ) + + InterpolationMethodOneOf5Adapter = TypeAdapter(InterpolationMethodOneOf5) + MODELS_AVAILABLE = True +except ImportError as exc: + MODELS_AVAILABLE = False + +interpolation_method_one_of_5_model_schema = json.loads( + r"""{ + "type" : "string", + "description" : "Interpolate with a spline function of order 0, which is a piecewise polynomial.", + "enum" : [ "zero" ] +} +""", + object_hook=with_example_provider, +) +interpolation_method_one_of_5_model_schema.update({"definitions": MODEL_DEFINITIONS}) + +interpolation_method_one_of_5_faker = JSF( + interpolation_method_one_of_5_model_schema, allow_none_optionals=1 +) + + +class InterpolationMethodOneOf5Stub: + """InterpolationMethodOneOf5 unit test stubs.""" + + @classmethod + def create_json(cls): + """Create a dict stub instance.""" + return interpolation_method_one_of_5_faker.generate( + use_defaults=True, use_examples=True + ) + + @classmethod + def create_instance(cls) -> "InterpolationMethodOneOf5": + """Create InterpolationMethodOneOf5 stub instance.""" + if not MODELS_AVAILABLE: + raise ImportError("Models must be installed to create class stubs") + json = cls.create_json() + if not json: + # use backup example based on the pydantic model schema + backup_faker = JSF( + InterpolationMethodOneOf5Adapter.json_schema(), allow_none_optionals=1 + ) + json = backup_faker.generate(use_defaults=True, use_examples=True) + return InterpolationMethodOneOf5Adapter.validate_python( + json, context={"skip_validation": True} + ) diff --git a/test/types/interpolation_method_one_of6_stub.py b/test/types/interpolation_method_one_of6_stub.py new file mode 100644 index 0000000..8f9a186 --- /dev/null +++ b/test/types/interpolation_method_one_of6_stub.py @@ -0,0 +1,68 @@ +# coding: utf-8 +"""Waylay Query: timeseries queries (v1 protocol) model tests. + +This code was generated from the OpenAPI documentation of 'Waylay Query: timeseries queries (v1 protocol)' + +Generated by OpenAPI Generator (https://openapi-generator.tech) + +Do not edit the class manually. +""" + +import json + +from jsf import JSF +from pydantic import TypeAdapter + +from ..openapi import MODEL_DEFINITIONS, with_example_provider + +try: + from waylay.services.queries.models.interpolation_method_one_of6 import ( + InterpolationMethodOneOf6, + ) + + InterpolationMethodOneOf6Adapter = TypeAdapter(InterpolationMethodOneOf6) + MODELS_AVAILABLE = True +except ImportError as exc: + MODELS_AVAILABLE = False + +interpolation_method_one_of_6_model_schema = json.loads( + r"""{ + "type" : "string", + "description" : "Interpolate with a spline function of order 1, which is a piecewise polynomial.", + "enum" : [ "slinear" ] +} +""", + object_hook=with_example_provider, +) +interpolation_method_one_of_6_model_schema.update({"definitions": MODEL_DEFINITIONS}) + +interpolation_method_one_of_6_faker = JSF( + interpolation_method_one_of_6_model_schema, allow_none_optionals=1 +) + + +class InterpolationMethodOneOf6Stub: + """InterpolationMethodOneOf6 unit test stubs.""" + + @classmethod + def create_json(cls): + """Create a dict stub instance.""" + return interpolation_method_one_of_6_faker.generate( + use_defaults=True, use_examples=True + ) + + @classmethod + def create_instance(cls) -> "InterpolationMethodOneOf6": + """Create InterpolationMethodOneOf6 stub instance.""" + if not MODELS_AVAILABLE: + raise ImportError("Models must be installed to create class stubs") + json = cls.create_json() + if not json: + # use backup example based on the pydantic model schema + backup_faker = JSF( + InterpolationMethodOneOf6Adapter.json_schema(), allow_none_optionals=1 + ) + json = backup_faker.generate(use_defaults=True, use_examples=True) + return InterpolationMethodOneOf6Adapter.validate_python( + json, context={"skip_validation": True} + ) diff --git a/test/types/interpolation_method_one_of7_stub.py b/test/types/interpolation_method_one_of7_stub.py new file mode 100644 index 0000000..48653d1 --- /dev/null +++ b/test/types/interpolation_method_one_of7_stub.py @@ -0,0 +1,68 @@ +# coding: utf-8 +"""Waylay Query: timeseries queries (v1 protocol) model tests. + +This code was generated from the OpenAPI documentation of 'Waylay Query: timeseries queries (v1 protocol)' + +Generated by OpenAPI Generator (https://openapi-generator.tech) + +Do not edit the class manually. +""" + +import json + +from jsf import JSF +from pydantic import TypeAdapter + +from ..openapi import MODEL_DEFINITIONS, with_example_provider + +try: + from waylay.services.queries.models.interpolation_method_one_of7 import ( + InterpolationMethodOneOf7, + ) + + InterpolationMethodOneOf7Adapter = TypeAdapter(InterpolationMethodOneOf7) + MODELS_AVAILABLE = True +except ImportError as exc: + MODELS_AVAILABLE = False + +interpolation_method_one_of_7_model_schema = json.loads( + r"""{ + "type" : "string", + "description" : "Interpolate with a spline function of order 2, which is a piecewise polynomial.", + "enum" : [ "quadratic" ] +} +""", + object_hook=with_example_provider, +) +interpolation_method_one_of_7_model_schema.update({"definitions": MODEL_DEFINITIONS}) + +interpolation_method_one_of_7_faker = JSF( + interpolation_method_one_of_7_model_schema, allow_none_optionals=1 +) + + +class InterpolationMethodOneOf7Stub: + """InterpolationMethodOneOf7 unit test stubs.""" + + @classmethod + def create_json(cls): + """Create a dict stub instance.""" + return interpolation_method_one_of_7_faker.generate( + use_defaults=True, use_examples=True + ) + + @classmethod + def create_instance(cls) -> "InterpolationMethodOneOf7": + """Create InterpolationMethodOneOf7 stub instance.""" + if not MODELS_AVAILABLE: + raise ImportError("Models must be installed to create class stubs") + json = cls.create_json() + if not json: + # use backup example based on the pydantic model schema + backup_faker = JSF( + InterpolationMethodOneOf7Adapter.json_schema(), allow_none_optionals=1 + ) + json = backup_faker.generate(use_defaults=True, use_examples=True) + return InterpolationMethodOneOf7Adapter.validate_python( + json, context={"skip_validation": True} + ) diff --git a/test/types/interpolation_method_one_of8_stub.py b/test/types/interpolation_method_one_of8_stub.py new file mode 100644 index 0000000..6c1c7c4 --- /dev/null +++ b/test/types/interpolation_method_one_of8_stub.py @@ -0,0 +1,68 @@ +# coding: utf-8 +"""Waylay Query: timeseries queries (v1 protocol) model tests. + +This code was generated from the OpenAPI documentation of 'Waylay Query: timeseries queries (v1 protocol)' + +Generated by OpenAPI Generator (https://openapi-generator.tech) + +Do not edit the class manually. +""" + +import json + +from jsf import JSF +from pydantic import TypeAdapter + +from ..openapi import MODEL_DEFINITIONS, with_example_provider + +try: + from waylay.services.queries.models.interpolation_method_one_of8 import ( + InterpolationMethodOneOf8, + ) + + InterpolationMethodOneOf8Adapter = TypeAdapter(InterpolationMethodOneOf8) + MODELS_AVAILABLE = True +except ImportError as exc: + MODELS_AVAILABLE = False + +interpolation_method_one_of_8_model_schema = json.loads( + r"""{ + "type" : "string", + "description" : "Interpolate with a spline function of order 3, which is a piecewise polynomial.", + "enum" : [ "cubic" ] +} +""", + object_hook=with_example_provider, +) +interpolation_method_one_of_8_model_schema.update({"definitions": MODEL_DEFINITIONS}) + +interpolation_method_one_of_8_faker = JSF( + interpolation_method_one_of_8_model_schema, allow_none_optionals=1 +) + + +class InterpolationMethodOneOf8Stub: + """InterpolationMethodOneOf8 unit test stubs.""" + + @classmethod + def create_json(cls): + """Create a dict stub instance.""" + return interpolation_method_one_of_8_faker.generate( + use_defaults=True, use_examples=True + ) + + @classmethod + def create_instance(cls) -> "InterpolationMethodOneOf8": + """Create InterpolationMethodOneOf8 stub instance.""" + if not MODELS_AVAILABLE: + raise ImportError("Models must be installed to create class stubs") + json = cls.create_json() + if not json: + # use backup example based on the pydantic model schema + backup_faker = JSF( + InterpolationMethodOneOf8Adapter.json_schema(), allow_none_optionals=1 + ) + json = backup_faker.generate(use_defaults=True, use_examples=True) + return InterpolationMethodOneOf8Adapter.validate_python( + json, context={"skip_validation": True} + ) diff --git a/test/types/interpolation_method_one_of9_stub.py b/test/types/interpolation_method_one_of9_stub.py new file mode 100644 index 0000000..a8fd7d8 --- /dev/null +++ b/test/types/interpolation_method_one_of9_stub.py @@ -0,0 +1,68 @@ +# coding: utf-8 +"""Waylay Query: timeseries queries (v1 protocol) model tests. + +This code was generated from the OpenAPI documentation of 'Waylay Query: timeseries queries (v1 protocol)' + +Generated by OpenAPI Generator (https://openapi-generator.tech) + +Do not edit the class manually. +""" + +import json + +from jsf import JSF +from pydantic import TypeAdapter + +from ..openapi import MODEL_DEFINITIONS, with_example_provider + +try: + from waylay.services.queries.models.interpolation_method_one_of9 import ( + InterpolationMethodOneOf9, + ) + + InterpolationMethodOneOf9Adapter = TypeAdapter(InterpolationMethodOneOf9) + MODELS_AVAILABLE = True +except ImportError as exc: + MODELS_AVAILABLE = False + +interpolation_method_one_of_9_model_schema = json.loads( + r"""{ + "type" : "string", + "description" : "Interpolate with a polynomial of the lowest possible degree passing trough the data points.", + "enum" : [ "polynomial" ] +} +""", + object_hook=with_example_provider, +) +interpolation_method_one_of_9_model_schema.update({"definitions": MODEL_DEFINITIONS}) + +interpolation_method_one_of_9_faker = JSF( + interpolation_method_one_of_9_model_schema, allow_none_optionals=1 +) + + +class InterpolationMethodOneOf9Stub: + """InterpolationMethodOneOf9 unit test stubs.""" + + @classmethod + def create_json(cls): + """Create a dict stub instance.""" + return interpolation_method_one_of_9_faker.generate( + use_defaults=True, use_examples=True + ) + + @classmethod + def create_instance(cls) -> "InterpolationMethodOneOf9": + """Create InterpolationMethodOneOf9 stub instance.""" + if not MODELS_AVAILABLE: + raise ImportError("Models must be installed to create class stubs") + json = cls.create_json() + if not json: + # use backup example based on the pydantic model schema + backup_faker = JSF( + InterpolationMethodOneOf9Adapter.json_schema(), allow_none_optionals=1 + ) + json = backup_faker.generate(use_defaults=True, use_examples=True) + return InterpolationMethodOneOf9Adapter.validate_python( + json, context={"skip_validation": True} + ) diff --git a/test/types/interpolation_method_one_of_stub.py b/test/types/interpolation_method_one_of_stub.py new file mode 100644 index 0000000..5b8da57 --- /dev/null +++ b/test/types/interpolation_method_one_of_stub.py @@ -0,0 +1,68 @@ +# coding: utf-8 +"""Waylay Query: timeseries queries (v1 protocol) model tests. + +This code was generated from the OpenAPI documentation of 'Waylay Query: timeseries queries (v1 protocol)' + +Generated by OpenAPI Generator (https://openapi-generator.tech) + +Do not edit the class manually. +""" + +import json + +from jsf import JSF +from pydantic import TypeAdapter + +from ..openapi import MODEL_DEFINITIONS, with_example_provider + +try: + from waylay.services.queries.models.interpolation_method_one_of import ( + InterpolationMethodOneOf, + ) + + InterpolationMethodOneOfAdapter = TypeAdapter(InterpolationMethodOneOf) + MODELS_AVAILABLE = True +except ImportError as exc: + MODELS_AVAILABLE = False + +interpolation_method_one_of_model_schema = json.loads( + r"""{ + "type" : "string", + "description" : "Interpolate with the value of the first observed point. This method also extrapolates.", + "enum" : [ "pad" ] +} +""", + object_hook=with_example_provider, +) +interpolation_method_one_of_model_schema.update({"definitions": MODEL_DEFINITIONS}) + +interpolation_method_one_of_faker = JSF( + interpolation_method_one_of_model_schema, allow_none_optionals=1 +) + + +class InterpolationMethodOneOfStub: + """InterpolationMethodOneOf unit test stubs.""" + + @classmethod + def create_json(cls): + """Create a dict stub instance.""" + return interpolation_method_one_of_faker.generate( + use_defaults=True, use_examples=True + ) + + @classmethod + def create_instance(cls) -> "InterpolationMethodOneOf": + """Create InterpolationMethodOneOf stub instance.""" + if not MODELS_AVAILABLE: + raise ImportError("Models must be installed to create class stubs") + json = cls.create_json() + if not json: + # use backup example based on the pydantic model schema + backup_faker = JSF( + InterpolationMethodOneOfAdapter.json_schema(), allow_none_optionals=1 + ) + json = backup_faker.generate(use_defaults=True, use_examples=True) + return InterpolationMethodOneOfAdapter.validate_python( + json, context={"skip_validation": True} + ) diff --git a/test/types/interpolation_method_stub.py b/test/types/interpolation_method_stub.py new file mode 100644 index 0000000..9d44b8f --- /dev/null +++ b/test/types/interpolation_method_stub.py @@ -0,0 +1,92 @@ +# coding: utf-8 +"""Waylay Query: timeseries queries (v1 protocol) model tests. + +This code was generated from the OpenAPI documentation of 'Waylay Query: timeseries queries (v1 protocol)' + +Generated by OpenAPI Generator (https://openapi-generator.tech) + +Do not edit the class manually. +""" + +import json + +from jsf import JSF +from pydantic import TypeAdapter + +from ..openapi import MODEL_DEFINITIONS, with_example_provider + +try: + from waylay.services.queries.models.interpolation_method import InterpolationMethod + + InterpolationMethodAdapter = TypeAdapter(InterpolationMethod) + MODELS_AVAILABLE = True +except ImportError as exc: + MODELS_AVAILABLE = False + +interpolation_method_model_schema = json.loads( + r"""{ + "title" : "Interpolation method", + "type" : "string", + "oneOf" : [ { + "$ref" : "#/components/schemas/Interpolation_method_oneOf" + }, { + "$ref" : "#/components/schemas/Interpolation_method_oneOf_1" + }, { + "$ref" : "#/components/schemas/Interpolation_method_oneOf_2" + }, { + "$ref" : "#/components/schemas/Interpolation_method_oneOf_3" + }, { + "$ref" : "#/components/schemas/Interpolation_method_oneOf_4" + }, { + "$ref" : "#/components/schemas/Interpolation_method_oneOf_5" + }, { + "$ref" : "#/components/schemas/Interpolation_method_oneOf_6" + }, { + "$ref" : "#/components/schemas/Interpolation_method_oneOf_7" + }, { + "$ref" : "#/components/schemas/Interpolation_method_oneOf_8" + }, { + "$ref" : "#/components/schemas/Interpolation_method_oneOf_9" + }, { + "$ref" : "#/components/schemas/Interpolation_method_oneOf_10" + }, { + "$ref" : "#/components/schemas/Interpolation_method_oneOf_11" + }, { + "$ref" : "#/components/schemas/Interpolation_method_oneOf_12" + }, { + "$ref" : "#/components/schemas/Interpolation_method_oneOf_13" + } ] +} +""", + object_hook=with_example_provider, +) +interpolation_method_model_schema.update({"definitions": MODEL_DEFINITIONS}) + +interpolation_method_faker = JSF( + interpolation_method_model_schema, allow_none_optionals=1 +) + + +class InterpolationMethodStub: + """InterpolationMethod unit test stubs.""" + + @classmethod + def create_json(cls): + """Create a dict stub instance.""" + return interpolation_method_faker.generate(use_defaults=True, use_examples=True) + + @classmethod + def create_instance(cls) -> "InterpolationMethod": + """Create InterpolationMethod stub instance.""" + if not MODELS_AVAILABLE: + raise ImportError("Models must be installed to create class stubs") + json = cls.create_json() + if not json: + # use backup example based on the pydantic model schema + backup_faker = JSF( + InterpolationMethodAdapter.json_schema(), allow_none_optionals=1 + ) + json = backup_faker.generate(use_defaults=True, use_examples=True) + return InterpolationMethodAdapter.validate_python( + json, context={"skip_validation": True} + ) diff --git a/test/types/interpolation_spec_stub.py b/test/types/interpolation_spec_stub.py new file mode 100644 index 0000000..a874323 --- /dev/null +++ b/test/types/interpolation_spec_stub.py @@ -0,0 +1,78 @@ +# coding: utf-8 +"""Waylay Query: timeseries queries (v1 protocol) model tests. + +This code was generated from the OpenAPI documentation of 'Waylay Query: timeseries queries (v1 protocol)' + +Generated by OpenAPI Generator (https://openapi-generator.tech) + +Do not edit the class manually. +""" + +import json + +from jsf import JSF +from pydantic import TypeAdapter + +from ..openapi import MODEL_DEFINITIONS, with_example_provider + +try: + from waylay.services.queries.models.interpolation_spec import InterpolationSpec + + InterpolationSpecAdapter = TypeAdapter(InterpolationSpec) + MODELS_AVAILABLE = True +except ImportError as exc: + MODELS_AVAILABLE = False + +interpolation_spec_model_schema = json.loads( + r"""{ + "required" : [ "method" ], + "type" : "object", + "properties" : { + "method" : { + "$ref" : "#/components/schemas/Interpolation_method" + }, + "value" : { + "title" : "Interpolation parameter", + "type" : "integer", + "description" : "Optional parameter value for the interpolation method (see method description)." + }, + "order" : { + "title" : "Interpolation order", + "type" : "integer", + "description" : "Optional order parameter for the interpolation method (see method description)." + } + }, + "additionalProperties" : true, + "description" : "Defines whether, and how to treat missing values.\n\nThis can occur in two circumstances when aggregating (setting a sample frequency):\n* missing values: if there are missing (or invalid) values stored for\na given freq-interval,\n\"interpolation\" specifies how to compute these.\n* down-sampling: when the specified freq is smaller than the series’\nactual frequency.\n\"interpolation\" specifies how to compute intermediate values." +} +""", + object_hook=with_example_provider, +) +interpolation_spec_model_schema.update({"definitions": MODEL_DEFINITIONS}) + +interpolation_spec_faker = JSF(interpolation_spec_model_schema, allow_none_optionals=1) + + +class InterpolationSpecStub: + """InterpolationSpec unit test stubs.""" + + @classmethod + def create_json(cls): + """Create a dict stub instance.""" + return interpolation_spec_faker.generate(use_defaults=True, use_examples=True) + + @classmethod + def create_instance(cls) -> "InterpolationSpec": + """Create InterpolationSpec stub instance.""" + if not MODELS_AVAILABLE: + raise ImportError("Models must be installed to create class stubs") + json = cls.create_json() + if not json: + # use backup example based on the pydantic model schema + backup_faker = JSF( + InterpolationSpecAdapter.json_schema(), allow_none_optionals=1 + ) + json = backup_faker.generate(use_defaults=True, use_examples=True) + return InterpolationSpecAdapter.validate_python( + json, context={"skip_validation": True} + ) diff --git a/test/types/interpolation_stub.py b/test/types/interpolation_stub.py new file mode 100644 index 0000000..7ff4667 --- /dev/null +++ b/test/types/interpolation_stub.py @@ -0,0 +1,65 @@ +# coding: utf-8 +"""Waylay Query: timeseries queries (v1 protocol) model tests. + +This code was generated from the OpenAPI documentation of 'Waylay Query: timeseries queries (v1 protocol)' + +Generated by OpenAPI Generator (https://openapi-generator.tech) + +Do not edit the class manually. +""" + +import json + +from jsf import JSF +from pydantic import TypeAdapter + +from ..openapi import MODEL_DEFINITIONS, with_example_provider + +try: + from waylay.services.queries.models.interpolation import Interpolation + + InterpolationAdapter = TypeAdapter(Interpolation) + MODELS_AVAILABLE = True +except ImportError as exc: + MODELS_AVAILABLE = False + +interpolation_model_schema = json.loads( + r"""{ + "title" : "Interpolation", + "anyOf" : [ { + "$ref" : "#/components/schemas/InterpolationMethod" + }, { + "$ref" : "#/components/schemas/InterpolationSpec" + } ] +} +""", + object_hook=with_example_provider, +) +interpolation_model_schema.update({"definitions": MODEL_DEFINITIONS}) + +interpolation_faker = JSF(interpolation_model_schema, allow_none_optionals=1) + + +class InterpolationStub: + """Interpolation unit test stubs.""" + + @classmethod + def create_json(cls): + """Create a dict stub instance.""" + return interpolation_faker.generate(use_defaults=True, use_examples=True) + + @classmethod + def create_instance(cls) -> "Interpolation": + """Create Interpolation stub instance.""" + if not MODELS_AVAILABLE: + raise ImportError("Models must be installed to create class stubs") + json = cls.create_json() + if not json: + # use backup example based on the pydantic model schema + backup_faker = JSF( + InterpolationAdapter.json_schema(), allow_none_optionals=1 + ) + json = backup_faker.generate(use_defaults=True, use_examples=True) + return InterpolationAdapter.validate_python( + json, context={"skip_validation": True} + ) diff --git a/test/types/links_stub.py b/test/types/links_stub.py new file mode 100644 index 0000000..a1760fb --- /dev/null +++ b/test/types/links_stub.py @@ -0,0 +1,64 @@ +# coding: utf-8 +"""Waylay Query: timeseries queries (v1 protocol) model tests. + +This code was generated from the OpenAPI documentation of 'Waylay Query: timeseries queries (v1 protocol)' + +Generated by OpenAPI Generator (https://openapi-generator.tech) + +Do not edit the class manually. +""" + +import json + +from jsf import JSF +from pydantic import TypeAdapter + +from ..openapi import MODEL_DEFINITIONS, with_example_provider + +try: + from waylay.services.queries.models.links import Links + + LinksAdapter = TypeAdapter(Links) + MODELS_AVAILABLE = True +except ImportError as exc: + MODELS_AVAILABLE = False + +links_model_schema = json.loads( + r"""{ + "title" : "_Links", + "anyOf" : [ { + "$ref" : "#/components/schemas/HALLink" + }, { + "type" : "array", + "items" : { + "$ref" : "#/components/schemas/HALLink" + } + } ] +} +""", + object_hook=with_example_provider, +) +links_model_schema.update({"definitions": MODEL_DEFINITIONS}) + +links_faker = JSF(links_model_schema, allow_none_optionals=1) + + +class LinksStub: + """Links unit test stubs.""" + + @classmethod + def create_json(cls): + """Create a dict stub instance.""" + return links_faker.generate(use_defaults=True, use_examples=True) + + @classmethod + def create_instance(cls) -> "Links": + """Create Links stub instance.""" + if not MODELS_AVAILABLE: + raise ImportError("Models must be installed to create class stubs") + json = cls.create_json() + if not json: + # use backup example based on the pydantic model schema + backup_faker = JSF(LinksAdapter.json_schema(), allow_none_optionals=1) + json = backup_faker.generate(use_defaults=True, use_examples=True) + return LinksAdapter.validate_python(json, context={"skip_validation": True}) diff --git a/test/types/location_inner_stub.py b/test/types/location_inner_stub.py new file mode 100644 index 0000000..21fcb7d --- /dev/null +++ b/test/types/location_inner_stub.py @@ -0,0 +1,65 @@ +# coding: utf-8 +"""Waylay Query: timeseries queries (v1 protocol) model tests. + +This code was generated from the OpenAPI documentation of 'Waylay Query: timeseries queries (v1 protocol)' + +Generated by OpenAPI Generator (https://openapi-generator.tech) + +Do not edit the class manually. +""" + +import json + +from jsf import JSF +from pydantic import TypeAdapter + +from ..openapi import MODEL_DEFINITIONS, with_example_provider + +try: + from waylay.services.queries.models.location_inner import LocationInner + + LocationInnerAdapter = TypeAdapter(LocationInner) + MODELS_AVAILABLE = True +except ImportError as exc: + MODELS_AVAILABLE = False + +location_inner_model_schema = json.loads( + r"""{ + "title" : "Location_inner", + "anyOf" : [ { + "type" : "string" + }, { + "type" : "integer" + } ] +} +""", + object_hook=with_example_provider, +) +location_inner_model_schema.update({"definitions": MODEL_DEFINITIONS}) + +location_inner_faker = JSF(location_inner_model_schema, allow_none_optionals=1) + + +class LocationInnerStub: + """LocationInner unit test stubs.""" + + @classmethod + def create_json(cls): + """Create a dict stub instance.""" + return location_inner_faker.generate(use_defaults=True, use_examples=True) + + @classmethod + def create_instance(cls) -> "LocationInner": + """Create LocationInner stub instance.""" + if not MODELS_AVAILABLE: + raise ImportError("Models must be installed to create class stubs") + json = cls.create_json() + if not json: + # use backup example based on the pydantic model schema + backup_faker = JSF( + LocationInnerAdapter.json_schema(), allow_none_optionals=1 + ) + json = backup_faker.generate(use_defaults=True, use_examples=True) + return LocationInnerAdapter.validate_python( + json, context={"skip_validation": True} + ) diff --git a/test/types/message_arguments_stub.py b/test/types/message_arguments_stub.py new file mode 100644 index 0000000..f745ad1 --- /dev/null +++ b/test/types/message_arguments_stub.py @@ -0,0 +1,65 @@ +# coding: utf-8 +"""Waylay Query: timeseries queries (v1 protocol) model tests. + +This code was generated from the OpenAPI documentation of 'Waylay Query: timeseries queries (v1 protocol)' + +Generated by OpenAPI Generator (https://openapi-generator.tech) + +Do not edit the class manually. +""" + +import json + +from jsf import JSF +from pydantic import TypeAdapter + +from ..openapi import MODEL_DEFINITIONS, with_example_provider + +try: + from waylay.services.queries.models.message_arguments import MessageArguments + + MessageArgumentsAdapter = TypeAdapter(MessageArguments) + MODELS_AVAILABLE = True +except ImportError as exc: + MODELS_AVAILABLE = False + +message_arguments_model_schema = json.loads( + r"""{ + "title" : "Message Arguments", + "anyOf" : [ { + "type" : "string" + }, { + "$ref" : "#/components/schemas/MessageProperties" + } ] +} +""", + object_hook=with_example_provider, +) +message_arguments_model_schema.update({"definitions": MODEL_DEFINITIONS}) + +message_arguments_faker = JSF(message_arguments_model_schema, allow_none_optionals=1) + + +class MessageArgumentsStub: + """MessageArguments unit test stubs.""" + + @classmethod + def create_json(cls): + """Create a dict stub instance.""" + return message_arguments_faker.generate(use_defaults=True, use_examples=True) + + @classmethod + def create_instance(cls) -> "MessageArguments": + """Create MessageArguments stub instance.""" + if not MODELS_AVAILABLE: + raise ImportError("Models must be installed to create class stubs") + json = cls.create_json() + if not json: + # use backup example based on the pydantic model schema + backup_faker = JSF( + MessageArgumentsAdapter.json_schema(), allow_none_optionals=1 + ) + json = backup_faker.generate(use_defaults=True, use_examples=True) + return MessageArgumentsAdapter.validate_python( + json, context={"skip_validation": True} + ) diff --git a/test/types/message_level_stub.py b/test/types/message_level_stub.py new file mode 100644 index 0000000..b76b5cc --- /dev/null +++ b/test/types/message_level_stub.py @@ -0,0 +1,63 @@ +# coding: utf-8 +"""Waylay Query: timeseries queries (v1 protocol) model tests. + +This code was generated from the OpenAPI documentation of 'Waylay Query: timeseries queries (v1 protocol)' + +Generated by OpenAPI Generator (https://openapi-generator.tech) + +Do not edit the class manually. +""" + +import json + +from jsf import JSF +from pydantic import TypeAdapter + +from ..openapi import MODEL_DEFINITIONS, with_example_provider + +try: + from waylay.services.queries.models.message_level import MessageLevel + + MessageLevelAdapter = TypeAdapter(MessageLevel) + MODELS_AVAILABLE = True +except ImportError as exc: + MODELS_AVAILABLE = False + +message_level_model_schema = json.loads( + r"""{ + "title" : "Message_level", + "type" : "string", + "default" : "info", + "enum" : [ "debug", "info", "warning", "error", "fatal" ] +} +""", + object_hook=with_example_provider, +) +message_level_model_schema.update({"definitions": MODEL_DEFINITIONS}) + +message_level_faker = JSF(message_level_model_schema, allow_none_optionals=1) + + +class MessageLevelStub: + """MessageLevel unit test stubs.""" + + @classmethod + def create_json(cls): + """Create a dict stub instance.""" + return message_level_faker.generate(use_defaults=True, use_examples=True) + + @classmethod + def create_instance(cls) -> "MessageLevel": + """Create MessageLevel stub instance.""" + if not MODELS_AVAILABLE: + raise ImportError("Models must be installed to create class stubs") + json = cls.create_json() + if not json: + # use backup example based on the pydantic model schema + backup_faker = JSF( + MessageLevelAdapter.json_schema(), allow_none_optionals=1 + ) + json = backup_faker.generate(use_defaults=True, use_examples=True) + return MessageLevelAdapter.validate_python( + json, context={"skip_validation": True} + ) diff --git a/test/types/message_properties_stub.py b/test/types/message_properties_stub.py new file mode 100644 index 0000000..bd8d231 --- /dev/null +++ b/test/types/message_properties_stub.py @@ -0,0 +1,72 @@ +# coding: utf-8 +"""Waylay Query: timeseries queries (v1 protocol) model tests. + +This code was generated from the OpenAPI documentation of 'Waylay Query: timeseries queries (v1 protocol)' + +Generated by OpenAPI Generator (https://openapi-generator.tech) + +Do not edit the class manually. +""" + +import json + +from jsf import JSF +from pydantic import TypeAdapter + +from ..openapi import MODEL_DEFINITIONS, with_example_provider + +try: + from waylay.services.queries.models.message_properties import MessageProperties + + MessagePropertiesAdapter = TypeAdapter(MessageProperties) + MODELS_AVAILABLE = True +except ImportError as exc: + MODELS_AVAILABLE = False + +message_properties_model_schema = json.loads( + r"""{ + "type" : "object", + "properties" : { + "resource" : { + "title" : "Series resource id", + "type" : "string" + }, + "metric" : { + "title" : "Series metric", + "type" : "string" + } + }, + "additionalProperties" : true, + "description" : "Additional message arguments." +} +""", + object_hook=with_example_provider, +) +message_properties_model_schema.update({"definitions": MODEL_DEFINITIONS}) + +message_properties_faker = JSF(message_properties_model_schema, allow_none_optionals=1) + + +class MessagePropertiesStub: + """MessageProperties unit test stubs.""" + + @classmethod + def create_json(cls): + """Create a dict stub instance.""" + return message_properties_faker.generate(use_defaults=True, use_examples=True) + + @classmethod + def create_instance(cls) -> "MessageProperties": + """Create MessageProperties stub instance.""" + if not MODELS_AVAILABLE: + raise ImportError("Models must be installed to create class stubs") + json = cls.create_json() + if not json: + # use backup example based on the pydantic model schema + backup_faker = JSF( + MessagePropertiesAdapter.json_schema(), allow_none_optionals=1 + ) + json = backup_faker.generate(use_defaults=True, use_examples=True) + return MessagePropertiesAdapter.validate_python( + json, context={"skip_validation": True} + ) diff --git a/test/types/message_stub.py b/test/types/message_stub.py new file mode 100644 index 0000000..305c968 --- /dev/null +++ b/test/types/message_stub.py @@ -0,0 +1,78 @@ +# coding: utf-8 +"""Waylay Query: timeseries queries (v1 protocol) model tests. + +This code was generated from the OpenAPI documentation of 'Waylay Query: timeseries queries (v1 protocol)' + +Generated by OpenAPI Generator (https://openapi-generator.tech) + +Do not edit the class manually. +""" + +import json + +from jsf import JSF +from pydantic import TypeAdapter + +from ..openapi import MODEL_DEFINITIONS, with_example_provider + +try: + from waylay.services.queries.models.message import Message + + MessageAdapter = TypeAdapter(Message) + MODELS_AVAILABLE = True +except ImportError as exc: + MODELS_AVAILABLE = False + +message_model_schema = json.loads( + r"""{ + "title" : "Message", + "required" : [ "message" ], + "type" : "object", + "properties" : { + "code" : { + "title" : "code", + "type" : "string", + "nullable" : true + }, + "message" : { + "title" : "Message", + "type" : "string" + }, + "level" : { + "$ref" : "#/components/schemas/Message_level" + }, + "args" : { + "title" : "args", + "type" : "object", + "nullable" : true + } + }, + "description" : "Individual (info/warning/error) message in a response." +} +""", + object_hook=with_example_provider, +) +message_model_schema.update({"definitions": MODEL_DEFINITIONS}) + +message_faker = JSF(message_model_schema, allow_none_optionals=1) + + +class MessageStub: + """Message unit test stubs.""" + + @classmethod + def create_json(cls): + """Create a dict stub instance.""" + return message_faker.generate(use_defaults=True, use_examples=True) + + @classmethod + def create_instance(cls) -> "Message": + """Create Message stub instance.""" + if not MODELS_AVAILABLE: + raise ImportError("Models must be installed to create class stubs") + json = cls.create_json() + if not json: + # use backup example based on the pydantic model schema + backup_faker = JSF(MessageAdapter.json_schema(), allow_none_optionals=1) + json = backup_faker.generate(use_defaults=True, use_examples=True) + return MessageAdapter.validate_python(json, context={"skip_validation": True}) diff --git a/test/types/object_data_set_stub.py b/test/types/object_data_set_stub.py new file mode 100644 index 0000000..ee88b87 --- /dev/null +++ b/test/types/object_data_set_stub.py @@ -0,0 +1,78 @@ +# coding: utf-8 +"""Waylay Query: timeseries queries (v1 protocol) model tests. + +This code was generated from the OpenAPI documentation of 'Waylay Query: timeseries queries (v1 protocol)' + +Generated by OpenAPI Generator (https://openapi-generator.tech) + +Do not edit the class manually. +""" + +import json + +from jsf import JSF +from pydantic import TypeAdapter + +from ..openapi import MODEL_DEFINITIONS, with_example_provider + +try: + from waylay.services.queries.models.object_data_set import ObjectDataSet + + ObjectDataSetAdapter = TypeAdapter(ObjectDataSet) + MODELS_AVAILABLE = True +except ImportError as exc: + MODELS_AVAILABLE = False + +object_data_set_model_schema = json.loads( + r"""{ + "required" : [ "data" ], + "type" : "object", + "properties" : { + "attributes" : { + "$ref" : "#/components/schemas/DataSetAttributes" + }, + "window_spec" : { + "$ref" : "#/components/schemas/DataSetWindow" + }, + "data" : { + "title" : "Data", + "type" : "array", + "items" : { + "$ref" : "#/components/schemas/ObjectData" + } + } + }, + "additionalProperties" : true, + "description" : "Data result in object format.\n\nResult item when render option `render.header_array` is not set.\n\nThe data values are keyed by their attributes (`resource`, `metric`, `aggregation`),\naccording to the render options:\n* _hierachical_: for each level, a sub-object is created\n (e.g. `render.mode=hier_dict`)\n* _flattened_: the attributes are '.'-separated concatenation\n of the attributes (e.g `render.mode=flat_dict`)\n* _mixed_: (.e.g. `render.mode=metric_flat_dict`) a single level\n (e.g. `metric`) is used as main key, any remaining levels\n (`resource`,`aggregation`) are indicated with a flattened subkey.\n\nWhen `render.rollup=true`, the attribute levels that are the same for all series are\nnot used as key, but reported as a data or table attribute." +} +""", + object_hook=with_example_provider, +) +object_data_set_model_schema.update({"definitions": MODEL_DEFINITIONS}) + +object_data_set_faker = JSF(object_data_set_model_schema, allow_none_optionals=1) + + +class ObjectDataSetStub: + """ObjectDataSet unit test stubs.""" + + @classmethod + def create_json(cls): + """Create a dict stub instance.""" + return object_data_set_faker.generate(use_defaults=True, use_examples=True) + + @classmethod + def create_instance(cls) -> "ObjectDataSet": + """Create ObjectDataSet stub instance.""" + if not MODELS_AVAILABLE: + raise ImportError("Models must be installed to create class stubs") + json = cls.create_json() + if not json: + # use backup example based on the pydantic model schema + backup_faker = JSF( + ObjectDataSetAdapter.json_schema(), allow_none_optionals=1 + ) + json = backup_faker.generate(use_defaults=True, use_examples=True) + return ObjectDataSetAdapter.validate_python( + json, context={"skip_validation": True} + ) diff --git a/test/types/object_data_stub.py b/test/types/object_data_stub.py new file mode 100644 index 0000000..c905491 --- /dev/null +++ b/test/types/object_data_stub.py @@ -0,0 +1,98 @@ +# coding: utf-8 +"""Waylay Query: timeseries queries (v1 protocol) model tests. + +This code was generated from the OpenAPI documentation of 'Waylay Query: timeseries queries (v1 protocol)' + +Generated by OpenAPI Generator (https://openapi-generator.tech) + +Do not edit the class manually. +""" + +import json + +from jsf import JSF +from pydantic import TypeAdapter + +from ..openapi import MODEL_DEFINITIONS, with_example_provider + +try: + from waylay.services.queries.models.object_data import ObjectData + + ObjectDataAdapter = TypeAdapter(ObjectData) + MODELS_AVAILABLE = True +except ImportError as exc: + MODELS_AVAILABLE = False + +object_data_model_schema = json.loads( + r"""{ + "required" : [ "timestamp" ], + "type" : "object", + "properties" : { + "timestamp" : { + "$ref" : "#/components/schemas/Timestamp" + }, + "timestamp_iso" : { + "$ref" : "#/components/schemas/TimestampIso" + }, + "role" : { + "$ref" : "#/components/schemas/Role" + }, + "resource" : { + "title" : "Resource", + "type" : "string", + "description" : "Series resource id, if applicable for all values." + }, + "metric" : { + "title" : "Metric", + "type" : "string", + "description" : "Series metric, if applicable for all values." + }, + "aggregation" : { + "title" : "Aggregation", + "type" : "string", + "description" : "Series aggregation, if applicable for all values." + }, + "levels" : { + "title" : "Hierarchical Levels", + "type" : "array", + "description" : "Attribute level names used to key the values for this observation.\n\nLevels that are flattened have a dot-separated key.\n\nIf all observations have the same attribute for a level, that level might be omitted.", + "example" : [ "resource", "metric", "aggregation" ], + "items" : { + "type" : "string" + } + } + }, + "additionalProperties" : { + "$ref" : "#/components/schemas/ObjectData_value" + }, + "description" : "Result data for a timestamp in object format." +} +""", + object_hook=with_example_provider, +) +object_data_model_schema.update({"definitions": MODEL_DEFINITIONS}) + +object_data_faker = JSF(object_data_model_schema, allow_none_optionals=1) + + +class ObjectDataStub: + """ObjectData unit test stubs.""" + + @classmethod + def create_json(cls): + """Create a dict stub instance.""" + return object_data_faker.generate(use_defaults=True, use_examples=True) + + @classmethod + def create_instance(cls) -> "ObjectData": + """Create ObjectData stub instance.""" + if not MODELS_AVAILABLE: + raise ImportError("Models must be installed to create class stubs") + json = cls.create_json() + if not json: + # use backup example based on the pydantic model schema + backup_faker = JSF(ObjectDataAdapter.json_schema(), allow_none_optionals=1) + json = backup_faker.generate(use_defaults=True, use_examples=True) + return ObjectDataAdapter.validate_python( + json, context={"skip_validation": True} + ) diff --git a/test/types/object_data_value_stub.py b/test/types/object_data_value_stub.py new file mode 100644 index 0000000..a260eed --- /dev/null +++ b/test/types/object_data_value_stub.py @@ -0,0 +1,67 @@ +# coding: utf-8 +"""Waylay Query: timeseries queries (v1 protocol) model tests. + +This code was generated from the OpenAPI documentation of 'Waylay Query: timeseries queries (v1 protocol)' + +Generated by OpenAPI Generator (https://openapi-generator.tech) + +Do not edit the class manually. +""" + +import json + +from jsf import JSF +from pydantic import TypeAdapter + +from ..openapi import MODEL_DEFINITIONS, with_example_provider + +try: + from waylay.services.queries.models.object_data_value import ObjectDataValue + + ObjectDataValueAdapter = TypeAdapter(ObjectDataValue) + MODELS_AVAILABLE = True +except ImportError as exc: + MODELS_AVAILABLE = False + +object_data_value_model_schema = json.loads( + r"""{ + "title" : "Data ", + "oneOf" : [ { + "title" : "Hierarchical Data", + "type" : "object", + "description" : "Values for the series whose attributes corresponds with the key. Keyed by sub-levels." + }, { + "$ref" : "#/components/schemas/Datum" + } ] +} +""", + object_hook=with_example_provider, +) +object_data_value_model_schema.update({"definitions": MODEL_DEFINITIONS}) + +object_data_value_faker = JSF(object_data_value_model_schema, allow_none_optionals=1) + + +class ObjectDataValueStub: + """ObjectDataValue unit test stubs.""" + + @classmethod + def create_json(cls): + """Create a dict stub instance.""" + return object_data_value_faker.generate(use_defaults=True, use_examples=True) + + @classmethod + def create_instance(cls) -> "ObjectDataValue": + """Create ObjectDataValue stub instance.""" + if not MODELS_AVAILABLE: + raise ImportError("Models must be installed to create class stubs") + json = cls.create_json() + if not json: + # use backup example based on the pydantic model schema + backup_faker = JSF( + ObjectDataValueAdapter.json_schema(), allow_none_optionals=1 + ) + json = backup_faker.generate(use_defaults=True, use_examples=True) + return ObjectDataValueAdapter.validate_python( + json, context={"skip_validation": True} + ) diff --git a/test/types/queries_list_response_stub.py b/test/types/queries_list_response_stub.py new file mode 100644 index 0000000..9d33b9d --- /dev/null +++ b/test/types/queries_list_response_stub.py @@ -0,0 +1,107 @@ +# coding: utf-8 +"""Waylay Query: timeseries queries (v1 protocol) model tests. + +This code was generated from the OpenAPI documentation of 'Waylay Query: timeseries queries (v1 protocol)' + +Generated by OpenAPI Generator (https://openapi-generator.tech) + +Do not edit the class manually. +""" + +import json + +from jsf import JSF +from pydantic import TypeAdapter + +from ..openapi import MODEL_DEFINITIONS, with_example_provider + +try: + from waylay.services.queries.models.queries_list_response import QueriesListResponse + + QueriesListResponseAdapter = TypeAdapter(QueriesListResponse) + MODELS_AVAILABLE = True +except ImportError as exc: + MODELS_AVAILABLE = False + +queries_list_response_model_schema = json.loads( + r"""{ + "required" : [ "_links", "count", "limit", "offset", "queries" ], + "type" : "object", + "properties" : { + "messages" : { + "title" : "Messages", + "type" : "array", + "items" : { + "$ref" : "#/components/schemas/Message" + } + }, + "queries" : { + "title" : "Query item list", + "type" : "array", + "description" : "One page of matching query definitions.", + "items" : { + "$ref" : "#/components/schemas/QueryListItem" + } + }, + "count" : { + "title" : "Current page size", + "type" : "integer", + "description" : "Number of query definitions returned in the current response." + }, + "offset" : { + "title" : "Page offset", + "type" : "integer", + "description" : "Offset in the full listing (skipped definitions)." + }, + "limit" : { + "title" : "Page size limit", + "type" : "integer", + "description" : "Maximal number of query definitions returned in one response." + }, + "total_count" : { + "title" : "Total count", + "type" : "integer", + "description" : "Total number of query definitions matching the filter." + }, + "_links" : { + "$ref" : "#/components/schemas/QueryListHALLinks" + } + }, + "additionalProperties" : true, + "description" : "Listing of named queries, with paging links." +} +""", + object_hook=with_example_provider, +) +queries_list_response_model_schema.update({"definitions": MODEL_DEFINITIONS}) + +queries_list_response_faker = JSF( + queries_list_response_model_schema, allow_none_optionals=1 +) + + +class QueriesListResponseStub: + """QueriesListResponse unit test stubs.""" + + @classmethod + def create_json(cls): + """Create a dict stub instance.""" + return queries_list_response_faker.generate( + use_defaults=True, use_examples=True + ) + + @classmethod + def create_instance(cls) -> "QueriesListResponse": + """Create QueriesListResponse stub instance.""" + if not MODELS_AVAILABLE: + raise ImportError("Models must be installed to create class stubs") + json = cls.create_json() + if not json: + # use backup example based on the pydantic model schema + backup_faker = JSF( + QueriesListResponseAdapter.json_schema(), allow_none_optionals=1 + ) + json = backup_faker.generate(use_defaults=True, use_examples=True) + return QueriesListResponseAdapter.validate_python( + json, context={"skip_validation": True} + ) diff --git a/test/types/query_definition_stub.py b/test/types/query_definition_stub.py new file mode 100644 index 0000000..00e58a9 --- /dev/null +++ b/test/types/query_definition_stub.py @@ -0,0 +1,65 @@ +# coding: utf-8 +"""Waylay Query: timeseries queries (v1 protocol) model tests. + +This code was generated from the OpenAPI documentation of 'Waylay Query: timeseries queries (v1 protocol)' + +Generated by OpenAPI Generator (https://openapi-generator.tech) + +Do not edit the class manually. +""" + +import json + +from jsf import JSF +from pydantic import TypeAdapter + +from ..openapi import MODEL_DEFINITIONS, with_example_provider + +try: + from waylay.services.queries.models.query_definition import QueryDefinition + + QueryDefinitionAdapter = TypeAdapter(QueryDefinition) + MODELS_AVAILABLE = True +except ImportError as exc: + MODELS_AVAILABLE = False + +query_definition_model_schema = json.loads( + r"""{ + "title" : "Query Definition", + "anyOf" : [ { + "$ref" : "#/components/schemas/QueryUpdateInput" + }, { + "$ref" : "#/components/schemas/Query-Input" + } ] +} +""", + object_hook=with_example_provider, +) +query_definition_model_schema.update({"definitions": MODEL_DEFINITIONS}) + +query_definition_faker = JSF(query_definition_model_schema, allow_none_optionals=1) + + +class QueryDefinitionStub: + """QueryDefinition unit test stubs.""" + + @classmethod + def create_json(cls): + """Create a dict stub instance.""" + return query_definition_faker.generate(use_defaults=True, use_examples=True) + + @classmethod + def create_instance(cls) -> "QueryDefinition": + """Create QueryDefinition stub instance.""" + if not MODELS_AVAILABLE: + raise ImportError("Models must be installed to create class stubs") + json = cls.create_json() + if not json: + # use backup example based on the pydantic model schema + backup_faker = JSF( + QueryDefinitionAdapter.json_schema(), allow_none_optionals=1 + ) + json = backup_faker.generate(use_defaults=True, use_examples=True) + return QueryDefinitionAdapter.validate_python( + json, context={"skip_validation": True} + ) diff --git a/test/types/query_entity_input_stub.py b/test/types/query_entity_input_stub.py new file mode 100644 index 0000000..96a2b21 --- /dev/null +++ b/test/types/query_entity_input_stub.py @@ -0,0 +1,78 @@ +# coding: utf-8 +"""Waylay Query: timeseries queries (v1 protocol) model tests. + +This code was generated from the OpenAPI documentation of 'Waylay Query: timeseries queries (v1 protocol)' + +Generated by OpenAPI Generator (https://openapi-generator.tech) + +Do not edit the class manually. +""" + +import json + +from jsf import JSF +from pydantic import TypeAdapter + +from ..openapi import MODEL_DEFINITIONS, with_example_provider + +try: + from waylay.services.queries.models.query_entity_input import QueryEntityInput + + QueryEntityInputAdapter = TypeAdapter(QueryEntityInput) + MODELS_AVAILABLE = True +except ImportError as exc: + MODELS_AVAILABLE = False + +query_entity_input_model_schema = json.loads( + r"""{ + "required" : [ "name", "query" ], + "type" : "object", + "properties" : { + "name" : { + "title" : "Query name", + "type" : "string", + "description" : "Name of the stored query definition." + }, + "meta" : { + "title" : "Query metadata", + "type" : "object", + "description" : "User metadata for the query definition." + }, + "query" : { + "$ref" : "#/components/schemas/Query-Input" + } + }, + "additionalProperties" : true, + "description" : "Input data to create a query definition." +} +""", + object_hook=with_example_provider, +) +query_entity_input_model_schema.update({"definitions": MODEL_DEFINITIONS}) + +query_entity_input_faker = JSF(query_entity_input_model_schema, allow_none_optionals=1) + + +class QueryEntityInputStub: + """QueryEntityInput unit test stubs.""" + + @classmethod + def create_json(cls): + """Create a dict stub instance.""" + return query_entity_input_faker.generate(use_defaults=True, use_examples=True) + + @classmethod + def create_instance(cls) -> "QueryEntityInput": + """Create QueryEntityInput stub instance.""" + if not MODELS_AVAILABLE: + raise ImportError("Models must be installed to create class stubs") + json = cls.create_json() + if not json: + # use backup example based on the pydantic model schema + backup_faker = JSF( + QueryEntityInputAdapter.json_schema(), allow_none_optionals=1 + ) + json = backup_faker.generate(use_defaults=True, use_examples=True) + return QueryEntityInputAdapter.validate_python( + json, context={"skip_validation": True} + ) diff --git a/test/types/query_execution_message_level_stub.py b/test/types/query_execution_message_level_stub.py new file mode 100644 index 0000000..0645514 --- /dev/null +++ b/test/types/query_execution_message_level_stub.py @@ -0,0 +1,68 @@ +# coding: utf-8 +"""Waylay Query: timeseries queries (v1 protocol) model tests. + +This code was generated from the OpenAPI documentation of 'Waylay Query: timeseries queries (v1 protocol)' + +Generated by OpenAPI Generator (https://openapi-generator.tech) + +Do not edit the class manually. +""" + +import json + +from jsf import JSF +from pydantic import TypeAdapter + +from ..openapi import MODEL_DEFINITIONS, with_example_provider + +try: + from waylay.services.queries.models.query_execution_message_level import ( + QueryExecutionMessageLevel, + ) + + QueryExecutionMessageLevelAdapter = TypeAdapter(QueryExecutionMessageLevel) + MODELS_AVAILABLE = True +except ImportError as exc: + MODELS_AVAILABLE = False + +query_execution_message_level_model_schema = json.loads( + r"""{ + "title" : "QueryExecutionMessage_level", + "type" : "string", + "enum" : [ "debug", "info", "warning", "error" ] +} +""", + object_hook=with_example_provider, +) +query_execution_message_level_model_schema.update({"definitions": MODEL_DEFINITIONS}) + +query_execution_message_level_faker = JSF( + query_execution_message_level_model_schema, allow_none_optionals=1 +) + + +class QueryExecutionMessageLevelStub: + """QueryExecutionMessageLevel unit test stubs.""" + + @classmethod + def create_json(cls): + """Create a dict stub instance.""" + return query_execution_message_level_faker.generate( + use_defaults=True, use_examples=True + ) + + @classmethod + def create_instance(cls) -> "QueryExecutionMessageLevel": + """Create QueryExecutionMessageLevel stub instance.""" + if not MODELS_AVAILABLE: + raise ImportError("Models must be installed to create class stubs") + json = cls.create_json() + if not json: + # use backup example based on the pydantic model schema + backup_faker = JSF( + QueryExecutionMessageLevelAdapter.json_schema(), allow_none_optionals=1 + ) + json = backup_faker.generate(use_defaults=True, use_examples=True) + return QueryExecutionMessageLevelAdapter.validate_python( + json, context={"skip_validation": True} + ) diff --git a/test/types/query_execution_message_stub.py b/test/types/query_execution_message_stub.py new file mode 100644 index 0000000..e3aa654 --- /dev/null +++ b/test/types/query_execution_message_stub.py @@ -0,0 +1,101 @@ +# coding: utf-8 +"""Waylay Query: timeseries queries (v1 protocol) model tests. + +This code was generated from the OpenAPI documentation of 'Waylay Query: timeseries queries (v1 protocol)' + +Generated by OpenAPI Generator (https://openapi-generator.tech) + +Do not edit the class manually. +""" + +import json + +from jsf import JSF +from pydantic import TypeAdapter + +from ..openapi import MODEL_DEFINITIONS, with_example_provider + +try: + from waylay.services.queries.models.query_execution_message import ( + QueryExecutionMessage, + ) + + QueryExecutionMessageAdapter = TypeAdapter(QueryExecutionMessage) + MODELS_AVAILABLE = True +except ImportError as exc: + MODELS_AVAILABLE = False + +query_execution_message_model_schema = json.loads( + r"""{ + "required" : [ "action", "category", "level", "message", "timestamp" ], + "type" : "object", + "properties" : { + "message" : { + "title" : "Message", + "type" : "string", + "description" : "A human readable message." + }, + "level" : { + "$ref" : "#/components/schemas/QueryExecutionMessage_level" + }, + "timestamp" : { + "title" : "Timestamp", + "type" : "string", + "format" : "date-time" + }, + "action" : { + "title" : "Action", + "type" : "string", + "description" : "The request action that caused this message." + }, + "category" : { + "title" : "Message Category", + "type" : "string", + "description" : "The subsystem that issued this message.", + "example" : "data" + }, + "properties" : { + "$ref" : "#/components/schemas/Message_Arguments" + }, + "exception" : { + "$ref" : "#/components/schemas/CauseException" + } + }, + "additionalProperties" : true, + "description" : "A message object that informs or warns about a query execution issue." +} +""", + object_hook=with_example_provider, +) +query_execution_message_model_schema.update({"definitions": MODEL_DEFINITIONS}) + +query_execution_message_faker = JSF( + query_execution_message_model_schema, allow_none_optionals=1 +) + + +class QueryExecutionMessageStub: + """QueryExecutionMessage unit test stubs.""" + + @classmethod + def create_json(cls): + """Create a dict stub instance.""" + return query_execution_message_faker.generate( + use_defaults=True, use_examples=True + ) + + @classmethod + def create_instance(cls) -> "QueryExecutionMessage": + """Create QueryExecutionMessage stub instance.""" + if not MODELS_AVAILABLE: + raise ImportError("Models must be installed to create class stubs") + json = cls.create_json() + if not json: + # use backup example based on the pydantic model schema + backup_faker = JSF( + QueryExecutionMessageAdapter.json_schema(), allow_none_optionals=1 + ) + json = backup_faker.generate(use_defaults=True, use_examples=True) + return QueryExecutionMessageAdapter.validate_python( + json, context={"skip_validation": True} + ) diff --git a/test/types/query_hal_links_stub.py b/test/types/query_hal_links_stub.py new file mode 100644 index 0000000..dcbdb4c --- /dev/null +++ b/test/types/query_hal_links_stub.py @@ -0,0 +1,71 @@ +# coding: utf-8 +"""Waylay Query: timeseries queries (v1 protocol) model tests. + +This code was generated from the OpenAPI documentation of 'Waylay Query: timeseries queries (v1 protocol)' + +Generated by OpenAPI Generator (https://openapi-generator.tech) + +Do not edit the class manually. +""" + +import json + +from jsf import JSF +from pydantic import TypeAdapter + +from ..openapi import MODEL_DEFINITIONS, with_example_provider + +try: + from waylay.services.queries.models.query_hal_links import QueryHALLinks + + QueryHALLinksAdapter = TypeAdapter(QueryHALLinks) + MODELS_AVAILABLE = True +except ImportError as exc: + MODELS_AVAILABLE = False + +query_hal_links_model_schema = json.loads( + r"""{ + "required" : [ "execute", "self" ], + "type" : "object", + "properties" : { + "self" : { + "$ref" : "#/components/schemas/HALLink" + }, + "execute" : { + "$ref" : "#/components/schemas/HALLink" + } + }, + "additionalProperties" : true, + "description" : "HAL Links for a query entity." +} +""", + object_hook=with_example_provider, +) +query_hal_links_model_schema.update({"definitions": MODEL_DEFINITIONS}) + +query_hal_links_faker = JSF(query_hal_links_model_schema, allow_none_optionals=1) + + +class QueryHALLinksStub: + """QueryHALLinks unit test stubs.""" + + @classmethod + def create_json(cls): + """Create a dict stub instance.""" + return query_hal_links_faker.generate(use_defaults=True, use_examples=True) + + @classmethod + def create_instance(cls) -> "QueryHALLinks": + """Create QueryHALLinks stub instance.""" + if not MODELS_AVAILABLE: + raise ImportError("Models must be installed to create class stubs") + json = cls.create_json() + if not json: + # use backup example based on the pydantic model schema + backup_faker = JSF( + QueryHALLinksAdapter.json_schema(), allow_none_optionals=1 + ) + json = backup_faker.generate(use_defaults=True, use_examples=True) + return QueryHALLinksAdapter.validate_python( + json, context={"skip_validation": True} + ) diff --git a/test/types/query_input_stub.py b/test/types/query_input_stub.py new file mode 100644 index 0000000..d148a11 --- /dev/null +++ b/test/types/query_input_stub.py @@ -0,0 +1,109 @@ +# coding: utf-8 +"""Waylay Query: timeseries queries (v1 protocol) model tests. + +This code was generated from the OpenAPI documentation of 'Waylay Query: timeseries queries (v1 protocol)' + +Generated by OpenAPI Generator (https://openapi-generator.tech) + +Do not edit the class manually. +""" + +import json + +from jsf import JSF +from pydantic import TypeAdapter + +from ..openapi import MODEL_DEFINITIONS, with_example_provider + +try: + from waylay.services.queries.models.query_input import QueryInput + + QueryInputAdapter = TypeAdapter(QueryInput) + MODELS_AVAILABLE = True +except ImportError as exc: + MODELS_AVAILABLE = False + +query_input_model_schema = json.loads( + r"""{ + "type" : "object", + "properties" : { + "resource" : { + "title" : "Default Resource", + "type" : "string", + "description" : "Default resource for the series in the query." + }, + "metric" : { + "title" : "Default Metric", + "type" : "string", + "description" : "Default metric for the series in the query." + }, + "aggregation" : { + "$ref" : "#/components/schemas/Default_Aggregation" + }, + "interpolation" : { + "$ref" : "#/components/schemas/Default_Interpolation" + }, + "freq" : { + "$ref" : "#/components/schemas/Grouping_interval" + }, + "from" : { + "$ref" : "#/components/schemas/Time_Window_From" + }, + "until" : { + "$ref" : "#/components/schemas/Time_Window_Until" + }, + "window" : { + "$ref" : "#/components/schemas/Window" + }, + "periods" : { + "title" : "Periods", + "type" : "integer", + "description" : "The size of the time window in number of `freq` units. One of the [time line](https://docs.waylay.io/#/api/query/?id=time-line-properties) specifiers." + }, + "align" : { + "$ref" : "#/components/schemas/Alignment" + }, + "data" : { + "title" : "Series specifications", + "type" : "array", + "description" : "List of series specifications. When not specified, a single default series specification is assumed(`[{}]`, using the default `metric`,`resource`, ... ).", + "items" : { + "$ref" : "#/components/schemas/SeriesSpec" + } + }, + "render" : { + "$ref" : "#/components/schemas/Render" + } + }, + "additionalProperties" : true, + "description" : "Query definition for a Waylay analytics query.\n\nSee also [api docs](https://docs.waylay.io/#/api/query/?id=data-query-json-representation)." +} +""", + object_hook=with_example_provider, +) +query_input_model_schema.update({"definitions": MODEL_DEFINITIONS}) + +query_input_faker = JSF(query_input_model_schema, allow_none_optionals=1) + + +class QueryInputStub: + """QueryInput unit test stubs.""" + + @classmethod + def create_json(cls): + """Create a dict stub instance.""" + return query_input_faker.generate(use_defaults=True, use_examples=True) + + @classmethod + def create_instance(cls) -> "QueryInput": + """Create QueryInput stub instance.""" + if not MODELS_AVAILABLE: + raise ImportError("Models must be installed to create class stubs") + json = cls.create_json() + if not json: + # use backup example based on the pydantic model schema + backup_faker = JSF(QueryInputAdapter.json_schema(), allow_none_optionals=1) + json = backup_faker.generate(use_defaults=True, use_examples=True) + return QueryInputAdapter.validate_python( + json, context={"skip_validation": True} + ) diff --git a/test/types/query_list_hal_links_stub.py b/test/types/query_list_hal_links_stub.py new file mode 100644 index 0000000..36aa88a --- /dev/null +++ b/test/types/query_list_hal_links_stub.py @@ -0,0 +1,83 @@ +# coding: utf-8 +"""Waylay Query: timeseries queries (v1 protocol) model tests. + +This code was generated from the OpenAPI documentation of 'Waylay Query: timeseries queries (v1 protocol)' + +Generated by OpenAPI Generator (https://openapi-generator.tech) + +Do not edit the class manually. +""" + +import json + +from jsf import JSF +from pydantic import TypeAdapter + +from ..openapi import MODEL_DEFINITIONS, with_example_provider + +try: + from waylay.services.queries.models.query_list_hal_links import QueryListHALLinks + + QueryListHALLinksAdapter = TypeAdapter(QueryListHALLinks) + MODELS_AVAILABLE = True +except ImportError as exc: + MODELS_AVAILABLE = False + +query_list_hal_links_model_schema = json.loads( + r"""{ + "title" : "QueryListHALLinks", + "required" : [ "self" ], + "type" : "object", + "properties" : { + "self" : { + "$ref" : "#/components/schemas/HALLink" + }, + "first" : { + "$ref" : "#/components/schemas/HALLink" + }, + "prev" : { + "$ref" : "#/components/schemas/HALLink" + }, + "next" : { + "$ref" : "#/components/schemas/HALLink" + }, + "last" : { + "$ref" : "#/components/schemas/HALLink" + } + }, + "additionalProperties" : true, + "description" : "HAL Links for a query entity." +} +""", + object_hook=with_example_provider, +) +query_list_hal_links_model_schema.update({"definitions": MODEL_DEFINITIONS}) + +query_list_hal_links_faker = JSF( + query_list_hal_links_model_schema, allow_none_optionals=1 +) + + +class QueryListHALLinksStub: + """QueryListHALLinks unit test stubs.""" + + @classmethod + def create_json(cls): + """Create a dict stub instance.""" + return query_list_hal_links_faker.generate(use_defaults=True, use_examples=True) + + @classmethod + def create_instance(cls) -> "QueryListHALLinks": + """Create QueryListHALLinks stub instance.""" + if not MODELS_AVAILABLE: + raise ImportError("Models must be installed to create class stubs") + json = cls.create_json() + if not json: + # use backup example based on the pydantic model schema + backup_faker = JSF( + QueryListHALLinksAdapter.json_schema(), allow_none_optionals=1 + ) + json = backup_faker.generate(use_defaults=True, use_examples=True) + return QueryListHALLinksAdapter.validate_python( + json, context={"skip_validation": True} + ) diff --git a/test/types/query_list_item_stub.py b/test/types/query_list_item_stub.py new file mode 100644 index 0000000..bb4f070 --- /dev/null +++ b/test/types/query_list_item_stub.py @@ -0,0 +1,84 @@ +# coding: utf-8 +"""Waylay Query: timeseries queries (v1 protocol) model tests. + +This code was generated from the OpenAPI documentation of 'Waylay Query: timeseries queries (v1 protocol)' + +Generated by OpenAPI Generator (https://openapi-generator.tech) + +Do not edit the class manually. +""" + +import json + +from jsf import JSF +from pydantic import TypeAdapter + +from ..openapi import MODEL_DEFINITIONS, with_example_provider + +try: + from waylay.services.queries.models.query_list_item import QueryListItem + + QueryListItemAdapter = TypeAdapter(QueryListItem) + MODELS_AVAILABLE = True +except ImportError as exc: + MODELS_AVAILABLE = False + +query_list_item_model_schema = json.loads( + r"""{ + "title" : "QueryListItem", + "required" : [ "_links", "attrs", "name" ], + "type" : "object", + "properties" : { + "_links" : { + "$ref" : "#/components/schemas/QueryHALLinks" + }, + "attrs" : { + "title" : "Query attributes", + "type" : "object", + "description" : "System provided metadata for the query definition." + }, + "name" : { + "title" : "Query name", + "type" : "string", + "description" : "Name of the stored query definition." + }, + "meta" : { + "title" : "Query metadata", + "type" : "object", + "description" : "User metadata for the query definition." + } + }, + "additionalProperties" : true, + "description" : "Listing of a query definition item." +} +""", + object_hook=with_example_provider, +) +query_list_item_model_schema.update({"definitions": MODEL_DEFINITIONS}) + +query_list_item_faker = JSF(query_list_item_model_schema, allow_none_optionals=1) + + +class QueryListItemStub: + """QueryListItem unit test stubs.""" + + @classmethod + def create_json(cls): + """Create a dict stub instance.""" + return query_list_item_faker.generate(use_defaults=True, use_examples=True) + + @classmethod + def create_instance(cls) -> "QueryListItem": + """Create QueryListItem stub instance.""" + if not MODELS_AVAILABLE: + raise ImportError("Models must be installed to create class stubs") + json = cls.create_json() + if not json: + # use backup example based on the pydantic model schema + backup_faker = JSF( + QueryListItemAdapter.json_schema(), allow_none_optionals=1 + ) + json = backup_faker.generate(use_defaults=True, use_examples=True) + return QueryListItemAdapter.validate_python( + json, context={"skip_validation": True} + ) diff --git a/test/types/query_output_stub.py b/test/types/query_output_stub.py new file mode 100644 index 0000000..7ac72d2 --- /dev/null +++ b/test/types/query_output_stub.py @@ -0,0 +1,109 @@ +# coding: utf-8 +"""Waylay Query: timeseries queries (v1 protocol) model tests. + +This code was generated from the OpenAPI documentation of 'Waylay Query: timeseries queries (v1 protocol)' + +Generated by OpenAPI Generator (https://openapi-generator.tech) + +Do not edit the class manually. +""" + +import json + +from jsf import JSF +from pydantic import TypeAdapter + +from ..openapi import MODEL_DEFINITIONS, with_example_provider + +try: + from waylay.services.queries.models.query_output import QueryOutput + + QueryOutputAdapter = TypeAdapter(QueryOutput) + MODELS_AVAILABLE = True +except ImportError as exc: + MODELS_AVAILABLE = False + +query_output_model_schema = json.loads( + r"""{ + "type" : "object", + "properties" : { + "resource" : { + "title" : "Default Resource", + "type" : "string", + "description" : "Default resource for the series in the query." + }, + "metric" : { + "title" : "Default Metric", + "type" : "string", + "description" : "Default metric for the series in the query." + }, + "aggregation" : { + "$ref" : "#/components/schemas/Default_Aggregation" + }, + "interpolation" : { + "$ref" : "#/components/schemas/Default_Interpolation" + }, + "freq" : { + "$ref" : "#/components/schemas/Grouping_interval" + }, + "from" : { + "$ref" : "#/components/schemas/Time_Window_From" + }, + "until" : { + "$ref" : "#/components/schemas/Time_Window_Until" + }, + "window" : { + "$ref" : "#/components/schemas/Window" + }, + "periods" : { + "title" : "Periods", + "type" : "integer", + "description" : "The size of the time window in number of `freq` units. One of the [time line](https://docs.waylay.io/#/api/query/?id=time-line-properties) specifiers." + }, + "align" : { + "$ref" : "#/components/schemas/Alignment" + }, + "data" : { + "title" : "Series specifications", + "type" : "array", + "description" : "List of series specifications. When not specified, a single default series specification is assumed(`[{}]`, using the default `metric`,`resource`, ... ).", + "items" : { + "$ref" : "#/components/schemas/SeriesSpec" + } + }, + "render" : { + "$ref" : "#/components/schemas/Render" + } + }, + "additionalProperties" : true, + "description" : "Query definition for a Waylay analytics query.\n\nSee also [api docs](https://docs.waylay.io/#/api/query/?id=data-query-json-representation)." +} +""", + object_hook=with_example_provider, +) +query_output_model_schema.update({"definitions": MODEL_DEFINITIONS}) + +query_output_faker = JSF(query_output_model_schema, allow_none_optionals=1) + + +class QueryOutputStub: + """QueryOutput unit test stubs.""" + + @classmethod + def create_json(cls): + """Create a dict stub instance.""" + return query_output_faker.generate(use_defaults=True, use_examples=True) + + @classmethod + def create_instance(cls) -> "QueryOutput": + """Create QueryOutput stub instance.""" + if not MODELS_AVAILABLE: + raise ImportError("Models must be installed to create class stubs") + json = cls.create_json() + if not json: + # use backup example based on the pydantic model schema + backup_faker = JSF(QueryOutputAdapter.json_schema(), allow_none_optionals=1) + json = backup_faker.generate(use_defaults=True, use_examples=True) + return QueryOutputAdapter.validate_python( + json, context={"skip_validation": True} + ) diff --git a/test/types/query_response_stub.py b/test/types/query_response_stub.py new file mode 100644 index 0000000..3069839 --- /dev/null +++ b/test/types/query_response_stub.py @@ -0,0 +1,93 @@ +# coding: utf-8 +"""Waylay Query: timeseries queries (v1 protocol) model tests. + +This code was generated from the OpenAPI documentation of 'Waylay Query: timeseries queries (v1 protocol)' + +Generated by OpenAPI Generator (https://openapi-generator.tech) + +Do not edit the class manually. +""" + +import json + +from jsf import JSF +from pydantic import TypeAdapter + +from ..openapi import MODEL_DEFINITIONS, with_example_provider + +try: + from waylay.services.queries.models.query_response import QueryResponse + + QueryResponseAdapter = TypeAdapter(QueryResponse) + MODELS_AVAILABLE = True +except ImportError as exc: + MODELS_AVAILABLE = False + +query_response_model_schema = json.loads( + r"""{ + "required" : [ "_links", "attrs", "name", "query" ], + "type" : "object", + "properties" : { + "_links" : { + "$ref" : "#/components/schemas/QueryHALLinks" + }, + "attrs" : { + "title" : "Query attributes", + "type" : "object", + "description" : "System provided metadata for the query definition." + }, + "name" : { + "title" : "Query name", + "type" : "string", + "description" : "Name of the stored query definition." + }, + "meta" : { + "title" : "Query metadata", + "type" : "object", + "description" : "User metadata for the query definition." + }, + "query" : { + "$ref" : "#/components/schemas/Query-Output" + }, + "messages" : { + "title" : "Messages", + "type" : "array", + "items" : { + "$ref" : "#/components/schemas/Message" + } + } + }, + "additionalProperties" : true, + "description" : "Represents a single named query." +} +""", + object_hook=with_example_provider, +) +query_response_model_schema.update({"definitions": MODEL_DEFINITIONS}) + +query_response_faker = JSF(query_response_model_schema, allow_none_optionals=1) + + +class QueryResponseStub: + """QueryResponse unit test stubs.""" + + @classmethod + def create_json(cls): + """Create a dict stub instance.""" + return query_response_faker.generate(use_defaults=True, use_examples=True) + + @classmethod + def create_instance(cls) -> "QueryResponse": + """Create QueryResponse stub instance.""" + if not MODELS_AVAILABLE: + raise ImportError("Models must be installed to create class stubs") + json = cls.create_json() + if not json: + # use backup example based on the pydantic model schema + backup_faker = JSF( + QueryResponseAdapter.json_schema(), allow_none_optionals=1 + ) + json = backup_faker.generate(use_defaults=True, use_examples=True) + return QueryResponseAdapter.validate_python( + json, context={"skip_validation": True} + ) diff --git a/test/types/query_result_stub.py b/test/types/query_result_stub.py new file mode 100644 index 0000000..927e672 --- /dev/null +++ b/test/types/query_result_stub.py @@ -0,0 +1,89 @@ +# coding: utf-8 +"""Waylay Query: timeseries queries (v1 protocol) model tests. + +This code was generated from the OpenAPI documentation of 'Waylay Query: timeseries queries (v1 protocol)' + +Generated by OpenAPI Generator (https://openapi-generator.tech) + +Do not edit the class manually. +""" + +import json + +from jsf import JSF +from pydantic import TypeAdapter + +from ..openapi import MODEL_DEFINITIONS, with_example_provider + +try: + from waylay.services.queries.models.query_result import QueryResult + + QueryResultAdapter = TypeAdapter(QueryResult) + MODELS_AVAILABLE = True +except ImportError as exc: + MODELS_AVAILABLE = False + +query_result_model_schema = json.loads( + r"""{ + "required" : [ "data", "messages", "query" ], + "type" : "object", + "properties" : { + "data" : { + "title" : "Response Data Sets", + "type" : "array", + "description" : "A list of data sets, each with their own time axis. There will be one dataset for each `role` specified in the query (by default a single `input` role).\n\nThe data is represented according to the `render` options in the query (default `COMPACT_WS`).", + "items" : { + "$ref" : "#/components/schemas/Response_Data_Set" + } + }, + "query" : { + "$ref" : "#/components/schemas/Query-Input" + }, + "messages" : { + "title" : "Messages and Warnings", + "type" : "array", + "items" : { + "$ref" : "#/components/schemas/QueryExecutionMessage" + } + } + }, + "additionalProperties" : true, + "description" : "A json data response.\n\nUses the format as specified by the\n`render` options of the request (defaults to `COMPACT_WS`).\n'", + "example" : { + "data" : [ ], + "query" : { + "resource" : "R", + "metric" : "temperature" + }, + "messages" : [ ] + } +} +""", + object_hook=with_example_provider, +) +query_result_model_schema.update({"definitions": MODEL_DEFINITIONS}) + +query_result_faker = JSF(query_result_model_schema, allow_none_optionals=1) + + +class QueryResultStub: + """QueryResult unit test stubs.""" + + @classmethod + def create_json(cls): + """Create a dict stub instance.""" + return query_result_faker.generate(use_defaults=True, use_examples=True) + + @classmethod + def create_instance(cls) -> "QueryResult": + """Create QueryResult stub instance.""" + if not MODELS_AVAILABLE: + raise ImportError("Models must be installed to create class stubs") + json = cls.create_json() + if not json: + # use backup example based on the pydantic model schema + backup_faker = JSF(QueryResultAdapter.json_schema(), allow_none_optionals=1) + json = backup_faker.generate(use_defaults=True, use_examples=True) + return QueryResultAdapter.validate_python( + json, context={"skip_validation": True} + ) diff --git a/test/types/query_update_input_stub.py b/test/types/query_update_input_stub.py new file mode 100644 index 0000000..6388a1a --- /dev/null +++ b/test/types/query_update_input_stub.py @@ -0,0 +1,72 @@ +# coding: utf-8 +"""Waylay Query: timeseries queries (v1 protocol) model tests. + +This code was generated from the OpenAPI documentation of 'Waylay Query: timeseries queries (v1 protocol)' + +Generated by OpenAPI Generator (https://openapi-generator.tech) + +Do not edit the class manually. +""" + +import json + +from jsf import JSF +from pydantic import TypeAdapter + +from ..openapi import MODEL_DEFINITIONS, with_example_provider + +try: + from waylay.services.queries.models.query_update_input import QueryUpdateInput + + QueryUpdateInputAdapter = TypeAdapter(QueryUpdateInput) + MODELS_AVAILABLE = True +except ImportError as exc: + MODELS_AVAILABLE = False + +query_update_input_model_schema = json.loads( + r"""{ + "type" : "object", + "properties" : { + "meta" : { + "title" : "Query metadata", + "type" : "object", + "description" : "User metadata for the query definition." + }, + "query" : { + "$ref" : "#/components/schemas/Query-Input" + } + }, + "additionalProperties" : true, + "description" : "Input data to update a query definition." +} +""", + object_hook=with_example_provider, +) +query_update_input_model_schema.update({"definitions": MODEL_DEFINITIONS}) + +query_update_input_faker = JSF(query_update_input_model_schema, allow_none_optionals=1) + + +class QueryUpdateInputStub: + """QueryUpdateInput unit test stubs.""" + + @classmethod + def create_json(cls): + """Create a dict stub instance.""" + return query_update_input_faker.generate(use_defaults=True, use_examples=True) + + @classmethod + def create_instance(cls) -> "QueryUpdateInput": + """Create QueryUpdateInput stub instance.""" + if not MODELS_AVAILABLE: + raise ImportError("Models must be installed to create class stubs") + json = cls.create_json() + if not json: + # use backup example based on the pydantic model schema + backup_faker = JSF( + QueryUpdateInputAdapter.json_schema(), allow_none_optionals=1 + ) + json = backup_faker.generate(use_defaults=True, use_examples=True) + return QueryUpdateInputAdapter.validate_python( + json, context={"skip_validation": True} + ) diff --git a/test/types/render1_stub.py b/test/types/render1_stub.py new file mode 100644 index 0000000..a68a152 --- /dev/null +++ b/test/types/render1_stub.py @@ -0,0 +1,61 @@ +# coding: utf-8 +"""Waylay Query: timeseries queries (v1 protocol) model tests. + +This code was generated from the OpenAPI documentation of 'Waylay Query: timeseries queries (v1 protocol)' + +Generated by OpenAPI Generator (https://openapi-generator.tech) + +Do not edit the class manually. +""" + +import json + +from jsf import JSF +from pydantic import TypeAdapter + +from ..openapi import MODEL_DEFINITIONS, with_example_provider + +try: + from waylay.services.queries.models.render1 import Render1 + + Render1Adapter = TypeAdapter(Render1) + MODELS_AVAILABLE = True +except ImportError as exc: + MODELS_AVAILABLE = False + +render_1_model_schema = json.loads( + r"""{ + "title" : "Render", + "anyOf" : [ { + "$ref" : "#/components/schemas/_RenderMode" + }, { + "$ref" : "#/components/schemas/Render" + } ] +} +""", + object_hook=with_example_provider, +) +render_1_model_schema.update({"definitions": MODEL_DEFINITIONS}) + +render_1_faker = JSF(render_1_model_schema, allow_none_optionals=1) + + +class Render1Stub: + """Render1 unit test stubs.""" + + @classmethod + def create_json(cls): + """Create a dict stub instance.""" + return render_1_faker.generate(use_defaults=True, use_examples=True) + + @classmethod + def create_instance(cls) -> "Render1": + """Create Render1 stub instance.""" + if not MODELS_AVAILABLE: + raise ImportError("Models must be installed to create class stubs") + json = cls.create_json() + if not json: + # use backup example based on the pydantic model schema + backup_faker = JSF(Render1Adapter.json_schema(), allow_none_optionals=1) + json = backup_faker.generate(use_defaults=True, use_examples=True) + return Render1Adapter.validate_python(json, context={"skip_validation": True}) diff --git a/test/types/render_mode_one_of1_stub.py b/test/types/render_mode_one_of1_stub.py new file mode 100644 index 0000000..bb649e8 --- /dev/null +++ b/test/types/render_mode_one_of1_stub.py @@ -0,0 +1,65 @@ +# coding: utf-8 +"""Waylay Query: timeseries queries (v1 protocol) model tests. + +This code was generated from the OpenAPI documentation of 'Waylay Query: timeseries queries (v1 protocol)' + +Generated by OpenAPI Generator (https://openapi-generator.tech) + +Do not edit the class manually. +""" + +import json + +from jsf import JSF +from pydantic import TypeAdapter + +from ..openapi import MODEL_DEFINITIONS, with_example_provider + +try: + from waylay.services.queries.models.render_mode_one_of1 import RenderModeOneOf1 + + RenderModeOneOf1Adapter = TypeAdapter(RenderModeOneOf1) + MODELS_AVAILABLE = True +except ImportError as exc: + MODELS_AVAILABLE = False + +render_mode_one_of_1_model_schema = json.loads( + r"""{ + "title" : "_RenderMode_oneOf_1", + "type" : "string", + "description" : "Render rows of timestamp and values. Show column headers.\n\n###### options\n- `iso_timestamp`: `False`\n- `header_array`: `row`\n- `roll_up`: `False`\n- `data_axis`: `column`", + "enum" : [ "COMPACT" ] +} +""", + object_hook=with_example_provider, +) +render_mode_one_of_1_model_schema.update({"definitions": MODEL_DEFINITIONS}) + +render_mode_one_of_1_faker = JSF( + render_mode_one_of_1_model_schema, allow_none_optionals=1 +) + + +class RenderModeOneOf1Stub: + """RenderModeOneOf1 unit test stubs.""" + + @classmethod + def create_json(cls): + """Create a dict stub instance.""" + return render_mode_one_of_1_faker.generate(use_defaults=True, use_examples=True) + + @classmethod + def create_instance(cls) -> "RenderModeOneOf1": + """Create RenderModeOneOf1 stub instance.""" + if not MODELS_AVAILABLE: + raise ImportError("Models must be installed to create class stubs") + json = cls.create_json() + if not json: + # use backup example based on the pydantic model schema + backup_faker = JSF( + RenderModeOneOf1Adapter.json_schema(), allow_none_optionals=1 + ) + json = backup_faker.generate(use_defaults=True, use_examples=True) + return RenderModeOneOf1Adapter.validate_python( + json, context={"skip_validation": True} + ) diff --git a/test/types/render_mode_one_of2_stub.py b/test/types/render_mode_one_of2_stub.py new file mode 100644 index 0000000..8d66ae4 --- /dev/null +++ b/test/types/render_mode_one_of2_stub.py @@ -0,0 +1,65 @@ +# coding: utf-8 +"""Waylay Query: timeseries queries (v1 protocol) model tests. + +This code was generated from the OpenAPI documentation of 'Waylay Query: timeseries queries (v1 protocol)' + +Generated by OpenAPI Generator (https://openapi-generator.tech) + +Do not edit the class manually. +""" + +import json + +from jsf import JSF +from pydantic import TypeAdapter + +from ..openapi import MODEL_DEFINITIONS, with_example_provider + +try: + from waylay.services.queries.models.render_mode_one_of2 import RenderModeOneOf2 + + RenderModeOneOf2Adapter = TypeAdapter(RenderModeOneOf2) + MODELS_AVAILABLE = True +except ImportError as exc: + MODELS_AVAILABLE = False + +render_mode_one_of_2_model_schema = json.loads( + r"""{ + "title" : "_RenderMode_oneOf_2", + "type" : "string", + "description" : "Render rows of timestamp and values. Show column headers. Show the time window attributes.\n\n###### options\n- `iso_timestamp`: `False`\n- `header_array`: `row`\n- `roll_up`: `False`\n- `data_axis`: `column`\n- `include_window_spec`: `True`", + "enum" : [ "COMPACT_WS" ] +} +""", + object_hook=with_example_provider, +) +render_mode_one_of_2_model_schema.update({"definitions": MODEL_DEFINITIONS}) + +render_mode_one_of_2_faker = JSF( + render_mode_one_of_2_model_schema, allow_none_optionals=1 +) + + +class RenderModeOneOf2Stub: + """RenderModeOneOf2 unit test stubs.""" + + @classmethod + def create_json(cls): + """Create a dict stub instance.""" + return render_mode_one_of_2_faker.generate(use_defaults=True, use_examples=True) + + @classmethod + def create_instance(cls) -> "RenderModeOneOf2": + """Create RenderModeOneOf2 stub instance.""" + if not MODELS_AVAILABLE: + raise ImportError("Models must be installed to create class stubs") + json = cls.create_json() + if not json: + # use backup example based on the pydantic model schema + backup_faker = JSF( + RenderModeOneOf2Adapter.json_schema(), allow_none_optionals=1 + ) + json = backup_faker.generate(use_defaults=True, use_examples=True) + return RenderModeOneOf2Adapter.validate_python( + json, context={"skip_validation": True} + ) diff --git a/test/types/render_mode_one_of3_stub.py b/test/types/render_mode_one_of3_stub.py new file mode 100644 index 0000000..ae34083 --- /dev/null +++ b/test/types/render_mode_one_of3_stub.py @@ -0,0 +1,65 @@ +# coding: utf-8 +"""Waylay Query: timeseries queries (v1 protocol) model tests. + +This code was generated from the OpenAPI documentation of 'Waylay Query: timeseries queries (v1 protocol)' + +Generated by OpenAPI Generator (https://openapi-generator.tech) + +Do not edit the class manually. +""" + +import json + +from jsf import JSF +from pydantic import TypeAdapter + +from ..openapi import MODEL_DEFINITIONS, with_example_provider + +try: + from waylay.services.queries.models.render_mode_one_of3 import RenderModeOneOf3 + + RenderModeOneOf3Adapter = TypeAdapter(RenderModeOneOf3) + MODELS_AVAILABLE = True +except ImportError as exc: + MODELS_AVAILABLE = False + +render_mode_one_of_3_model_schema = json.loads( + r"""{ + "title" : "_RenderMode_oneOf_3", + "type" : "string", + "description" : "Render timestamps and each series (column) as a values array. Show column headers.\n\n###### options\n- `iso_timestamp`: `False`\n- `header_array`: `row`\n- `data_axis`: `row`\n- `roll_up`: `True`\n- `include_window_spec`: `True`", + "enum" : [ "SERIES" ] +} +""", + object_hook=with_example_provider, +) +render_mode_one_of_3_model_schema.update({"definitions": MODEL_DEFINITIONS}) + +render_mode_one_of_3_faker = JSF( + render_mode_one_of_3_model_schema, allow_none_optionals=1 +) + + +class RenderModeOneOf3Stub: + """RenderModeOneOf3 unit test stubs.""" + + @classmethod + def create_json(cls): + """Create a dict stub instance.""" + return render_mode_one_of_3_faker.generate(use_defaults=True, use_examples=True) + + @classmethod + def create_instance(cls) -> "RenderModeOneOf3": + """Create RenderModeOneOf3 stub instance.""" + if not MODELS_AVAILABLE: + raise ImportError("Models must be installed to create class stubs") + json = cls.create_json() + if not json: + # use backup example based on the pydantic model schema + backup_faker = JSF( + RenderModeOneOf3Adapter.json_schema(), allow_none_optionals=1 + ) + json = backup_faker.generate(use_defaults=True, use_examples=True) + return RenderModeOneOf3Adapter.validate_python( + json, context={"skip_validation": True} + ) diff --git a/test/types/render_mode_one_of4_stub.py b/test/types/render_mode_one_of4_stub.py new file mode 100644 index 0000000..23b906f --- /dev/null +++ b/test/types/render_mode_one_of4_stub.py @@ -0,0 +1,65 @@ +# coding: utf-8 +"""Waylay Query: timeseries queries (v1 protocol) model tests. + +This code was generated from the OpenAPI documentation of 'Waylay Query: timeseries queries (v1 protocol)' + +Generated by OpenAPI Generator (https://openapi-generator.tech) + +Do not edit the class manually. +""" + +import json + +from jsf import JSF +from pydantic import TypeAdapter + +from ..openapi import MODEL_DEFINITIONS, with_example_provider + +try: + from waylay.services.queries.models.render_mode_one_of4 import RenderModeOneOf4 + + RenderModeOneOf4Adapter = TypeAdapter(RenderModeOneOf4) + MODELS_AVAILABLE = True +except ImportError as exc: + MODELS_AVAILABLE = False + +render_mode_one_of_4_model_schema = json.loads( + r"""{ + "title" : "_RenderMode_oneOf_4", + "type" : "string", + "description" : "Renders row index in `rows`, and each series as a values array.\n\nThe series are prefixed by their series attributes.The `rows` index is prefixed by the labels for these attributes.\n\n###### options\n- `iso_timestamp`: `True`\n- `header_array`: `column`\n- `roll_up`: `False`\n- `data_axis`: `row`", + "enum" : [ "HEADER_COLUMN" ] +} +""", + object_hook=with_example_provider, +) +render_mode_one_of_4_model_schema.update({"definitions": MODEL_DEFINITIONS}) + +render_mode_one_of_4_faker = JSF( + render_mode_one_of_4_model_schema, allow_none_optionals=1 +) + + +class RenderModeOneOf4Stub: + """RenderModeOneOf4 unit test stubs.""" + + @classmethod + def create_json(cls): + """Create a dict stub instance.""" + return render_mode_one_of_4_faker.generate(use_defaults=True, use_examples=True) + + @classmethod + def create_instance(cls) -> "RenderModeOneOf4": + """Create RenderModeOneOf4 stub instance.""" + if not MODELS_AVAILABLE: + raise ImportError("Models must be installed to create class stubs") + json = cls.create_json() + if not json: + # use backup example based on the pydantic model schema + backup_faker = JSF( + RenderModeOneOf4Adapter.json_schema(), allow_none_optionals=1 + ) + json = backup_faker.generate(use_defaults=True, use_examples=True) + return RenderModeOneOf4Adapter.validate_python( + json, context={"skip_validation": True} + ) diff --git a/test/types/render_mode_one_of5_stub.py b/test/types/render_mode_one_of5_stub.py new file mode 100644 index 0000000..b367e30 --- /dev/null +++ b/test/types/render_mode_one_of5_stub.py @@ -0,0 +1,65 @@ +# coding: utf-8 +"""Waylay Query: timeseries queries (v1 protocol) model tests. + +This code was generated from the OpenAPI documentation of 'Waylay Query: timeseries queries (v1 protocol)' + +Generated by OpenAPI Generator (https://openapi-generator.tech) + +Do not edit the class manually. +""" + +import json + +from jsf import JSF +from pydantic import TypeAdapter + +from ..openapi import MODEL_DEFINITIONS, with_example_provider + +try: + from waylay.services.queries.models.render_mode_one_of5 import RenderModeOneOf5 + + RenderModeOneOf5Adapter = TypeAdapter(RenderModeOneOf5) + MODELS_AVAILABLE = True +except ImportError as exc: + MODELS_AVAILABLE = False + +render_mode_one_of_5_model_schema = json.loads( + r"""{ + "title" : "_RenderMode_oneOf_5", + "type" : "string", + "description" : "Render an object for each observation. Uses flattened keys.\n\n###### options\n- `iso_timestamp`: `True`\n- `hierarchical`: `False`\n- `show_levels`: `True`\n- `roll_up`: `False`", + "enum" : [ "FLAT_DICT" ] +} +""", + object_hook=with_example_provider, +) +render_mode_one_of_5_model_schema.update({"definitions": MODEL_DEFINITIONS}) + +render_mode_one_of_5_faker = JSF( + render_mode_one_of_5_model_schema, allow_none_optionals=1 +) + + +class RenderModeOneOf5Stub: + """RenderModeOneOf5 unit test stubs.""" + + @classmethod + def create_json(cls): + """Create a dict stub instance.""" + return render_mode_one_of_5_faker.generate(use_defaults=True, use_examples=True) + + @classmethod + def create_instance(cls) -> "RenderModeOneOf5": + """Create RenderModeOneOf5 stub instance.""" + if not MODELS_AVAILABLE: + raise ImportError("Models must be installed to create class stubs") + json = cls.create_json() + if not json: + # use backup example based on the pydantic model schema + backup_faker = JSF( + RenderModeOneOf5Adapter.json_schema(), allow_none_optionals=1 + ) + json = backup_faker.generate(use_defaults=True, use_examples=True) + return RenderModeOneOf5Adapter.validate_python( + json, context={"skip_validation": True} + ) diff --git a/test/types/render_mode_one_of6_stub.py b/test/types/render_mode_one_of6_stub.py new file mode 100644 index 0000000..f87f8ca --- /dev/null +++ b/test/types/render_mode_one_of6_stub.py @@ -0,0 +1,65 @@ +# coding: utf-8 +"""Waylay Query: timeseries queries (v1 protocol) model tests. + +This code was generated from the OpenAPI documentation of 'Waylay Query: timeseries queries (v1 protocol)' + +Generated by OpenAPI Generator (https://openapi-generator.tech) + +Do not edit the class manually. +""" + +import json + +from jsf import JSF +from pydantic import TypeAdapter + +from ..openapi import MODEL_DEFINITIONS, with_example_provider + +try: + from waylay.services.queries.models.render_mode_one_of6 import RenderModeOneOf6 + + RenderModeOneOf6Adapter = TypeAdapter(RenderModeOneOf6) + MODELS_AVAILABLE = True +except ImportError as exc: + MODELS_AVAILABLE = False + +render_mode_one_of_6_model_schema = json.loads( + r"""{ + "title" : "_RenderMode_oneOf_6", + "type" : "string", + "description" : "Render an hierarchical object for each observation. Shows an iso timestamp.\n\n###### options\n- `iso_timestamp`: `True`\n- `hierarchical`: `True`\n- `show_levels`: `True`\n- `roll_up`: `True`", + "enum" : [ "HIER_DICT" ] +} +""", + object_hook=with_example_provider, +) +render_mode_one_of_6_model_schema.update({"definitions": MODEL_DEFINITIONS}) + +render_mode_one_of_6_faker = JSF( + render_mode_one_of_6_model_schema, allow_none_optionals=1 +) + + +class RenderModeOneOf6Stub: + """RenderModeOneOf6 unit test stubs.""" + + @classmethod + def create_json(cls): + """Create a dict stub instance.""" + return render_mode_one_of_6_faker.generate(use_defaults=True, use_examples=True) + + @classmethod + def create_instance(cls) -> "RenderModeOneOf6": + """Create RenderModeOneOf6 stub instance.""" + if not MODELS_AVAILABLE: + raise ImportError("Models must be installed to create class stubs") + json = cls.create_json() + if not json: + # use backup example based on the pydantic model schema + backup_faker = JSF( + RenderModeOneOf6Adapter.json_schema(), allow_none_optionals=1 + ) + json = backup_faker.generate(use_defaults=True, use_examples=True) + return RenderModeOneOf6Adapter.validate_python( + json, context={"skip_validation": True} + ) diff --git a/test/types/render_mode_one_of7_stub.py b/test/types/render_mode_one_of7_stub.py new file mode 100644 index 0000000..225b042 --- /dev/null +++ b/test/types/render_mode_one_of7_stub.py @@ -0,0 +1,65 @@ +# coding: utf-8 +"""Waylay Query: timeseries queries (v1 protocol) model tests. + +This code was generated from the OpenAPI documentation of 'Waylay Query: timeseries queries (v1 protocol)' + +Generated by OpenAPI Generator (https://openapi-generator.tech) + +Do not edit the class manually. +""" + +import json + +from jsf import JSF +from pydantic import TypeAdapter + +from ..openapi import MODEL_DEFINITIONS, with_example_provider + +try: + from waylay.services.queries.models.render_mode_one_of7 import RenderModeOneOf7 + + RenderModeOneOf7Adapter = TypeAdapter(RenderModeOneOf7) + MODELS_AVAILABLE = True +except ImportError as exc: + MODELS_AVAILABLE = False + +render_mode_one_of_7_model_schema = json.loads( + r"""{ + "title" : "_RenderMode_oneOf_7", + "type" : "string", + "description" : "Render an object with metric keys for each observation. Shows an iso timestamp.\n\n###### options\n- `iso_timestamp`: `True`\n- `hierarchical`: `['metric']`\n- `show_levels`: `False`\n- `roll_up`: `True`\n- `key_skip_empty`: `True`", + "enum" : [ "METRIC_FLAT_DICT" ] +} +""", + object_hook=with_example_provider, +) +render_mode_one_of_7_model_schema.update({"definitions": MODEL_DEFINITIONS}) + +render_mode_one_of_7_faker = JSF( + render_mode_one_of_7_model_schema, allow_none_optionals=1 +) + + +class RenderModeOneOf7Stub: + """RenderModeOneOf7 unit test stubs.""" + + @classmethod + def create_json(cls): + """Create a dict stub instance.""" + return render_mode_one_of_7_faker.generate(use_defaults=True, use_examples=True) + + @classmethod + def create_instance(cls) -> "RenderModeOneOf7": + """Create RenderModeOneOf7 stub instance.""" + if not MODELS_AVAILABLE: + raise ImportError("Models must be installed to create class stubs") + json = cls.create_json() + if not json: + # use backup example based on the pydantic model schema + backup_faker = JSF( + RenderModeOneOf7Adapter.json_schema(), allow_none_optionals=1 + ) + json = backup_faker.generate(use_defaults=True, use_examples=True) + return RenderModeOneOf7Adapter.validate_python( + json, context={"skip_validation": True} + ) diff --git a/test/types/render_mode_one_of8_stub.py b/test/types/render_mode_one_of8_stub.py new file mode 100644 index 0000000..92c2f2b --- /dev/null +++ b/test/types/render_mode_one_of8_stub.py @@ -0,0 +1,65 @@ +# coding: utf-8 +"""Waylay Query: timeseries queries (v1 protocol) model tests. + +This code was generated from the OpenAPI documentation of 'Waylay Query: timeseries queries (v1 protocol)' + +Generated by OpenAPI Generator (https://openapi-generator.tech) + +Do not edit the class manually. +""" + +import json + +from jsf import JSF +from pydantic import TypeAdapter + +from ..openapi import MODEL_DEFINITIONS, with_example_provider + +try: + from waylay.services.queries.models.render_mode_one_of8 import RenderModeOneOf8 + + RenderModeOneOf8Adapter = TypeAdapter(RenderModeOneOf8) + MODELS_AVAILABLE = True +except ImportError as exc: + MODELS_AVAILABLE = False + +render_mode_one_of_8_model_schema = json.loads( + r"""{ + "title" : "_RenderMode_oneOf_8", + "type" : "string", + "description" : "Render in an object format compatible with the `/data/v1/events` upload.\n\n###### options\n- `iso_timestamp`: `False`\n- `hierarchical`: `False`\n- `show_levels`: `False`\n- `roll_up`: `True`", + "enum" : [ "UPLOAD" ] +} +""", + object_hook=with_example_provider, +) +render_mode_one_of_8_model_schema.update({"definitions": MODEL_DEFINITIONS}) + +render_mode_one_of_8_faker = JSF( + render_mode_one_of_8_model_schema, allow_none_optionals=1 +) + + +class RenderModeOneOf8Stub: + """RenderModeOneOf8 unit test stubs.""" + + @classmethod + def create_json(cls): + """Create a dict stub instance.""" + return render_mode_one_of_8_faker.generate(use_defaults=True, use_examples=True) + + @classmethod + def create_instance(cls) -> "RenderModeOneOf8": + """Create RenderModeOneOf8 stub instance.""" + if not MODELS_AVAILABLE: + raise ImportError("Models must be installed to create class stubs") + json = cls.create_json() + if not json: + # use backup example based on the pydantic model schema + backup_faker = JSF( + RenderModeOneOf8Adapter.json_schema(), allow_none_optionals=1 + ) + json = backup_faker.generate(use_defaults=True, use_examples=True) + return RenderModeOneOf8Adapter.validate_python( + json, context={"skip_validation": True} + ) diff --git a/test/types/render_mode_one_of9_stub.py b/test/types/render_mode_one_of9_stub.py new file mode 100644 index 0000000..3c5d397 --- /dev/null +++ b/test/types/render_mode_one_of9_stub.py @@ -0,0 +1,65 @@ +# coding: utf-8 +"""Waylay Query: timeseries queries (v1 protocol) model tests. + +This code was generated from the OpenAPI documentation of 'Waylay Query: timeseries queries (v1 protocol)' + +Generated by OpenAPI Generator (https://openapi-generator.tech) + +Do not edit the class manually. +""" + +import json + +from jsf import JSF +from pydantic import TypeAdapter + +from ..openapi import MODEL_DEFINITIONS, with_example_provider + +try: + from waylay.services.queries.models.render_mode_one_of9 import RenderModeOneOf9 + + RenderModeOneOf9Adapter = TypeAdapter(RenderModeOneOf9) + MODELS_AVAILABLE = True +except ImportError as exc: + MODELS_AVAILABLE = False + +render_mode_one_of_9_model_schema = json.loads( + r"""{ + "title" : "_RenderMode_oneOf_9", + "type" : "string", + "description" : "Render in csv format with row headers.\n\n###### options\n- `iso_timestamp`: `False`", + "enum" : [ "CSV" ] +} +""", + object_hook=with_example_provider, +) +render_mode_one_of_9_model_schema.update({"definitions": MODEL_DEFINITIONS}) + +render_mode_one_of_9_faker = JSF( + render_mode_one_of_9_model_schema, allow_none_optionals=1 +) + + +class RenderModeOneOf9Stub: + """RenderModeOneOf9 unit test stubs.""" + + @classmethod + def create_json(cls): + """Create a dict stub instance.""" + return render_mode_one_of_9_faker.generate(use_defaults=True, use_examples=True) + + @classmethod + def create_instance(cls) -> "RenderModeOneOf9": + """Create RenderModeOneOf9 stub instance.""" + if not MODELS_AVAILABLE: + raise ImportError("Models must be installed to create class stubs") + json = cls.create_json() + if not json: + # use backup example based on the pydantic model schema + backup_faker = JSF( + RenderModeOneOf9Adapter.json_schema(), allow_none_optionals=1 + ) + json = backup_faker.generate(use_defaults=True, use_examples=True) + return RenderModeOneOf9Adapter.validate_python( + json, context={"skip_validation": True} + ) diff --git a/test/types/render_mode_one_of_stub.py b/test/types/render_mode_one_of_stub.py new file mode 100644 index 0000000..77040d4 --- /dev/null +++ b/test/types/render_mode_one_of_stub.py @@ -0,0 +1,63 @@ +# coding: utf-8 +"""Waylay Query: timeseries queries (v1 protocol) model tests. + +This code was generated from the OpenAPI documentation of 'Waylay Query: timeseries queries (v1 protocol)' + +Generated by OpenAPI Generator (https://openapi-generator.tech) + +Do not edit the class manually. +""" + +import json + +from jsf import JSF +from pydantic import TypeAdapter + +from ..openapi import MODEL_DEFINITIONS, with_example_provider + +try: + from waylay.services.queries.models.render_mode_one_of import RenderModeOneOf + + RenderModeOneOfAdapter = TypeAdapter(RenderModeOneOf) + MODELS_AVAILABLE = True +except ImportError as exc: + MODELS_AVAILABLE = False + +render_mode_one_of_model_schema = json.loads( + r"""{ + "title" : "_RenderMode_oneOf", + "type" : "string", + "description" : "Render rows of timestamp and values. Show column headers. Includes an iso timestamp.\n\n###### options\n- `iso_timestamp`: `True`\n- `header_array`: `row`\n- `roll_up`: `False`\n- `data_axis`: `column`", + "enum" : [ "HEADER_ROW" ] +} +""", + object_hook=with_example_provider, +) +render_mode_one_of_model_schema.update({"definitions": MODEL_DEFINITIONS}) + +render_mode_one_of_faker = JSF(render_mode_one_of_model_schema, allow_none_optionals=1) + + +class RenderModeOneOfStub: + """RenderModeOneOf unit test stubs.""" + + @classmethod + def create_json(cls): + """Create a dict stub instance.""" + return render_mode_one_of_faker.generate(use_defaults=True, use_examples=True) + + @classmethod + def create_instance(cls) -> "RenderModeOneOf": + """Create RenderModeOneOf stub instance.""" + if not MODELS_AVAILABLE: + raise ImportError("Models must be installed to create class stubs") + json = cls.create_json() + if not json: + # use backup example based on the pydantic model schema + backup_faker = JSF( + RenderModeOneOfAdapter.json_schema(), allow_none_optionals=1 + ) + json = backup_faker.generate(use_defaults=True, use_examples=True) + return RenderModeOneOfAdapter.validate_python( + json, context={"skip_validation": True} + ) diff --git a/test/types/render_mode_stub.py b/test/types/render_mode_stub.py new file mode 100644 index 0000000..4cb8c9e --- /dev/null +++ b/test/types/render_mode_stub.py @@ -0,0 +1,81 @@ +# coding: utf-8 +"""Waylay Query: timeseries queries (v1 protocol) model tests. + +This code was generated from the OpenAPI documentation of 'Waylay Query: timeseries queries (v1 protocol)' + +Generated by OpenAPI Generator (https://openapi-generator.tech) + +Do not edit the class manually. +""" + +import json + +from jsf import JSF +from pydantic import TypeAdapter + +from ..openapi import MODEL_DEFINITIONS, with_example_provider + +try: + from waylay.services.queries.models.render_mode import RenderMode + + RenderModeAdapter = TypeAdapter(RenderMode) + MODELS_AVAILABLE = True +except ImportError as exc: + MODELS_AVAILABLE = False + +render_mode_model_schema = json.loads( + r"""{ + "title" : "_RenderMode", + "type" : "string", + "description" : "Render mode configuration keys.", + "oneOf" : [ { + "$ref" : "#/components/schemas/_RenderMode_oneOf" + }, { + "$ref" : "#/components/schemas/_RenderMode_oneOf_1" + }, { + "$ref" : "#/components/schemas/_RenderMode_oneOf_2" + }, { + "$ref" : "#/components/schemas/_RenderMode_oneOf_3" + }, { + "$ref" : "#/components/schemas/_RenderMode_oneOf_4" + }, { + "$ref" : "#/components/schemas/_RenderMode_oneOf_5" + }, { + "$ref" : "#/components/schemas/_RenderMode_oneOf_6" + }, { + "$ref" : "#/components/schemas/_RenderMode_oneOf_7" + }, { + "$ref" : "#/components/schemas/_RenderMode_oneOf_8" + }, { + "$ref" : "#/components/schemas/_RenderMode_oneOf_9" + } ] +} +""", + object_hook=with_example_provider, +) +render_mode_model_schema.update({"definitions": MODEL_DEFINITIONS}) + +render_mode_faker = JSF(render_mode_model_schema, allow_none_optionals=1) + + +class RenderModeStub: + """RenderMode unit test stubs.""" + + @classmethod + def create_json(cls): + """Create a dict stub instance.""" + return render_mode_faker.generate(use_defaults=True, use_examples=True) + + @classmethod + def create_instance(cls) -> "RenderMode": + """Create RenderMode stub instance.""" + if not MODELS_AVAILABLE: + raise ImportError("Models must be installed to create class stubs") + json = cls.create_json() + if not json: + # use backup example based on the pydantic model schema + backup_faker = JSF(RenderModeAdapter.json_schema(), allow_none_optionals=1) + json = backup_faker.generate(use_defaults=True, use_examples=True) + return RenderModeAdapter.validate_python( + json, context={"skip_validation": True} + ) diff --git a/test/types/render_stub.py b/test/types/render_stub.py new file mode 100644 index 0000000..dc62937 --- /dev/null +++ b/test/types/render_stub.py @@ -0,0 +1,118 @@ +# coding: utf-8 +"""Waylay Query: timeseries queries (v1 protocol) model tests. + +This code was generated from the OpenAPI documentation of 'Waylay Query: timeseries queries (v1 protocol)' + +Generated by OpenAPI Generator (https://openapi-generator.tech) + +Do not edit the class manually. +""" + +import json + +from jsf import JSF +from pydantic import TypeAdapter + +from ..openapi import MODEL_DEFINITIONS, with_example_provider + +try: + from waylay.services.queries.models.render import Render + + RenderAdapter = TypeAdapter(Render) + MODELS_AVAILABLE = True +except ImportError as exc: + MODELS_AVAILABLE = False + +render_model_schema = json.loads( + r"""{ + "title" : "Render", + "type" : "object", + "properties" : { + "mode" : { + "$ref" : "#/components/schemas/_RenderMode" + }, + "roll_up" : { + "title" : "Roll Up", + "type" : "boolean", + "description" : "move up attributes on rows (or columns) that are the same for all rows (or columns) to a table attribute. Levels enumerated in 'hierarchical' are excluded." + }, + "hierarchical" : { + "$ref" : "#/components/schemas/Hierarchical" + }, + "value_key" : { + "title" : "Value Key", + "type" : "string", + "description" : "if set, use this key in the value object to report data values" + }, + "show_levels" : { + "title" : "Show Levels", + "type" : "boolean", + "description" : "if set, report the levels used in the data values (either hierarchical or flat)" + }, + "iso_timestamp" : { + "title" : "Iso Timestamp", + "type" : "boolean", + "description" : "if set, render timestamps in a row or column index with both epoch and iso representations" + }, + "row_key" : { + "title" : "Row Key", + "type" : "string", + "description" : "if set, use this key as name of the row-dimension for single-dimensional rows" + }, + "column_key" : { + "title" : "Column Key", + "type" : "string", + "description" : "if set, use this key as name of the column-dimension for single-dimensional columns" + }, + "header_array" : { + "$ref" : "#/components/schemas/HeaderArrayOption" + }, + "data_axis" : { + "$ref" : "#/components/schemas/DataAxisOption" + }, + "key_seperator" : { + "title" : "Key Seperator", + "type" : "string", + "description" : "character used to concatenate multi-key columns or rows when required" + }, + "key_skip_empty" : { + "title" : "Key Skip Empty", + "type" : "boolean", + "description" : "skip empty values in concatenating multi-key column or row headers" + }, + "include_window_spec" : { + "title" : "Include Window Spec", + "type" : "boolean", + "description" : "if set, include window specification in render modes that support it" + } + }, + "additionalProperties" : true, + "description" : "Configures the representation of data sets returned by the query API." +} +""", + object_hook=with_example_provider, +) +render_model_schema.update({"definitions": MODEL_DEFINITIONS}) + +render_faker = JSF(render_model_schema, allow_none_optionals=1) + + +class RenderStub: + """Render unit test stubs.""" + + @classmethod + def create_json(cls): + """Create a dict stub instance.""" + return render_faker.generate(use_defaults=True, use_examples=True) + + @classmethod + def create_instance(cls) -> "Render": + """Create Render stub instance.""" + if not MODELS_AVAILABLE: + raise ImportError("Models must be installed to create class stubs") + json = cls.create_json() + if not json: + # use backup example based on the pydantic model schema + backup_faker = JSF(RenderAdapter.json_schema(), allow_none_optionals=1) + json = backup_faker.generate(use_defaults=True, use_examples=True) + return RenderAdapter.validate_python(json, context={"skip_validation": True}) diff --git a/test/types/response_data_set_stub.py b/test/types/response_data_set_stub.py new file mode 100644 index 0000000..dc370f5 --- /dev/null +++ b/test/types/response_data_set_stub.py @@ -0,0 +1,70 @@ +# coding: utf-8 +"""Waylay Query: timeseries queries (v1 protocol) model tests. + +This code was generated from the OpenAPI documentation of 'Waylay Query: timeseries queries (v1 protocol)' + +Generated by OpenAPI Generator (https://openapi-generator.tech) + +Do not edit the class manually. +""" + +import json + +from jsf import JSF +from pydantic import TypeAdapter + +from ..openapi import MODEL_DEFINITIONS, with_example_provider + +try: + from waylay.services.queries.models.response_data_set import ResponseDataSet + + ResponseDataSetAdapter = TypeAdapter(ResponseDataSet) + MODELS_AVAILABLE = True +except ImportError as exc: + MODELS_AVAILABLE = False + +response_data_set_model_schema = json.loads( + r"""{ + "title" : "Response Data Set", + "description" : "Result timeseries data set, with one time dimension.", + "anyOf" : [ { + "$ref" : "#/components/schemas/RowDataSet" + }, { + "$ref" : "#/components/schemas/SeriesDataSet" + }, { + "$ref" : "#/components/schemas/ColumnDataSet" + }, { + "$ref" : "#/components/schemas/ObjectDataSet" + } ] +} +""", + object_hook=with_example_provider, +) +response_data_set_model_schema.update({"definitions": MODEL_DEFINITIONS}) + +response_data_set_faker = JSF(response_data_set_model_schema, allow_none_optionals=1) + + +class ResponseDataSetStub: + """ResponseDataSet unit test stubs.""" + + @classmethod + def create_json(cls): + """Create a dict stub instance.""" + return response_data_set_faker.generate(use_defaults=True, use_examples=True) + + @classmethod + def create_instance(cls) -> "ResponseDataSet": + """Create ResponseDataSet stub instance.""" + if not MODELS_AVAILABLE: + raise ImportError("Models must be installed to create class stubs") + json = cls.create_json() + if not json: + # use backup example based on the pydantic model schema + backup_faker = JSF( + ResponseDataSetAdapter.json_schema(), allow_none_optionals=1 + ) + json = backup_faker.generate(use_defaults=True, use_examples=True) + return ResponseDataSetAdapter.validate_python( + json, context={"skip_validation": True} + ) diff --git a/test/types/row_data_set_data_axis_stub.py b/test/types/row_data_set_data_axis_stub.py new file mode 100644 index 0000000..6c650be --- /dev/null +++ b/test/types/row_data_set_data_axis_stub.py @@ -0,0 +1,67 @@ +# coding: utf-8 +"""Waylay Query: timeseries queries (v1 protocol) model tests. + +This code was generated from the OpenAPI documentation of 'Waylay Query: timeseries queries (v1 protocol)' + +Generated by OpenAPI Generator (https://openapi-generator.tech) + +Do not edit the class manually. +""" + +import json + +from jsf import JSF +from pydantic import TypeAdapter + +from ..openapi import MODEL_DEFINITIONS, with_example_provider + +try: + from waylay.services.queries.models.row_data_set_data_axis import RowDataSetDataAxis + + RowDataSetDataAxisAdapter = TypeAdapter(RowDataSetDataAxis) + MODELS_AVAILABLE = True +except ImportError as exc: + MODELS_AVAILABLE = False + +row_data_set_data_axis_model_schema = json.loads( + r"""{ + "title" : "RowDataSet_data_axis", + "type" : "string", + "default" : "column", + "enum" : [ "column" ] +} +""", + object_hook=with_example_provider, +) +row_data_set_data_axis_model_schema.update({"definitions": MODEL_DEFINITIONS}) + +row_data_set_data_axis_faker = JSF( + row_data_set_data_axis_model_schema, allow_none_optionals=1 +) + + +class RowDataSetDataAxisStub: + """RowDataSetDataAxis unit test stubs.""" + + @classmethod + def create_json(cls): + """Create a dict stub instance.""" + return row_data_set_data_axis_faker.generate( + use_defaults=True, use_examples=True + ) + + @classmethod + def create_instance(cls) -> "RowDataSetDataAxis": + """Create RowDataSetDataAxis stub instance.""" + if not MODELS_AVAILABLE: + raise ImportError("Models must be installed to create class stubs") + json = cls.create_json() + if not json: + # use backup example based on the pydantic model schema + backup_faker = JSF( + RowDataSetDataAxisAdapter.json_schema(), allow_none_optionals=1 + ) + json = backup_faker.generate(use_defaults=True, use_examples=True) + return RowDataSetDataAxisAdapter.validate_python( + json, context={"skip_validation": True} + ) diff --git a/test/types/row_data_set_stub.py b/test/types/row_data_set_stub.py new file mode 100644 index 0000000..0705e38 --- /dev/null +++ b/test/types/row_data_set_stub.py @@ -0,0 +1,99 @@ +# coding: utf-8 +"""Waylay Query: timeseries queries (v1 protocol) model tests. + +This code was generated from the OpenAPI documentation of 'Waylay Query: timeseries queries (v1 protocol)' + +Generated by OpenAPI Generator (https://openapi-generator.tech) + +Do not edit the class manually. +""" + +import json + +from jsf import JSF +from pydantic import TypeAdapter + +from ..openapi import MODEL_DEFINITIONS, with_example_provider + +try: + from waylay.services.queries.models.row_data_set import RowDataSet + + RowDataSetAdapter = TypeAdapter(RowDataSet) + MODELS_AVAILABLE = True +except ImportError as exc: + MODELS_AVAILABLE = False + +row_data_set_model_schema = json.loads( + r"""{ + "required" : [ "columns", "data" ], + "type" : "object", + "properties" : { + "attributes" : { + "$ref" : "#/components/schemas/DataSetAttributes" + }, + "window_spec" : { + "$ref" : "#/components/schemas/DataSetWindow" + }, + "data_axis" : { + "$ref" : "#/components/schemas/RowDataSet_data_axis" + }, + "columns" : { + "title" : "Column Headers", + "type" : "array", + "description" : "Header Attributes for the column data.\n\nThe initial string-valued headers (normally a single `timestamp`) indicate that column to contain row index data (i.e. timestamps).\n\nThe remaining object-valued column headers identify and describe the actual series data.", + "items" : { + "$ref" : "#/components/schemas/Column_Headers_inner" + }, + "x-prefixItems" : [ { + "const" : "timestamp", + "title" : "Unix epoch milliseconds timestamp." + } ] + }, + "data" : { + "title" : "Data", + "type" : "array", + "items" : { + "title" : "Observation", + "type" : "array", + "description" : "Row index data (timestamp), and a value for each of the series.", + "items" : { + "$ref" : "#/components/schemas/Datum" + }, + "x-prefixItems" : [ { + "$ref" : "#/components/schemas/Timestamp" + } ] + } + } + }, + "additionalProperties" : true, + "description" : "Row-oriented dataset.\n\nTimeseries data layout with a column header and a data row per timestamp.\nResult for render options `data_axis=column` and `header_array=row`.\"," +} +""", + object_hook=with_example_provider, +) +row_data_set_model_schema.update({"definitions": MODEL_DEFINITIONS}) + +row_data_set_faker = JSF(row_data_set_model_schema, allow_none_optionals=1) + + +class RowDataSetStub: + """RowDataSet unit test stubs.""" + + @classmethod + def create_json(cls): + """Create a dict stub instance.""" + return row_data_set_faker.generate(use_defaults=True, use_examples=True) + + @classmethod + def create_instance(cls) -> "RowDataSet": + """Create RowDataSet stub instance.""" + if not MODELS_AVAILABLE: + raise ImportError("Models must be installed to create class stubs") + json = cls.create_json() + if not json: + # use backup example based on the pydantic model schema + backup_faker = JSF(RowDataSetAdapter.json_schema(), allow_none_optionals=1) + json = backup_faker.generate(use_defaults=True, use_examples=True) + return RowDataSetAdapter.validate_python( + json, context={"skip_validation": True} + ) diff --git a/test/types/row_header_stub.py b/test/types/row_header_stub.py new file mode 100644 index 0000000..09f414b --- /dev/null +++ b/test/types/row_header_stub.py @@ -0,0 +1,67 @@ +# coding: utf-8 +"""Waylay Query: timeseries queries (v1 protocol) model tests. + +This code was generated from the OpenAPI documentation of 'Waylay Query: timeseries queries (v1 protocol)' + +Generated by OpenAPI Generator (https://openapi-generator.tech) + +Do not edit the class manually. +""" + +import json + +from jsf import JSF +from pydantic import TypeAdapter + +from ..openapi import MODEL_DEFINITIONS, with_example_provider + +try: + from waylay.services.queries.models.row_header import RowHeader + + RowHeaderAdapter = TypeAdapter(RowHeader) + MODELS_AVAILABLE = True +except ImportError as exc: + MODELS_AVAILABLE = False + +row_header_model_schema = json.loads( + r"""{ + "required" : [ "timestamp" ], + "type" : "object", + "properties" : { + "timestamp" : { + "$ref" : "#/components/schemas/Timestamp" + }, + "timestamp_iso" : { + "$ref" : "#/components/schemas/TimestampIso" + } + }, + "additionalProperties" : true, + "description" : "Index entry attributes.\n\nAttributes for a timestamp index entry." +} +""", + object_hook=with_example_provider, +) +row_header_model_schema.update({"definitions": MODEL_DEFINITIONS}) + +row_header_faker = JSF(row_header_model_schema, allow_none_optionals=1) + + +class RowHeaderStub: + """RowHeader unit test stubs.""" + + @classmethod + def create_json(cls): + """Create a dict stub instance.""" + return row_header_faker.generate(use_defaults=True, use_examples=True) + + @classmethod + def create_instance(cls) -> "RowHeader": + """Create RowHeader stub instance.""" + if not MODELS_AVAILABLE: + raise ImportError("Models must be installed to create class stubs") + json = cls.create_json() + if not json: + # use backup example based on the pydantic model schema + backup_faker = JSF(RowHeaderAdapter.json_schema(), allow_none_optionals=1) + json = backup_faker.generate(use_defaults=True, use_examples=True) + return RowHeaderAdapter.validate_python(json, context={"skip_validation": True}) diff --git a/test/types/row_headers_inner_stub.py b/test/types/row_headers_inner_stub.py new file mode 100644 index 0000000..112cf5e --- /dev/null +++ b/test/types/row_headers_inner_stub.py @@ -0,0 +1,65 @@ +# coding: utf-8 +"""Waylay Query: timeseries queries (v1 protocol) model tests. + +This code was generated from the OpenAPI documentation of 'Waylay Query: timeseries queries (v1 protocol)' + +Generated by OpenAPI Generator (https://openapi-generator.tech) + +Do not edit the class manually. +""" + +import json + +from jsf import JSF +from pydantic import TypeAdapter + +from ..openapi import MODEL_DEFINITIONS, with_example_provider + +try: + from waylay.services.queries.models.row_headers_inner import RowHeadersInner + + RowHeadersInnerAdapter = TypeAdapter(RowHeadersInner) + MODELS_AVAILABLE = True +except ImportError as exc: + MODELS_AVAILABLE = False + +row_headers_inner_model_schema = json.loads( + r"""{ + "title" : "Row_Headers_inner", + "anyOf" : [ { + "$ref" : "#/components/schemas/ColumnIndexRowHeader" + }, { + "$ref" : "#/components/schemas/RowHeader" + } ] +} +""", + object_hook=with_example_provider, +) +row_headers_inner_model_schema.update({"definitions": MODEL_DEFINITIONS}) + +row_headers_inner_faker = JSF(row_headers_inner_model_schema, allow_none_optionals=1) + + +class RowHeadersInnerStub: + """RowHeadersInner unit test stubs.""" + + @classmethod + def create_json(cls): + """Create a dict stub instance.""" + return row_headers_inner_faker.generate(use_defaults=True, use_examples=True) + + @classmethod + def create_instance(cls) -> "RowHeadersInner": + """Create RowHeadersInner stub instance.""" + if not MODELS_AVAILABLE: + raise ImportError("Models must be installed to create class stubs") + json = cls.create_json() + if not json: + # use backup example based on the pydantic model schema + backup_faker = JSF( + RowHeadersInnerAdapter.json_schema(), allow_none_optionals=1 + ) + json = backup_faker.generate(use_defaults=True, use_examples=True) + return RowHeadersInnerAdapter.validate_python( + json, context={"skip_validation": True} + ) diff --git a/test/types/series_data_set_stub.py b/test/types/series_data_set_stub.py new file mode 100644 index 0000000..167fd5e --- /dev/null +++ b/test/types/series_data_set_stub.py @@ -0,0 +1,106 @@ +# coding: utf-8 +"""Waylay Query: timeseries queries (v1 protocol) model tests. + +This code was generated from the OpenAPI documentation of 'Waylay Query: timeseries queries (v1 protocol)' + +Generated by OpenAPI Generator (https://openapi-generator.tech) + +Do not edit the class manually. +""" + +import json + +from jsf import JSF +from pydantic import TypeAdapter + +from ..openapi import MODEL_DEFINITIONS, with_example_provider + +try: + from waylay.services.queries.models.series_data_set import SeriesDataSet + + SeriesDataSetAdapter = TypeAdapter(SeriesDataSet) + MODELS_AVAILABLE = True +except ImportError as exc: + MODELS_AVAILABLE = False + +series_data_set_model_schema = json.loads( + r"""{ + "required" : [ "columns", "data" ], + "type" : "object", + "properties" : { + "attributes" : { + "$ref" : "#/components/schemas/DataSetAttributes" + }, + "window_spec" : { + "$ref" : "#/components/schemas/DataSetWindow" + }, + "data_axis" : { + "$ref" : "#/components/schemas/ColumnDataSet_data_axis" + }, + "columns" : { + "title" : "Column Headers", + "type" : "array", + "description" : "Header Attributes for the column data.\n\nThe initial string-valued headers (normally a single `timestamp`) indicate that column to contain row index data (i.e. timestamps).\n\nThe remaining object-valued column headers identify and describe the actual series data.", + "items" : { + "$ref" : "#/components/schemas/Column_Headers_inner" + }, + "x-prefixItems" : [ { + "const" : "timestamp", + "title" : "Unix epoch milliseconds timestamp." + } ] + }, + "data" : { + "title" : "Data", + "type" : "array", + "items" : { + "title" : "Series", + "type" : "array", + "description" : "All metric observation values for a single series.", + "items" : { + "$ref" : "#/components/schemas/Datum" + } + }, + "x-prefixItems" : [ { + "items" : { + "$ref" : "#/components/schemas/Timestamp" + }, + "type" : "array", + "title" : "Timestamp Index", + "description" : "The timestamp index for this result data." + } ] + } + }, + "additionalProperties" : true, + "description" : "Column-oriented dataset.\n\nTimeseries data layout with a column header\nand a seperate data array for the time index and each series.\nResult for render options `data_axis=row` and `header_array=row`." +} +""", + object_hook=with_example_provider, +) +series_data_set_model_schema.update({"definitions": MODEL_DEFINITIONS}) + +series_data_set_faker = JSF(series_data_set_model_schema, allow_none_optionals=1) + + +class SeriesDataSetStub: + """SeriesDataSet unit test stubs.""" + + @classmethod + def create_json(cls): + """Create a dict stub instance.""" + return series_data_set_faker.generate(use_defaults=True, use_examples=True) + + @classmethod + def create_instance(cls) -> "SeriesDataSet": + """Create SeriesDataSet stub instance.""" + if not MODELS_AVAILABLE: + raise ImportError("Models must be installed to create class stubs") + json = cls.create_json() + if not json: + # use backup example based on the pydantic model schema + backup_faker = JSF( + SeriesDataSetAdapter.json_schema(), allow_none_optionals=1 + ) + json = backup_faker.generate(use_defaults=True, use_examples=True) + return SeriesDataSetAdapter.validate_python( + json, context={"skip_validation": True} + ) diff --git a/test/types/series_spec_stub.py b/test/types/series_spec_stub.py new file mode 100644 index 0000000..b199e50 --- /dev/null +++ b/test/types/series_spec_stub.py @@ -0,0 +1,87 @@ +# coding: utf-8 +"""Waylay Query: timeseries queries (v1 protocol) model tests. + +This code was generated from the OpenAPI documentation of 'Waylay Query: timeseries queries (v1 protocol)' + +Generated by OpenAPI Generator (https://openapi-generator.tech) + +Do not edit the class manually. +""" + +import json + +from jsf import JSF +from pydantic import TypeAdapter + +from ..openapi import MODEL_DEFINITIONS, with_example_provider + +try: + from waylay.services.queries.models.series_spec import SeriesSpec + + SeriesSpecAdapter = TypeAdapter(SeriesSpec) + MODELS_AVAILABLE = True +except ImportError as exc: + MODELS_AVAILABLE = False + +series_spec_model_schema = json.loads( + r"""{ + "title" : "SeriesSpec", + "type" : "object", + "properties" : { + "name" : { + "title" : "Name", + "type" : "string", + "description" : "Optional alias name for the series. This name is used when exporting the dataset to CSV format.", + "example" : "demoQuery" + }, + "resource" : { + "title" : "Resource", + "type" : "string", + "description" : "Resource id for the series, required unless it is specified as a query default.", + "example" : "13efb488-75ac-4dac-828a-d49c5c2ebbfc" + }, + "metric" : { + "title" : "Metric", + "type" : "string", + "description" : "Metric name for the series, required unless it is specified as a query default.", + "example" : "temperature" + }, + "aggregration" : { + "$ref" : "#/components/schemas/AggregationMethod" + }, + "interpolation" : { + "$ref" : "#/components/schemas/Interpolation" + } + }, + "additionalProperties" : true, + "description" : "Query specification for a single series." +} +""", + object_hook=with_example_provider, +) +series_spec_model_schema.update({"definitions": MODEL_DEFINITIONS}) + +series_spec_faker = JSF(series_spec_model_schema, allow_none_optionals=1) + + +class SeriesSpecStub: + """SeriesSpec unit test stubs.""" + + @classmethod + def create_json(cls): + """Create a dict stub instance.""" + return series_spec_faker.generate(use_defaults=True, use_examples=True) + + @classmethod + def create_instance(cls) -> "SeriesSpec": + """Create SeriesSpec stub instance.""" + if not MODELS_AVAILABLE: + raise ImportError("Models must be installed to create class stubs") + json = cls.create_json() + if not json: + # use backup example based on the pydantic model schema + backup_faker = JSF(SeriesSpecAdapter.json_schema(), allow_none_optionals=1) + json = backup_faker.generate(use_defaults=True, use_examples=True) + return SeriesSpecAdapter.validate_python( + json, context={"skip_validation": True} + ) diff --git a/test/types/time_window_from_stub.py b/test/types/time_window_from_stub.py new file mode 100644 index 0000000..8a1098e --- /dev/null +++ b/test/types/time_window_from_stub.py @@ -0,0 +1,82 @@ +# coding: utf-8 +"""Waylay Query: timeseries queries (v1 protocol) model tests. + +This code was generated from the OpenAPI documentation of 'Waylay Query: timeseries queries (v1 protocol)' + +Generated by OpenAPI Generator (https://openapi-generator.tech) + +Do not edit the class manually. +""" + +import json + +from jsf import JSF +from pydantic import TypeAdapter + +from ..openapi import MODEL_DEFINITIONS, with_example_provider + +try: + from waylay.services.queries.models.time_window_from import TimeWindowFrom + + TimeWindowFromAdapter = TypeAdapter(TimeWindowFrom) + MODELS_AVAILABLE = True +except ImportError as exc: + MODELS_AVAILABLE = False + +time_window_from_model_schema = json.loads( + r"""{ + "title" : "Time Window From", + "description" : "The start of the time window for which results will be returned. One of the [time line](https://docs.waylay.io/#/api/query/?id=time-line-properties) specifiers.", + "oneOf" : [ { + "title" : "ISO8601 absolute timestamp", + "pattern" : "[0-9]{4}-[0-9]{2}-[0-9]{2}(T.*)?", + "type" : "string", + "description" : "A date or date-time in [ISO8601](https://en.wikipedia.org/wiki/ISO_8601#Combined_date_and_time_representations) format. When no timezone is specified, the UTC timezone is assumed (`+00:00`)", + "format" : "date-time", + "example" : "2018-03-21T12:23:00+01:00" + }, { + "title" : "UNIX epoch milliseconds", + "minimum" : 0, + "type" : "integer", + "description" : "Absolute timestamp milliseconds in unix epoch since 1970-01-01.", + "example" : 1534836422284 + }, { + "title" : "ISO8601 Period Before Now", + "pattern" : "^P([0-9]+Y)?([0-9]+M)?([0-9]+W)?([0-9]+D)?(T([0-9]+H)?([0-9]+M)?([0-9]+(\\.[0-9]*)?S)?)?$", + "type" : "string", + "description" : "Specifies a timestamp before _now_ as a period in [ISO8601 duration](https://en.wikipedia.org/wiki/ISO_8601#Durations) format.", + "format" : "period", + "example" : "PT3H15M" + } ] +} +""", + object_hook=with_example_provider, +) +time_window_from_model_schema.update({"definitions": MODEL_DEFINITIONS}) + +time_window_from_faker = JSF(time_window_from_model_schema, allow_none_optionals=1) + + +class TimeWindowFromStub: + """TimeWindowFrom unit test stubs.""" + + @classmethod + def create_json(cls): + """Create a dict stub instance.""" + return time_window_from_faker.generate(use_defaults=True, use_examples=True) + + @classmethod + def create_instance(cls) -> "TimeWindowFrom": + """Create TimeWindowFrom stub instance.""" + if not MODELS_AVAILABLE: + raise ImportError("Models must be installed to create class stubs") + json = cls.create_json() + if not json: + # use backup example based on the pydantic model schema + backup_faker = JSF( + TimeWindowFromAdapter.json_schema(), allow_none_optionals=1 + ) + json = backup_faker.generate(use_defaults=True, use_examples=True) + return TimeWindowFromAdapter.validate_python( + json, context={"skip_validation": True} + ) diff --git a/test/types/time_window_until_stub.py b/test/types/time_window_until_stub.py new file mode 100644 index 0000000..7248de1 --- /dev/null +++ b/test/types/time_window_until_stub.py @@ -0,0 +1,82 @@ +# coding: utf-8 +"""Waylay Query: timeseries queries (v1 protocol) model tests. + +This code was generated from the OpenAPI documentation of 'Waylay Query: timeseries queries (v1 protocol)' + +Generated by OpenAPI Generator (https://openapi-generator.tech) + +Do not edit the class manually. +""" + +import json + +from jsf import JSF +from pydantic import TypeAdapter + +from ..openapi import MODEL_DEFINITIONS, with_example_provider + +try: + from waylay.services.queries.models.time_window_until import TimeWindowUntil + + TimeWindowUntilAdapter = TypeAdapter(TimeWindowUntil) + MODELS_AVAILABLE = True +except ImportError as exc: + MODELS_AVAILABLE = False + +time_window_until_model_schema = json.loads( + r"""{ + "title" : "Time Window Until", + "description" : "The end (not-inclusive) of the time window for which results will be returned. One of the [time line](https://docs.waylay.io/#/api/query/?id=time-line-properties)specifiers.", + "oneOf" : [ { + "title" : "ISO8601 absolute timestamp", + "pattern" : "[0-9]{4}-[0-9]{2}-[0-9]{2}(T.*)?", + "type" : "string", + "description" : "A date or date-time in [ISO8601](https://en.wikipedia.org/wiki/ISO_8601#Combined_date_and_time_representations) format. When no timezone is specified, the UTC timezone is assumed (`+00:00`)", + "format" : "date-time", + "example" : "2018-03-21T12:23:00+01:00" + }, { + "title" : "UNIX epoch milliseconds", + "minimum" : 0, + "type" : "integer", + "description" : "Absolute timestamp milliseconds in unix epoch since 1970-01-01.", + "example" : 1534836422284 + }, { + "title" : "ISO8601 Period Before Now", + "pattern" : "^P([0-9]+Y)?([0-9]+M)?([0-9]+W)?([0-9]+D)?(T([0-9]+H)?([0-9]+M)?([0-9]+(\\.[0-9]*)?S)?)?$", + "type" : "string", + "description" : "Specifies a timestamp before _now_ as a period in [ISO8601 duration](https://en.wikipedia.org/wiki/ISO_8601#Durations) format.", + "format" : "period", + "example" : "PT3H15M" + } ] +} +""", + object_hook=with_example_provider, +) +time_window_until_model_schema.update({"definitions": MODEL_DEFINITIONS}) + +time_window_until_faker = JSF(time_window_until_model_schema, allow_none_optionals=1) + + +class TimeWindowUntilStub: + """TimeWindowUntil unit test stubs.""" + + @classmethod + def create_json(cls): + """Create a dict stub instance.""" + return time_window_until_faker.generate(use_defaults=True, use_examples=True) + + @classmethod + def create_instance(cls) -> "TimeWindowUntil": + """Create TimeWindowUntil stub instance.""" + if not MODELS_AVAILABLE: + raise ImportError("Models must be installed to create class stubs") + json = cls.create_json() + if not json: + # use backup example based on the pydantic model schema + backup_faker = JSF( + TimeWindowUntilAdapter.json_schema(), allow_none_optionals=1 + ) + json = backup_faker.generate(use_defaults=True, use_examples=True) + return TimeWindowUntilAdapter.validate_python( + json, context={"skip_validation": True} + ) diff --git a/test/types/validation_error_stub.py b/test/types/validation_error_stub.py new file mode 100644 index 0000000..dea8956 --- /dev/null +++ b/test/types/validation_error_stub.py @@ -0,0 +1,79 @@ +# coding: utf-8 +"""Waylay Query: timeseries queries (v1 protocol) model tests. + +This code was generated from the OpenAPI documentation of 'Waylay Query: timeseries queries (v1 protocol)' + +Generated by OpenAPI Generator (https://openapi-generator.tech) + +Do not edit the class manually. +""" + +import json + +from jsf import JSF +from pydantic import TypeAdapter + +from ..openapi import MODEL_DEFINITIONS, with_example_provider + +try: + from waylay.services.queries.models.validation_error import ValidationError + + ValidationErrorAdapter = TypeAdapter(ValidationError) + MODELS_AVAILABLE = True +except ImportError as exc: + MODELS_AVAILABLE = False + +validation_error_model_schema = json.loads( + r"""{ + "title" : "ValidationError", + "required" : [ "loc", "msg", "type" ], + "type" : "object", + "properties" : { + "loc" : { + "title" : "Location", + "type" : "array", + "items" : { + "$ref" : "#/components/schemas/Location_inner" + } + }, + "msg" : { + "title" : "Message", + "type" : "string" + }, + "type" : { + "title" : "Error Type", + "type" : "string" + } + } +} +""", + object_hook=with_example_provider, +) +validation_error_model_schema.update({"definitions": MODEL_DEFINITIONS}) + +validation_error_faker = JSF(validation_error_model_schema, allow_none_optionals=1) + + +class ValidationErrorStub: + """ValidationError unit test stubs.""" + + @classmethod + def create_json(cls): + """Create a dict stub instance.""" + return validation_error_faker.generate(use_defaults=True, use_examples=True) + + @classmethod + def create_instance(cls) -> "ValidationError": + """Create ValidationError stub instance.""" + if not MODELS_AVAILABLE: + raise ImportError("Models must be installed to create class stubs") + json = cls.create_json() + if not json: + # use backup example based on the pydantic model schema + backup_faker = JSF( + ValidationErrorAdapter.json_schema(), allow_none_optionals=1 + ) + json = backup_faker.generate(use_defaults=True, use_examples=True) + return ValidationErrorAdapter.validate_python( + json, context={"skip_validation": True} + ) diff --git a/test/types/window_override_stub.py b/test/types/window_override_stub.py new file mode 100644 index 0000000..5877d21 --- /dev/null +++ b/test/types/window_override_stub.py @@ -0,0 +1,69 @@ +# coding: utf-8 +"""Waylay Query: timeseries queries (v1 protocol) model tests. + +This code was generated from the OpenAPI documentation of 'Waylay Query: timeseries queries (v1 protocol)' + +Generated by OpenAPI Generator (https://openapi-generator.tech) + +Do not edit the class manually. +""" + +import json + +from jsf import JSF +from pydantic import TypeAdapter + +from ..openapi import MODEL_DEFINITIONS, with_example_provider + +try: + from waylay.services.queries.models.window_override import WindowOverride + + WindowOverrideAdapter = TypeAdapter(WindowOverride) + MODELS_AVAILABLE = True +except ImportError as exc: + MODELS_AVAILABLE = False + +window_override__model_schema = json.loads( + r"""{ + "title" : "Window Override.", + "type" : "string", + "oneOf" : [ { + "title" : "ISO8601 period ", + "pattern" : "^P([0-9]+Y)?([0-9]+M)?([0-9]+W)?([0-9]+D)?(T([0-9]+H)?([0-9]+M)?([0-9]+(\\.[0-9]*)?S)?)?$", + "type" : "string", + "description" : "A period in [ISO8601 duration](https://en.wikipedia.org/wiki/ISO_8601#Durations) format.", + "format" : "period", + "example" : "PT3H15M" + } ] +} +""", + object_hook=with_example_provider, +) +window_override__model_schema.update({"definitions": MODEL_DEFINITIONS}) + +window_override__faker = JSF(window_override__model_schema, allow_none_optionals=1) + + +class WindowOverrideStub: + """WindowOverride unit test stubs.""" + + @classmethod + def create_json(cls): + """Create a dict stub instance.""" + return window_override__faker.generate(use_defaults=True, use_examples=True) + + @classmethod + def create_instance(cls) -> "WindowOverride": + """Create WindowOverride stub instance.""" + if not MODELS_AVAILABLE: + raise ImportError("Models must be installed to create class stubs") + json = cls.create_json() + if not json: + # use backup example based on the pydantic model schema + backup_faker = JSF( + WindowOverrideAdapter.json_schema(), allow_none_optionals=1 + ) + json = backup_faker.generate(use_defaults=True, use_examples=True) + return WindowOverrideAdapter.validate_python( + json, context={"skip_validation": True} + ) diff --git a/test/types/window_stub.py b/test/types/window_stub.py new file mode 100644 index 0000000..ba258f1 --- /dev/null +++ b/test/types/window_stub.py @@ -0,0 +1,66 @@ +# coding: utf-8 +"""Waylay Query: timeseries queries (v1 protocol) model tests. + +This code was generated from the OpenAPI documentation of 'Waylay Query: timeseries queries (v1 protocol)' + +Generated by OpenAPI Generator (https://openapi-generator.tech) + +Do not edit the class manually. +""" + +import json + +from jsf import JSF +from pydantic import TypeAdapter + +from ..openapi import MODEL_DEFINITIONS, with_example_provider + +try: + from waylay.services.queries.models.window import Window + + WindowAdapter = TypeAdapter(Window) + MODELS_AVAILABLE = True +except ImportError as exc: + MODELS_AVAILABLE = False + +window_model_schema = json.loads( + r"""{ + "title" : "Window", + "type" : "string", + "description" : "The absolute size of the time window for which results will be returned. One of the [time line](https://docs.waylay.io/#/api/query/?id=time-line-properties) specifiers.", + "oneOf" : [ { + "title" : "ISO8601 period ", + "pattern" : "^P([0-9]+Y)?([0-9]+M)?([0-9]+W)?([0-9]+D)?(T([0-9]+H)?([0-9]+M)?([0-9]+(\\.[0-9]*)?S)?)?$", + "type" : "string", + "description" : "A period in [ISO8601 duration](https://en.wikipedia.org/wiki/ISO_8601#Durations) format.", + "format" : "period", + "example" : "PT3H15M" + } ] +} +""", + object_hook=with_example_provider, +) +window_model_schema.update({"definitions": MODEL_DEFINITIONS}) + +window_faker = JSF(window_model_schema, allow_none_optionals=1) + + +class WindowStub: + """Window unit test stubs.""" + + @classmethod + def create_json(cls): + """Create a dict stub instance.""" + return window_faker.generate(use_defaults=True, use_examples=True) + + @classmethod + def create_instance(cls) -> "Window": + """Create Window stub instance.""" + if not MODELS_AVAILABLE: + raise ImportError("Models must be installed to create class stubs") + json = cls.create_json() + if not json: + # use backup example based on the pydantic model schema + backup_faker = JSF(WindowAdapter.json_schema(), allow_none_optionals=1) + json = backup_faker.generate(use_defaults=True, use_examples=True) + return WindowAdapter.validate_python(json, context={"skip_validation": True}) diff --git a/waylay-sdk-queries-types/.openapi-generator/FILES b/waylay-sdk-queries-types/.openapi-generator/FILES new file mode 100644 index 0000000..4ec7e1a --- /dev/null +++ b/waylay-sdk-queries-types/.openapi-generator/FILES @@ -0,0 +1,115 @@ +LICENSE.txt +pyproject.toml +src/waylay/services/queries/models/__init__.py +src/waylay/services/queries/models/aggregation_by_resource_and_metric.py +src/waylay/services/queries/models/aggregation_by_resource_or_metric.py +src/waylay/services/queries/models/aggregation_method.py +src/waylay/services/queries/models/aggregation_method_one_of.py +src/waylay/services/queries/models/aggregation_method_one_of1.py +src/waylay/services/queries/models/aggregation_method_one_of2.py +src/waylay/services/queries/models/aggregation_method_one_of3.py +src/waylay/services/queries/models/aggregation_method_one_of4.py +src/waylay/services/queries/models/aggregation_method_one_of5.py +src/waylay/services/queries/models/aggregation_method_one_of6.py +src/waylay/services/queries/models/aggregation_method_one_of7.py +src/waylay/services/queries/models/aggregation_method_one_of8.py +src/waylay/services/queries/models/aggregations_inner.py +src/waylay/services/queries/models/align_at.py +src/waylay/services/queries/models/align_shift.py +src/waylay/services/queries/models/alignment.py +src/waylay/services/queries/models/alignment_grid_interval.py +src/waylay/services/queries/models/alignment_timezone.py +src/waylay/services/queries/models/cause_exception.py +src/waylay/services/queries/models/column_data_set.py +src/waylay/services/queries/models/column_data_set_data_axis.py +src/waylay/services/queries/models/column_header.py +src/waylay/services/queries/models/column_headers_inner.py +src/waylay/services/queries/models/data_axis_option.py +src/waylay/services/queries/models/data_set_attributes.py +src/waylay/services/queries/models/data_set_window.py +src/waylay/services/queries/models/datum.py +src/waylay/services/queries/models/default_aggregation.py +src/waylay/services/queries/models/default_interpolation.py +src/waylay/services/queries/models/delete_response.py +src/waylay/services/queries/models/embeddings.py +src/waylay/services/queries/models/from_override.py +src/waylay/services/queries/models/grouping_interval.py +src/waylay/services/queries/models/grouping_interval_override.py +src/waylay/services/queries/models/grouping_interval_override_one_of.py +src/waylay/services/queries/models/hal_link.py +src/waylay/services/queries/models/hal_link_method.py +src/waylay/services/queries/models/hal_link_role.py +src/waylay/services/queries/models/header_array_option.py +src/waylay/services/queries/models/hierarchical.py +src/waylay/services/queries/models/http_validation_error.py +src/waylay/services/queries/models/interpolation.py +src/waylay/services/queries/models/interpolation_method.py +src/waylay/services/queries/models/interpolation_method_one_of.py +src/waylay/services/queries/models/interpolation_method_one_of1.py +src/waylay/services/queries/models/interpolation_method_one_of10.py +src/waylay/services/queries/models/interpolation_method_one_of11.py +src/waylay/services/queries/models/interpolation_method_one_of12.py +src/waylay/services/queries/models/interpolation_method_one_of13.py +src/waylay/services/queries/models/interpolation_method_one_of2.py +src/waylay/services/queries/models/interpolation_method_one_of3.py +src/waylay/services/queries/models/interpolation_method_one_of4.py +src/waylay/services/queries/models/interpolation_method_one_of5.py +src/waylay/services/queries/models/interpolation_method_one_of6.py +src/waylay/services/queries/models/interpolation_method_one_of7.py +src/waylay/services/queries/models/interpolation_method_one_of8.py +src/waylay/services/queries/models/interpolation_method_one_of9.py +src/waylay/services/queries/models/interpolation_spec.py +src/waylay/services/queries/models/links.py +src/waylay/services/queries/models/location_inner.py +src/waylay/services/queries/models/message.py +src/waylay/services/queries/models/message_arguments.py +src/waylay/services/queries/models/message_level.py +src/waylay/services/queries/models/message_properties.py +src/waylay/services/queries/models/object.py +src/waylay/services/queries/models/object_data.py +src/waylay/services/queries/models/object_data_set.py +src/waylay/services/queries/models/object_data_value.py +src/waylay/services/queries/models/py.typed +src/waylay/services/queries/models/queries_list_response.py +src/waylay/services/queries/models/query_definition.py +src/waylay/services/queries/models/query_entity_input.py +src/waylay/services/queries/models/query_execution_message.py +src/waylay/services/queries/models/query_execution_message_level.py +src/waylay/services/queries/models/query_hal_links.py +src/waylay/services/queries/models/query_input.py +src/waylay/services/queries/models/query_list_hal_links.py +src/waylay/services/queries/models/query_list_item.py +src/waylay/services/queries/models/query_output.py +src/waylay/services/queries/models/query_response.py +src/waylay/services/queries/models/query_result.py +src/waylay/services/queries/models/query_update_input.py +src/waylay/services/queries/models/render.py +src/waylay/services/queries/models/render1.py +src/waylay/services/queries/models/render_mode.py +src/waylay/services/queries/models/render_mode_one_of.py +src/waylay/services/queries/models/render_mode_one_of1.py +src/waylay/services/queries/models/render_mode_one_of2.py +src/waylay/services/queries/models/render_mode_one_of3.py +src/waylay/services/queries/models/render_mode_one_of4.py +src/waylay/services/queries/models/render_mode_one_of5.py +src/waylay/services/queries/models/render_mode_one_of6.py +src/waylay/services/queries/models/render_mode_one_of7.py +src/waylay/services/queries/models/render_mode_one_of8.py +src/waylay/services/queries/models/render_mode_one_of9.py +src/waylay/services/queries/models/response_data_set.py +src/waylay/services/queries/models/row_data_set.py +src/waylay/services/queries/models/row_data_set_data_axis.py +src/waylay/services/queries/models/row_header.py +src/waylay/services/queries/models/row_headers_inner.py +src/waylay/services/queries/models/series_data_set.py +src/waylay/services/queries/models/series_spec.py +src/waylay/services/queries/models/time_window_from.py +src/waylay/services/queries/models/time_window_until.py +src/waylay/services/queries/models/validation_error.py +src/waylay/services/queries/models/window.py +src/waylay/services/queries/models/window_override.py +src/waylay/services/queries/queries/__init__.py +src/waylay/services/queries/queries/execute_api.py +src/waylay/services/queries/queries/manage_api.py +src/waylay/services/queries/queries/py.typed +src/waylay/services/queries/queries/status_api.py diff --git a/waylay-sdk-queries-types/.openapi-generator/VERSION b/waylay-sdk-queries-types/.openapi-generator/VERSION new file mode 100644 index 0000000..1985849 --- /dev/null +++ b/waylay-sdk-queries-types/.openapi-generator/VERSION @@ -0,0 +1 @@ +7.7.0 diff --git a/waylay-sdk-queries-types/LICENSE.txt b/waylay-sdk-queries-types/LICENSE.txt new file mode 100644 index 0000000..2796771 --- /dev/null +++ b/waylay-sdk-queries-types/LICENSE.txt @@ -0,0 +1,13 @@ +ISC License (ISC) +Copyright 2024, Waylay + +Permission to use, copy, modify, and/or distribute this software for any purpose +with or without fee is hereby granted, provided that the above copyright notice +and this permission notice appear in all copies. + +THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH +REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND +FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, +OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS +ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. \ No newline at end of file diff --git a/waylay-sdk-queries-types/README.md b/waylay-sdk-queries-types/README.md new file mode 100644 index 0000000..a7b6f6d --- /dev/null +++ b/waylay-sdk-queries-types/README.md @@ -0,0 +1,65 @@ +# Waylay Queries Service + +Execute and store queries on the Waylay timeseries. + +Protocol version: v1. + +This Python package is automatically generated based on the +Waylay Queries OpenAPI specification (API version: 0.5.0) +For more information, please visit [the openapi specification](https://docs.waylay.io/openapi/public/redocly/queries.html). + +It is considered an extension of the waylay-sdk-queries package, and it consists of the typed model classes for all path params, query params, body params and responses for each of the api methods in `waylay-sdk-queries`. + +## Requirements. +This package requires Python 3.9+. + +## Installation + +Normally this package is installed together with support for other services using the [waylay-sdk](https://pypi.org/project/waylay-sdk/) umbrella package: +* `pip install waylay-sdk` will install `waylay-sdk-queries` together with the SDK api packages for other services. +* `pip install waylay-sdk[types-queries]` will additionally install the types package `waylay-sdk-queries-types`. +* `pip install waylay-sdk[types]` will install the types packages for this and all other services. + +Alternatively, you can install support for this _queries_ service only, installing or extending an existing [waylay-sdk-core](https://pypi.org/project/waylay-sdk-core/): + +- `pip install waylay-sdk-queries` to only install api support for _queries_. +- `pip install waylay-sdk-queries[types]` to additionally install type support for _queries_. + +## Usage + +```python +from pprint import pprint + +# Import the waylay-client from the waylay-sdk-core package +from waylay.sdk.client import WaylayClient +from waylay.sdk.api.api_exceptions import ApiError + +# Intialize a waylay client instance +waylay_client = WaylayClient.from_profile() + +# Note that the typed model classes for responses/parameters/... are only available when `waylay-sdk-queries-types` is installed +from waylay.services.queries.models.query_input import QueryInput +from waylay.services.queries.models.query_result import QueryResult +try: + # Execute Query + # calls `POST /queries/v1/queries/v1/data` + api_response = await waylay_client.queries.execute.execute( + # query parameters: + query = { + 'resource': '13efb488-75ac-4dac-828a-d49c5c2ebbfc' + 'metric': 'temperature' + }, + # json data: use a generated model or a json-serializable python data structure (dict, list) + json = waylay.services.queries.QueryInput() # QueryInput | + headers = { + 'accept': 'accept_example', + }, + ) + print("The response of queries.execute.execute:\n") + pprint(api_response) +except ApiError as e: + print("Exception when calling queries.execute.execute: %s\n" % e) +``` + + +For more information, please visit the [Waylay API documentation](https://docs.waylay.io/#/api/?id=software-development-kits). diff --git a/waylay-sdk-queries-types/pyproject.toml b/waylay-sdk-queries-types/pyproject.toml new file mode 100644 index 0000000..9c18c9d --- /dev/null +++ b/waylay-sdk-queries-types/pyproject.toml @@ -0,0 +1,73 @@ +[build-system] +requires = ["setuptools >= 61.0"] +build-backend = "setuptools.build_meta" + +[project] +name = "waylay-sdk-queries-types" +version = "0.5.0.20240802" +description = "Waylay Query: timeseries queries (v1 protocol) Types " +authors = [ + { name = "Waylay", email = "info@waylay.io"} +] +keywords = ["Waylay Query: timeseries queries (v1 protocol)" , "Types"] +requires-python = ">= 3.9" +dependencies = [ + "waylay-sdk-core ~= 0.2.3", + "waylay-sdk-queries == 0.5.0.20240802", + "pydantic ~= 2.6", + "typing-extensions ~= 4.10", + "eval-type-backport ~= 0.1.3; python_version < '3.10'", +] +readme = "README.md" +license={file = "LICENSE.txt"} + +[project.urls] +Homepage = "https://www.waylay.io/" +Documentation = "https://docs.waylay.io/#/api/?id=software-development-kits" +Repository = "https://github.com/waylayio/waylay-sdk-queries-py.git" +"Openapi Specification" = "https://docs.waylay.io/openapi/public/redocly/queries.html" + +[project.optional-dependencies] +dev = [ + "mypy", + "ruff", + "types-python-jose", + "types-appdirs", + "types-python-dateutil", + "pytest", + "pytest-mock", + "pytest-httpx", + "pytest-asyncio", + "starlette", + "python-multipart", + "typeguard", + "pyyaml", + "jsf >= 0.11.1", +] + + +[tool.setuptools.packages.find] +where = ["src/"] +namespaces = true + +[tool.ruff] +include = ["pyproject.toml", "src/**/*.py"] + +[tool.ruff.lint] +# allow duplicate imports +ignore=["F811"] +# https://docs.astral.sh/ruff/rules +select= [ + "UP007", "FA102", # convert Union to | (pep-604) + "I001", "F401", # sort and remove unused imports + "PIE790", # remove unnecessary pass statements + "E303", # too many blank lines +] + +[tool.ruff.lint.per-file-ignores] +# do not touch imports here +"__init__.py" = ["F401"] +"conftest.py" = ["F401"] + +[tool.pytest.ini_options] +asyncio_mode = "auto" \ No newline at end of file diff --git a/waylay-sdk-queries-types/src/waylay/services/queries/models/__init__.py b/waylay-sdk-queries-types/src/waylay/services/queries/models/__init__.py new file mode 100644 index 0000000..73e2608 --- /dev/null +++ b/waylay-sdk-queries-types/src/waylay/services/queries/models/__init__.py @@ -0,0 +1,231 @@ +# coding: utf-8 +"""Waylay Query: timeseries queries (v1 protocol): REST Models. + +This code was generated from the OpenAPI documentation of 'Waylay Query: timeseries queries (v1 protocol)' + +version: 0.5.0 + + Execute and store queries on the Waylay timeseries. Protocol version: v1. + +Generated by OpenAPI Generator (https://openapi-generator.tech) + +Do not edit the class manually. +""" + +__version__ = "0.5.0.20240802" + +# import models into model package +from .aggregation_by_resource_and_metric import AggregationByResourceAndMetric +from .aggregation_by_resource_or_metric import AggregationByResourceOrMetric +from .aggregation_method import AggregationMethod +from .aggregation_method_one_of import AggregationMethodOneOf +from .aggregation_method_one_of1 import AggregationMethodOneOf1 +from .aggregation_method_one_of2 import AggregationMethodOneOf2 +from .aggregation_method_one_of3 import AggregationMethodOneOf3 +from .aggregation_method_one_of4 import AggregationMethodOneOf4 +from .aggregation_method_one_of5 import AggregationMethodOneOf5 +from .aggregation_method_one_of6 import AggregationMethodOneOf6 +from .aggregation_method_one_of7 import AggregationMethodOneOf7 +from .aggregation_method_one_of8 import AggregationMethodOneOf8 +from .aggregations_inner import AggregationsInner +from .align_at import AlignAt +from .align_shift import AlignShift +from .alignment import Alignment +from .alignment_grid_interval import AlignmentGridInterval +from .alignment_timezone import AlignmentTimezone +from .cause_exception import CauseException +from .column_data_set import ColumnDataSet +from .column_data_set_data_axis import ColumnDataSetDataAxis +from .column_header import ColumnHeader +from .column_headers_inner import ColumnHeadersInner +from .data_axis_option import DataAxisOption +from .data_set_attributes import DataSetAttributes +from .data_set_window import DataSetWindow +from .datum import Datum +from .default_aggregation import DefaultAggregation +from .default_interpolation import DefaultInterpolation +from .delete_response import DeleteResponse +from .embeddings import Embeddings +from .from_override import FromOverride +from .grouping_interval import GroupingInterval +from .grouping_interval_override import GroupingIntervalOverride +from .grouping_interval_override_one_of import GroupingIntervalOverrideOneOf +from .hal_link import HALLink +from .hal_link_method import HALLinkMethod +from .hal_link_role import HALLinkRole +from .header_array_option import HeaderArrayOption +from .hierarchical import Hierarchical +from .http_validation_error import HTTPValidationError +from .interpolation import Interpolation +from .interpolation_method import InterpolationMethod +from .interpolation_method_one_of import InterpolationMethodOneOf +from .interpolation_method_one_of1 import InterpolationMethodOneOf1 +from .interpolation_method_one_of2 import InterpolationMethodOneOf2 +from .interpolation_method_one_of3 import InterpolationMethodOneOf3 +from .interpolation_method_one_of4 import InterpolationMethodOneOf4 +from .interpolation_method_one_of5 import InterpolationMethodOneOf5 +from .interpolation_method_one_of6 import InterpolationMethodOneOf6 +from .interpolation_method_one_of7 import InterpolationMethodOneOf7 +from .interpolation_method_one_of8 import InterpolationMethodOneOf8 +from .interpolation_method_one_of9 import InterpolationMethodOneOf9 +from .interpolation_method_one_of10 import InterpolationMethodOneOf10 +from .interpolation_method_one_of11 import InterpolationMethodOneOf11 +from .interpolation_method_one_of12 import InterpolationMethodOneOf12 +from .interpolation_method_one_of13 import InterpolationMethodOneOf13 +from .interpolation_spec import InterpolationSpec +from .links import Links +from .location_inner import LocationInner +from .message import Message +from .message_arguments import MessageArguments +from .message_level import MessageLevel +from .message_properties import MessageProperties +from .object_data import ObjectData +from .object_data_set import ObjectDataSet +from .object_data_value import ObjectDataValue +from .queries_list_response import QueriesListResponse +from .query_definition import QueryDefinition +from .query_entity_input import QueryEntityInput +from .query_execution_message import QueryExecutionMessage +from .query_execution_message_level import QueryExecutionMessageLevel +from .query_hal_links import QueryHALLinks +from .query_input import QueryInput +from .query_list_hal_links import QueryListHALLinks +from .query_list_item import QueryListItem +from .query_output import QueryOutput +from .query_response import QueryResponse +from .query_result import QueryResult +from .query_update_input import QueryUpdateInput +from .render import Render +from .render1 import Render1 +from .render_mode import RenderMode +from .render_mode_one_of import RenderModeOneOf +from .render_mode_one_of1 import RenderModeOneOf1 +from .render_mode_one_of2 import RenderModeOneOf2 +from .render_mode_one_of3 import RenderModeOneOf3 +from .render_mode_one_of4 import RenderModeOneOf4 +from .render_mode_one_of5 import RenderModeOneOf5 +from .render_mode_one_of6 import RenderModeOneOf6 +from .render_mode_one_of7 import RenderModeOneOf7 +from .render_mode_one_of8 import RenderModeOneOf8 +from .render_mode_one_of9 import RenderModeOneOf9 +from .response_data_set import ResponseDataSet +from .row_data_set import RowDataSet +from .row_data_set_data_axis import RowDataSetDataAxis +from .row_header import RowHeader +from .row_headers_inner import RowHeadersInner +from .series_data_set import SeriesDataSet +from .series_spec import SeriesSpec +from .time_window_from import TimeWindowFrom +from .time_window_until import TimeWindowUntil +from .validation_error import ValidationError +from .window import Window +from .window_override import WindowOverride + +__all__ = [ + "__version__", + "AggregationByResourceAndMetric", + "AggregationByResourceOrMetric", + "AggregationMethod", + "AggregationMethodOneOf", + "AggregationMethodOneOf1", + "AggregationMethodOneOf2", + "AggregationMethodOneOf3", + "AggregationMethodOneOf4", + "AggregationMethodOneOf5", + "AggregationMethodOneOf6", + "AggregationMethodOneOf7", + "AggregationMethodOneOf8", + "AggregationsInner", + "AlignAt", + "AlignShift", + "Alignment", + "AlignmentGridInterval", + "AlignmentTimezone", + "CauseException", + "ColumnDataSet", + "ColumnDataSetDataAxis", + "ColumnHeader", + "ColumnHeadersInner", + "DataAxisOption", + "DataSetAttributes", + "DataSetWindow", + "Datum", + "DefaultAggregation", + "DefaultInterpolation", + "DeleteResponse", + "Embeddings", + "FromOverride", + "GroupingInterval", + "GroupingIntervalOverride", + "GroupingIntervalOverrideOneOf", + "HALLink", + "HALLinkMethod", + "HALLinkRole", + "HTTPValidationError", + "HeaderArrayOption", + "Hierarchical", + "Interpolation", + "InterpolationMethod", + "InterpolationMethodOneOf", + "InterpolationMethodOneOf1", + "InterpolationMethodOneOf10", + "InterpolationMethodOneOf11", + "InterpolationMethodOneOf12", + "InterpolationMethodOneOf13", + "InterpolationMethodOneOf2", + "InterpolationMethodOneOf3", + "InterpolationMethodOneOf4", + "InterpolationMethodOneOf5", + "InterpolationMethodOneOf6", + "InterpolationMethodOneOf7", + "InterpolationMethodOneOf8", + "InterpolationMethodOneOf9", + "InterpolationSpec", + "Links", + "LocationInner", + "Message", + "MessageArguments", + "MessageLevel", + "MessageProperties", + "ObjectData", + "ObjectDataSet", + "ObjectDataValue", + "QueriesListResponse", + "QueryDefinition", + "QueryEntityInput", + "QueryExecutionMessage", + "QueryExecutionMessageLevel", + "QueryHALLinks", + "QueryInput", + "QueryListHALLinks", + "QueryListItem", + "QueryOutput", + "QueryResponse", + "QueryResult", + "QueryUpdateInput", + "Render", + "Render1", + "RenderMode", + "RenderModeOneOf", + "RenderModeOneOf1", + "RenderModeOneOf2", + "RenderModeOneOf3", + "RenderModeOneOf4", + "RenderModeOneOf5", + "RenderModeOneOf6", + "RenderModeOneOf7", + "RenderModeOneOf8", + "RenderModeOneOf9", + "ResponseDataSet", + "RowDataSet", + "RowDataSetDataAxis", + "RowHeader", + "RowHeadersInner", + "SeriesDataSet", + "SeriesSpec", + "TimeWindowFrom", + "TimeWindowUntil", + "ValidationError", + "Window", + "WindowOverride", +] diff --git a/waylay-sdk-queries-types/src/waylay/services/queries/models/__pycache__/__init__.cpython-311.pyc b/waylay-sdk-queries-types/src/waylay/services/queries/models/__pycache__/__init__.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..3e0039c712eccb437c155fca1d1aca94be29a751 GIT binary patch literal 9291 zcmd5=ZFn426`r(B(r&uhd^G(?n|Ax%w9WTt)6cX`+t9RWleDF`l<8)7vf1X`opg3K zX+Q)-L_|bHL_|P9L3i3nB|)0bj@# zmMD@hf4*zJx6yUJgE9!77L^hNaxk{KS_)B@eIwaUWFiYF16W z0%~|It0le^mhn1PN8As~`3kmzcqOdltJo^y0jTGz*=pidu!c9V2IAGQmak*$h}S@n zuV?Ft*TM$Ak!>Wt3^wu2Y%}pX*uuB6t;CnZHr~h@iLZd|dd?oDUO{|IdDrn{{ ztc7?zwDLCAMtn82^A6TQd<}H+F4jf70lIk)>mj}tdigH4i}*U|y0hFdtw8#5cncev}<0z6Fl)K{iNyD_qBqv*X0K z!4N;eP7rT|lYE#B6WJz(-AOA_A;GkliK65j_``5c=g zz8`MlH?y0GAAm3LTi7kc`{9fHR(31#gK!(ao!w6S5PXT>!R{b_7{1K!WOouDfUoeo z*j>brz*qU*>~7*m;cNUJb`SAm@O6GKyO;PNe1qS|?jwF3e3ReL?k9d6zQrG44-g-M zZ}SJ)gTzn3clbl>A>t?DyZmAHF!5pd9)E;ALi`kbpFheTC4L$n}BFNz%TeK>=oh{;g|eX_A2ok;aB`M_8M^&e$8KJuM@un zzu|ANH;9MeP5u^pi}*PFmcPy3CLV_0@psre#3S%~{w{l$xCVdV@3HrYPrx7f`|N$< zQTP-8fPFxG68_9TWFHcb!C&}C>?7ir!QvmYkBLvgU->8OlM*GWMBvF1_O}QhRT|@= z$r4357n+06T<~;KGv@k&W{hhI&4_7<;1y}X|F_Mw1*Z+&)WbS7_60`Dl524@WXAM(P@f2H z{ofwE)#sbhjD)L+-;3;P* z!SwBB+T=oxrl&qWm!7m^)Q#Y_Nz=NHMA)0%fY!3Euklk zu+|@soX|`o7M3F#@{Slb(gUiq21w(i9+6iq&oK_iwc!crS&`qWDZW@uES8+r_A@4p&L$dOBJ z$1yDwq50Kh_tUekbgvk8pHS`GyWf;iF)pJXZ{~N5=VI}QJ}V8S(vakm)Ew3(LP;>Q zUbVC?bF8$$X&or&q`mU62AZkK;G5Rt30$IYfRAgDNGu+uNgt8vJS-DNZVq~@jv9J$ zS~|0KYUO-e*7$}(J~t%GkM$1?#o|-)-hPLs1G&O6jOc*RuC}+X-!MXR>D^g+EG7$& z5uS{N>9y4!8yh=yHUzNnO$D91q_e)@CbSmy;vN;g7B{J|7k8=J^W4#C4eMhmMh>OJ zkRGP@olgD}S|SmOQph^A--yyVL}BgNhO`-tlHKXcBVt-JOnLapyZeU6FKb~FGfnpV znVy~Kfs8@MTM{2ti)X34cqo=Ivr;NRN36`iSUl#GjVdw?#LbvFHyEEzQsuC1bhOFh zl3780UWYq(KY5*0p?Q}$|CXlhtBDrnSj(zK^y`?Ho{`=vov7CGFW z{+Vf+WSaY+vJowASGIDS;Vbvq6jg)l1u{K1sjB9g@S^!PjE?!XjyyI@nEB%{Pv+Y& zJ?7gmE9ToU8RpwC2jnvBa*3f~2ZL`!pUw1YGCedp2fz|(O;`Uwx|1&b{!t2^%x!$O z!3p+CJcsOhk3|{hk+GbSk%WO9$Sr+k=`*6zX6f>LSyZU1BZgGfSSV$Qu?RtaB`Zc5 zLOH@>ge3_0iEUIMEJg4mR3Zcrst~FXY7lA>mLb$3EJs*@uo7VvLOsH2gf$2a2x}46 zAp{ZDBWys}h_DG^Gr|^xtq9u?b|5q&Y)9CM(1g&8(1Os5unVCNVK+i6LK{LmLI*-8 zLKi|eLJz_oguMv+5cVS+KRD??iA%t;+FhT@DLzqB_B1|I05H2H3 zNjTZ~cTujYQoGB*0BH~#LK(HHj?bxvqgPd_!BtL*l_E&2FEmg$+;JFWq9%Ksynz(2 z6nJ7)u0xgbOVuYRCPjTge;dVXkpb-#%S8rsP@EST&`CK^WIz|?N09;DlsiQR^iW1i~FIROE%2Y~3t@}{9cvme`eG!4QXO<*06&z72tw~OGM_y|S zXEiIls2GVl*F*c_s%NTE^1dXXF&#)jQ_&JWEiIy{fC)c-7OT1=q^X{X>ZqfoGy9Dt zPSoevGZ$j{6YC2Pa1#Y9q*y!|0u`i0qFN~eZWq%Kvki-<@TaYYl-X2EMXmi7)DTK- zcZ0FEilviTa+@lxsKXCrRem%%l3SHws2fy|h2OhlSd_&wkIkJ6mTIv&pUYhm)^V|> z$cQ$o@OXSb-(N$XQpqJvxnvMf}_@MIU&*;X0z zQt#toFY2z?%3r2i!psx{)BvIieRHZTB98tiRUm3?vn;Ff8$d2kDsNH>Vuj;yKLlio z(6f$tJ=#%g&_j=7&o&MBsoNdZMC0-`a>+UEi~uMU{odUEyxv<-v}gA#8UeL zoxT%Dw1`UEl&*g$V%%}kD8Cm-(zwe_(l>*%T$DMY%%JZEk~^Z@?zEBa5fye%&wuv9OlNXPWOzM5dZB zoaHCHywtrS+iK2D%UdOku;Xk=-@>`B1!ENwEvgLhn5nAG({rCK-Xo1k(DoVsl+!Jd z{}KyRpMkJT0Ycx4bQ-?6JHprEImlEv0l? z-j-5!THcmY+AVL(_pFtc;%OA5q^&8FO|Hd~6P<=aEg069M2oa-&c)AH?n?hHLCN$(2&nuR1 zJf&>1ye;2*UvDX%mhy%Q-6!|$C%|O9rM$03zNy?QdTr5ENyUO|N(OH$ L$G^rub_L;kLi}?h6 z13m&mVqoNBWMGIqAu)A})J~mvPMkJEREX2*{Qke+@9z0?vuP7t$D^G#u=Yr+;ngT1Z@oP7a`rj{k#92<#vnn2AlW;#l;5r62P_p_ai2#m z7V`ii*|F{YVJMl88aweM8$bfWQxLGe;4xD}V7nNS+BF zcEt-&BJ@8zTyV1()Q|^~$rSvsAL3o5Aeg9f7!tt<%<8;sEf;my#fx*@!gk$$rZNGp zD|BpH)Ks2^$v_yWh;n|4m6^qb_X-k;P^GAq_O0r%yeo|EVeZa5x?H%kj>0O#b*V(L zwt)DGP&Wx?jJ}XF3?&!eogt6G5m|!o?woLOKDg4UmT$ZTvoEc5$I+|V*R6ILreqlYr@GOGI;sz4IAArbjcuaIk>BO+8 zF(Kt~lhC^(vc9+{hEBB!`S)RKW!!a#Md$$?k^RN}^UlWDXpXJrk9(t4XVi3lSog=) e69m=h(sNxmYv;PTu8qjrWSP*75xFN;5cF??+*-r{ literal 0 HcmV?d00001 diff --git a/waylay-sdk-queries-types/src/waylay/services/queries/models/__pycache__/aggregation_by_resource_or_metric.cpython-311.pyc b/waylay-sdk-queries-types/src/waylay/services/queries/models/__pycache__/aggregation_by_resource_or_metric.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..66fcd1a8122941c1453f3becc23e31ccf1891b68 GIT binary patch literal 1188 zcmb7D&1=*^6rX(UX0zQw{W$bcJGCu#!ENZ#B0@!wf?7W+LM|aq-tLAbnK(0Pjemmw zfLCuKc=w<1kV6k;PlBi37TQw};>+%~jm07k!{oj9dmq2|X7ah!vIwrd;%oPpO32Sr zIa|h9P>w&K@R0<>A%PO8krJzps+6)8X|e9;vEdjaU5{#U-KnE&1hvSF8%|>+*CQ)# zI!%Ru0d;5uW>=j(t3uGCL-Rrp8dbC^J5z!6inN|9 zeT$azyRx@NQ_dvwS=6R63m_7!mbKjv1@%#*`<|dZNPv410@~#)rm_!oD}`j^`6dmR zpT&?!Plha^tV{3wU&%X`_4qvdPJW(uVq~1I^rcM2x@|Ko>7`+3!iMox34XtAS&tY^ zn4}Pda>UJ#JRxZ8C7BmRId*eYjZI|j_{I8 z|CxK^Kvq7KQw4@)imt~yMjtQX{7 zbszqzBJ_hUAL^}Qdj8Y3VtVmFUqbEBoGMzk4$S#tVY@K5Pc+r24K>ZEpJ>K{T9CQn O6j7E7vc#`rL%#ufvTT+B literal 0 HcmV?d00001 diff --git a/waylay-sdk-queries-types/src/waylay/services/queries/models/__pycache__/aggregation_method.cpython-311.pyc b/waylay-sdk-queries-types/src/waylay/services/queries/models/__pycache__/aggregation_method.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..6070321dadb71a3585946e4aa142aaca00c73793 GIT binary patch literal 1994 zcmc&!O>fgM7v|R?6^4TMt=zs zr`-UFACtolQ%^`-*sany?SzxI`yh)}4v5HdpZ9ql+i(5a{+!FnfPZ`5x5m!|06+X- z^koM?IC&-j@DZ3m1Eyfcus~v3Oz?3W$BC$k0TywBB()^R2{VaPMAD=Hr*N9cnjByW zXGm7d1~`p#MA4K0%Xot1wS0gxxIiYg$pB~Z4N}yK0nXtmQqoERR`4__Yh?i-5hami zPBdbbQPzMna)`->7$wByL(F7|DTbI*h$&xY8tL=gw2GO34XOo$?-O`ubg|KeuR4fz zH=t_~Z&A;@+O*P=G04LJLEOU}yj*4gYk-LrXzBxP`}<+^QWLscnX(r88(zyKT#EGSLqTgFr_gTx2_Z2OY+*HRz2_k8!?r zItlhpr#8}QgQa}it>Gbyv@I}cEZ-takL6op{`+(Ny2~sxmT!gmuh#YRt+L!$zBQ(d zg-2>(+)kE>#zmNI_DRKW-T%L+~pwKS?q2hrugS!~N-WVdV8dhjKA^FH$4{N}xvydN1UBcNvcqgTx# z^wlWGRO|`3dmn^7#83?}%yIz^bF~~caz4n1R?WgFhvpHpb`dM^0=M=pgbv{8QLV^| zE2uI=ix{Cb+6rikJWjZ5%@FN}Tyg1hMK-`<)~V(#5=)_lD}o9M1>=FLmdmRRUlA8H zvPl)G^N35TIU}AFA<+#^mSY~xK3X75xJk$(O|>r~B0O^A|F*nQF3%6LKWh#0_KiZ4 zsfO0Enz3yGThiE{?xPX1s=3>!l*BT4D64;kXh9^8C3GUv1P~HNH6Q|2Xd^vQ0BklQkep!xQukn8qlHciuUYZ|7g>APH=X8O~o*!pyT+#vKg z;-po#Vo0T=+jrW76#Y26H<&j4Rd6TFD(;AgJHo5Rt#rt7pfrxNHFM0y5*T^daW-JO`X1OB zz5_599xgmtS(WD?{sWSuCe4Up=F`sD1rXG2U^|2Bv$fW?)((fqcIG-3E?nuLf3RLY zlWM6lB*$Pikh}z@0w75<2C2niq^0>6WcYgr`j3AYgZqI4=Q}p8O?p)gRcfFk;Ex02>?uhDiIcg>YjsvxEoUQRQ`cm#~xC$3k z7lG}dufvz#%)Fg_wf%a#RT%4l4VkhOU`=aN$|nWK32DF`Cn-7(0EvAgpLd)M7_XiO zj)o5b%+})E%Bs8o;UAG4Hd%%YGoN1DKwgH`AgabN7Jx{aIY=xHBQ4E;K?=Wn@TgJyV2%oRySKO}uY<#MTdf0YXEDZY qtAMRGGVBV%H(Th&$>$J_w*GwD`8)>1|FU=P`oX-uuPYSmLa=%J0!EY^Y$L@cxv4{a3-gxl^Rae6 zgV0xFoQ`~7!M#VI93Y0Oh+&rTageEIu+g)AHn6G|Mj5n(n6-~sj_0^_Xd!e2Z+}$t zEdLCZhG-rmv`*VTZIh=Fm+cDCUceQX9#>=wJZ7G5-6c&av~Y!AB7tDsSLI@Ht>G!+ zfWa|HpoGKQV2H7{-gS@Fz zNHX2fx~VF*E#OGn^kz~tLY6gm8>M1#L6A^r!kMQNY_3n0A^{B}>iccD%{RkL3CF`U zgoO!I1*WwaMuD5smP}9*GjMML zmbq>Swi@!)+U(ByX@C<(H6?H_!&$&-NLtj7c!jKit)jp%mUt9lUdv-ZF)RjH8(f;0 z*noPq`iRTr*fJ^NyyQBPVVqT3x=`f7$btqh?%e_90O>Qa7wGxGIt1-#U_r0ol~P7t zfIV?80b{sP+^;FKh@5<~8zSJgj6!Gwdt1m&dpqf?nPz*&;PYIr&U5`4Q*3i4Z9Ld| zy5p=@x0{ekNjDAJgB0mLyWgTV{YAYKB-}e9!h$Jv=Ytps%E*%Fo0 z1=rz%>N1Eu^kwwQ>$x|Tm%FcaJB5iJ_>iHc0CU1kDIXUcC!_&)oVe&X03`B_e$jEZ zpwrR_91Y(DxUJ>I`4xEywtql!)MObk!hGe47z0J!1F<*weYR-FqQ}Eydkb9)=O(-8 zAEKYnq*^Hr$*V9MM70Ro0uV{l2eHMWjimWoNZ|Jm9yjIy%t_%v{}vDBO$eB3t4$Ey uEXKHN6|mJsMqESqb_d-$`y8Y3&hJk*pT~gsZ}HZBH}~E6f1DFc!2ASmC~ral literal 0 HcmV?d00001 diff --git a/waylay-sdk-queries-types/src/waylay/services/queries/models/__pycache__/aggregation_method_one_of3.cpython-311.pyc b/waylay-sdk-queries-types/src/waylay/services/queries/models/__pycache__/aggregation_method_one_of3.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..c433ff2e811bbc040fd9ed6550c4199f35678440 GIT binary patch literal 1362 zcmb7Ey>Ht_6u+Y=T2u zLqPz0@Q?r*G8AyfPALj^=%3=5K!E_Ax+!p`Onpa6irY9tkL0`e!S`{$_sC!8=j#O5 z@c8#m;t}$f6Q(OD8G7<9GKWNvHW5^K2~EAWM;%{DDyiT0De=f%BK!j)s!#?0rBBEa zKILi$BG@90IUZ0#9`I4ZN9>0T^k|jYehLP39}Ihh8n-VEm)Srot74TjSgHghrd6+R z_xgs#D6w5`SQjK{Zb7h)Rw=VRV4DMwYv12vLd97M(sJ8ZlBo_`{C_DI>-D>{=s%8T zaVJWp*;3Eifmsbhg(>-<-<(vVbjw2AYt-v^6qCv_5Pe(J7AM>omU5Z#BpKmp{&vVT zX#O#m_+nA2LD65ASsG7ZD>iJ2TlC}#(nA8IO|cE0pzVtA+P;_*)dRm>EdZ|NpRaYh z8oEWi`(S%YY)aVdtUP`?H2@Rba)#$}n59@Dmu$$B3|84TYGin`X?vxH?e+i>)B-e! zuL=h~MA*CFV0HdWvbo$SJ-8Go-k6F-$TEOr*ttx?5M-;B2W8GY&|oty^NO)L#<`fS z3Uc_+lk3PF5_`(_ggl%{FOfT%NjP3~qv7d~&?m1J$sL>ql8$jNvA2JOJ(WVJGl`QE z?kc?#?iQoi9E_Scg2R3c<}B5JZAR=gC$oyKQ;*YHI~rgpqvMG&oQ0V9h2>O-{9U)A zv}jkPBt)vS(i)8NxhO(xqUiC}Y4dQPPj|I7dEqlWp!pQZKKb+f#TU1JT79r{&!=aR9)N=}Wk~$~qa2 z2Ue!tJmfy$hoRjcr8q{Je!+>elHS&Cm#6tge}M+qb+dzHT%nYX{TlVh#F5K{UOOgV gp1xm^h2wwU;~=0|@%!ZG_?KI+o&L=k#-f;i01AmS6t|Ph2M48m6_{EBLmQ;zgveAOL{(75&=%Apq%0?Mc9Nra=hXJ4N`=%8 zU62?UkjltZgv!95k`bMRREdc#C`_GrzJySq9dPcR--rGD^Y6XO`>`<_!Dx3s)~{s{ z`f7|{BR^1Z{~jp2h@l!{m}LSSW@;I1^lXp~t(t{V1}z|F?I4!pId1J)2<^i=7_~gh zub@(a<}pG~X(yl^@;K(QGfT7|a>b?36Re^#kNWw;1QQpb4Kb?ghV$vS#I%Y?$JZSgcpZA(p38*BBD;F|L@3Y+g=!Df7Ti09Xf?1 zGfk~qYSwWC97$V#d5A{HisoLkWZU-ziG(Jc`8vhs1ym^#(kP}u(1F{0Gt885a+*f4 zFomkXv>rrp=nZL0Cn$*-xIYPU7jaa>P=*Y{wJgijELLE-9jlg02`(mA<{Ayj8)?2p zuA71_M|`g9hZ`D0(XbV8;zycGSYD|l zSy-OrCD*Zxz|hizdX7dGGXfO0z2>?uvS~(&{7y*9C4|cXR55YE*^`F2e=YIS||E%lL)Y z)i<**w_a^^i<5ouAwx?M=9HUKJ}J6xL__YniS4=oBo2&z#&y@BsfH0a8rmP+*_9`Y z@+|EBfaJJIGG>JNo>Ori6m=WK_UQN7TI^bj2ln{(e9ywUsUA8(4Dy*&OQnLm2(tlH zkD)67kTh+OSRDFTnm>RP{ovpUV~)Ta7Viu$aaUf2fGM_G1JTQ3jC)oQTRmjNC4_Hu g(e@6!Q6u#Yk^FC(Y`^|fAKMW5S5zt2WQ+?b( z=$lrKDK`*se-4B_L{SY3B|uJPn!X%o5e|nPj5HBv}WGUZ*y0leXZByWA@gpHt?^O0l@yY)RsR zMm8Nu8Z2PKQH+wh;671JMyhQV%s+WVD0f4j1tDKI&(AoSg&Z1Dmu(S-XG!1oYCH4JSqD6VCwQ8Q_tW_Qh6HZE`>x;Ecv2-b+> zJ!Y!OX*FQg`pnkd70Cujco-;M6}}2}-xy>jtsr(v$8UQKG^Jf$r4nUby+6tcra}=! z8L5N|O-v~R5`4IS3xqwSPWWD;7pb-n(m|@hEa0V*AC<}=~rtdD9SC@JdIr?lh zxz8*S2GC|}lZ!QLGoG7ryHnPimG3yvP2IB8X#HiVMGO`KL5A~|Ob zM$mG8m)7><+S)u|Hm}cA+MOtG+fW?Sg0k)GqU(C6#Id?cTy0g$TadxtY&R~OhI@D4rFGgY2km@1K1wayd z5F(So_zL~s$M^?{$F!P)IV#*6T;skN2ZwIATm#n2V2pca0h>Lf*%gFubkX&b?;#rN Z{`vNDISh#ZW$)bg(?7KR=PAw@%rBvmWJmx2 literal 0 HcmV?d00001 diff --git a/waylay-sdk-queries-types/src/waylay/services/queries/models/__pycache__/aggregation_method_one_of6.cpython-311.pyc b/waylay-sdk-queries-types/src/waylay/services/queries/models/__pycache__/aggregation_method_one_of6.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..4736aaf4f0b49a77a4dd50393d22b3485fde367b GIT binary patch literal 1285 zcmb7E&1=*^6rb76ei*IwtLmv86lqu34Pxn`h*+!?54M(8guR3`GrJp`WYU?*mMubi z=tc10L8wPh6{!dRls!s7D0uR=QcpekCcBMQ+kKernvx zA@ofvM^x+!_}~EuJBXq>qL}7<9OUXbtmV9)4~)8jQ4Y-^YHTA~UY0LR#Q*a&4yB6s(!% zd%{$U(}j>NG^RG@o=KJ>k;)0FBPgM)?PVnbRD`cUBiel^#0&eoognfVXiB^MS}n;- zMU$dnDi)zugbO{*C=U|6_~14OJ4hY#y+kiEZ5O1yOoP$D^Oc-912IVfj)|Erg=Bt1 z>P_VEv(@4OvqT(1*R6FfR;~4PjH*$ms!@9`lP8(}_DQ;09n2Yo9z`6ts!jx{q;LmL zD@!qmv-%ThIln7y2WhEo9x|IZrfN|qDcLsE#>>#AF0ifa_r+N38jJhp@YchgfeT|jbPDU|)2ZewC2<*64X6>r zQ~)5M#~?8n%(Bpb0xA0b!6RDDz#NwE^)GQ>TnC44wp<0)%VUgtMj0DDq}dgOZ+6j* eHhijibV{F|7Gvo_me-g{pShJ6wEI?iD_p5 literal 0 HcmV?d00001 diff --git a/waylay-sdk-queries-types/src/waylay/services/queries/models/__pycache__/aggregation_method_one_of7.cpython-311.pyc b/waylay-sdk-queries-types/src/waylay/services/queries/models/__pycache__/aggregation_method_one_of7.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..25586ae03acd85f62ed86f3139f2de708f013a42 GIT binary patch literal 1268 zcmb7D&1=*^6rV}5*)>}0N2{LNK@aT;yFn}#ib#t}@z7RLQT7sIGP@g_WYU?*)-6JN z=tc10L8wPh6{!dRls!s7D0uR=QcpekCc9m$wg+F5H}7NKo8P?m@?mJmLO`v~r}~J7 z&^M(Vkl7RP-Yf`P$VWBgV_yq#q}4R6WIfa)qh?^Fp?TyRo5(NF0yVY`gm&QTQO)$t zhp1e1O^nbJw;j4|@*t(WJws#=Q9*e?1z7=$S|?lANWz(99t+DPVm=K;)v_Kn13^5{ z$f_$ygT|D*lKQ01Swv)$lBI;kbNBBNpLuCSW9iC(#e~(##Qz;RVOjHo?9bYRynQ3% zWU?t`B4%ux!I5qfRQhNbuS)7Q%a(PAk(fzB{Xpi}ywDYbL~fkAVc3S-d{>nzw@>)XmHt>k=t0C`t86EbN^r05v+BnYI_%RKr_BULB3yL$qHqh7Mb8n{J&b(TG zz1}H}?ST!cvXo%WYg0C}lH(uy90!1;p^{HI&I-&?-vdX(#DiI1n0v}kL-a?) zhgFgx#ndmHv$G(G>%cY!&lh91W6bVa!yC7|1}=|Np(zXT4|Y_SZit7DA2MhP2Tq}T|;S32nO;dd8} acK&?3rilUZzwDj&e(Hy^|2)E(gZTxiQDRpB literal 0 HcmV?d00001 diff --git a/waylay-sdk-queries-types/src/waylay/services/queries/models/__pycache__/aggregation_method_one_of8.cpython-311.pyc b/waylay-sdk-queries-types/src/waylay/services/queries/models/__pycache__/aggregation_method_one_of8.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..b837462ba0bb5b5de0a699327a71441da40ad65a GIT binary patch literal 1268 zcmb7D&1=*^6rV}5A4Y5aXw_3Y=)tbA8^j`|h_tAb9@;7@LM|aDv%9fLW;-+4k|MN+ zUIY&wgnIN;k$Uh?*`ox6f+ue)>!~N-WVdV8_TWqM=6%e2^PBfxK8%c*2&mopR3Fn2 z`lggaD)t53n*(77`N&2-_O%d4nyq0a>!BVQwt#iUT8dL5{>XSNW5s^(wR$4Tkf4E3|<|Pr0r7Hs#6ILhJ|L@4_rnxZ8{yZJ#9T*uW zQ%xybV%D-49O<@#>HrPnHA%f@#We3T5;IAtAIKb=7rH`_$c+;>3{$wxcU74R&Q7~A zY|NnwP>lz15_yBN6*NZ@1#u81k*W(oA#FEIpyolGJB1syLJFFs96YsJro;ZM$f-urAala`4$| zvWQwdiJ{5XI^(O>dOkJPR$7H=X$Kw^$C>{234gUZ7%K=pj5unQX$w*b?hTyQFvTFw z>JOmh{w}N&<&||cum10(QoY;-1<7B4e0FWe9@)^fjgE<;_;Aoh5FzZW;%ls@ve?)v# zB^gmn{lYmr4}!P_Y-{*@G3GkP+`c)wb+2pS!eken!20=As^vcr5Rw2!WS?s?wlz1LrMc5H%cT6`bfGYI)zI_qUF z4SM0C@riKa5>B}h(b#YeTH3X!7MreF*=AIa8*T&bI&VbH*m5mOz=Q@^yg4#DYgTe) zxh-zJBHfmcDDu|NBR^*^Gm!a!=`aQbG6comW2F2ZPLEhBg%*K`x-1qPBGtF;*OO4O z06jMI6&phW($~P*NQ#*039#oWB*PacjEf+PA<@1LMZ(009sFO(1KWPGVSkrzcvnFo z+2KU%R1F+QU`am>dn+|U_B8~Pu5CXSED@Rk4|Sz2h?fHYMLBkJUOrQo&Tse$ zUaX`lbn9;t6pcn}xQqio$8nW6cZcJ#gmHECDd>sdbMmZf&zqiy9edu~_PkN1GYOt2 zYlxXQbe@LESeEmh?=Bq=K4?f37E!WZ#yhJA_OIBzxT2TM3b$2Ooh10`-^c|f$mLgO zB4Ti4RtBA!kf+Y9nr$!5dpOf+7=Zd$=)1bzJTz6R4 rB`SnP=%66S+xu6$^SN8>-~SId+ literal 0 HcmV?d00001 diff --git a/waylay-sdk-queries-types/src/waylay/services/queries/models/__pycache__/align_at.cpython-311.pyc b/waylay-sdk-queries-types/src/waylay/services/queries/models/__pycache__/align_at.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..2c1013e7cdfe6d732260f68fa61a185ab21b9954 GIT binary patch literal 1553 zcmb6ZO>5jnbflGb*Rq3~v<-wpI*(aq zc+f)VZ-Y!%dvdT&zl6gRL{WgKMeWqe?7+6nxs|puCvYreqfJDeM~J%2WzJIvp=a<- zR?w#H?@+Hp+7?20Ntu!oe_JqFu4A2KOfi`-h3^5y?5jstaV~`xkw|+u6O^T@?|HX} ziNXI6OfN1s0USrdH6RcHq!f;8F(?>;@g`(e5KB=+Xs9 z_F~l;q{#svXmS;@eoH8o?57MLk+gs$#}LLIF#>&}_xc!L!7B$cp)0t)g|)y0$H|Y7 zU_-{M`9wj93zhJLx^DLcXE@=YDyswN86~D1QzfL1eb12g@V+QGC9*U^1=mSBCsos4 z6`Nj}lbq9+#8~AlO5%jk&oC?j-5`$>#U|$G6ho|chm6W$+1cFP+NiqM zckXO&40gY-oUe9wzNy?h+qbvAmghn1A4py>%8hwxeq}W<9CZ`GX!eY4-NwG#ybn4CY#zA7UNq z#G8){I`i;l_wz}_U&zbAFm+dl0LCrLvc^u=0tXHF09l`&pij=eFVKf4ufF5{q3&^lS!F#VW>%^AaX#~{@a#ozQ46Z z-3X@;>egnZ-k+QEoqUiH*BN|3{OTq-`|u(NJBVFP0cOIsMaK>qNG_i1#kYa zk?G-Tg$kHhQ`OLQKNn@5G-0cM&Z2{lKL+IxaTH-V28ZFO#hl1xt*Fgh2=HsH`_PTL z%!5GtmEX_Op|~|l2Zr8;pl?g9)4hz7eVUaJ;{kYahuS%Twv+Azgj^zPdo&qOsA6jy zWXyR{Q=g=Q$qCWvJ#K?(BP~@rOa;wIDhyWuNp!)JbdV;sBbN!Z8a5R}Vle{?4txIJ z*bQV2KT)&*-dto<4fzYyjRdwyRzm*35xmk9h{NuPi~95$r#QQODl!DJu+*FdLFJu< ztLipHD%Y~8I*OZ8iK?ZIN+9~n2K9yD!^f9EIYj2v*nRZfviAtI$IBiZD8A8i)C#Pr z+Vuh2Owl|WXgi5K`zajBoQJ9uP!!=rs&P1}t8BfPu0wV0rwP|DGyQu^v+;UUhOqQx z#c8XV767GH(hP=6h-O{5DA=%0uDH&EpqN(OIEG-v@x61;Gc#yx?}8KhO%OBm+v>T4 zPk-F_{=p9qj=cAe!G^5s_J*qc?|GFM$AacOjw?ToVY4!``s;Cg7iy~+f!*L10JHa5 z|N7Uv{hiIK`^C+jT5)%G`rFEG_X|>IE%2%p_NuFeHR;I#e!)l2`VwtUX*1xnR3X za?iXg3rDZ2_h7&tx*mg=w=l+Y*Te1{S@AZ)A043&Prpym`J;cn^Nxps@r&Z%tpoO_ Lwg2^!!J5q9Xb;Pg literal 0 HcmV?d00001 diff --git a/waylay-sdk-queries-types/src/waylay/services/queries/models/__pycache__/alignment.cpython-311.pyc b/waylay-sdk-queries-types/src/waylay/services/queries/models/__pycache__/alignment.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..0876a184bb9565b8b910848d832a31d053c1fc70 GIT binary patch literal 1841 zcmb7F&5zqe6dyazmy>LEVL`0az=##J5sD*@tSVraMN1{vf_4$AFV@sENv!&7$Ib>v z9CF|f=&eU?AVd!w`7^wnBA-^`)LW|d)Dv&UiIueFfb;V5K4!)2D z9%vdu{|IOGlygIQHU;AmqR2#4p{lERs;Mf%F1aO7Gc{>zZrQ7tRj|vn;?}&nS(kRz z)xCz&dM&dh?Yg_=wavDIRCI!<{xhNtR{gbv&>!&4A9I^F&rr8TDhfhBki;bk z{%*{8a)4vUV-e#Hi|_?R#P6-kk8#L@IIsh^i@ks{H!^hneB?yf1`kh2gon&$oWzXc z0S`PJj~KoiGXL<~JD3Lc*kgW7Vkhu%Fu*te-z#tG`bn|+{iIlT84NhSHHzafI_UQU zcqIv)-f}kqH)3Xwy1ITGU_Xd4qfRXMX1gScut)qcaoq$?^F$!iRk8;0VW8Y<1g`!? z;18VPv17;J)sINTz7YUCQS;%|L)RJlha#y<^K9e{g!h*8#IaAfL+|)8bo z2dJlk&+NP?xh}Xd0{;i573vqV)>qa{|R+HJ^!SD|I_Dod|QtKij^UX9kl z(}kxZR;LZxq^-wWFEK%DI z)@BUhycnoK1Tu^o#_4oRu5uXTpYSOhI8#YH&2f-$t-|FGx}R7+@mRJiD9vnOtn{Oh*euG*?8lgs zZX>H%GHh9yZdt(jvCF`2TGj>{6;dFro>l+1h8W-AlE5*L$7WQL1%v zxzalG_x5LBrrLfkSK9u(+nXJyS}&I?ttSFstp~2(>^wY}?{)q>`fIo-sk@b@2-I_- zW?zdBzp>iMX?KT<-G~Ye#_^a#O}Mz@vRar>;>V7igZ_37r2!}ya61^Ho^Xe8(Q8>d zzl@5`&f0m_kjJ-3%&TJ98yitcR9+K_ch?gFElV_j%s ze!31=FKV}86435b{vo(YhHC=0EoXbU9NE>iYW^!~amG*wX-=)Y72DW5AT t`fOdU(Ff_K%+W{brp(b%x+!z?NxCVEimp@^=vDQw{ZvGsza}Nm{4ZVmFSh^y literal 0 HcmV?d00001 diff --git a/waylay-sdk-queries-types/src/waylay/services/queries/models/__pycache__/alignment_grid_interval.cpython-311.pyc b/waylay-sdk-queries-types/src/waylay/services/queries/models/__pycache__/alignment_grid_interval.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..dbfe5f4f186fd94405392d476c95f6068fff6c9a GIT binary patch literal 1125 zcmb7DPiqrF6rcTE|v|tZ~!5-Qm$+jLuiU@&1$;GH`Q6jQzGm~WL?#wzfo49@v zKY|K+^MmBzq3lWUAUd-L|w`nrQ)ji+A+TP8xk3T3gZ zxu9J!5I!P;dWdL554A||=~^Khp%Ixqb0(Xi6;*l_kS$UPtC8KaHAGEXp*2z+=v#}d z2rM?SS1qe@&mpxF)Np*rgkJe+=%@HaLPdIrRS;20ML;Ef2bSWyH$K3z;EMNo*uW7d zG?XpJIUNNO_d&xGU*aKURQQS#JPYD952rmX$Eg9+~^5oO9(0cV&G@b3SW+;yDe zW%l!QnYT1@f%isA#q!W~Ih6F{pjo2fqNQkm)Nq_5ju}^&l0eO{^+R7u9QiEq!!QLl zzl+v2v~101;5dUSLAA~pfCiz~p4%z;tzA`o(FyPyv*^uL81~tJx>^bEUT!rKqX+(P_{8wJo;WyCZVtt#l&TMYART+YbA-i&=z?v@>mr zPFMHOd)t@h`lY>gX`e&=8qux|!>Z&qvg*_NgU>Igb@zw4pVv(5;k8lO(x+%MuOqEv M<$%0ni46e$2Y19fgc5M9Sk>bOc#1wFuN1&20=#NxuCLP$}OP}M4cXhlhdtgSt6R+aD<^K2%Bd&D&W9pIg;-hZnKwIc-ps2bOLHG_Z!HCPL(Vdd_EiIhlf64hl(k z`dX)I*L4M!WGQdW)d<r8YleO3|1lLl#9D-sWe~x~4H*X9*rG zr7Co*#|er?qu!a}5RBiP?(cQF-Lh3!2=`7{RxwHyrbLM#PUPGerZb}woH#L=()6GuA&y(VnAfdp7elqJ%7kp@ Q8^ky0*VklaO7ibZ_%70apHouYEM1!?AffAQVHSlym{~0&-VNMp6BPawGcr& zo<1M_hW3jl0(FWWBr} zhYoVlJ;Z_^5$p2snTOD?@U|^pVZ8@v(5Hce(6_YCXpO(FxU6@uPIIofOu51j!DGJH zk3Yes6j~%A8{k|po~dCN9!ye&6R_|JRd~z`E~(}WkEF=4o^ZTh^5V0vzQ9Z*Rn7}d zbt(!hM)=zQ+wxi%-dn7GSTEL{JB7s8Ct8~SaGUV1C`RdcH%)ZYf1o9NLBfRo z9jf@329snCuKg@1+ynC|;wW~2M)w;aFZP(redgVS5v%!D>wqsXnu~acby<(~pTA98 zz*c~^)#kmsv{L-@M+q+trjMgtt`eCZ0$B!lelY+R)i^Pe8KxMRRdmdULm9w6jj!vH zH{H4S@w!R%yG3r_H=)urInt6Q{NNYVbO0%FGVq%BOHo!Ca7_+tQqY_?8>T#X0_y9Lr z2Dt{VSMZ`YKSdLf^GH?&)L(QWHx&)(sSnDnEE%){Y$6&r~5zbpZS|p z+h6#bXa3gI_80!v`K7B*cFwL`{q4^0~^Tx&KW7X{5zi`o`#$HKT=26AN-%7Mm@8Lr8rHcWGz{gBvfqCSbk2x{IQ36Ek$Q zdtU+VP48yQ@h!OpCj4TMdInX)a{kP~L d=Tm2jZZG#)(076v`nPyOUK;P~cMRD){swPAtF!P)o_gZF*|lS*L5TJ2^Sn22-n@D5H*fZr zVlhwP+3h~wrW1txh0Nf|#2xL$572o)7%>RbSjy4dl#$Y~pLWu&Zs@A7I~g}?WZem4 zLh%_V=S~`V=x5o4Q*ft@Db>$8MR(emR{cq*?+#33&u>{223W`Ua_#tgJ@JEvw^L9r|_1MQ4Quw#y|KHkb4sNbvvM?gz9b z{J?McPKCNY5P6u}L3?oy~qJrgtqHlH`nY&5M@5Ixx-*^ z@}edAR~V0Hsd)DMCEp2MZ_Ns<8$7_j)jb>S%qF7MAQ1Le7;qF86X7k}V}2V184!dn zbV?h3`*UtFF63no0^5l57SkcLeg*yk;l$7YUa6Y^DkIHOhR)JF!}Rko3S5?DfXgDs zC+_586NDI(Yy#vtl&1*Kv&qN#hk%Ah@Wzi(Uvbo16 zj(}~Nr2uT@s5llJ>pZL!OO}1WnTOb65HZOE+O~roD*U#jJ1PoQN;eOIiCPpe>xYS^ zHL44k1gzPf?KM@ZA-H@`S+3GefTfyk2?3Z-G$lbLm>ec;|YoH7`I|LQ|mR|Ke9_0@`-Y+LwG0FxSg|-5nDO`Vy_X9JCwtrMlH@3f@%buwFsqb_1#ltYih4Y#R83>>U?i<$&OB0t0{R4sQel z7jXK(jRXNlcK}DQz_@G(Tjgbc9?QTt8{>!acBF$TxqoxjacJx~^|t^ryK$vcJC-WT z7L^bKX8?vOy*>gmjNa=&+n-fyDgqe^-P^DpW@7U<5@jHAP%+ZcOv`VD4n)S>>X-<; zsEnl=cFURKWy@-C8D;ohAgoF$%9%=Rno-^~p_YdZhyIjl-h)br27sF|O{m$XDQ2J& zL?zQ4sfi$+1*w?Cq4dVJTVf8`ERr&kc_dh(qA7J%m=I#9oMHh)FW@Dwey;8KF0Y9Y zD_gDYi@UY9x`UQmon;K44IUpSIyxrV-R0zxf~kWUqtc+$0#i~nlEK>0L^7|Ye3Z5L zRGA9tP=KnfjwpezikyOu>;gF$`SnvIv!3Y_q)*?k9emN%YjJy`*Lvrc4!-Q_OL2Rm zFZHUI{;aMaT<+@YaeJb#_fDVv={+zr|6RJDPMyg{!UJ=o&a%7S2xL}(n6GthgLI}dZn! z7r}!Ep&mU|q=Ns-9wi_YJb7EKr=EP1q@n71aFTiN_uk8U^X9#m_hVxQg4G**Z2!Or zeO1Eos$>8k-UYCWT+~7?c1u1EO05!BSo5_&Z|NA7&=PX>9psj2nd*BwLi@0@)vCCa zRaCFq6*yqcj(s~O4D)3d%hy$OdQ>pY7csUCtzPm|rIWbEz+yhVi)L3F3f6 z`nDiXX-K&(sY}|N1w?izS?SVn{=t3XGA9aXC~fJnkgztH`M)D)3}dN?{vH;hF_LM91yJ(=d___h!vu*1mq{TOcZO;x6jlhbwx zAEv1a5cPXu6gYX=QdY_Yd^inY7g5y0(1wzWTbf&H>2B36@93>^THsnTxxoA=2p4T> zuTrVl{BuuiPK{JI6OFTeQsGoaJWMnpxdROYVs(A7Mgv=*Uf%96OC@%fLZ8y4i%$Rf7*n* z-pGdrT#r3YYGvGoP=Y(T(JVsber7gaCX5=C&2ph&mY^~NHk7W}jgzWnL1`>&^YZ92 z=H@B5oj3<%8+{qS@cP!9xtCk7wg$E7L(m~rlN#`}F!f4Ov#ih#sAVOFWkD8^ukabm z+JF(sEpRXlGpMykD{K5Lcz-~ATm>0ZME#v9IS)YG1hQQ`pLH_O$$>Gxy)e{q`N|Oe zgJkhksO5Tp+GY t#(1dLus%eJOdx!1fUcf=576Y`_jg#SV95Ay@^<0f#CN6tIl`DG^9yd4RpI~u literal 0 HcmV?d00001 diff --git a/waylay-sdk-queries-types/src/waylay/services/queries/models/__pycache__/column_header.cpython-311.pyc b/waylay-sdk-queries-types/src/waylay/services/queries/models/__pycache__/column_header.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..e9556fd204de1b1c4788517d103e05f050290733 GIT binary patch literal 1442 zcmb7EPmA0(6qjwyjK@16f$nzG!-8lFnK`UYuS;l}KaiHT+drF97#fV$(#)9HmLti# zb;w~4`2aZt@&O7hr8)H2k1=~&dVjt&3j|tK`y$D zSmzO9UGD!1asPm?ea3y(J3u3!b{&L%q;*DX@?FJcy+?GKbH!!K6}b-{(+`h6A*B>r zBqAG;Tri%gFbM9)(Dsm`JLe7n_>$Bk5#v7FNSO+K@G=rNW ztMcM=P8pXE4qA&)4Y?gwnyZkI>nj7!N;OFtpr1}^LJLM1R|!nz76wK&C20Y=<wD8$%HrEoSTF1Ke)64fIKAoqTqnmbSnAO!gc3&)N}w%aXj*xOQk5Q4C*01 ztmA^_yxBA*#1p6xYpaqbTs0m3vzBz^H-2p0aohxP3^i6|9P~jP-v@?F0I+&-47CKx z#W-H0DURg^WGt~sdtmD`PAqM50Irwtq1V4eGm-O1Rt3~)bS&h(=-3wiZdva_!5^iN z&f8pXjwyC;cX=~l>G_IvudYi7rDU=kj8-9*>!S7!MR1=0@OWma49i;jkf{}0ps1ff zoUFZP`0gCveU7*1ww>bbGrTpo?G$gFeLOt*a*l^>JH^B2@9jL^JNsbg&l`VD7oNM> zeStu{GUDVb^UCe>?e<53+yuj5KdE#j0c~mi7L8xlj6(4w7TvZo-fw{m;mjdiw$RW8 zzXaJe3of>Idv!b7GZ`M*?Jk4%+P~T|{Hfdl6aGO+Jpr-s9LHH;-@yxH#3ph+nxhZb n+X8!zyFmXheB^xQ%+a;=w&?bq?gIT+JihkAcwfC`$Y%X7tX{2S literal 0 HcmV?d00001 diff --git a/waylay-sdk-queries-types/src/waylay/services/queries/models/__pycache__/column_headers_inner.cpython-311.pyc b/waylay-sdk-queries-types/src/waylay/services/queries/models/__pycache__/column_headers_inner.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..9e8a47d1ecffebd2fa7afeabc1724058e1ba3e09 GIT binary patch literal 1122 zcmb7DKW`H;6!-l}a=FqvO6+Nl%IxwHgC2Tqp#-tXD({obGZI6vmb)?J!zy~*Rv3FS)Da$qi3(2 zdqseF)SE?S<*rYgFHp-T;0e7VMM4VvJZG}lz&cKuVlrk5zXrsd>w|kZlR}F~BrTi@ z$`aM_{oQ`7a0D725{35}XOd_}aZidA>psIf8RMJJwlEb@o-(e9js?e}hu8iurjv;o^j<0=4#%18ESNn-$LJF|^R!yz)pSdCH$MLYaK?wmNYS=nyE2F~I>@ z$2{iyfUQfGNvQ4bLbN7Sq!{9uQ+9|4B*|F^@Alyq?oa$Gs62}p6xmd?!Z6WV#(TMj z-k5O40VSGr#%Q}WH*SO>R6GpFei-(0ol6#m(gDunx-K%{B3+{_R!YbYHRB4BRMO1i zczN33Duu8LDI3P*C@sfJvuUd>4sHL0PQZ-LJ_mh~vOwkr42D7;1jEU2wX>oPLp6va zrv3%}ZBz81J)J&ydj4V-1@hoZ$!KZ}E?i9C1yvfsA8DvCHq<&Ymv zZPeVhfkAV}K6RX0z4TCR;a&3K;b`H;H}_`QbZfUxo%(fqgqF$$WUY?Sid+QNzW{gZ BS_CQw1B9-iD;H(nZBbVv9m&An~ zX*rU-VgVCQ$SA1_?vt>_$Wns^vrirp%H7CkLFj~a9uQt7)Bl%p+B6r2(O-zs#V@DePbOq3{i+YY!Bp7@tau_kycHUR#}4`M^G zFcLwm$xyg(e?!thf)DqvgRqUlBeu8b^>DWX((Z5v72?H0MyQ#Kvq?p&ZOOc-H&He`)FC7-tKHJF&x0vTbpL9IPoT8WLhrAIFwFN$%9@)-%0 zNsK9`e%gec1wq~h))_u~dbz8Y_s#Ln+}`M9=Rr@$*(*Kt4>ky@;w=_(VggoGT{VJv zfa-)AfLLcRu|oaoNh^cws`uX&9pvu}I=U+^fYy#n{T{Ly{ d-A9w%<8RN%VW{|Twzd56+7G4wd4e%1<`)uaUeEvl literal 0 HcmV?d00001 diff --git a/waylay-sdk-queries-types/src/waylay/services/queries/models/__pycache__/data_set_attributes.cpython-311.pyc b/waylay-sdk-queries-types/src/waylay/services/queries/models/__pycache__/data_set_attributes.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..39ac627ac8d9465af03d8bb1b4e7989d6b3c3023 GIT binary patch literal 1554 zcmb7Ey>Hw$6sJD#PPSnexCYG-gGh(u2203l1kFc{rY&0c!xt3LP=XeDJ|U8*kd$2+ z9X#|8=$1?!Qv~(Uv44g~LsNlH-7biyOnsEj=R=w$l=$>M_#U6$?~%W+tpy0i;o0eA z&q3%PBU}!zW31QT1M>_q6eDIaJF{{-wk^XunUlM*n|raB`?25Z+^m=PQnGQKhQd(HU6&Rvfjoz&AH+-VjTNce~UQ$T14Nk7jfrGA@S|0)}`8xA^}^{GToYIBV?#~G93lMj=+V`n6p&3xg{A@3g@(_ zXqMIRH~*T-jI3sb7O=2QRgIh`_*4{=^k64VbmM)N@{BcuJuN{53d;u%sp4Ook|gum zwx0!ZV-TMqj$#YYvmXOyv123dGMhQ4?h6}Gf!U4NV;=XJe-}hp(_=l>XM@w=E$sTt z2JBXv4|b@gdt5)zkk5XlxjO#Rs4(d8l`_P*)zZZ>C;-)%mSt9BEie=SGvk*QU;#`O z*I~GO{P`F#lp^B>vUy9Wk|*gTO*$ysI0pPm0qzhg5qX({LmQ@zX=07+rpNe%R+(;A z7*~l*OVbL+8;eTfpYg6Jc;lM=#xGIhK~~}j0N5x+S!K{zWWOc_&3Q94y~q=2wN_Ro zO}J`2{*#t;G-&#yRTI(#gg~=a83%rqkf#8(2>?=$5NJw5q`^t90%_I>SwbF6uFZ~Xc2uY;Lm55WbJY+l4h@cQ>Bycju6MV` z;^1|EXt3$_ybj!({@o7xPvjQ!p}8xG2)Rq| zE-lMI03Z4QJ~e%TrY+(_j(rRT=)vHrKu^6XNKQF*mXu|~&ZS+F!~U*bMxRQQS#+!H*;YC!RNLfMz?HB5Mr z#*`^vg`8pD!`J@XlGhyP?kxJ|Xcl*>SR*S=ueiANEcf*CNXfS9x&ML=@ zD@;kK^1TI-FC~tBmikdNg46t?Gt)G(d7pt{zE#;YGv^j(y|BL;1}d}egft@ATt^8I z*O)qDK>?m~H+@OJ(b);6Y0iJMLjDBeV?{m^))p%`Kd%#T=O@HBvt~cM1p&SpXoM&+4nb@;g-B4;kUZ zU72rkAQoe-(QKHTL65R!oyGvu%L`kfq9Zw{z1rs zC?(Vz=8JeTp~0t0r1XJ%<$ZVe*6kgbmf<$VgRnmUzfGPpa(2a#;gp3tm?k_J;5dw; zP||=iB3)fTLS-Prd`V$L1~V&VDvWloZp`)^QPzj;0c_Vg>z{o50pJ^;&WS53+QBY1 zxckwuhu`lD+Ak0sGDXF@hyq{pye$B%jsQ}{^WbWEp3o2z zHNEo%&pUx%n5yfkbDBVdL0K)oy&fbBKrI$P^%6ex`j^&#$FwC<2Di91k$=W297Ll#x-x=?i1Stlwort4fRd7o!E5)YI2tBufNdRS8tfgPx3D=$sITV literal 0 HcmV?d00001 diff --git a/waylay-sdk-queries-types/src/waylay/services/queries/models/__pycache__/datum.cpython-311.pyc b/waylay-sdk-queries-types/src/waylay/services/queries/models/__pycache__/datum.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..6aa6e3caaa8383bfdfaed818357679b753ce9018 GIT binary patch literal 908 zcmb7Cy>HV%6u-oLkyZ3v)yLTVg*KGuAIQbmB))4w$ z1^w{VbGvA2JxYny-#0*wrb>9rMYfB~si1ioJ z_#FxKU;BHuUwe$&bqajw8O;)xR~oK~ljL_juGMG51*{ zySDvg5K7`fL`GDSK1-OOiuoiEJSJ+u$b*z6yASt?&%G>WiJ~gx3E=_R`oET2wtaWS zeweR#7a$j;HBc&*JC4JlB~8Q5LJb#P#k@h=w)Z$mxFXCC)l8cgQ7K7GlZ-}D4yXB1 zU1l2>Yczq4GpQ0n^JxO2!D;Nyapo83etWH`yDpr|bqm{dgG^Xwo t8z1(My)QS9`_s+suZ@$xvilFtJ$8e)D~^voqTLqt~+$e22xK zlhQ=!Z?#x|*3!^k{R75th#(gcjp&gU>#nXT+lY+Vbj`ToHsYq+tS~cb#g=P<-5|}V z9ow#5*{!G(cinDfTTw6WyZy>;N7v#FcSA$8NiEtZ_C&wA&Hw?@pd06F(s{#c(oNc} zW8}gL^onsICh67r6Z1T}J0SfhXn4(slc1-59{D-`KBGK;fMpm{L3v08{uvPUyLGsW zQ_ds{STw{jBQz2t+di0u0tc|dN4~&Qno#abO7MiU7|R*Ok5ihAzk7rU3$mCd(w8Ai zFq`1JSKIQgZGUwZ{aJn%cLg$zw`NkN;(_BZ*wRnK?Nv66k0cFdL)+eGIAIb~63QyK zAo7L4v7cmq6ywox+uj%SRC~sauU)Gd&-r^Tts5-&B%5MnC%fUXK_*o=t z<$8f$fg8Pk;mlY}9iAzPbHw;_=cu}H+iAWH?KunsDlUWG^a=8Odvzm0x>nRtC?JFq zJXkrMvk)ttvplOqmf3o>l8(~+we>mpvxq+A??dMBG9d8~=7phY+QPInbAi-!9cgz8 z^l^PGOjFYr=qgiJSBkey7Sf(-1^THz=IEffIOgcH;^O!(^4E>`=4P+x-~N42^zWRQ zpTKHvb&KAu6YF;I(LrGyoEmzgxoDzB9~{3vDF#l_b55+Cx%CB{y*<`W4Fd?)Ibo;h l?VMPHV%6u)zv#Bph*mPk;+aDbrAkXmG;f=X2@wH^2@2+50Oe3!=R*=O#~4dx$V zWdj5|D-*Ma4pk;3rf!kS)QM*&trFA@oKAP|{odE_-MvqQZ{)ts<}0gtF*@Jk>y&YT<49*c5RH9$!g4^ zR@YcOtAGHpr;$mkJ3|}0sAc<*6}|Q|?q}qA%4D`mbQm$kWXKeG3rKM12y2r@VgvIO6b_f+g8nIaWIutPxU9$9l zC6{b_>pc6L>^$!n6p}3Wv`*Bj;|M6}Ct-WcM#vS-f?mtEHwB4>CX9x<T{k!H^;@(weVoZkHN8|sz9y2ih(o;jr9@E=rMd};dyl@)=VaXm(Guw?g~+?x~Wbj^E_FBRD+t%k}%$rW}(cF6py{rELKok$zogvH^%QC zP8Ri|vZ|~X9*Y-xC?FuM!rt6uT|eb|ir*J>0ycE|)#-_dIWmpm8=bz8`%b@{i*}N= zVIB^`fT@e1e{G8Hx5tA6p=S}3C^QJElnlm3=RCzY&KWi0&=Fs6s^yg=JGCByN6Oin zYyx)}VWhspF|1&Who*(iAu5h0!gq3XdvXs=0~u`BHH@E*(jO#{@n!_5xn>a@sasjyi1-Q>k AjsO4v literal 0 HcmV?d00001 diff --git a/waylay-sdk-queries-types/src/waylay/services/queries/models/__pycache__/delete_response.cpython-311.pyc b/waylay-sdk-queries-types/src/waylay/services/queries/models/__pycache__/delete_response.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..0b50137e8fa2415b4b9c8029e21d707e8e925220 GIT binary patch literal 1991 zcmb7F&2QX96d!wSujBnn%BmGAg;Cnlx=Os|z$L1HmXrpRh61fXu8`$;W)l;Cb;g@? zBMuSb#HqJlx$q?-#F0N^xvhMv=&84@np01_v7Oyb8VTVYzkTn`dv9jm`@QimjfR2X z*&gh7zfll+DulyFEg0#=cfdSG1lfp4L=L1-wq;51m7o$Twi2qgn#)R{g;l#6>b9QC zYA_QTb`5xqRD*ihup2qA2hFf$w{m_am<{LbISI+=79z&?h}3B9=L$lM%V9rj7jYELK>xR>c zw83FsUG<|a!BlTk&fN{_6-6lM7!yB${1{PWOMnac9-zUl5ZP8pg{nlk2D37v8j*=g zwEgO_dRB=JRx?vp2C2PbrIR{XHA<@)(j+Z1yFYgOnu`GEZEO@=T=99F{1O8Tq`d(FvNVE7+E z_NIPAWnrK!Jh^D@tqc^i7=J6~@Zyyp?+s_$gZY)gov%g}`EBhv0&*b8-pvt`Rc%6G z3PcTEefQTMI1SrN!{*shRk;dIKn?`i`(%U^;dDq~3dA~Uzxils`1-j&Z~V0Z>$Jr> zZLv;U+glYsHh*}4HS;z076_ue-Co*bP*5hW-%Nu9!NtJf+klv8{!CB$#Enwl%WIg| zH9K9D$AZjSaGzNMBXH|7T{yIg>vMeVWOK!=H9;p6AE6Qs+{(Lw)r6{9nwAa8>Yyz0 zF3?gO;5=|I^=n`WuzZg#fC!%n#Qy;@sz{PFQglffAwk+mIzK@3)8h#`H#ljGl!_#e w(0>yhNgqf9^#1gCg02jXjv>N>qhp9J433VG){>x(uaZa3bD=#rVJgqTzj=I3n*aa+ literal 0 HcmV?d00001 diff --git a/waylay-sdk-queries-types/src/waylay/services/queries/models/__pycache__/embeddings.cpython-311.pyc b/waylay-sdk-queries-types/src/waylay/services/queries/models/__pycache__/embeddings.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..34209f1c28e0614068bfdfce9e0fa2c7f224f12c GIT binary patch literal 1054 zcmb7CJ8#rL5MDpeagvilXsB3TN{qO(5L5vnofHH}5fGlz3CZ%=b2$^+Yj)QOrlO=w z1y`m+Nc;wV!xdK`w^Vc|g(?-}dqgK5MOM~$=G%FEGdrJ`mu-S)Z}7GIN+sk+Wz0@( zq9{inQTaqd(k7u2s#p4Z!pVeKh#EFY_qmwplZ1>Mep7aLSY2?*d32>J$*>c75soo1X# z7O>c%2@4?>P1}Cfiv$hOqWiv}JCFkRC4{ugSwdwG=%WnM*5d~>WI>)lDt#HTl(H^e zJ6*{&+rD>_y;Gdzoq~+h^`4ZO*l=BjCH*XFOxZBrlo0eB+umd}Ws*V|$uYMe_JyE{ zpXPoX7ue0uYRHaKF8V1tj;RVqEA`DNkfpvA30WG?Q)~cz7FrV@2;VhZX+a_BKp0}{ z95Rm6o3$FH)Tj4bTZoH{r2?8IdFU*aHP6GDcwT9HUN@IH2hZag)-O$2WKp`qbu_q9 z3A2J%Ca?!@C8PpL2wv@1sR_wTlXYGLlCHERH)FR>iWJ701?X zg!35g@Kq#?+epMW6eCShl#y;J`iNBGEKx2E$i?|@r0a@0BBv2cY8CN6VUhakcYXOo zcyOa{9^4w%&krta59-@P{mBHr+1L6n`isNW%ftGWLq4cGL;Wf;HLm^Aw7UA<9$7>= LGaxH`1zY$H^g=W{ literal 0 HcmV?d00001 diff --git a/waylay-sdk-queries-types/src/waylay/services/queries/models/__pycache__/from_override.cpython-311.pyc b/waylay-sdk-queries-types/src/waylay/services/queries/models/__pycache__/from_override.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..1ef22f1828889586404d50ac8bd5845c858a45c1 GIT binary patch literal 1373 zcmb7DKX2Pc6hD%pMA32LAb)@i1rE&+3#~+XNm3(dVI*kd4s{FL2%w^1Xx@``FnPz` z9j(YikTKsNA0R_fpkJYTM-3SQEiKTgn}B4>)OQr^C_w`>#Nqh<{O;ZFy?gJM)zy&T zcRc-V_@_t6-&Q&OnhU{s^#p}ygpmPZ4s$ancL%OxWiRt`Z{SsOBWvXTz^`OKYv!#% z%OT)H3p~~wy4Oyl60`)Y^`528f@RCldy5~0ti4M*VbXL6d5}!9WI}%^K}|NP;W=nf z95nqIE%v{Dyg>^kjZ9_Mp}Ay`>0TJ_jku;MYIK}vdI$nkVt~=1k~uXapgRSKt?#!f zlWCcQFp1$(P&uSGKJLmJVff8i^n=M++}bD=T^|`!=*=jScx6)XZp}ujo`H1K3B!Am z3TY@XZYpkRmS|1$M3hOEO)#5(Y%x2|Y$Xv0tf*>K1BN--nxO3O3rqlo_SOOe?Bw?? zY7rDk*nihTDHrs|?cJT*H~SkuolyhP8}lPxAcdqS)nR0{2w}0sUB4^y11^BYHcXrd z7TZvsI+Q9;OpiVofxwii_d1aRFV$2Rkn$l1_IZ`#{@&ep+?X-G1EcE? zKkN55`~8QVldrZ8w9HCOpn7+cEg5;^Az-dncnwlcGRuM3Xh(iShgZT z45d|CJEOA@^|@#)#pF$J2R&s5U#g4983&u_KX99Sj^oT5fzy~1yIm&E z^(pyudHqE`nZCQ`uIspS@}VvGkfS;gkhLo>8>=sawYf{$_dR6L-u7O5p5L4Y#6SNu uonG3Tp5J@X*sowK7PjqL*thNiwi5WQ*Iu~hJ~=nPN}S76a!FmlWc~%Y-=~xS literal 0 HcmV?d00001 diff --git a/waylay-sdk-queries-types/src/waylay/services/queries/models/__pycache__/grouping_interval.cpython-311.pyc b/waylay-sdk-queries-types/src/waylay/services/queries/models/__pycache__/grouping_interval.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..743fffeefe8db3fc3633088d23ceb0d63d03289d GIT binary patch literal 1114 zcmb7CKWp1S6u*;XTULlkNQQPO9Lq&SbP$}u=zHLs2>mXUn^Tzz z_>zP01yR&N6jLL@vC%PbA)ApITODg6TTvyhcB&v(Xf>+EcE`quS**(Hv=$imZ>l1& z*wmi4%*!2z)(=tB@u3oW>t~Ulkyj~`*$&ZR%oLL$Q{*F9itol?nRMND*`k#@rP?#ly0MK_HZ*S-z~Cn6y0|JQQearS4` zPqJCv(kLX^=xd#*9oH4m(oe$85{-~8&AR=j8L+u1 zM%TpS1)oFU1gZkHa?AlV2=(2mozV+p8u?&fiZls%?|^G22Y%EZFeyXI+MKn6&+m3g z0`n7;gq*xTIBY+Cvb9ZU3PXa5A7+plZw=Pm9z?Fd8&BqlV)5&VYx@~^(}+EnD}WnzAE_Vk zAw`^?XsCZTpUK^o@^EbB)Y~<*!$G*!k$*>VV#v^nze}ApqJGU0k?S*su1p3!0 tzB0{9HMdcvF={;e`g+uGe_C64-KspkGOMe`2rcCegx>&);+4w){12DHS7HDF literal 0 HcmV?d00001 diff --git a/waylay-sdk-queries-types/src/waylay/services/queries/models/__pycache__/grouping_interval_override.cpython-311.pyc b/waylay-sdk-queries-types/src/waylay/services/queries/models/__pycache__/grouping_interval_override.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..5ffc839b93881d1a03637c199ce7c9c36427b4f5 GIT binary patch literal 1127 zcmb7DPiqrF6rb7MB%3V_6g^Z_80?`9l5Fciq=--`lwOS579}FfHZz+n-JMxyW)s&h z;zv-yLqAFm9!gGvr`{IYQ%}B4wjqc)I1IDzy?K9rzc+8cuC6)=)^PkIFinJh7s~Cb z%mjSJLHL3w>LQA%5#iYA8n}?n$c(M7HI=QX5?8xbkSnwr)ndDAW5g_0Wp!E$jC;3P z5m;<$FIpDmu0!ibsOk8S3BC2R$j`{@l*w$D=rCrA$&e}X5iG@bYq&!aDYWQ`s7Yc$ zS)|&Ib36zY>48Q@z9N0bne;WIB#6u z^X#YDJa1_fl57pMPSmdJ3MlC(VXH(VWLvY|py@dKf^eY;qoJN+>qWj&B=&jgM^OfB zE{oPR@nps4;5dbkhQ|yR9a5fml6JsuD}W1oVx=NGgqb@X2Bf^dFGC$!_`W%77W!e z>@oE()8BWBp0 gV5WEMJv#PR7&>BOLv~4jB{rM-Q@(^Np@pD2e&k0FXSB{06zm# z=WygE#yGcZY~`pp?jpP~MvoSEZW-9f(Xzu{b}@~x5kA3VbiBBK-6t2;>V>^>VV^?% uI>pzfS*hkWsx-!p$KT$J8}3hQJFi=nC)Z~6fiXtwc?03?F>>V^fc^s+(_Ov* literal 0 HcmV?d00001 diff --git a/waylay-sdk-queries-types/src/waylay/services/queries/models/__pycache__/grouping_interval_override_one_of.cpython-311.pyc b/waylay-sdk-queries-types/src/waylay/services/queries/models/__pycache__/grouping_interval_override_one_of.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..8ffa160f79aba11cd66c53592dfeaec5305164af GIT binary patch literal 1405 zcmb7E&2QX96rb^WH_Ji@{X%e{j6kT}s#&X2FGL7|Xb8C^v>;X5i#zo^@4B&P+?nx4 zj*yx|FCY#akaFR`sesCzeEoTa=!9;*ITWLtBuTUB7uB^WMDod(Zx9d3iu^ z%?^K!zwrq9!wJW$*D&{H^A4I=#eM0BAG{sW(o zhxjyW+!MVo$Z(1GC?Pj_nevidFF==T%qAHa&FJdL30a&#ad;|PJwObAV2yYT<6yf7GSETZ2o z7javq((K~Y+T5%Kfx;_!o~*XnC_Sm(Hs&*ea_ShAUF8lRc9u)iG8_I5UgYK@J~!bP1UQVo%tqOlmZ;o z2GZELL+r_K!Bk}s=tAOD1-nY`1iST^uIA+`mNQEtFfUR)YcpbJwVh*hJ@z=MwPlW> zjE-7kun5um1e2Z|DdVoL;VIC+z^-@ yB=ZiXbnf@5KPQfyCG_1x^3KWsBXaKWpZ|HUM=|5)$&a7>eD*J=fBXVtoy^~iot2mX literal 0 HcmV?d00001 diff --git a/waylay-sdk-queries-types/src/waylay/services/queries/models/__pycache__/hal_link.cpython-311.pyc b/waylay-sdk-queries-types/src/waylay/services/queries/models/__pycache__/hal_link.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..bfc669a0a1e7e2743b8ead666b82ba4b78008efb GIT binary patch literal 1727 zcmb7EF>l*O6h2ZUB~eoCpn_1Nb#ZkH*g_x)?PvsTod`(_IBtVDD8Qiv!#i1oNgi`N z+NIDzLxzr7igam57ll1!?9Y&a4hAO!ow6xNrc8ZDN~)4($?5oX@4dTskMH{)|7bK! z1mkFOHu$ZC&_7a{54~6@FMfc<6GV`Oh(c6f2~ZYGIE>dmxGE` zg|$u$-wbM2O+hNUjY#py6XD#s@T{+!2)E0cQagLyEtRXt?v; zH<&Ot31}!B;js|20p5JKD>qH^_9FU&bP;!EWE^h|g^1$qUXQ_*PULlF*)ZM})E%}> zv(IqI1g69jd2X)n#4!$>FmZf8g|~SoE7Ml8niImtJk_{e%FLTA9C!zP&lQ<|%cDNY zs`ms36(nr0-f&`iN0#K7S_Ei(y|cUPg@<>j7&77(1ux_R+ee^3K@?dE;H%yTRIQSV zs7BPY(g{Fv3QsXCooLh``gKtA9R?|%RZifpQ+Z!LtTL&>9#ifihE*Xo(CV`jRnj2u zk(IO6HyB_N0~l~6E6>s$eX@gnNE-`>A5ek45IY!rnA137VNAQ-(b|6DOSq2*PXwX9<2X4}q8+XlWTK81DNwjTmpWB}00whg?tZ7xCO4f(z+ zw!K6iaIHw!suY^^*Ynn~-JDVU3YcENgI@jK8?u1*coISj^^O@o>>cMl*@@B)^x}~R z*}cv5rY|Okomtbu(fNsGtE^nyi@7^<_7)*#=XynZ_lAyd=g3AWuR)Tz_y891FCfNC zzYFc!M7ws``tUKGY~7r+`sc0w->v?*Khb9MTJ1=Oy}l^7@<_H3iE4fAKSWF0C)$;>zFXUjzd8fB*mh literal 0 HcmV?d00001 diff --git a/waylay-sdk-queries-types/src/waylay/services/queries/models/__pycache__/hal_link_method.cpython-311.pyc b/waylay-sdk-queries-types/src/waylay/services/queries/models/__pycache__/hal_link_method.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..743b2dc25c0be334fcf827d76eccaebb86edd6dc GIT binary patch literal 1317 zcmb7E&1=*^6rb5-Kbm&YwiZP}2R+mkx6=xBIFXr%&Z%mkL}E)Wku*7 zdJ#PIAk=@ris&D+#}W_eBgzlC zwx}d8c*F%&oRNlzL!z3TJZkZ1VeJ87v6qBAQdIeIMB)aS{=Y4!Eo*tW`t$a1-GMO{ ze`dfY7FET)X2r6WViLuQaOSIwn-@?iNl2rF20!xs&rC>g-YK$zQ(~iRWXE(y zm<0(ROUw5cR#yCI{UKM)n7x`^h=}G+!b}HhR1uFxh2TS1UPDhL|+JNrQyzyht82q<)DUf3TZz$Ze5C&;s^WEY|Ij-EU93Nds4B%k3w&+G?jo z*M)?*?yIR&HK-2Em*Fh(JU|D1JvXsC`)=;d_S@}l>FN>Kkj}su%vl;LR$6l1h=$yC zQ_FQ>&m_?DnCospLk&EzA+)~hilPoIX&BLx7cxUM#lgd+_dk15aom$Vt`D;D&59sfqmtUp*x zjMU`N>q7q|vQzfST+-^0;Bo0r|FHAo3OIEA+;5;l8C!v%zIbkX&b_aU0< Zp1ykp3j^c7VR!NUg&*4f^9*N3<`=kjXNCX( literal 0 HcmV?d00001 diff --git a/waylay-sdk-queries-types/src/waylay/services/queries/models/__pycache__/hal_link_role.cpython-311.pyc b/waylay-sdk-queries-types/src/waylay/services/queries/models/__pycache__/hal_link_role.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..39826f35aef28170b2459d905976c0a08c7f8f79 GIT binary patch literal 1350 zcmb7E&2Q936rb6h{lJ^hLRxV^qC+{rR?1qfIE4x|Dkeo*rI4fr`C=K*EbGShI5Xo7 ziz=}PE|q%70V#h#C8`Skm_0@#AtCkD+oEvd)HhzUOi(&Z{MO!L`BLo9qL$QR1E0l|L5|u<7_NW zzdv4_TPcO4SB6^WYRz>8xD4}nwTec_p61c8>o_+A&4i|$#k!0wNzo#P=*@Aex22P!s>p55dgU1w^-9} zvzC8~EivZ_@g3Fy(3ef;oArJ_&UUv%!XI7RF7jMR3tR#^8fJ|0^gd@S&K^(+OB9VW z3R|e;xrEwOK&oEP5XF;$X$)eiv>{*}8Itjbz(ac4wD?0F6`Gr-@kf|m=wH=WeX%_*U-1WxI>Y0R~8xc zgu5@~uDf40*=jysh2|Q?5m)b1{nMt{?rPPAu=U-JlUhB_;V31e%IGeRsP?(@eszao z5?Fu(3u!MOn^q728bR=Aj2SFC5JP3>v1mLeoEWZ>4d(d5#1>C_s05#e6`ZrDE=B=&m9Ybz!dEXnd>D>dq zzYdy~chCF!yB$xS1qZ(&xnljCvBci}l2}RgflL<95%H$Pd(}BJxpB0#GVzW|?k{rs z++<@$aO0C1`VTU9WPNOQTk;&tHkm;IeFMoz+bD)`xD3+%MasB;vM`gr>Hch>A+i1^>+;L?G9ZS`;7V=ROD E6Z->vAOHXW literal 0 HcmV?d00001 diff --git a/waylay-sdk-queries-types/src/waylay/services/queries/models/__pycache__/header_array_option.cpython-311.pyc b/waylay-sdk-queries-types/src/waylay/services/queries/models/__pycache__/header_array_option.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..70623b077e0ab62611211afdea168051128d1f07 GIT binary patch literal 1271 zcmb7D&1=*^6rb5-v)gE`l@`&1j`dJi*bSlwDON01tDvnPmBL;^%*?uLlgxG|*(F8j z9(oZxco5pZpi=4|v&Rw;3ZA^J)KgEs$);W)rI-+@&XZn_o&<=e4RW+#b z5|s*$fe~7AV$X@m^N5Lfii8cHNhTUhk`<7s{aWh=X$l^4mwP4RbILqfG0nw#LlPHG zr0q!Zh6PMGA)}-wxKF}5BMVIy%shKcD0d^D1)&o*ctCiKO#WZUNzm}2?&q=^T!e}E*b8|gMO5!^~Hy+dyYr!C-i1}Df9&zEvSOd&Bc6ec@^sTn5)+XhfM!?H9 z5-O57qlo%}Q!)ySybYu?cy{&au0FkIj&x>shsQe)dpgcv?xBB>zEkCIzElunu&eB9 z5ljVSC)5}uI)mvI>bFlz=|@+!|IX;3c&A^{U2zcdH~wz>F2$$y@pOq2Nq%IIUX literal 0 HcmV?d00001 diff --git a/waylay-sdk-queries-types/src/waylay/services/queries/models/__pycache__/hierarchical.cpython-311.pyc b/waylay-sdk-queries-types/src/waylay/services/queries/models/__pycache__/hierarchical.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..f396d593631187fee1d7f8acd6d193bc233d9a96 GIT binary patch literal 927 zcmb7CyKdA#6rJ&7cjF`?Jhq@4L6J4mu9Y@INC}Z3;{6iBjpf+0v6ZpM%#3&Aj!&Q? z1qGr3B#IOi`HU^La!WB?%xSeP5D&no{8_8j`Ny2~iOx4>Fo=J=`TB5AuYj%2zQ@3Gb5i|J!oivTn`Q z_lmjh6y$=mBBe69={Ov=^s~4=QZ#8lAm&BA!r3 z+)92#A>5p61&Wbj)suu@T{t5b>li@*o+EZ9MTd|0OLy(dpn3B$1V!FY8|B8h|T z*(IolJ@fsZGrS6s$i z;k%$Q-_yH4;9LqVB9ZiPDi}{x-}kqMvBD8Zc#kT)!!s_a<_r&{NUhq2~<@=Xr-nWaH->Fhae0r#LuGWJzeM*QU`3+1ET8_I!Us z;7n-DS*)wrqJ%1iQ<{xvk`$25TT_{yRd#3w8>>(ih|bkmY54lTh-?t=Y{Zd~+UKd_ z*GwVa0*1zH`(LQ0 z>{TthmKST#s=G0SbChavO|d&`)1C&?LyLK>E^=_CWHen2W-g|7LEZg<={K@FgPd@K zc|R|tx!e``3K+EkWPk2?<(wEhCl0<3_Aic|pq?+C;NaNtzt>-Vef-7we}Yz-XAH6eR0=S=*-+~DL6r`R5nKUfR znmC^2Opqa6WPLYAC+Ft@S{;8nCys5|6ZC(?Mb^*O82vOq573X}Pv^vKS?&b=mplyK M8SRH7ma2UI1*>MS8UO$Q literal 0 HcmV?d00001 diff --git a/waylay-sdk-queries-types/src/waylay/services/queries/models/__pycache__/interpolation.cpython-311.pyc b/waylay-sdk-queries-types/src/waylay/services/queries/models/__pycache__/interpolation.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..adeff9e834c08196e8fd3af7c9e2013b6b80adc8 GIT binary patch literal 1055 zcmb7Cy>HV%6u)zv#BoVQp&crg0|ae`#3CCNRH{H~JMdW$k{8SPE{)Z*&)l6;%*3C- z#)`xMNUZGq2_8CBnUI*eMJiJ#o}IKxP&;rs-M#mFU%z+vzBHRQf;Gs$_dXa1{VtT# zRUHfX_#Frz5k)Sdm>L{MhHKzLuJB4^x@IYxyc*Tq8pu^zKqWET2|DfY`IhwAG!XjUCjoeaMPl`5E^!@+@UCTO&G*m|`+yio5}&xK{^vNFs$6 zf#59?3Cg(Y*!GKls7L@B+4mLMWigY!W|Z`#h=}ep@+4vL#?x&=MUX};*1ir!Ohk{Y z{9nlx+ul6O{yIC$I{}3xt9`8#wdObiO8QCIp0E+Jqgl{z+4e(0VxbA6p)R=v+*gW3 zew_N8XVA@2@pLUbobzLFEU79`t1n|94MJmMj5B%!-&uHG-HtVriQuL4Bc}U;0=zH- z?<6c3qQ|XE!@B3eLwMfM_Pk!IQ^`C}Rv^`|rn4lBccob<3uDD&Z#9b*)K;<>m*KU^ zyNA<7y{N1z>xIYixgH7#NUN|nXNY}6#{i;}&rV-N%#mpf|L5!rx##Sc1JO>hHVncb z4466(`q!rDUVAbz5PBLhjY4OTO37eibk0&t;+$~@&P+;f}+05s! sf9mG*w+_tPUmJP%!O!P;ck^I%D>t|PRE!1VeREVpcqvDV@(M8j3pGGQa{vGU literal 0 HcmV?d00001 diff --git a/waylay-sdk-queries-types/src/waylay/services/queries/models/__pycache__/interpolation_method.cpython-311.pyc b/waylay-sdk-queries-types/src/waylay/services/queries/models/__pycache__/interpolation_method.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..ded3935378987ea8372c5045931dc40df0c83355 GIT binary patch literal 2707 zcmd5-O>g5w7#=%L>bi-WCfRJ8mNKL(+Uz#7^Zn-aPomNM2)K%?5{0TrRbreYIjSK|VvXc!0Tl$!y9F{wb)-u?N9L)4 z42gBJK#Qm-@jNL}6PXelWRaFpS>gqzrkz2Hm>JppeHeE)`5-*Y! z+CUA7%Vd?Vp*4w@$UAf$txH@X?^1}M#8vVhZK9?Eu!aj*cWYgBazT=PYC$Mp}?E7n5MeFuv+}0qlqfo;U$~fql%K5WBF;8HHgF z!=pa-pM8D^UDg>;?1xV1F(0xn-28V_ZW_kNm!p3>yc~B*G7h(TVb~82EQ^ULoxaze zu7>fQ5O;bl!}y3npM?;+UMSbrAx;oL>i7ePkfGSkt2iZE%4osyg;6dw5MlmnUo2XH z`DYUzyRX!VbNSE@G4C@X&ChYzWA2fUkGjIWGE3V{6Zg`@{WS4Gn)onHe3T|WP7|M` ziBE;tn0W~IQ`Pv4X7`N`X|}pQ0-v?+jOJ`xWSwn~4BPGw!U4y&&2!@3Mul+L_xu-J zi-V;}VB_yY><8ka1D=oh<}}H@t2b;@dBryKvCX=CE;erbvvHS;GMmY{$LBLT_jz2z zv&{a0FJyE+%#KYXKqAPfV7KjhnD>EhD?f&)+iC==V+fSh L2sHRzkwbq0)16X0 literal 0 HcmV?d00001 diff --git a/waylay-sdk-queries-types/src/waylay/services/queries/models/__pycache__/interpolation_method_one_of.cpython-311.pyc b/waylay-sdk-queries-types/src/waylay/services/queries/models/__pycache__/interpolation_method_one_of.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..1ece0c6339a97cb6eb501937dac3b5c8cb6974f6 GIT binary patch literal 1304 zcmb7E&1(}u6rV{pAFkH=Rq3e?dZ-bSMHCN3#A2oNU|UfrevMlf2PPmMb{ zguWT$XcYSj?%fAv7co>v46|H-!(2Uwjh+wkp;fmq%AtA0tR2J(yuhtJ3!!~@`=efD z#V4pzqD73*3T+3pO&%v)wr7a;L$0{=xgzV}G4u7-O%h9?g(rdv2?gVUs@e9_rmu(x z7TKVRJmV3URC7ieQiMb|Ia!K%G`qY&nDCO2N1AG1L_{>m^#2_>ZQJw1?5piz-hop{ za=oc_tY#cXz>zfes{=Gb)-?B;72BQ@Bodl%=Iacb7f_{0NTY-XK^t!K-7r(Z>1i6l z!VIbc(|Q;sp*Nr{o1i3S;NBF-UBpoxLm6@m*Yhk_w^)f4cC30KBe7(BQ?r8=&kWJra9~o)4`((DsKG^a@_Aa7ag$`s2=kd|;yfto7KrWP?~6q{7Co@Xw;yyZT)5Ij{}BCr zCe>o4Brn2j05uZm3jicdBcv9G_Lk;I=8^BAFLcGI_;;FS5YS}HBqJxLtU z$hs}bOBOO=D@KVcctBL0k)?=*4<0WN%AGi1p|X|7L&9A$@qb57luGmc>@S-Aygefq zWU{VQBxg*M!;yC6ReIHMQB};TmrJEtPC~8-qn=7@b9`G$64+sE`+gH{^IaoT#>rVb zgpFyb5>#U@j02|!Te?6?G~v!T@Lj}E4MQ6;6xXseQ!{9R=5~x)E(N%lTwMqi6A|~* zjE|VAbGj6=C3k9b>BI#Pda6!r;(8m5-X<}0pdusYc&-PCHf%p;RgwZ8q$!B)OHSB^ z5_X!K$!ayprO`=VFcph1$x0<0=x?90Ai;|}w?NoMYQXmzz3OZGARY8I7!$l$&WJM* zljPD$G%S+&uGE{z(Py*H17?aigb6U$xmY#V(~+t~%?ezk;W1w4na}atQ zF=$oI2vSMm^qgitMK8|mPN(S&qHc9Dvv|lX?oL&sW>T;$K*zE+ub(slhI6n#)!vrN za7lR{*f#n)a`D}r_cL#{-fp#u;~lUe4NVc&6rXZFDOy%&2h6gPl4U_Lv9IMJ%UXj$ z>v`aC_$0ubd${m?ZdROw_>V}8=rqHc>90Ix7eJ8Hz_$CpFUCsCSUDUT-JWY3ICrg$ z{=vHWbgIR2L5#wxOLAkF4Jb+IVMq)H(=GJhLRx?K;4!WCi#aOZ?Ox-axB?E{a=8ku uoy8cpjUqPMNV7`_-)x~9gU=xvYyJMT^LY#v|IPNYd&@tx{pTspw3uJ`m2i6i literal 0 HcmV?d00001 diff --git a/waylay-sdk-queries-types/src/waylay/services/queries/models/__pycache__/interpolation_method_one_of10.cpython-311.pyc b/waylay-sdk-queries-types/src/waylay/services/queries/models/__pycache__/interpolation_method_one_of10.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..edec2ca122a782b9b1129547338585c6c221c3ac GIT binary patch literal 1291 zcmb7E&ubGw6rM>on;4B%YehWNp(1UBWG#9sQWUIhLEB0NA(v&{nV7Y^JKLGrloX*o z^dflhAoSW(Me5CeBu7~g3ZA@0;;AR!Y|@x&JviBY^M1^{`R03X^PyBKA{fo~r~1td zLf^D;Jj|YgyZ1raMHJN##WdsNAXCd=t!MpgVAKqZGH4!AV+YY3%Q0i$K zTt(%)V`7A!J1yU7k*6^etr?=cfJr7iCdoQ@^gPv^CXwKZyWB66fK%qnYO(mN;Ys3x zMK&BsUb2u0M=?t3f(Jx37+H>3_+Vv`Q0~S73zefh9ui(BlmB<*WU)9u$o`@=$lG^v zL8cl?MRLZnI2`FjUZszQi>hL7qg*UL>4ZRrFh(F1qKLGB`kY8c9pp}3Z%nVLcKG`C~aaw)-u_&`VVdnA<=N&TvpFzbjao_Gwt*ho-kkW&I<(`7id6e+uD~_r1rXcl z>&T^dci+#v*?POxE{u1T>2&%^II*wwbGE$>z15Gv>F^bR z+gx3Fytp(c&O?HaNQ~$_B`x%qor;T~$U7jm2fr`ILfcq4ERAhH>KHh8y@UQCdiiv! zrE*@3!mKgXV`vY+By>L{27`_k`mZ3pK=0r&Z4SU374G%!F)OY@Kv!L^f#_s0#vP-8 njSkY{GQv07Xkz#|L}TrfPscPdApTqIjqcGO+W+&EU<&3J^f7CJ literal 0 HcmV?d00001 diff --git a/waylay-sdk-queries-types/src/waylay/services/queries/models/__pycache__/interpolation_method_one_of11.cpython-311.pyc b/waylay-sdk-queries-types/src/waylay/services/queries/models/__pycache__/interpolation_method_one_of11.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..06e7b95f9b983cb5d00c94a18fad977698e71e56 GIT binary patch literal 1294 zcmb7E&rcIU6rO3frB)FXP~!n7cz_z|hJJ(JK9@&R z2z@uk>BzPf+HFPysX)XDRR%lb6YUceQX9#>=&JZ2uNO^~V-TDZb5kU%i*t71OCR`C>Z z!6I9ZBCmMJrK33`WhnxpE1WD>c{uZIfiU4l0S~pKJrNR7CZqp%$p<6BFAH&tia~rz=Ti3_!2J>KZpt2?;itC>G;>gDX9YsyHjTj$|08 zm6k4CWOt-NgBQ0RfU=MDx!4=@x@#SRcGR_i4|u7Nl2>3)oT)i}#7+N-`(N3}#F~v5HV%6u)zv4?;_UQUna;RE9Q4iB;%Sp$Y_5=|Ecq5>gh+^<9Xm?Q`$WiBci8 zLl-0l2BfZ?ics13M=~NyNR^n_g2L2^cTSoHCJ9_pmaDX4S;VKud_4yNG64mYD}8LWl76sG6g> zXQ-5Sau}f(PRn;%mYRL&9rh`u~ocE*6&t+1FcxynQ1V zWTviEB15 z2piK=0SP|by$!-1QbWGi=+!_w0O@d`!7$*Jk|EAPOp(UWF#V{RElF;Ljm<*;^=-)rBzjyG2RtLo#7w+}0u^_I2LpNP+0PAEh#vQYO%?{G+ k3c|PAXlnR9LKE%Z-%c)vq2j;U{`fxqq3u7U}7)d0A7(R?9CVSbeJ5#!{JG0EpLP|{F zz{SLa2NSNGFa~e_BR!f;Oh`O=tHBc|-)u_(#e>t`H}7NS&2N71Z9fhSlo5=z*5~?z z975lXaXgA01s^^JWd~8@Ac|=J-4VWa26d}KKmMmaQ#sI`q~ffbmwXCbr?Z)Z3~ zT6~TweO?hG^wMjFUXwgam~2iF9Yjnq88Agw!DHs}wFweSp@lEP3W)?|p{kY3FB*X& zK3HVkQ)HQOCOyq4sY?+N-C$%fW_)^Sj!@wz5#!p^f#5{c$=LrLIaV&u_Oicf_VRX} zLXz=@*0GwhZ2?DmaZv4|5wfP4->8(!PXysY6Gj7_Ve>;zDH3@+@xrhPxA|e1so?aY z$6;XxRe@>E@FeoPv}F^N#0-2m0&)j2GUlS}iSj#+?==(~0D1UTNt=g?l3p8oc=M4k$ZFpNhRfuY1-WX!|`28U-&@a`FP~ zNegRUm@q?(VqsmGMdav<-4GG8Wx}Bc>~$em?Dedvs&TUl&9oNyOr7WYGp6WDwcB;D z^?1i=uWrVWN=d&Pw0kMK`|M7C+GnV7ql|c0aOMi2z7{vrKGy|$Tz6yiqzurXXG&D- zuDK4^RF^?)p>Km%-{1c*^>*{!W~(%E2tH)UDZ!jER4Jw<*X3TsTsJMdF2G4bqxZY+ zDl}U+0;j`g0q(-|)4BO+c?tG^LUPcg88E_p>6y3!ikbwm)%$(5oR;Mr^bc*#v@Kk? z)kgmioqQ(MLZwd*!E7Ma6X*_rBuzV{7K09#=C2{c-#K{Lm_0B@rH7qsJd!scV2Z9* vK(zB1YG2#~z5j2oU_A)8cE;}+a9oi1K!~_mp zOgwln;mQeP@Z?{zM>B~Di6?Js@Wjd2*=2(t9PG}#zK{0x*WY`yA9{L92*z^rQ|(p; zp>M`G82Pq>_wItSi5RLPhFQkPL8h9)M$h`$z^YmpWzaZc)&^oZp5xZGh0qSX?NQCM z{0u4=XdWZ2*f0asjlT#+U4n0aXVI*Fvv!WDj*1cGs2RZ6AVx~GT> z7FnT+Ebx#^syQPyDFUMFoJ>bN9D6oFm~i8Ohni|nghbTH;Qt*tSSpQov(GoWc{@%a z$xvPENR8UIfFo(-4R_E8S<&3BmrJDwf`md7&ODuBbA75531}Eo-*3Qez8hxBI5|#3 zSeQapU|J8uIB+|(r4y9I47@i0auab>#ZZO}!__RyR4rCuxecqDO9?I}{S%?)G7^58 z@hR7J!KOn#T^m`QnxO$FKwU)HH8LM-5-TrUNZ|oGO~gDDVi_1+rhd#TBqcmZQxNJa zLHH{zX_}j>N>ZGs?qbdJ{Uk5Bj%Ao+m6k44xI40-!Hf5o_Tlk{pg#uw`wW`7v}&wm6{FuwrM C8F9A& literal 0 HcmV?d00001 diff --git a/waylay-sdk-queries-types/src/waylay/services/queries/models/__pycache__/interpolation_method_one_of3.cpython-311.pyc b/waylay-sdk-queries-types/src/waylay/services/queries/models/__pycache__/interpolation_method_one_of3.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..f9a1c1b051d1960d3f3b1c87260a5c4750e0aace GIT binary patch literal 1333 zcmb7E%}*0S6rX9g+gh#oh0zO+dVreHjlmN!MiP;bAc&Hf^s*Utr*vg^XPKETE-`@v z7ZVR2Ot^Bw7(Drx^k_CQA@Ss`22Y%Pvn{nM9GvdHc^@7 z-?VVN%r1iu9|E(3TvSIcc5^-sa`hb6eBRFoM%}miF+=&AgDylpl65b%A{}*z!T%PHBUrzdddrB_I zSW~G;PFfa+kTmkfd)aVNQ_N{r%jHL$gj^BkdMeA!@u`#~pkYjXKY?n#Yhv=alRfFFw2j%nnimw%6!oU)lq1 zzc0ZI;rVJ#oPj%OAhX<1tx6(rC56*7T74J2dscUJEpM%~4`Z{#!-M#mdZ#Lg8<3HUz{m+8Tm9b`BW@eH5>I=Bq_<8FrmhBZlFCoP?f+)L=0CLVq-}0=j{Rwb)PQsC2(u#{+Q< z47%rX6-XzKG42>8Y;=$&R}jA4Mz;o^12o+J^XZr-hK&CuyZPOvA6ozO1Y?%WFMq^* ADgXcg literal 0 HcmV?d00001 diff --git a/waylay-sdk-queries-types/src/waylay/services/queries/models/__pycache__/interpolation_method_one_of4.cpython-311.pyc b/waylay-sdk-queries-types/src/waylay/services/queries/models/__pycache__/interpolation_method_one_of4.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..3d280f904bf101938c4d0ad724f1bbee57fa4702 GIT binary patch literal 1267 zcmb7Dy>HV%6u(OxCm7oDRX&z-z|aOMu_`)M2vLcu>Oc#$2+50O>!`=tP)moIVgvkrD0S;3&_)UkXNA1bWb+D*)sxwVu&LneLP$wbtXds$~vD)?paX}*+ zjvy~-M7blWM_QbPM7Akej%hUac#(L_O+p$;NBS%xtVJgO@5)KTSQtiskq+Y)M#jlh zTgq6>nkIuQo!D;_Xc%uw>bC2K@sN>-NkTne=Gff85rTwHlsG|qM|I zhblnT=A$HZi?Zblv_ui^PXOOV6j>PBQ1Y-<_DYuKRlUlNW>xY6*Rt!2k)%9kK_2lD zm2KuNM|8P0vpM-p&>Tz02@)kalBkLXOi%%0l=q_9%&HM}IG8e>Q_BoJbN<4Z!y5{3AcgiGvTJ6Gj|#0@M+ z3=BxOGJz0G{3RVxBqSszwxVNV;yLY=@-^Tl&+o&2e*V2*`g(S@O>is^-t|t^2>EP{ zjnNz_bo~M16_TD_jsQ^#{CsgWy$J5LC2Km(jt4k2&x9SyI^o3}}4 zCTLPZ?gm8?6zpaWs#stqPCVGvGdX8lPpux$WSI7mP!tZ?zY=^qFA#KE!Gb- zyAJ|XV1Topk|{G0u*D3-#T!={mtmfQFoB7sV6w-K{NIsB+U+Zo?DvXE-mz0Eb~G|3 z(+jRE@yH;H=f~AZ)in@Cop$?@WI`GSJT_HrVG?M~(m>=vk`#EGFBX{&EjI@O7gnWe zG@Z*LPs1^6)r2jvgRbvKxki9^6x&ea)T{HF=kOWcc;a}C3gA|`@2W7MGMQ8vuYrjq zUlg#|JG*k@X9yvTO~eAGvm_S4dbtQUz>y74sXepqeIJX-6RU6W{f9`j zaRd*?PXgVJclp+$+KSuX5H)AB%vxbT@=9z+MW05oI{AHYyn*9=+Pr=B($Jxe14Hr; zG0JCCUGL1OojBWydO1=9D^ivVr2|NAW&ahb@<#{nw&tXm@2zvATbx&WFX6ff&9?|ilXZ+{6^#ryz%&~NYn literal 0 HcmV?d00001 diff --git a/waylay-sdk-queries-types/src/waylay/services/queries/models/__pycache__/interpolation_method_one_of6.cpython-311.pyc b/waylay-sdk-queries-types/src/waylay/services/queries/models/__pycache__/interpolation_method_one_of6.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..ad7c1e806cf0ee44da7ad62e0e40769f722f3e03 GIT binary patch literal 1308 zcmb7E%Zt=77*A$84@cMc^P*7?I^s?dWsyZhL0J}b*B1!Al-Oi!-8QL7xDC>wJ4>8OtF-|I81zWuuR};r`Fsh(A#GEz6YP`msR}MmN;T;aI&gyqj zyFu$1q5CwCX-;luT;;RGL4|;IZ@R<#Qxe(#Sx@ZIVdFW8G=B?uC&i0a&C* zHF?MdSJZGux=JR*gq$pQQKfo zQCp^Q#w{|M$6aj~k?-%_P$t|}nE(>FJ*k%5UdgKIG@k}GEk^;@e{=mF(`;#aL_65J zwPVt2@)S~O6^w%JIK^n6J0z$ZO#<&HCGx%$+?U;%PMQ}D-v@Mjf93ekJ^()_ThtjX zIS7~3yFsj?kGuB1xbSlJ+0*Aw`^}@9;6oOgCd?&1?RwGleL)lM`$fz5p_nYT`VQZJ z3|t#U;BfdVz}>ieV}9ZK)jMh@WO#$rE}Lk|3j3*-Vh<6^!yFAXnpSsjLe zZMt3pF{omU2Tl_^17yX1girR-iOJ^^I?(_18Pw|-D*jV!R5$K@wf=8^36{nD0Gb4H A2mk;8 literal 0 HcmV?d00001 diff --git a/waylay-sdk-queries-types/src/waylay/services/queries/models/__pycache__/interpolation_method_one_of7.cpython-311.pyc b/waylay-sdk-queries-types/src/waylay/services/queries/models/__pycache__/interpolation_method_one_of7.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..c31043459ca373865494c02c03570cdf18036fea GIT binary patch literal 1312 zcmb7E&1(}u6rV{pX&SBHiX!N!2aVV)et=MlSX873tsfO(FUzD?)qd zMeyK3=(Q(B^yFWXqbvx5CvTB@^5mOM8spc&$?lu?G4tll@BKEfr>2?+#&YjnXSRaS zXKQSY`ar>(mqA%a40(uQR*7*^@haHr)wr5Co`X>ZT}RAWL#)PY+S>gTyRAVXQZQKLQKfXLdwP5t$D&^kR@CgY9c9!?2wcHcjU=t^ZF?JgM5^C=#+|_ z3XMtijO$7`lBUu0uo|h_h6iD**}N)=kcMy;nXL_twk++<1=Rc%xNO&*OZXz=3A)1a&)GZuS_9*wM5puHVgz!iM6 zRZ)|$r>HH{IO7%@&Et-?i^%u)ZYUG(s!RY4+^$qhZnxysbec~CpO&M5>%X~vk7>3v zJtQ7%-P$qkHF*lDvo z9dA;5xa0s_Qttw>iaze#^WwtGnP)4{S9*;jo8Uthng+}zKCODu@O?oO?)yd4_o0|9 zw)%G8hyKLF2pkUI1-K_~-U`h9wWEFX4>8DRQ{8M$sJ$@TvN{>?1IkjC5QW2m=F0v*ly?{$yx*FmV!k(K z2UoeI4nn}TT`z&?S24zYr-7Y5vSJ^?Cwl1k`11+v@BRAp>vaqj|0y=A8;f79|Jz@J HWidYhe6e$U literal 0 HcmV?d00001 diff --git a/waylay-sdk-queries-types/src/waylay/services/queries/models/__pycache__/interpolation_method_one_of8.cpython-311.pyc b/waylay-sdk-queries-types/src/waylay/services/queries/models/__pycache__/interpolation_method_one_of8.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..f9f25c334c8e088672bf0b0a77b546bec9f9269a GIT binary patch literal 1304 zcmb7Ey>HV%6u(QH4+5n?0l@+X3^a(uLUgDqg!rne4p0yvBrlfnU9hQrXYS64jF8%) z3lakZQdcGrf{DK*BeH~q#Kaa8M2DRHza!5!8cXBs53_OJkyA)A z8)%)V1=|*Iq?d%PQ8hxgHS>dJqj5tJE;L~@)J1K6pFRxzyegSaCC|%BOCK6M9%azr#arh<*+hCG_6$89TW>&nKem7;_*Szd z_rRXK()FU08C(>LI?5~}+aK*f#LSi{2MX9dAy@5Q!Kqe~wSY_A&}V8l*Pk&(S6d^} z!PcD}lU|)AkV;8^6tu@FM*Hj`J?(H3b~i3?cLisz=*+j1EU&pPpyRqvPyOlwuye9O z?a`8>a7lFl#5(#sedy)ftA*!lFV_0?6I!!_)H(2o_xNbBmLi>LA8pZ;=je~^6PuwjsM3k!J?R-dE;D?)qd zMeyK3=+%=V_2gfYqbvvoPu?Q+lXouHKst6eDouH`3Yxn?pEQIT5iZ+&RW5hr;m1B0AZ**#3K-xaS?}JWN0buLs)6}7tmtW01Uwg6Et4;5K4H;-^uon2#t9i|Jxfe6n&286( zV$#US`&{=4jNZ@#hr>r=LhiKYA1<~QW^c^P{gC7xl2azvq+#acFW5m4)Foi+qu)m> z=vl$`!ISHAeG6Ak_0d1rAfHLKSf7xGVKsFHDGUhICCx@kQmuvDkI85Kw3b1||W8AlD*y=u~W{-dr@Np7u!Dsgw4w(9$y>ANly>dp|z?w!G{j zXuAjdgTEYv{?*F7fv%hN;(L(y5k-AOEn14KxYRFMx?hgUvE8?0r|-m-e#MO0Q8ljh z>(F;-C353NzhR*gx`t@=XGCkP{;-VDV|a_!U!wJ!sO=J1jlLt3h)nRe855HpR$8 z<~pW4$YPc#qC%cvKERjGw&f+)y>{&V&g9tdY>*4QF;Xg(y>6GomLv^3Gc;UyiUp&# z>uz$KaD^ESmBAK7L`oc!BqLEYfzv$Gk!f3bgCsD~K$Y!s?ta0OK{(tD1C={pg)E|Z z{iYJ2UQZNEuU{pS-OwRO{!6k#vqafW{a{XSx-Z$Xwzw;{Lv zGA%Kimal-NgqTBZ>g-n@g6GHDyJ`Ijt-_qz!kqeRbE;;JJDXFZ4Z1{^_uo3jf;zQ< z1ZGF#swz` zWH|^jfx`r=F~>nDfB{mGBq-b^m<)%44IxCZdP6d0Is{7+rx61RF(6+OOxivC;i+AE zI2`B{3Wf>1a|jzigD?RgA#Km_V5zv!gai}8!*G`+#&ajs8G@;o@tWz*leLB=oIM<9 z($CHr@HovB(;G_W0T{~1Nyoqh=sg`9I3tjKzEbm_?O?bXG6rff0al2InPRTfKYPDo z5-8x^t7CfqABX`Q1CQaZ&ExKgI#468#D;8J_qMlFebr!xln4T&fWoB6ghE3(aco?y z(|Le+8XuT48HmuhX?yKbUZre6vPk8P1~O**WD0+y=myQP13uaSs8|<^A(GuYLbF0DT0}? zd+cJiu3HrB?unH9nyy|t5ec`cn#lBh5+`6_Z)(S~=5e0UH_4?Y;4<^z1z zL{%G`#rNsBwCC>?R_|mCi>qSpUJ*x4fCAM8=)J66fn`9lPsBQ?P*9P40%BUWENg1l zEPINyXd!F;0Ie-PQ`@#mQ*;*LBI`5j0DZdnJVhTLoP4I0rUl7)T|8($*P};oFqsqm E2W&U7a{vGU literal 0 HcmV?d00001 diff --git a/waylay-sdk-queries-types/src/waylay/services/queries/models/__pycache__/links.cpython-311.pyc b/waylay-sdk-queries-types/src/waylay/services/queries/models/__pycache__/links.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..f88720b8035d79f6695b255a4317effb1c612e2a GIT binary patch literal 964 zcmb7Czi-n(6uxup*m0Vo0t?%zK-&z7VXY8S3KAey{1Bi@UMyo@YO80TxjQ#_K^^%I zsKn9@kQh2J@MmPmfIJ~Fb&J%k6VFK+0s)*AA_xsNL}E7@-}%V17ZK3MKl&ns=u>*p#L)bm6QD$BYmvN+upIs~Hn1m(&U@#rf>QwjW1)GPeL?1dwr zc?_6^RiQ?8i2R67AwXyEoQNmX5qS!)?hLrta|V+(cCw-a?c0w7D*puio|EBTXVz!f zdcI>31(iT0MKDV`bBftMXR6n!w90N)oLRR3$r-&ZE`e6~VMu-eGp=Eb$GU~}F{;dE zgs%?K>f#*hHLQ)%zm2U`b$>G!!fQixeQ|!XT5sY*^XTGXbF_TzC_dJYcRshih~bUi XXl-k_yfw1!92j5G(!r8g0kJ;-fBqa$ literal 0 HcmV?d00001 diff --git a/waylay-sdk-queries-types/src/waylay/services/queries/models/__pycache__/location_inner.cpython-311.pyc b/waylay-sdk-queries-types/src/waylay/services/queries/models/__pycache__/location_inner.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..3b5ea0b195f310e50afc29282a77233abe8753b8 GIT binary patch literal 882 zcmb7C&x_MQ6rM@a9~&uJDFttX9<~wM;B~3OqOdH8zeUI;WRvMOY%-IbnY8BS(W5u7 zJqRjz*rR_&4?Re(p1c)$+mkP8TB^7QhcJ2X`|`f`&AfbWwM+zSGXFMOVT67b$!68o z0bZRz@DT;bK>-f52*;YE;Ud-}JvJPpjE$%k*PS{>)Sz|R2x=qk)@80AdNd#Bi=aEHX9?(b*O!L(^l*EUO zOg%|XDWk$uG$13vW1_~CJWVJ&e0EF%?x!(j%2Od{gpbJn|FzsV&7-aQNw(FkKrTpc ztW+WoY@0(%FA4jV8!iTl`eVy9A92FCA~Xn9>CKNkDM{?H)Qh4FPV=j{It%C5JO&?@ zRwbmh*9=TUuy?q|X^^8QmYFwP7tZCnx#_y2RHcHtuFydvud6Hx*{Lv!q`gjD`c_dU zK}w2Z%DFC;$n}t^y!Dv-WxHbrH~1B;fJT>}>@kn2Ez$zCr(B%b({fJzBsm^BvN-WTiQ;rE*t ZM~l0|d3U(DasOTG2kOjGM_dOpzX3QD47C6N literal 0 HcmV?d00001 diff --git a/waylay-sdk-queries-types/src/waylay/services/queries/models/__pycache__/message.cpython-311.pyc b/waylay-sdk-queries-types/src/waylay/services/queries/models/__pycache__/message.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..e00cc2453b96ebe971f1b2dda10c30d980753ad8 GIT binary patch literal 1668 zcmb7EL2ukd6drqLyqgy?}ICw{|5;t=^1iBoS|wWpqVV{cYViG;A9pWk~kZ|2SW-kYC0 z9S6ZPo;>aI8bW_*<@~8vg7M-Z2u~129-;;{VN+09KTOeDKZg?xJwd2S*&`Fb8i?a5`sn!14RamGZ|!zlD-rP z$%c&FNg3b$e4kJejuOVRAd3ViqED{G5IoKTZCx{`> z0Km=r0JB%4riW>b)hWIXqqGi^r6p!PY*g+Dc{Xi;-7aUCUK8N0Q%7qiVh(N5HtjsU z^cvtTY69R(MPnA%(FgmSM&pRW`N?L)`@%g8B#-#OWl{^b*yqJLViS<~gnX%I41)Y&(g47%;Y_Di$x7mn{ksg7a> za@+SG!$I`|pf!9SO49dbM@PKm`wNhRRrhIu_YXe1BbPvw%bHo**e+||56dc$Z-D6q zeCXAW?ocGml_L&4;2sM32$HFrYAemRpqa)I#CVbE^)W>sZOyt4T+clgty!MJQc8xi zL3h5y%+Ia*)1BeaOLN(V7)y2q1T_M7yzrjl-3i`3TU$Tgo8a||PVo9EUY(S5f>%%1 zxBgt;KK^uqw<|iq+oxAIw8KV4CwSxR^4bqOr&rc~yYc&QS~FLy=LpzK&5m#BSFWAM zanN0oIu?ylf0T_Rpd$6459Pa{!u^QUAHb$H!!V}U zHt-Z_wt|dzCg|!SouRiT7ts{g40DS9o7u?t*qES?7U>MRlYi3Gatv#V{>{D@&$adC J1w-Ze{ssoY>SX`` literal 0 HcmV?d00001 diff --git a/waylay-sdk-queries-types/src/waylay/services/queries/models/__pycache__/message_arguments.cpython-311.pyc b/waylay-sdk-queries-types/src/waylay/services/queries/models/__pycache__/message_arguments.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..40dd11cc57210a3d1ecc12731f82627910c6fa69 GIT binary patch literal 974 zcmb7C&ui2`6rRauchi(Y%L;XGLp`*MY=iVrEF!E3D%e_45%&_tBczehH)tu>!dhhZ&8cjL^{CNrpj`JGVKcJ&7A0Up1D5>ez-Z4= z30kZ_EsNg1?OU%%XNe;cdCRkqXY6GPGTUQ1h(Li1K(P;KDetZEJ(ftJg(t!ei-ZrM z+P3Z2qd+kaHFnGu8$t|{Yw+1XiiqhEuonr$y~AhB7hW1ctho+E%*23g{$I*X+kSG5 z{yw|Lt&Bplt&!G=+H)L%DR~lfD>g!IYw$)L+kPxqEHnc@&{J++$dzIdk5e9o8CG*q zwyr~qWgg?hDOH7P{Y{LdQCRBD?BHME2+Nmi`=Asb!lA^hQe&qIa?n{Wny!l#yKZ5- z?jY5v1lN@{j42vAOM-YP%~DyLDK31}5GzcgWce40cGX}ULy7KU=PP*GEd4d5WwBc2 z?#bb_wdyOmL?^jAbw(lrN2W23!#Ni6$T^f?~w@>*;-Rc8i=saT4 ziu@5uNw0D`*AP{lGpodzSHkCHx0CG3dVtEox3kdE6rO zPEIx!_rx@)F(Ee{)=iFSghl9HPVO)6pRL=U+b26`#>wt^`|jDheD~@1jePg{d3Qf= T@1M60a^59?MbcDeRPZP(Y71kgHBDHWvp60=H~-nmG_aXt zDZE&eszD{IX`Y1Bu@ws(i6y+(1ipg=@-ZAkiDSRaOFrRc-{AxX?D$n)@oRjJA9zOm z1Kfpy*G>Jl(3)+ETcR)G$MgHOrg6A!ye=GS)2>ov=(tk+n4C) zH(pmJ!c%z)=j&}twdHLWfLZJf76B;zC=~i$ICXln z5Yv6$1bZGJ)Xp%7?GT&2fvE-oj3WphANyvYQ|k$6L>~e+L>~?wd3pKO((|V;o{nm# z_P~a0`*m2088lo|3xbp-A_$Bd1duR~ty~X+M*x+n2l4@^!R)N8-uSC!$Xfg6x~bk@ z-e|A2TgF-4*jV2%&dud}%eT}K2>v%xM{SP7mf4TEU{=#DV8hw9OBP0C;bZ;iaCLX? z@Ni}KkA-1tw@@t`6YQKGqhGK|4jaDRsHz26Z4aFs00TWJix5Ku09x5ULDBG}n3GnW z75KS!b<+1WMZsZlptpdH%NXM^sbMlkmK{U*>BN8jG#ii@G*AKA-GugNEC K|Nke>qL?q$dS{gY literal 0 HcmV?d00001 diff --git a/waylay-sdk-queries-types/src/waylay/services/queries/models/__pycache__/message_properties.cpython-311.pyc b/waylay-sdk-queries-types/src/waylay/services/queries/models/__pycache__/message_properties.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..3c298d764478805392f7c61cb59944ca84cf44ed GIT binary patch literal 1373 zcmb7EL66in6tk74nqCzFuQUR)zi)CWZOhgg~+u3bU z4}0hj=%Et)g0`p}dgK@MJls|}A@$VTAUJXAb22*`t&k9o^X&ItY`^z?&-vrjsSrWi zn>`!<;~?~}RgPM(o8Z^GFnNqPiV?@$$#Cw(4z_bQb8|2D@?P9)buaVtejH%rpzDbD zenH$9!S60Yf5F?ec)g z+*XjLGC<9vPp)vt2w-Iy0p6^aFg0o6)}ztxqtnZn$#u2{7C0x@3vaO;7w}6dMkjfVO5zn~+kdjVco` zKS}9BK-O*mTAxy=0ZP>X5^dHfUBMWvw)mB2T_@Y(qDhOnIsvBF@S?YWMpK!KNL2+C zS+pI5hHBkQA*Oekj{7u!u)Qd2SbDT#)oSVzw$dtDIHTnji*-?V0ip%m z6yRB~F)C{nK)9{=2qyX-h=Y~q(A%1MTQ5J`Jh(CQHoN}9+dTYqi+?F C(U#Bv literal 0 HcmV?d00001 diff --git a/waylay-sdk-queries-types/src/waylay/services/queries/models/__pycache__/object_data.cpython-311.pyc b/waylay-sdk-queries-types/src/waylay/services/queries/models/__pycache__/object_data.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..6f554b3790f44e0a47fd920f8611929920573445 GIT binary patch literal 2755 zcmbVO&2JM&6rc6S+TO$@fD;NS=`<*SA+gJ$6+-j_ngUTnfP|=$t9BXhjO{J^#q2o2 zRu8V!KY$w?>4mByhaUS!RF#o>i1vikQ*TCa;?y^@wqpntYVFco z8wfs|-R;`x3_^d&&ft@d8`^UZ8ut-J6+|_fa5OhjNoca2bdqkel2q-KlXBCQv}&gv z-OW@oZnlzjbCsNHR17t)J7ey6C9k0bx{PS%M?|wM|0s#jV|e3FWgpG0qoP4{4WX|{ z%ONd%qse&d92U0ALdI1$+kq4zGO3pM!9vtp}XvfK@$dmlDkMkc2#=J>bqY3 z3=jPj`2Rj)sG`BaCpO@?E6D_6DVo?$K7zT&@W!7?nx>de)90b95IW6lXCEa118*Ob zp*g@9Bbc#0m@FL!OnwBjZx1G?FcTw~$vqfDVfK$;4(!2xIs1BeMV#op#*Em=dNXy_CaKy+;VGNh? z5P}sL7U`Q7$EPxIAyyL`>)Q2(z*RU=*9MKW)Si}Q=Ii14d^0#8T@k{Yzn~}$YW=NZ zGMWthpb4fjv)VG{zN3Py)Q};Js(u&{i-l2|-4&b^C!(yWhD|dvOcP3Z(_zpaH_bax z2;~CM%a|sVY}4d$S0TPnroe=0j?_h%nv_%fr8pqPK`9DSOi7`Gh{n}TVM2;QvEgaR$>aJn1mcAhovS^ROzXP>rl6Zev&SC9 zjBkN4D;cwrF{^i$cEPGOV9cF(I0ZVoa~r*6Vh$J}UP#fo(nATUV<2D(x;n!151NW` z9T-?Luw-Dpb7>c>S_1~`nzh3;U4we<9o`Td<&^s&g%ikZI$!c+e&q7B=aIGnt9AcKszcxH2M|C)KD9c>l zu~9Z?QQ`^PQXv@!w5;hoCugVQxGO=(l;B@ONhSnT0WSZoMHBI#l;H&)2Zapd*pxYF zz097EbLbO(61wuT4u1#HOKO_dOJ%iG4@pr#+OaO08-1Rlqup1Z9dxMs>eEZ5wL}m7 hKQWH9&$KT3boA-z?`jYfd&Rx?p2^V{Z$MwllMF z9dXEkAJAKW0U$&V9Qhe8r^u&BoO*NB9#BubH@kN1v>aHE$M3zFdGp@;zM1u}jYf^Y zvp;;)5oJRDMrHDpGQoOw0K!A!lQ!`!zYtncpGtp9e$sz@Ejrg^nh`-3IzZ41i9lqJqUiRy^NVCDf zE4jl4Asf)IQZ5HuR0k1PTn1dxdtkxe_5BZMB83*72%9t#J`a^stKIGeih7{YK2x;I zV=kHIKJ7>mQQhP8X2Rp`FF&Qe@Y0CKn(08qRCMUt|J!n{R=YO!zBicq&5c6R^`6#= z+G@1~Y{`;fGml0{M{}>&tkre|jfJM%544HR3zAOfmSx!0!S5<3WP8C zRlnvhKB}JryW$rR>`~)ncZihz1EFIiRC1Mung)Q436FM!jF@&P{W>4fJfi&`k6~); zb4f*Fpxn(=r^gvsT_z

{4I_mRfQ2a2t5w<0ktoOo2;Ga(b5!fF=MWkR*_lO-n}C z!J`tX^!V-u-HkZZ(nE=LyOMVeD7(!K$~;dxjQbSXe`*bGIKLlmFtcA2+&6ozJ1>WpmB@rNSplg*WkQ~% zO7Y2a%In!ggi-|%z_E=Ozz%>wN#X&(i#it8)JbKlXF!=p!k`Je5)$fyJn!?`bxmJ^YrfGT(Q25t=bj8^bMg{uINMO`J#<7!mm z_qAlr>Zsxxv+Is(t_vhgLk@D?b??D_g$qDia9y}rT~{{X_>Y!ccjo2->lv_0yjVtc zb7i|gMYzG_GMJvhm%RA7)e{kK$ux$myVV!+ZmVzJ1)IqLC@l8_i0M_P(__lNyP3Z% zVCiJVtW^&ZaHXV|54NT*@^vi}qiSVG(!~n8c!MMZS%+9nw+e#lLU%ax85crVraiV-k6*v=VC(433x8bsvpX&pR?1Ha zbkDInypA9F)@0`!&9m}6D2PTU)v1K~%OV=ekQtm8X`@m}20n{*;AM3`msQh&LOAeJ zau7&(bxQa<0C;8Z!0C%*w3>}NlhoZ48p;Z;ICpwN#zI-e!PoM^nfgim1Cmt_G0(Dj z8>APNOE4QK^^trJRQL-()L+nziy!Bp=VVW3n}zZ%5?A;e0zH7l-q0T&`N>F?qRraPuizpTAHV%6hAw5;<&U`DWbr1z|dw$EY=DkRjPy#66LEPWw9>4m&U~QnY(j>nHW2= zApV33seeochAI;hQ#VWP)QM*&ts+DRPN%!~aqqp~``tTQUUmtt(d4-Q%_QV^sa!65 zCKzW43f~DQUBV4+Mn-IQO{0`+Q7yK*RwY}J9oM^clx<#*8nM%L3<4I^p~)M4^X_F< zf)+{ys4Hwi#FU~jOEMNkId*ee zQr9x3ODw^M6;y?)y`Lax6q-9TJMdHd!t$lP%XAih-haoU3|Z}4ALfshhZDiW^fIMjpc@euM3eGWO&hK;GL*N$LR(mN$DT1(T0?<0A>KXrY-pXp43 z@5>sNpVoDrhRK1nN@Z=P`0zRm)KxLzf6TJ@*=;`WSbz=*x!vBMu zp_^PBc>@uHC$j{<(;Evp^v2bEw9~wet&PF})W1xB`xGCx=L3YHml2Cr1dXYb4CYSn zD#bj`o5A;HkbUfe`J9f;Sl5ggwVzP>*mIZwS3~NoH#y~Z!+V&RowZ}Mxg zm?QAq?QJ#FDj|QNGJ4WUM|$xybRG~&bV4O6+ma*evV{GVopKaiiTjG3c2r$;GJ3|z z>e<+qwkMpNo`=3lGj_o#>czO9wI`jDUW)q@_LMWNPfJ85%Y^2BAvDkOk5hzf!kaw$ zK3cdzszpHQm+h$w)He|egS`(JT0>&*CXm`MZe;4ka)O_vJ474@oGHwb+wI=r*O|+PH&1dep>sK`DHA08E!W5S0YF<-2@ot|yk;^TQ zz29z+{SJ*D*A`kr_`&IV-Gfh>zO^`v#^W`?8m($Bcfr$KPiTxVMLdJEAsci z5Isd@U7;zKrpg&W%Y>;ky`??|MKYE_-gYV3YG3BlI-iWn8X92N)h$zxITA>HF4!*(INh$+l z4@EPWHee-Y^E(#!o*S^vB5IbqhU9Wh2S_;N?nl~&C0d$quHmSSsjt;mJ7vWGINYFH z+E3c5=dvgZ%*P!IIw!8V3@0&k=$N9>!s+OjHPpSHFRz>jz0Ie(l`?#cOi1iO$Zut4rd1J$r@`s0||}N4KH*>=j63!Ghku_ zZicoEt4ngQ5Ug9i51w{JTCGK@7futdKobo+Cw4weOx7!9%ASz?YVhyNBu^#wlg9TBV-4oobmZGc?n++q%83xp} z&}Pst7{(o_2S)GJ zt7!Y+D&URbV14XjIIo_R_4-hSvqs@#`z6ddjKo`D*ua zPpKyDiBjz!TX^(IzkGI(l8>v;35b^{y2}G1r`6X2hCo%x+~NCSzkCDWa|oY9_?+6k z_!=4aM)1n}57YhfGQcYcuOPglb}#)4{2jf|fB5KPf2!OsuME`C<5b6Suk>lkZsj!hyinxMG)^AhO6;>mrSwhFSNX#ZQssRIP za2wW;-*9L1EY2z=m+$z#iYAlM+OYa@{Qo67I5ftEDq%wlPGx-Xl0!JV7h%Cg#tSe# zVGA-nS=0y6dzC!{GvJtg!Rw&nT^0NdVvv#~X`o~!Wk67riFB+-j_z#RWPfjW8z_n- z56HWS9Fe|~dgRNUZJQkL?QVVYd2e^?laG75+d!R@VE6ZmhxO-ZefgH5I1m2-f+_WF literal 0 HcmV?d00001 diff --git a/waylay-sdk-queries-types/src/waylay/services/queries/models/__pycache__/query_definition.cpython-311.pyc b/waylay-sdk-queries-types/src/waylay/services/queries/models/__pycache__/query_definition.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..cd4cf21a4e8020bddf0c3a6b3c05736a0f9342e0 GIT binary patch literal 1034 zcmb7CJ8#rL5Z?9q?tBhW;1q?VTZJMy!Nr1tM}#5;MM7zKBt%GVEaTnFS+Tv&?)rkM z_!saCKu8EtQl_MIks`VZi7MSm=~6N4d+35lfwfxCeBbWOH#7TrcGgDl^@^{ZLj$4T z+8KY$YvjWZxXtjowW>(0=|E^666L`ARtJo0n$GGiiNCn}7YWFlme90H>MtG&A< z6&&#&gdD8Q=hcUj%_Dtrog*idV48_ z9+X%gJ!@U-*F6u)_q@LCd7VsUf_a{(K!AQtRh6(iKRHW~sGNU0 z&D${dUKlX>FX(Sh(u1~E1rG$Sj&Dq(P!fcaA{dd*B*f^RGpxZG7Dp#q*V6pLdJJS1 zu?;Z~vf-5?`3<%~1!FugEo=^u-sTa$RiNeRH82fq4A51Zbrn(Gun@jepxe{y6g@01 xuV2lZ9~;H;z3)$o<@+a#4}L5ium2Rs8z+x;ip8Ci=I;BsQ?yW^1{(#(i00936>64$K&UDGxI*?{eI(Lr>9*6 zZL`=P{#8ThU!|NhyBZiz5*R#06nTgm)QpVS^h`sIYf&w>JS(<6TkBTj#C5M8H@rsN z^qP9kj@-EAO~Kfq^=LYt@n#HUqML{|enzy(rgkCj9=uiaW~qA{bz8(S5c-zn5y|m4 zBPQ|{EW?;(OoS}M4`4=pmo`7dso;_aJnG_@Qx;`C*S)h5W;g&1Z;=eIvxEsE8O1}v zV=Olq9;7U}{`DaBiJ}}%^GH>uYm_aLz($>F)-}u8^&~H? z)i99VTIqhulVP~7w9@`OWDzZ!x1|6TB-l1@kc@q$>hs8~yt%rnw~}-ugR1nEJVkvB z`a{H!X8`i%UBKI`nTT1`+^_8dID7C`&9kY+9BN+!Rqp_#_ZzzqXio*x&8q{}4t3QY z+Je#4@$LqlrZaSQf9?eyG^qnTxKPgNJU>fhD07|dc2|EeC6ZvtaUd9gi-{&hjwu_4 zNvQDb^|s$xBQaCBD$p~@1&}~-=ecdFw3KCm2vcPy8jxaXC1AO>y?7TGhhrv*4mSiu zm8+M1m}MOzlTjqa4A^haD=5Cpr1$^>PT%7n@fuH9X(?Btr6Snc$(`R}1VHmGKyfbR z=_rEJ`1f*OB~Z2%yIBC_)q0kafMuo4evpE6-Lm29Y2Pnh-v|1SA_n6r-+ut)Q4T<> z`##Xz_eC9|idhwU*7whF36?IXB}Xky=}Y7Xnoi;(Og(`YJ^QV{!DH4JqXaHfe~XLz z{Vjbvm(zS1YP1f+e0UtRRRE}#$B z7pUQfipjk+7t@fg7H_~H+W|2?^Bh`N3+w7p=h6-!em`oYOA`FWh2cgfwKl0 zs0vL@)lLOO4{F$hKTJ;%0se!csjOzJAKK~lFJG%xdsXpt)ifWgx+%b`^xlTiv&J>p z4W#-=ya%ef@Y&xWCN;w_CRW3+CP;}kGOiS8;cP!bZx-kEiDen)1igxIk@1O9ppVb? bBlLdpe4jWi18{j+?ELgt%|1P6NuTsT&-4!z literal 0 HcmV?d00001 diff --git a/waylay-sdk-queries-types/src/waylay/services/queries/models/__pycache__/query_execution_message.cpython-311.pyc b/waylay-sdk-queries-types/src/waylay/services/queries/models/__pycache__/query_execution_message.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..ce6139b7ce8fb810cfed25287615190944d368c4 GIT binary patch literal 2260 zcmb7FOK;mo5MD~ui;^EnWIJ-}c9Ar2RL2sE9ts3OTjyalMdGAL;sU%7GzMdfy5o{ z#ACntpwIC6?Jx}Z#ctP!EzQ7Q&QIgBPDriowx(V6vFC@F5<8SF(yC1zlGg5o3{>DSw|3d&^ri^U z^Froq@`@R8dhMY_195klGkueCZf?;Pwk2aC_L!HUzxI$?k(iawxIuTQV`cfu_!vHa zf&K_lq$>cS!aV?vUMwK0lETyCW600+kwc}3FQ{EWpY>r;*nPJO<6-|B}XKIsY0&F$_Pz2*t>8S(9I~+2ZyaK32S*e zOQf5?Nue@wN1e2s&DdKMt9Z1*V;)jbA>umXly5GmT7bDNpT%o?b2%8saKS&~HQ%GD z1_c>V7D9dQ%^XMBXiANaaCi4NxC-Fh-vty;2YwJau!FG?8=mRXv?+=kB20Z|L6PdoeH zCTb_6zSeAtGXbV$WuI|AzRnGo#C{wNJ8- zK@s5CjKYWk9GLjfWK~lQVq$usZOK$;@Q{Tzo29Y?S?EB=?g(VTcZF4juc_<ZhN`L*hUk5mhLo?B1buas4$F0Pd)i&lZN_H!I#}P?_=i8Z+`PO?`U5AJsFLo}|wiL1OL{O!nU_4N>rg^{RE9!wq zH(W(mdBmj~b4Hs|gfwn(y42>;{GCP0gqMUoirv^35fx2(;s3V0V4C$&^@r)G?l34M zz1WK5wwkjn0b9Cle`bhA$k~{Ct*U7*2pWl)a^}Z5HZO3MqM;ilZV;q!ns1t!D$d5; z2qxxG6}Y4pC80N@Eg#@YwBYSapkE`7Yz)^>VAw9Qf=yV_HW&ed4ZF-tR(VG33L68m z$Foy8#kI%WOEeR=xl-;bzr{N|cyfCG+-znr{xDh1h#xgYR^D)B^91k$2EcJDq{f>G&R3e+&JdQ*3Q!*kZ7Bcg5aloVKBqlHM?BjY~=y9AU)BoUkIOilBQyl`;MV}8Id3oj4-1E&B zo4v}JZHOUF&Nz%YL)EdY;y95Ta>vO`#{oD=pzR6AS%=OVW?*;t1|V!K)NVYeXJoN) zb15sY%r7?<8}-bnEiW%E%fnFhJ(5RsalO6NAA7EJM%@6_9sRb*`5rm{Wn!vZ+ZsRI zUD!HsqFdk6Zl7S|Y#;5T2IY0-Mzt)D!>DmL6KEm8Ep^XighS6u{b!LMa)9Hsc1PHD zDpv<*y(Z5HX`?>heD IFUcItPYV!ukpKVy literal 0 HcmV?d00001 diff --git a/waylay-sdk-queries-types/src/waylay/services/queries/models/__pycache__/query_hal_links.cpython-311.pyc b/waylay-sdk-queries-types/src/waylay/services/queries/models/__pycache__/query_hal_links.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..8bb7cb2c2fa135dd2ef7d831026ccc5c0450f461 GIT binary patch literal 1457 zcmb7E&2QX96d!-C*GUv4RuDiz0|+&%RcvvMDxjrmixgTAMMxHCH1*78t=JxS#!hNZ zIq(PcR*qZSh4sHiL!Y_^Lf_Ilr8WMl;4N#Q(c*%(X7xM7PhIXq1pJKiF};w-ALlHac(9&Ww54yohtr? zuESG+PVeg7zP7uYycuXx@E9;} zZB@{itH$9EOG)nx`;A9hKOv1z2+*cVIq0i|Jb6Ts>b0`wq6>SD zY`xgA>@Dj8j#4t7Plk&l=KI3#ZG_sa$%LjP)er#hak0??D_beP{O8)ZRMZ z*!;=)`Q~(Ebh#X9&a# zEsl2eC*Qt^cW1aNbxe)HxGF0NRhRmYpz(^DQ6NOz7PtkVd84ac0M`!S9R(UTck8RiWAxA2hhsWC;LEcbKt;q>2q=6Z&!gIyMn?mpAr7q6IV@9__{nyFg= literal 0 HcmV?d00001 diff --git a/waylay-sdk-queries-types/src/waylay/services/queries/models/__pycache__/query_input.cpython-311.pyc b/waylay-sdk-queries-types/src/waylay/services/queries/models/__pycache__/query_input.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..20448489863a02cca259e4685f6092a18abbc37f GIT binary patch literal 3634 zcmbVO&2JmW6(5qz6-9{>Em5DAtdV3XB5W<8pl$&-ZR%8!VkEJf%7KA(jMbVmq_){F z&n~5sZ2=y7>>;P7y%g>xMG+rz?6H4AK>I-HwN)3r@lA4E0K~>Bv}og-uHa$ z`@PwJ6bg9)&vEB@?b;|IU!ssa*@#Jf^B-V7C5-5VrC8cdIcYteLOx?>97R_ouh>~f z)m3LiA8~Se&KcE5r9NxtoiTkJc$JOV1!qE^kbKUbbc%XW@}u?@XG))veBPdRN_t81 zWA=;-30UzGfWebrggmn1)FFFV)tYblZ@`-Bz$NZ1uV{#k~Q z&*2w6`U;ymAmwROO%d|YY}#g%e$e2ed7Flo!viiX9?++t!T(#wJJc6m=v6(tOdXGL zJJ9m^2S-*wt02)6GoW?ua$$y?(VFla8Xj?a-{tMP;u^6F7JpWpSU>xGmvE0k-i+GY?? z$8;N}Z8u>zU*XA=Q@t_M1xLBm07T_ID+tR${DFK!2R^TYH1Po5-9yV|-pL-k1JF#KYd&;CO9n>{)u<36 zdRF6mP!69GPV^MidHO@BZatGGTw!UJd9Hj0+xZ-~Bp*G?vRq~A8z99#BbR(eq)!fg zSX$4qQHaRL(kL4PX*`zltN_x)K(@)}#S1fzK_#nfDvlUu(;$^%slaAHnjMIryR@1K zHV-}val|BB1nKHP#L}gRB3lNZYjMOCwgM83Bc|9YTVw0buV28{G)n`vHhOu9sJpJ; z2wQ)WJY~FQxt4@M4a(M}F%V4Gw40$-jWE~LC_Uhuns(sPM^Mg)py2UYk)x!YNYrYU zS6Q!sO9jE&th{NlpD{Bux23rKo4|9o1@{F&I>ujF)9$sl<7%T|@EW4ZDJ};w8$;i6 zr6jXx<#cZZR*ps68)H1E3d_emw2Bb|fYRU7d!EaCxg=rhMlyxN5hnk4f}R>VwHD%_ z0c<3h$INrQw64Z}Lug4n3)UcpT5}f>l=vw%!Jqbk0#wps7D}|2HEqibS~KUcK_Ddo zxnolp=-!$=caXSBJhBZ$S*s9XEYYeb5|gbzKfnXFS{!>I9(D+LrIC@siMtKw2^VNQ z#HAh52GmNR(fjUM#3LDETQ2|3<$w{}7_kjK+~*>MmR_a-v<$0eaS>?AYlOp0Ry+cJ zmdAot@vL(tCOo3L+xjc^MOn3BMh*ZUKvZ_ zQi0YC7Y5rpeDu3NJU+Zh8yF`~EQvgf3g+!u2NQz&EQr=w?7*FAP!2}?U7zO~>FoX(~Cg!o+CJkfYwgJ-unii2I70hD{$*1)>@oD`zRNkw9D}`gn+%m0@9P)cmHH zfptoP`wIRBmr#4)ub(E_hv_~+`eJqS*-W=s>a2ax&!pGXuL+QsNZRl8Njj^Z6EK0O z61wr1hK#rm5fmdRMo_iAckV2?Btm<={ccCuiN>k2)7`n%e!rvKipHsOt9yN`z1vZ? zqH(HhbvJK3<6rFlTkUM_pKk8|cXPk}PDj~~#;LN80dEflEYbE}N1@R;RcM!PJj=o| zVY4$%x}VLg!b*X>MAF{xlML=HAz%VAM^@G`?OHTWm9_5m^0T+&EIwx0z$_b>WkYT6 zo+pr8l4W^ycr7ocmp{4PU0D9&t$)?w%u0A>B|Ni|+I|oJ#7^?U?v<&~K)|}MHNu8~ zN*5Vas89@mTA`qj^P9|s)>xIL8X;f=bL7xE8{cJ6N*Y{c8X^cjF$H{z14g1N^6Z_hlXCC1QiF;>SN!Wg(N#5g)EU2qt>B}4&T=3|$7{LKXw3SVRJ(IqC(T!_t4 z#}JdKn~HT%=}_MWb~{l-!(42@_G?5vUfvzz%HT|cR(W@bsll0|I57>n2qXyW==5I) z?%UiOFbg!BpNl&n0&Ym~5zu}nl}h!MTuSK^Bqfqs?~t{@@q)~ChDTq?rT}F>jEs}i zFH#-y=HPfiwmQS3OMcoJ9^K&(2=9`gbcRQFc;&E*F1gVe9$oUI&hY4xA9sewrp8nrK9VUnl+KSC!|^Z)<= literal 0 HcmV?d00001 diff --git a/waylay-sdk-queries-types/src/waylay/services/queries/models/__pycache__/query_list_hal_links.cpython-311.pyc b/waylay-sdk-queries-types/src/waylay/services/queries/models/__pycache__/query_list_hal_links.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..c064518c64880b2e05d769208cad53babe90175b GIT binary patch literal 1620 zcmb7E&2QX96d!xXUaxnPO(BBtk!Hk)n$;@1;u=*zOK6L<1Q10?zF1SwY}SguI^*5o zio+f_apHp7Bc~u}4jlP2HWG)(r%0T7+p0bF#2edLEu~V$c>Mf+Z#-|_yx*Job!Ejy z&?d8!;h=`l-wIqbqg1pf4k-5#Lk?mZ(*rHk9bHp;EvSXq!J*+81;&9H)*TCUgPB1i zv>jVRI=YEi{RhM>ZXLrK58*AF(`1dWQOBmHhS0Y(3us2Z8gr5DlGG2mUlI=xIiivr@Q4eVaz=(C4oN!V;32$aa}0*L z$&9N2nd#J79gtNat3ZtkH40=`$SzP*A@JN}Ew;i|PukDX-eM-uzLsAq$R7AIt>TvV zE`vtY79<%$Mrpx*Mu0Xy&3e5YOCAhi?*SK0UPtyYf6_hdhgcy0`R zA=4Zuf=_ZB@$W!~l&80UL&`-EA9ZT^S`sJY0E))FlerNMdA_ddjC)W<1(pf*xXcZh zE@)>Zx7@<)y1DJTP>ADzgWhu8yFjCI0I2S|P;jm*RQkn=inHyyORU1ssv2r5v8Kc& zB`}D*RaCd@6{L$-!1M%O^z8TkC=PjFj3cP>{!uIr`$xsG*-5e;I4%<(;(U?m`7y~3 zcdBy*Q!i#LThlB7S5kP@V1MDFn%6H+U|+$^4S+;HQwv$wXUdo#RM_EWs| za>Mznn?LQIy|MYn^*;~hHGSQDj6gh9VmeTd*u02yzta+L0#Kw5$LUxAjY8d3xs_y$ zLIrvSI|ZZpYh~hlkh2~f^`5E&xR8XYCbY|&WpO_9b~)O+$WT$ZWr`HLWe}G^duCmQ zU!kBr6z>64CsH1RnAbE-n`2AEbEL#N(%zk+cb5Ac*ED^OUM?)8eXPyUN6Y;jy+8YR XpPNn1oTLAW2kpno`t$`u#XkN4pAgmR literal 0 HcmV?d00001 diff --git a/waylay-sdk-queries-types/src/waylay/services/queries/models/__pycache__/query_list_item.cpython-311.pyc b/waylay-sdk-queries-types/src/waylay/services/queries/models/__pycache__/query_list_item.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..d911f7f0dd8a96b9643a74bce717ac92f3671ec0 GIT binary patch literal 2017 zcmb7FPfr_16rWwM*Y?^5k{DMlB-%hKuvBassTUNrC50xa1h*nlrLC&fW@n67>>p=l z3|XrOANm2fCC6M!Rl%Xhs-K`oBjsT2DN;|lIZ94B_06tv9N^H5XCL!s-h1=rz2AHM zUMy+|#$NBZv7sRJuV79`I$21seONp}7#RplSau~(He^YxQ*O#r48=6lks)yo(e zFKcAIoRN$7(yr#^jRLGyoN`>P!U%N;(;vZ(_`A6Gx!$4y5A49L=w5({%c`1ozv(dD22S6%n7%`N zLM=|P-k^b}^Cr>jE#j|!zoFy6ZhOS%7Iy+)4;uQyhh4d#X?I4}ABH2l!_9!|i%rg3 zY^7EU;7Y6IEDgO0Xq6MYS<$q$K=%W#6YTKVH`}!s(>=>?Tdo_zYhH@TRHP_x`5+j( z$|`b{TJ^(7S#xY&Nk!T>f!}a;1Q(^hb%=|j+%~7c0tMaNZHtk6B0ewW#9A?q>fP1N zO~>D5b`t%BjuQVj@J|pyh6Kr%A3(~Dl#Gai<>S;LcpnuIWsOEd9hd{Y-}x{tUNpPFd&1 zmgN!QnJ~h5K*9JqTQnMT5fa`-zsw+A$x7rnodJiE<-0R8!2emSqzbrO9JXtx6%vn(?-2Mw)3t zJ+@r}>w;-M0yGN)z-3Gm>drK227IAY;z5(9IRa2r?~*DufDgeVcZSbXtb3 z*YKgYztx(7M{2a~L!H<51G-z=j~mBQD_nvI?K$A$MO$aj7~WkPb{0@Q)fnI9VGB$# zY7Y-xcY-SwWboXittxj%dT>3Y9(caV~=s;>}`H-dE62S`qd{ zlBN=fZ*iXXjx`o^uw6ukzFfI*|p+Y}N{MU#(Ih#{09h5t5)icS+{TOqc5 z?$~jf6I8@7FDGfNLI$ePI;#Ru(BNrKXiX-adeqmVa&lTtLf^F9q>SV0O@c2Vlejns ztGC%(paB5=l2(8ft&IHxWRQ|1X`o~!Wq<@JA!)vc=Emm>G~2sq4irU_2k1kHhNQ2h g9{Os0zCbs7@6UlcAwh!AlY{yzvHRwNqxhx&0e$OBvj6}9 literal 0 HcmV?d00001 diff --git a/waylay-sdk-queries-types/src/waylay/services/queries/models/__pycache__/query_output.cpython-311.pyc b/waylay-sdk-queries-types/src/waylay/services/queries/models/__pycache__/query_output.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..7e995ff3e04bd43ba03f1a27098f5b6920713790 GIT binary patch literal 3636 zcmbVO&2JmW6(5qzB}Iu6Em5DAtdV3XB5W<8pl$&-ZR%8!5;U=!%7KA(jn$enq_){F z&n~5sZ2=y7>>;P7y%a_dDT?@zV~_m{3JU0f;K@KwxiN@OIrY8SU5S*8qU~zv?BPACvN|U2w+r37D%aXBVAGeNxWz_LNi7OL9JDUvsAQX*n<0Gfr7A z%lWuH>&)qMaz0_tI}7@PoEPmyXGvd@^GW-2NnRL(6liSEq0M zZ%e*WC>)$ef7&{a8w))_w~xcn5AIg09xQ44)=s<|PiP^p9ajp4J&(FxNIA1Yxwo2a z1_5#je@0bDq5O3+LbQE*!o^3T;yaG^9@A10Xw8MLihTsjk5J=0h6ryqAdv+o( z9SE=KTW&)tPD~qY)t_;faa^i!DBsYb&uhR=lDLP!)JsOJq3B5{ur`b&!h=gSej*CD4)Y|zQ7~NN6)e>SDE@2aIsD9icL=1 zCv9P{!+)Ye^i`A#Y6@Bf)e{yA@is2y`ut(nHRvX$KyC4Ec-@3Z9&2Ida;m zgsof09k0W(8$N3uJ=2t0R3a9;qXV*pk(?S6YFPB#h)uPJJr;&u?U zG4?H2ax#imN%wQGbIjWQIO9Q0SU#SiU5X$8l>VCD_gvo3Cjr~Hk|i9DIQfqY^wr3y zy%;+Ufg_1LZe9SUeLc1tflFdpw1z>{p1%yC#7?OT{;Urau#y&YkfZ&qXQ(+QkTDiBvt6pltvCAzrZ6=2!&rvO@qYjg%B_+-*8f zxj^L+ZtaLRAy)#8K5)-H9!nS7a`}Iq4(PFi9y?IPeJ(<%=@lA4&9Leg7lD?%M!3vm z$2qXGJQlP|=cOxA;T1L9_8+k@;#T8?iR0Cx%Bj&u#~cm>B{x}!-G+1zppw}fVSvf> zT3-rX1!^;N47Ppr_*cJqa&((E(NEr3;&~J$%+c+mB;mkJ(==Mq+Vi-z#}}pXNwReX zkF|CT8z8Sif0KORn>8Nvv;3E# zFe~ML-jHI$=obtFI%L!4FrP4tXV70T0B||O0N@&iP$ARA0;b!PVGOk!P%WZr3CVRN z%Scv{P$X+e){$%=xrt;G2^R4FgzU^lO*SgA1)^`@N51`Y_1JTGRWx1b(A85C$g+S{(x)ZF)R&RK7gUa8z&|7eg&ud81ZAg_>g-W!l~R=psg z0#+q-^AAnw@c=w1dQkMBYG?n#Sk4j;?aj_ly2@@e&XnEW?w!tuUFA+R&Xha7o7)@YT2c7r2%0V>Flmm2lcf?_tcJ{jpjmDWmdvx=8 z7Pbk8opsWKY-SC13gi`%&cT3W@N5YI6|i}-x`AQWqj9FJ_ik36zZ*yKG0G-J*~BQD zYG>~vfSe^!R@O%M@^WV7)4RRJl`r4K9@H4VEt%jI;?+M3aTsq!E908PWzmyTl}_i?KQ? z8Da`$)3FRv9TMEYawkftn2!}$e~qZf%jO}j4X-q;mCZv;53dyYi5ZYZAVFM5xBn*0 zzRkY{t3b8+p|}Su;D!W02Rg{4QmKKGPbmX}q)bv9U9vtrUXuCl=ol#36rk+?BNHU` zqg0o?Jv?5L?e6I4k?(g$M{m>x+2><{9 literal 0 HcmV?d00001 diff --git a/waylay-sdk-queries-types/src/waylay/services/queries/models/__pycache__/query_response.cpython-311.pyc b/waylay-sdk-queries-types/src/waylay/services/queries/models/__pycache__/query_response.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..2603335149115ee088dc9c05c2d0667dfea4d4e7 GIT binary patch literal 2269 zcmb7F&2JM&6rZ)%YkOlSfjH(PAPoc>EE+pS>II>;&`_uv;+79pT7*`MXPm6qFJ{IG zwtC2+r=GaMkwZmQkwcIDGd2|mYfq7S;!>HyiBsRqI>rGGWj*`+-kUdX-@N&~H@}t3 zCW2=p-fr*e2>mUEy(gD4+N)oHd4veE5Yb4+)BKE;(IlVsvc7KVe$LAIhGi(7?&bZ0 zRq%^e(Kjtq>2ltLU$V-;8zk>d`cu}F;tSrif51AR_@Z~vpRr~%ltEVzF@Hv6f|j3V z5qbu1`dAfGx`AqC2fl=Ubh@6?#Xoc?>z>EL^(m*!r5xV}jr>2e@fnU-D8g3g)vzBD z>hZd1-duM%Zh?e19gf#%K$#;b!EF}$SgcdrjA(H2`)@G`TOFSU!Vzv5;INGsKJJqX zrg>%L{cd;Ucc=^*KC>=F#LqVxA$-z_+{IxuA*&18TCbVra)^UaU`kw}VrzL0=h%0G zj^lY<*v$)>nVObNH~|={P04@e8 zjV#J!a(n72?Bto;je4vinFgB!(uN!aZbors%On+$W`}DhNR=EShqsTs1HKX|1Ne>( zb8(&WC=595ow!aT2G|P(#}4Lhu;x)5I6gp1BC%VqCx-0})0T5Q*Ws)T5hOXK?47&O z<%0SWsv9nWRX!CCafE~001*jD+5G@{p{`>e*F292l3p}&fL=TxuvbkvA&d!9et^P?8M{C{mRur zHgnu~iGaM8Wb5((Wpc(_0#hIw=+Lo;G(NK$SDQQ4=JRTEYdO}N>DbYm{gVq%PWPuP z@yYMN;kFCESsTgz{KDQ?eU?og~(VeIJD{^{D*)mX2kV@I#;&K!SuzJKKSAD8}I z1Ai6iuOj_bjI9;nw0rg+7B@ktU<^KX1WHn72=mkw5AW14nn~%}S z@v*yK9G?PypzB&@fIfzpNc&2Q(U;?67oCdtk3KpV?;m}%81EkgV_E}jy-yxCUrO!k J4@{|?{0C|hnhXE{ literal 0 HcmV?d00001 diff --git a/waylay-sdk-queries-types/src/waylay/services/queries/models/__pycache__/query_result.cpython-311.pyc b/waylay-sdk-queries-types/src/waylay/services/queries/models/__pycache__/query_result.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..cf0d911b1d923e39e419ae9d36dd159e515ec8bc GIT binary patch literal 2127 zcmb7E&2QT_6sKfac4X&cUDACNEr=FFVr;Ro%ML}cElswfKtHl2MF9~8*r_)c?PWdnk#amcD=r%Lx6YjpGMw{a7!50QneEq307T(Z)PlA+q{Y?4|@qq6;TmSG4J5z|F`9`=Uo{`-|3IzjwZRl zD_x~Bd9l^vuqDZ&)e#ylnu>+phUaZ?oN|R3jg-L_#zab-khDkQxDTg!t~1lH@)}9u zLjzTU>0FDXYS_8A&eKk`yAg#dFMl1en8M=BWg^*iosZ{s;k{(C_|*dz_Vi(|Gbza~ zgHJuPa5c?(3at5Wnap@9*#=Q$i>a_EOCiS$>45zhG2~mo68jc#!!Oy0In+KVJ%PeK zg|~S8GIf|s%a_2UE@%~_RY9B48hBNxM{BfxFnfXtRXPVun9pklAmHl7YQMjRzn4%e z3h=NPVQpf3O9CBqX**mbL}94A%vcz8BB(o5MlZDmODPj=%rl(=sSB>>1p_`wg;yx+ z5ZD9)aok?Nd3|$jeLJ|l)owKLa&!OhH5^0AwU^mlG9^F3jD%gh7pble6$#AuQo~eC z9z?QOdRzyeUBk5>Tv2p1+;M(J)0Cy8{q z+E{x6IK4}O33xA926+Ke!@)@yazVjIpGe0Xr(m3e>CKLJnm#@7qDGkvMPw4Uzoe=6 z-3g}L$sL^*p&LwIHsJTqm=8_;PBQOKUWMzdIViV(0|y{G-)ofeg^Xvt7_Muu(+^UT zuzXS9a2CROj4d+~GMSgz10~3f#!Oxf%zO~!UJyVJ=*0~5dJx=$8>AzERS5#P>p>t~ zKquxk#Q7kYxKOa9*`3!-6A40dr^G3kdI>Lj{Y$IM6V?*F6q-qEkBhslJ=2|5v;Hb{ zrTYf}KC0@q`Y$ywFUAe0p0Xt6a8G4g8_jjm;K96+&wv(2n8W&x-X zXF!oZf_OOb8``M6VGog(N9UJ+{s<$w>_VtT9codBT67;?(?4Io=}(2YNL;mANz;b^0p^(jeJ6qM8N!Gk54t5T-*VRkl1GM{G zEQ6_gpZpWVuw+@*(5YI^5NWZ9tP2BlesUb4_Xg8r=#(s|(tnF8vc9wi=!?m5gf0)J h$07Q7Fg*^@XM^c6bZZt={NLhH>xG_u^_C@b`ZpQRilYDk literal 0 HcmV?d00001 diff --git a/waylay-sdk-queries-types/src/waylay/services/queries/models/__pycache__/query_update_input.cpython-311.pyc b/waylay-sdk-queries-types/src/waylay/services/queries/models/__pycache__/query_update_input.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..94d29afd4051cf1fb989ebae47150d6e9628f2e8 GIT binary patch literal 1668 zcmb7E&u`pB6dwOvuXjUISdc0;(kLlPSCCzy-l7U<2~-sjKs2gkgsh2YHfw5o-0?WU z5fVA@2lUn}rvhpY969kfEVsy~NSu1xsy+3@n{l$;mPm;4_<7!YGtY0n@6G(Ou;3$T zdy}J4Vj=XmQqG#w42-AW!QcU+C_vPpW@4mfU>a&{C01$&cIpI<*6qYiTR|)J0#EBs z(oX%L17nxAl5V;XEEvc{Hxc!ILbS~~58kPWlRvsC>{x(VmW5` zi=1WGzr2MhkIIx~lE|26n2+$<|NG^d@86t7->GJCPmNsQD`P41Vq-Yu@Jo`%>!;ap zF_0`8_kDkpj|cSykJcaU?&SixVIHYax&;n(m`mMjpiwhu(H3Z)(qM&0+tjC>qwXv8wy6p9F4RjplkJ=W zF*=`vzW!h^5G*+^wF?u?b%iM##aXOq8Vt4$*0!M#aLOdn(?8 zDN6yg2z5QxF6=eVc7?5`suNRtc|}Pk<4Dt?Iji4lkRAX?132#k#WdVX!cz+to9ktE zF6-AD@1Q|P!y?pe+yJ8(Z8BSi(R1$_%!aCYUt9(i?nhMo31Vs)hB380!=54~ddOIv zpq2T4f-X(Y>r>k@%qjYB;UVKgV}d@I?sBiIk0HIeIygkzjHd^iDU$iRPuA znWaeNz(Ww^7$65FZr;e}uwHNqu4<@m(I~nl zqvV#2vg}u#io0NFP%pBQv*=chs;rltn!98y$$G_Ec2|rQSzmBg-8Ew^r{tA83e*0m zutlzYR#22L;Fo@kbyj_>G;6e!Q<%~s2YDQRFIOjhFyJ>piUscDBk@%)HzW=C>u zmP5mkxYUcO5xYB)(bm)7@+N-v-%;YjEh@B(B5fh^+Ox>PFNk=q7Eo& zzvdn&A(fRLSSn9_=p`K6rwUh$9QaZG6Yw6R!19L53cSeF_dq+Z@Dj_j;>*%!u$C`y zJ@R9eSs8RHr~`-!TY#39K`hQ87FZQ@Y8joSIUP;1E@yOB=5!XN&T2+yZBC~u=UUI` z)aP_+QfC8oz=9=q0akZ$(pqMhpmjNezcPnkk@&YVI&aVEtje`s&FEa4(^-=`?@V;o z8DX1j>*e=6hlU4PJDojD2l19{+kJW(+=`~PzNV@~3L&EPS^DqWZQRQ1Bo5I` zNLbH!kHBJZJCCUobK)QUo?DOpP5}uUEra)L9ZZpsw7Y$Nvp)YQT);JnD(tCR$pN6I`0hrqg4pc4VG4DJI(f#@ReP zRa(HKF)8Hd{x7W#71WAgqvhFwJ6OJF!G-3*kGSBN_5u3NWEr^iGNQU24zb0b$F|@s zsey_a@&LWw7yaAeGdm#M4WeG^ZSw49#IS*L)Dvcs8W1K+k`j1K$l8h&_0zw7R}{*6PZq&q2^TfG5wf4fedL>-%FNdv-8+ z8v%5R$o59P0H{J?O$J-16cb!at}$$-XQT%`u?$O;0!<2k3K#Yu^Bt*=hU%j)uWbzu zhw4^ZUa4E7&E1oY(Mo-sS2jK>jEjY>($@-z*C+;e#!8`Bnh6+!W<_Zp4DJop>uGtV zULS2WPJRF^qxut|*hY$Nq}VPE?#|G%Hl^6zKlwx=I3RWrv5Sb^(%@I;AodPUVu=U< zv4@B~MC_FY_s>CqZAFQ&0I`XPO+;*-Z`e-r<{h^)%~=*Qujw-DVLnT1I`9=HjuM%{<@p`=jpnC3y3BnnuutY1`p0##g9Kv zchdlbjtCtQdTFR$d?Q3t>ev2qb9DLYKX3p0>9~-u0|vxv6oY&C6+fK%(}QMRG@yZD z*^c2s0f8v+KY^qY^ceLb+mdmUMqdeGWgNYb28RxQt;3UA$C!poT~u&zIeo#OK6sOh z>8O61QB7Z7-~#_6O0G;svq^cXu!sulQ-#bEK~!;MZ8DNZid=-K!9W@?7~QF<`%wF~ z@*ZeI;(1@Z3r%<=E8!T#xRA@`#%d*}jujMjCAU3Pwz6fc7IXQr^8bmdlKXjXsQfHj szEs{Fo-HHg=J0G8Df;ki87ce2vt?Y;a}dMx;?L&S*!%hoLvlyH1K6WikpKVy literal 0 HcmV?d00001 diff --git a/waylay-sdk-queries-types/src/waylay/services/queries/models/__pycache__/render1.cpython-311.pyc b/waylay-sdk-queries-types/src/waylay/services/queries/models/__pycache__/render1.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..17464aac39d51f7fc17fe23ad710078bf40ff90d GIT binary patch literal 992 zcmb7CJ8#rL5MKLycfJjI5T&78L6IEMopmJ%0Z$!=5cI^^3qgG5^Y7nrX z0hHSV^Tt^Pf{cBcx#)FgcV^APNQ0xsd#lEuBW2qEc z1R`p)Sa66`m(mx*P_Y0lw(Bdl1qn!B17`y%Vy1_{o}`fUpFU(<1X&D;_H`%{CI)Qz z|4J@X`rthKW`3S`N(#wVhFYg;&2a>l^wY32RU>3qLojSpdS9?aXa+pgrM4jQm141< zWPTLoc$?$m>DtD4#!v8IDOI6af0>|Y1g(C>13$)g7AG4UkZ_QQXoVi(Ta3x$_O)@- z^YGH1H>RF9$aE&b^JERf#togPVX`Hy!nj@;9=z3%D6FGo@ioS?(>Io70og3L#Y>!5 zSkf*W&8m3sD>*@voPKnMA_hlh2{y#p6>{6zEj!#v^A2`)Ck#OSi~7^2_;zRd1u*n1 z;v$RkF_n_R)ajh3n8rDkXs5bJubbwl_Fd$%2=2)xREyt_sBgGTYKCD!FMG`-c$HBqYQE#!n&T5{1TH!|b>?=|*oH zxpIOdoDdRs{*4@Vn0i9uv|FWd+6gD^Mz>~_xF90O`M!^z?PtH(Uosg5@MqWmR(~G{ z;Adc*Jei&lj$R1>d;k{EfhAZX7Ko^eLZD+fMkHMdwS?m&p(nVGTM0ZyWL*yR7)}yJ zS3)i06iMspP$zMQsJa?z1!qZ4&xJaL$4Oq#hdPZXNI@@zI)g8fNqsWZD!xpLdNI^l zJVi=+NdQPf2_##&x;S;R0>FtfMAAb<9U{3Qk{=?4Au>5cibJGymeiF$(dt*M@u#4Y zH~B7t7iJrqZTPr_SbGC{HbE|8Hge%>PJ-|3?mTQV>d_j-6-cOsusf$H&leuAg#lhzngMKQSP0N{<3{KZXZ$x zXB(c^bT>4O@+r-xUF}Ch*_?-Jjf$e&rO=@sM3(J^vDL8Yx{#Po%fz_NS92JovLbX+ zro$b>P+e}upF2EgE|Qx)j;uqm=b3$i91F1rdo0#VS)rJFKznXoq!{3mlX`zt2~2#0fb5tTiY>8f!WHcxii-?Pz=9d960vRenx) z?HY2U(D^pk+Nt&rH1B%SW03Of@}XQ->o;nrL-hM;y*z3Id7f*wkLBB(w=lZHZt#ft zg#z5~yza&XLFh`dAay}d6@W19gYsbMN}?ck!9|sPQA5~62Ev*TRtL)gSohDC|Bd{} zh*o8%ne_?_DS^B^1d|vudVJxGJf+{ETxKXm2MFTGd{S*$~=L;0kZ8% A6aWAK literal 0 HcmV?d00001 diff --git a/waylay-sdk-queries-types/src/waylay/services/queries/models/__pycache__/render_mode_one_of.cpython-311.pyc b/waylay-sdk-queries-types/src/waylay/services/queries/models/__pycache__/render_mode_one_of.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..e1140246cc4c079634b2a48bbe253c02a3bbcb06 GIT binary patch literal 1399 zcmb7E&5zVJ6t^>(kEY!&6k1NDRyn{R%|u9CxQtKtNl& ze@>rz2)%O3JL=Q|-unrJ9mLTXam>90r{37ZPHrWw)F1m8dFVXi{(Z#TqAmQ#K0?o7 z)HLq!&NbBUvJOV*1}hR)kgK`S#Tv13DvZ#vFyszc+78g41?hM zEH)$pjm()Lw}cd$S;5IvtCZN8Afrskv%g#}AhgL+heh{2fL@G-Jk8PD(lrUpR%4E)xq=4JJcF6Q` z`8kuYuu9c{>aWW@jh3)g6O_ae-a86>2MILBPzI0Vaf^FnpLcotzCUhP0Qbt(4I#PE zmjR}c6r<_gziI=~YHl1B72cMm8DWx>EtcfM49T^bngg~;o=P$k3?hK>qKuN9LqV7% zu~GkS9TIY^BBC;fu^|I8ffcj~K3OA^>pB+`=cxlyrZp>^15&B%S|th1GiUmlC8l1? znPrsy8XIS>Gnx#`;KKUZbL$&)V|1hJXkl|L%a*Y^f_`eK1riLrcM^mhWcT@gL$@34 zF-XrF4cZc4>3jM!*i*JEJX{%!NT$XuB5$9DGnI-^=Mp+DoGZN<&Z`z4WW@klcPoyB z`H<;-pW&N>Wsk$wcRTi5ZIMAJqobuWY(gyeh4t4E>Z;1rX;euV(_vPWT}lBHO79+d zuM37t$2V{xa{$;jda?S|gVPV!e!us}z1`l?J+L7MLl5Q(i+-o;1! ze?jRTXyT;@j)c#RQr&eMzXbLS=~XAMIOhHz6*~xm`2pB=^DI2n9<>(8@s|g`-M+N& zar?Uk`UtC|x`0>uU3~~;qE2hpR`e>?k|4>+r2{s9E+ Bj7$Ik literal 0 HcmV?d00001 diff --git a/waylay-sdk-queries-types/src/waylay/services/queries/models/__pycache__/render_mode_one_of1.cpython-311.pyc b/waylay-sdk-queries-types/src/waylay/services/queries/models/__pycache__/render_mode_one_of1.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..abfcefd9506ef0172c79af1b0cf74256f601ae77 GIT binary patch literal 1373 zcmb6Z%Wl*#(9UKbEELL{Q?cLxi?kb6;zETGh)2bNmY0OI7q5xEY-kb(+vyU7L=Rk$ zIB-BJUjQobF+E2@s>F%gqH^NII9a0dIxvaH^YA=8Gs(M|nKlAg-TXLw;UM(cGC!eF z5_tO}5bKDeKH``=ABgDqVPYmwV`F>=r%;_h?A>!L2)w=O~-V3p8s@Wvg~X|e`J z=pM^LmXTYjP}u@8K_s+Lfzad;NbG)kb)FB0vQuIB&Yr_EL`fi{W6Ass`4* z8mEyzEnBfcODy2+Il${kpgx8+I2`wD-08c#$?MPEe!VDgE1$hBVlLDTDARH*mWT6C z-j@=h&{Cb!(!zg^74(FmoDGU8%mf| z#d%E|<-^QWPy-4U-aZ4wIx;(SPtn7QdkfTuii6R^OC3k;0-L;ET-ladi*TszA@Y60 z8_7s`Dve>Pys=a(-nbakZjyCjJXZr>=)Z}6*J-}eoz5|s{X|sGo;nj`@z&m>Yl{;X*N;!oKTzq_I$Y{B)j`;8TEi5k0n$>o{kbdP z8&US>Qrw{of5@^`O5a=O%d1>aM?qnmtXBX{Y8c~*+rsVyS#${Dlbh(o&UXtP-u(5Q XG#VH({u8~@Z?1f`@^61p7Rmeo?w^8# literal 0 HcmV?d00001 diff --git a/waylay-sdk-queries-types/src/waylay/services/queries/models/__pycache__/render_mode_one_of2.cpython-311.pyc b/waylay-sdk-queries-types/src/waylay/services/queries/models/__pycache__/render_mode_one_of2.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..e34b0223d9da4ff4ced450db528ffb06fb746b0d GIT binary patch literal 1441 zcmb7E&5zVJ6t^>(kEY%7QCfNdta5;8h%VphZ-IrQMZ~=HfB2hY6e5!FFaE zREa%ssls0cJiiaW=jWfF^K@-3KtQv_ zi^;-6=r5=2Q>Pa2-ghAEB92CgW9}t5^+q0caw}=2{>aD3Lst>^A0plsZQ(!h5qb_^ zO`{I)Y@&XbbudD=Sdp-T{FDn_tP>lj!U!D;L+*jajpt_ z*pLV`GG~U|5mIPo1t$}&QevlqY-B=Sx_OOo73Harmf2WIq9)|r|6B505L|7t-!7WG zE2Gln{M6datcRh3C0P~^R@Epyv?7}JgW!rHQduH+Y^&O$gc(CpCUce~1?=W;hfE)r zA2JCOt5OZ9{`WFZqZMq`07v2o@0|v|iv${BI0ld7QHy&cpLcotp+9O@0QbtHKMTo) zz78;LNU<@wc>kZ;LbRG22Sx?BWobs3#Ql>R4oChkZ>{=xW&9lRk zIkSwiUt;6Tbz#-ySVl?C1+A;0CKHjHv88h{9+tu7jq5irUEZR%Hp`9{HrKLj8LK1c zyM|gI!H4(01YsB11HNC;-9~!?((^`x_Qf~)p8f!0%60{tJ1!%ViE)$2>u2Fqr6Sb1 zgw71-N^ghrs?`TsF@P4I#gQ=YGQH_De0#9E3lO>=anNdu3{n{#t(;+#VigzGww##tk`3$yXjsn|3e;zsh_^aR7e|zxg!J>D14{XQ* z(Sxx=O@+X|yl=QmyO}&+G^+|BJLpIyMmMx6&((hq^i5xqD@Yx0W;^6xdeY!aOE;}6z U6~E0Mn?J6+a`u1U;jD`J4};U3Gynhq literal 0 HcmV?d00001 diff --git a/waylay-sdk-queries-types/src/waylay/services/queries/models/__pycache__/render_mode_one_of3.cpython-311.pyc b/waylay-sdk-queries-types/src/waylay/services/queries/models/__pycache__/render_mode_one_of3.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..4dd706dc6606a03a76e8fbd4189b53609aecfb2c GIT binary patch literal 1425 zcmb7EPmk0#6t^>(%rNcprv=&*waS4Vq?riOOIH;t5)0x`wq=nj&BbeC4-+=AgYE1z zs1keNg2aJCrR^u6Li8i_L+m+HRivJJn`$|6;@JtKh0+5~{QUmpJwN~6bADS{86X%t z`@c{B2oU<)32#Q!F!R*@e{p{q4w(_9##Q(?$G(71JV=K?9TvMN#8kmQPs%!~(v zTeH-V1SB$NhTIWSXl4Z`Q>}7hXM$`LLSFvZ5jP` zwT#;;l_sk*YYVd$#|pM&MLKG;QF?4eG8+yCR}_)T62VjJb4xO249S@+S(a6BntvQJ zLtKBvBz)*oH6VuTvdohfHorhg+`tECfbJoICK$>Pa6IYoU=s2k?>-DCT@P@-K7Lb3 zF7$T*(}olq(~I~2YBUYdmgR*ZOmZSvG9xYUs{nMF%OL?=8QEc32~}WPvuaE>XKD_p zJ3E;P2C>bUkh6XeRXB(Z8Ii5jDC%qJw%A%DTUS|T#FjHPZqx^K7Om!9&zWVE{gj%+ zO0BYtmOjEQT{ZzynPepwbe>AC=F}7-aW39IuA|NMo7dMj>qrY*YFT%T)d}?3a&&-$ zi4V>Lvxn><+t29kQhEy9^Q8psif;@9eFS{!uE)fc$B1ld+(+cqvv{U*5$jSyC&qK7 zx8u2Q?NL#U0NI^15$1iWcWs7mkJ{b`*Eb%AwYDlCl+j6RjF%x=zqq+2vG&!cPNGV} zoL(FkRo$Z$K%w;h=kK=1xV4;yBbnnscF~{5K6&!hFKdq;Jbtj>KXU*&d_cR zb)QnnazSZ5pl-7=bNt7Y-h=jTEwCqCL`rqfIUWV_4C!NzUvb3!Sv)xbjQJYK?($g# zsC&1wK#smxIkkIr5#sI_3-mvviRuF0820q1u)4ISC3FL%rCs^!P{6&??uX>h&}@Iw ziOZB;^}lJ3a!G#%23KUW4P?>57%##;4j0IglL(*PM_(R(U!YU_Z@-Hu!jSQQ$rJPI Nm4BW7<$H`inb)<+m5BfV literal 0 HcmV?d00001 diff --git a/waylay-sdk-queries-types/src/waylay/services/queries/models/__pycache__/render_mode_one_of4.cpython-311.pyc b/waylay-sdk-queries-types/src/waylay/services/queries/models/__pycache__/render_mode_one_of4.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..cf6067df33730d6bdcc4e2cc8e0c75b3ae02e2a2 GIT binary patch literal 1504 zcmb7E&2QX96rb^WKUfGU5I#=ji6FIGb=N}5g$N-k5(*MYpadc9Wp-kZSrgmi&Ww{7 zAvK3ykT~>!6#jyus{AoITSBVDiQA%Z>WMeDV?rng#`c@{F>l_R-+SYqmzIVE$HD0@ z;c|zN->h&xdNo7OK0xM#1Y}AA8aOdcoT)=C--$bkJ9Q~>$ZZn1_eszdUEw}-33-fP zJ*K^&_XQdCd5;qE6)$35z~{M8#X6WM5n8B7Xt;|SJ6}I|2Qnp%^kqDPL?$%RM35=PGB^R9b^>SW2K}IW-<@_VfCuH3J0cB) z+CrFiQn3@R@wXB3TB$+FLx|9RgcN2d>Df)-X#j%zb7;zd;Bq+NagL?nO7UU>u#51X zo0Y)oh%h=r>=7MAK2ojG7!~d1M(BxksY9HH)R+Ar=6hIM2oX};MhoD7`va_217v3F zs9_AVNJ~~VjNwT(TZh@M%EioD=7Qs~S(UFfVC&>bTA7rLW0qITKjN{j*9Y8i#*ZRx z7b6g}NxAg#=Bqn<;bvRk2RtF1*GYP$%YKJw-=5uVCZY;5mPs(tUUx+&wV7$f!vkuUVK zRF`c!*dI4n30==UE^1AY;Z|DtjnQkjX#BkT(s`B6&pAvgMa7u|KMcyo8K?7s+w^EF996?t)nQWM%buYvI!F zn+x(Eq~6tTxIOBtS8%pzg*kQurloB8OIP4ERrdc@ouLlDV#PM4r-S$Eqr9(PM}sZ0 y-bb?NP)Zl>fMQ0LtPr|-O5VEoJ|VB3{_|b*dK5GMH+i6c+W5oj|9pnAO6D)D3$Ks> literal 0 HcmV?d00001 diff --git a/waylay-sdk-queries-types/src/waylay/services/queries/models/__pycache__/render_mode_one_of5.cpython-311.pyc b/waylay-sdk-queries-types/src/waylay/services/queries/models/__pycache__/render_mode_one_of5.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..510336e9ae283bc046ca0ee5d894b56ed0b2d121 GIT binary patch literal 1378 zcmb7E&5zVJ6t^>(52h?EltQISV8H>V(oBR@4qa8Ks9VrVz|yh^X)az9J0z?V2iut? z2#Gy#sl;Iqm9~EY6{7qvdya&J#EILW?TJ&LlVP+_dZ-gWzYqKQz2AGup9>3p1Y@%M zSG4UR^u`GvMyFx$-jBfSAdbd}W9~_udSeeez9n0!KlU;5&=th}Cy2L2Tlmj>gkHdG z#<;^fH_@QWIvAnbtdy)IzZ623OT;FrFhVE7ko%x<>$%B!l51sEsN{g8iVJB*{r*~< z7!ra+Hkl!JMJ6<}f|E$Al-O91)m&tkZmbZl!Xg!!Wj0Y6Q4u-&|E@gS?_ZgFzf;cr z&Xh`%bFsC#SqcILSF$`A&Z1FzWJMSc`u$}^GG&S2iLGM`B{PPkEGw9lC1mr~Av3_$ z7c7H~b*KhJ|L3eo!x?P#0wr++@0|p?g9I95D1*oGxW&D(&%3<+#2>e7fP2;AuOj0@ zUjvv{GqD<7c=)o>5C%}(xhFzPBFI3nFa{ZrpVW7c$SniVN0M0!xpT51N;4wlOg)Io z9hQa+$$DZGt&3(^ny)XB^)+3Hb!UkasE7{ZBxKSVE;DHwi;2}Hm0|*g{OE*MQqrRK z(rg}82QFW|v__X#ep;(KTG&EoRm)f%LgUOw3pki~?^|GYklkl{gzn9yXTZIfOVEG# z`oPl%;7rw?Fj)wPw-GWjZWDR`Jcv~)0$pU#TEV8$8^LDXtHZn;I;4_Nn9r#`wHdxK zoHa8X{cvKx)|NTAGCG_YgSm^@xu9wLK-cA@PNFJ<8C@9VW!0q=K%w;E*PqsVG_xFs zl*}TKE%fT}(e3YkU;6Fw)5p8LlY5{;4u~GCH5!9X)uS|Hsi3s#Q+HV*9ef`pQDf$o6 zcy$i154!qGSY23A0o?#$X;=Qr7x1BI_lK!-Xs$oz#Cb^Xdp|U(T+}DP;EHTEfJ|E$ tgHTr7z<9FKWV2JqNWZV3){LbnB{*18><{xd$gf;*G literal 0 HcmV?d00001 diff --git a/waylay-sdk-queries-types/src/waylay/services/queries/models/__pycache__/render_mode_one_of6.cpython-311.pyc b/waylay-sdk-queries-types/src/waylay/services/queries/models/__pycache__/render_mode_one_of6.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..c020fd7d6f69d2c73fc9a6f439fb80d8b513ac49 GIT binary patch literal 1392 zcmb6ZO>5LZbS9hqaJ5>set@8ZJ+v$A20;oI5ye*BgVv9Nu$SqW%$l@GCY_mVSrP2P zi{Qb7P){B!qW{1@(Q`l$Jb7EGr=EP1-LBiJ2VXL8-p9O;dG96f$HuA%ptJR<{mw$@ zn_+gL)F<%vH6S*Shg!(Po)zNAYFXIOg|HCWEgK^X-9n!I0(nJVxQgL?x$RKXNe9XuDA@iBC8-V`*i0bNu*&{N53&)mp}FhVs?|9`VxbB50-fjPhD<3Eu{dR6*oE7CH>!Kb zV4kW1)}D{k$Q_g|-=HN1@b+228;GM8hBjCpZWTPMWqW0>_`+@#^8#10@drHixV!^p zT8Q~Vd*R}MJJ8oXaw)=)roWvuvIDo9 z^AG4;^TuLUl3b@U&I(FP7shA^1)yNz?F&F`AU&dchL(riCQu)T984p=TeIW=u*r%Y z7N*=(U-7W5%ptP#!SO}J9ht^3XwI6DE6!Rzx%H%5H>C<(uKp(4uT$PieK6W!x@$2i z)!hVKDd`TB&d|lc&gp*yj?9}&4M#-`t3A_5x>=c0C<>)dPw(%3W1u++S5o7E*3p+E z$6jB0GyC%StLIylv)dp;rVtg_^J>&eS%uP=MV!*CN=>jdH1r`#S7CYw8i)zs8Ktsp z3=aePfaDQFj~Qfs9634)gt`o9efab&RJ>W}A%nk;pILAAY+O9oL;pa1ug2lsT3H^4 z-K5n{VHzMUY1*IJ96lRq{x|s@`r#)GJ4|V(a;1NjtMU{mOq10Lpk4uE+_Nj#?jeIF k5T4vZ=SSbK=)~6Ew^u4*$oNn6TD_h7VdOvmqRf-|1uaI2YybcN literal 0 HcmV?d00001 diff --git a/waylay-sdk-queries-types/src/waylay/services/queries/models/__pycache__/render_mode_one_of7.cpython-311.pyc b/waylay-sdk-queries-types/src/waylay/services/queries/models/__pycache__/render_mode_one_of7.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..0b9111e28dc7de4e7e3b56a79c30cd8f6de27248 GIT binary patch literal 1438 zcmb6ZO^Xyqw5q4)Ba>|0B%7F%DfF;Afte-{5QY#UuF8VCMh5~Dq_*s?Nw-to)mv3P zLoWe6cnNs$AZ&htLG;HA9vcKhPTnT0Cr^3RJvOT`hrI57^*-u-)O)Y`kF~Wf0+=nH zPM$dk{biXq(5eW0^aBuwC_rNr;J^_$cE%32bVD>^ckE*1pi3xl@1dZ{o7{cmBJ>2l z3dXIVbp!Rnk8 zyAn!8wnAf4J@h;YAz2#rSJ_B4Fx(G&-R`y|i8O=2CmZ@rB-3v(;`>V2*3$(-nJ~{>X5OFld&;}>K<3`|&-Jl&b@44eR5wew`-) zS684+y9wW&oIUunk`M-^xOJQRhRh=ql9(G6`DDs-O(t+8&ioKIKr3ctG6QlWlyhy( zA}y;n85XAlLe7*xWNPcHNuTV&4q7(S?${fWy^+fJp4EgAbV>PPl=3(=c^zg@tY5h>y1sLsUc7v6M7MX&kBXM! zCR0h#&_?+%b2T)8f)5{k4a6Zb$8^7<+cozHs3$cCql>Th9Q6U%6wMhE8Mm#{Tuijx zL|#AkLK$;UWeH5BH?D4bz?kLP6D+Yl?i;4vx77*+LS_3C_VV{-BB5=G+)4x^g5us==q6HAAI|8_}iWP zcNU#fM<7GC5FJ>{YV=w~hth<_oYJC8ZLmyO`XfsBVboU|hzXaHQq{JG9|L-f)Co(k zS!Dk*CHe#iJp^>OewGeuipCOI{NiM9;chHl-27^Z{sUERt;egqw)zZKo7W_Rae%y( z?SJ8NxMa%yoytR0@i#16=k&VsU3Hf4)k#p;F6$|vWdmcpbUWBxB8xTt^Cz{lw~si07!qC*#H0l literal 0 HcmV?d00001 diff --git a/waylay-sdk-queries-types/src/waylay/services/queries/models/__pycache__/render_mode_one_of8.cpython-311.pyc b/waylay-sdk-queries-types/src/waylay/services/queries/models/__pycache__/render_mode_one_of8.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..88c3784617933605fdbec3c9a146660617933f86 GIT binary patch literal 1389 zcmb7EPiq`E6qjaaXSbU=aa*U!$ra5Z*~0D+=pi+w#NgTl5<6*A0(;TQBW-7F&1fuX z)@&%)hg&wo1rq_E-Ui_SanwT`b5G*b>v`D8HCapjo{y1-))4ofAYK=B;lJ<^ zI)X8wUciH&QMGDCh9nb6D%P6k?~#KwYbN|1m4lXbM|3K}j6p(?#G1NT42uGI$*KYTWDjyus^F{9e5RxLMBs zBr-1aJ%DK=6B~nDk6%wLB*_Q^G&Z+HWXVA3lvzMC&0*_J3794}t}^Y1oLLqQZ-!zB zAeufYa;X^a5^}8~qH+hUAsy0BjG|QqElczM66vopX++<-;solWqd19}Jnu2F+NBbr zOLN|#m6Wuo;yl!a=y%KDm-}}&mRHI^3tQ-{tQo5#=%E?aK!Sl!zX9O@*)zW1(AG?Q z0n*V-gI2`rZBKs!Ys&hN$wD~jjgSN5J|gc9!&s#v)I|ne7Vav&9qv|b+sQ{AXxCv9 z3G*@2hd#r%JJY^~rSDgqwc1e*p^T2E&TtlDx-OjDfKXSJrB0(NgE6?(%|~T}QUHb0 z$5%freRt~l5{_i%f$gI=mp*^??H@}|_kQ0yZZ4jJ4LKm1Fjr`_gR)6!#!^9P*`jW< zLOS_VN_U`jrykf7E*Yh|;TB#5c8K&PC(k+N{u&kg3ILH_E3GbHb#!0%w67J z9s9Wc)foK;n?!X1*V_&K1^(WX=zvf(id=NwENjqXP9ii;M7@4@0#CFj`D-P z0uEPXvkh!q!x)eKCich3u?2*$9iy+$z9;DN@%eWg1Q;^@H+yEDue^2kzdz!vlKBVd CbBD?R literal 0 HcmV?d00001 diff --git a/waylay-sdk-queries-types/src/waylay/services/queries/models/__pycache__/render_mode_one_of9.cpython-311.pyc b/waylay-sdk-queries-types/src/waylay/services/queries/models/__pycache__/render_mode_one_of9.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..f2b0e54dd1c3f5ed2135acc2686e11bde026c072 GIT binary patch literal 1275 zcmb6YO=}ZDbSBw+xLRAaew^xH4>m%wh+Y~*lvaxeTWv)l6t?5;#H`)j+0M)+qzLVy z7r{dhLj47mQh!X2vLF;Zd5gqTPrlitq1Jlv?arI`G4EsEd-Hi@#6$qi&X;;AgV1-) z96`QM;NAluc94r|$i;5P$3do+!J5wc*}$k77-i5La*ZwI=2(syy9Pr0u=-HTyZI$l zD$qPe=oM}Iv`wDJOth;+c>$A5cubNtkm!A?d7DInEADW=L;~(IUsg=>MZ=TC0gkk& zByU*A1Xau>b-@Fo8jLJNEPVLv330g-2P{-nc|0V%PHz5R$eX4)H}w9xJ@h*eazUmV zN=342SsX&r$SV)B;i96L()g9zRt4MyR-tPnDp0^yM^n zG4&-|sU+E%rI$%wFcph1$x0<0=<5)&K*7SjTR`j}bxijTy&ZD9KOtCfyYIck?-gqohi8?ikAl=IG{3*TA{!UGxvs_orRWmkQz% z>^h-(408Yp3ElX_U@*Z#Km9cOe&BJ<4wE@7-s@lDzPJhs-Cns0sGG$Yca0)8x=5pO jgeN=b#_|6EUGDt(ck_7+8UKy8<)_)7TK?-4Wtz-yODbUS literal 0 HcmV?d00001 diff --git a/waylay-sdk-queries-types/src/waylay/services/queries/models/__pycache__/response_data_set.cpython-311.pyc b/waylay-sdk-queries-types/src/waylay/services/queries/models/__pycache__/response_data_set.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..9549395d7581edf631bfad2ee09435b08b0e4c05 GIT binary patch literal 1251 zcmb7DF>ljA6h1pn;3>~UWNKD-#m8lcYj+>;E4p=AWd*65O-S^Hf$Bl-C;5q1j@2r;)`jrKj zPjv*e^B(}dq5wH4&;p%mOm}oG!zEf`hGXQ|pk-EZDuByDg;tsAm^rS}8nYZL$0nU& zb*G-=8f~zq)6@_#NQKk`tD`@-JQ)GgyvCT<80#w2F(wt9*fXRNB4xZvzaK(L2TbS{HP`PYb@4KPIK18_ZNxVxUB0NO`+!35% z)g^c{Cehm4*EryQ!bqe%74iu44qp7fBNr{})wudjI<8xgT;QdyQn6gIZ4O6zao8^0 zaIvh2-)&je2FDRsm;|B9z4_FW5;HGKJW5mO<}AD3mNuC2BG{N)l@OLcL|_^~ZEeJp z;7lLwY^-yduxP_m-ZoLNrLnoQM|?FQtS#P~M2+qIItyZe-n4EFs;&#SMBAt}lkKVN(d_%Pta4Zw;ki4xgxjzylknuum5 z&J~%0_a;hhI&Cxr6EXWM3}&~8jNy1vbny+H1C1_@?Jj4;7D)tCVE4G#w|n_mwd1r6 zl@3Cm$bV6PYckkx7jp-xml@M6Tm_Vp!Y@R7T%yRcN3GeSusUvGIZiLkRZtU3UW)tR z8>S!0tb<`m)3l*sYQ_*{ue(Tl+(!%3YiQ`2K14UY%$tNf!$jKiK6*C2POpX_ouViG ztLyrnpLgz^8jZufqlLrh#CVutcC^)RJ~}b*&B3r*DlhylmFM&?v%@;lR{Q9Mn1{aq E0E{JhJOBUy literal 0 HcmV?d00001 diff --git a/waylay-sdk-queries-types/src/waylay/services/queries/models/__pycache__/row_data_set.cpython-311.pyc b/waylay-sdk-queries-types/src/waylay/services/queries/models/__pycache__/row_data_set.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..7881152cbee79be99658768be6260d27bd80c60a GIT binary patch literal 2542 zcmb7G&2JM&6rZ)%A6eV^!lY1|b`%c8BC*>ZBcO#urL+)QK7_O_+DvxF@xp#FGaKWm zhaCC`a4Pp6C>2!dv44gm^)^Cr#7gr0DxylHbfp$&J&n>A+>y5b)5>SkR-IdmD(>d%PQ znDHc!&@=d^k9nL<-b9TlQq&N-LwYXh;qN2Hdn;Hv9utf^OyCC~QNN4ZpW%=PGOz=; zfxUn-S2PXdR>u+81`cQ@~h8@bq64g9vVwdU9|E_~%Mm%`%2B_h~0m5&#> z)OvO`a3jzEni0ylxZ*=jKyPM^NOF_Oi&AoDGm=bsu4TeIj!%Ow2nryGJRoLo1l?>= z{ak$L2s^D?Iv+sm5%7-@L#77s%H0M~nR%Ksb(&`ds-J^Z;EJ>WTv2hXbg!JcK**e+ zC6JeuJcpP;C!QNm01eOJn?7cRRzRbg_^AOkndw&P6rH9s&u8BPRgLBVRL5fDF#esV zKraUXBVR#-!gd6cO^k0H!b}MtavMv&2TFK|ZvfO`tckSPJ{F2ftiQC3OXXn-|!Y&f0( zej-QSWdIbMOUK75v7o~qrg>g;nyh)4Wzooj;LHPU@Q;Jdd(4)jFvbcdutTBVP8))O z(orUCfW3M(!^DnIOZFclU0r zD_^&MM{xnN0Ou(mPlrJmxv*zzvuF9lV{u(|F^HPcgcl*PnTQMQq2#178JDd@Y+12k zSHvyk#+&n8IbatS}Lwyzk2)HI-gY%xEv6# zt4W>RxSI4(3vv%Fh0lTL6@1Z~Ut68PV=W%3zR~Ii{C=yOH0R~8w+t!Ub|BvOiQZll z^!{?zy}@*3aa1aMA-EFU&K6q-E;74T+UHvU3`?cfQs*}8@hJ#2ndX5If55bRDbfP28+v23*hGX zkNPm5YZPB1m|m-C_wo?s3dO?-mVhmy!bg4m6pTIn)c&#gM=OJq^M79YYYWWl%Dk@3 z>&4xx>cbaC@vk@L_{YGgVz(n1aVRg(D?t&G0}$uBV#;BU5&*NElrE`cJeO9b2?=e& zZPQd>fjg0xl)+SbxgA^$@u_sRnS$5KPORmqBJ&Al@?oYi%CmLYZ@Bu05zoD?khU9M zQHv>>L=&tdk5`pwKGQ#1ytIm{8zulv3#qV|rsOnGZ_4Mu5MY0SH-S|*fl%`>uW8y) zFKhY`si}^%(|xpXbnK%K`r~7$=QTjWe@|tkeW~@)7e~iFI@cc`1GLf~9|QDxe|!uO f?vIZFy3ijV!(vSX481!&`sAgOzJAYAlA(VAnQIcE literal 0 HcmV?d00001 diff --git a/waylay-sdk-queries-types/src/waylay/services/queries/models/__pycache__/row_data_set_data_axis.cpython-311.pyc b/waylay-sdk-queries-types/src/waylay/services/queries/models/__pycache__/row_data_set_data_axis.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..9aff6699715548de4a46b349d989bcf5ef4650a4 GIT binary patch literal 1225 zcmb7D&1(}u6rV{po46XQtrZbk2R*bAl121XL@ZW|psiX($Yoh~CMI@wC!Lv1+#FqXtV1&ME z;rB8#2JhbnW)o3VM-}yihu&YrL%#zh7i7Ar zR9nv2HiwXIyHy=z!$nOouUWCIIZi^Z2%{~P=H~gXlq7J&$o2ggs`;joso>xt^ zech6)V@Gwh!~}4oAWTfbR3ySAFO~41JHwR+4mRGu3d|-_hiq@qtD&?F+|E#fCgX)l zPMm-{NulHV5z|FU<~OANh#c(NO&%~?L?QIg?sBngchiBWw&N-cLZ{_1d7SERo21Lt z!NkDT-!~3xRon(wQg{QSJ#;a+XJ@lz3*L1opyf!WGR6hmYV9~FIu79CII9p<3r&u3$zXH4vs$Jg)m4P3a? zNBYN%8%md^k^Z+CVgLxGCM@|dK0*`BPn9M=xW>&{7aRCgv&2kw? uKaVl)8zpS?ktXL5zS2XN55Ie8y!YqZH%$x~A0=C3TlBlu|2)Q+Ci4sQc2h0@ literal 0 HcmV?d00001 diff --git a/waylay-sdk-queries-types/src/waylay/services/queries/models/__pycache__/row_header.cpython-311.pyc b/waylay-sdk-queries-types/src/waylay/services/queries/models/__pycache__/row_header.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..a7937a0d1ff43f097bbdd2ae96cb87b46b600c74 GIT binary patch literal 1716 zcmb7Ey>Hw$6sJD#PPTIy4*fDx5GmT^idxqUEea$3a2hlP-hSJc?_d&-W+MJqi!p(HH3Z+ia03n&7AUL8Otc4g7Sz8 zd>16@e}4M{&N!1SWN{ZKjL=xPj&o}m2^<24M}fdwG^IR{l;8np36?{OZ)7xG`Dqms z7Ul^}WgsJ#Vm83%-fqitj&o(^eY2SPoeCMp=Z8{eV!792uw{@%OViUZ?n)XCyN+|2 z;gm^CNhGVYg>fJRPJ%QK;<$j@{Hr3<)ylab1;y&90@x;jJE@p-jnes^rGseeaumwa z`XQn*DO>B31G}0^&~04`1ih}p6Hen?{bq=61N#tBXSl^ZH?W=fwy-a$5| z5|4&7#kXrsHxkUB>3l7DPH%VhvO(w|$YaUpV5gn-5peidyv9;mF3c=^u)p;ODlLGX zjR4rw8O!n*fc7^FKMfLEc2vI85YoBgMHYlqloq`wdC+yrreBGDzjS;b3L=jw%;$ao zE~Jxk09?cOA@O~m+i)B{uWsM={S(;*OQ+P5%8zosDk~p?2pPuPAbJ4{klIj z`v)I?`e@_ebmyS6IkAjS?B@u`p(4B2C&;kuV**RSI;ivEgXM$w&pf&G=hno~J75Cj zP?6nh>f;|A9c!&S&))?`K{d!_&H)^*UP5jvX)`NGkjf~maHzqmQuUoW&Mt(=g(t;T zIK#uoo64$PzhJY1ucM$~t2bVR*~{j|IyJuG7+6)@;t7z6p=sL0Y-;8NDbhjOM`LvM tWPgUvjQ`swrm5)@^ftsn+IQL*eS5M`>^Tjh`G4}D{ai^8->_8O=oJIm`|1Dy literal 0 HcmV?d00001 diff --git a/waylay-sdk-queries-types/src/waylay/services/queries/models/__pycache__/row_headers_inner.cpython-311.pyc b/waylay-sdk-queries-types/src/waylay/services/queries/models/__pycache__/row_headers_inner.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..91e685a38d4875ac7f691aedb8aa7829e7764545 GIT binary patch literal 991 zcmb7CziSjh6rS1JyW86kLlQ9v7K0Ya36~|oDu@seG!pzR!Zpie=Ur~e?#?TYbKkpJ8hsBrPBa4uq zm2olZV?fUm1RseYT_UKkA{tv=i&nT6)ndDAkFXup<3_iExGow|Gj_TTC167XTB6yr zu3uy&$T-58WoB{L6|EPf?Q+aSUh_QSIeV6Y%D0#aW6+>N(CiH|)xLJP!BQoS3}n=1 zu@n&Lb=Q5_4>b$WVgs((J|v*H0l|7o#?17AJxL+ie!9bi46+y!!%Zj?CVOo4|4Od9 z?t^Ley?mN?LQ2Kf`o^Ss%kw0b!B3RCf(!4 zsBkYcP?E>(xw7f|*azP)UEl9zCR5=1s)m`$hRM?~*;jUDERGEy-Wo_Wme#8JA?4zv z?Me>({-~&GR(wqxRW3}G=$!-!v>)%1-YgcQRQ!;!!ASs literal 0 HcmV?d00001 diff --git a/waylay-sdk-queries-types/src/waylay/services/queries/models/__pycache__/series_data_set.cpython-311.pyc b/waylay-sdk-queries-types/src/waylay/services/queries/models/__pycache__/series_data_set.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..1b8b41b1e860d417d624a508a88c1c8557a15db2 GIT binary patch literal 2584 zcmb7GOOF#r5bm+Zj~(0l!fZ%@s09bs3OiPET#*N`%7%nMctj|ZpxNH(-u1w|=;_(T zs~q-_AHXU6f{;WIDaZVRoV`*G)|`-X;${RVPO0u5dv^&^lySRURb5?OUG-Iue{Qub z1kcvs$;LNTg#MPo_^D{dc=01J4-rKUq6RGmMp$x6hUCjZIW!$p@n%p7t4=knIW;9$ zf_gaRSio0lEog*Ir>XdQ&A#2t9_cew?Fp`UdLEkg9>uEz%E2A79HD?=NHFhb(2>XDPl18u`1p^*&B`EMhMX zIyj6e3sT#%Zua~Xdm!O$lHyGkF-`=dc!S3w7CnZqCM-Jt)g?@0FAG^Di16bG#~b*} z|J(A6Wvx!UulFZ@3uVmlVo!)9UG8>c*pejvQV~teZNa==$Ff#p9K`}N>I)T{7mzf? zA&D{)1bsNoGntu=kvB*LhAPw)MDwzricTrFF2>P@zq#UjBCmYvvw*_n)CH2VFJ(TS zmGtVP7vmrcqZJ~^4JPEz`TM@~Gp{E;V}vrEUWy=Dpq(oW&kMo*^-M5n+A5T{{D{We zps0W%3q4&rO(*Dj0P;h`kYfPCN?!x6oH8vrCM~lHHP68;NL5+^sVXH_yHnRL5OSty z4fJ)XFCk{psVCMW0K{YX>c?r&23RzepB8Y_g>940&{;b7Wd1c=wP*=&btG@yP|zt( zvh$}t{Zb5giX=uTWF}?8#`xww-lP%(6yr?bZC~^-0eH!D;+{$yCJ_Z)$`XY%ZUJQ9-_mwdtUJvXgifw$IrCA`9DQ959ahym*rg%;6>=LNdhdkb1Q%l$M zp04t*)V6(P=U8!~{et1|@s&7YxkV;5+-Vn9x`Jbi#22K)Pp9FTQf{N0gYLdP8HgQMrddoRkfXCvNONcY19eQZFM`Z>21=T zIc1^#kC}Zf?0Q+=f}efN#3)JqTGk0IBA>aO=4)pM^%sXI%HdtpeIP(DErcRla`p z7N3_Qyg(3dOCp;)Z>oFNg~Y?P!xupH0>0?gPu*S|vM$f$71G^~`Q7fey1s>58FT32>;(&sY}t0E_X zNq+;fd*CxFp~|)L2ub?%z3%Sk1GB5gp4lBPp56UoV4l@u&pbP{FaBk(?p_+0t9tC2 ztHZ^mUn=0{=y&F*TQl+|2U<$-4s+<^@$6@T5$DbZK`CxhY_Q~Hb z{ILnk+j4nZE^k+NFUt=}B+=~Dt=_Ehy$ zG4lmo7#nhG!%NAQV1ZXBugL{7`W-lVgXH5Es|N2RnVOMzlLpLj?Zht3ipF+*2?s9! zj^ytY7UOcb`!^GBNP~sf4fMstn{ra)F12BG7V;LTbS)(UbyiLT_o{vloB;Aa;x>r# zg^@}+DjS9|GV6vpLXxzRae9DG9UM>5TZ6-6WR{K62>myyBjXcefIdDro}!h(;W0$# o28YKGEe{TlA^Ko&cnlF993G=;%K#Ytn>@JsTxwswVM=A_AGxa|VgLXD literal 0 HcmV?d00001 diff --git a/waylay-sdk-queries-types/src/waylay/services/queries/models/__pycache__/series_spec.cpython-311.pyc b/waylay-sdk-queries-types/src/waylay/services/queries/models/__pycache__/series_spec.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..fbc846715a2654e542012887ddd4885b06319216 GIT binary patch literal 2202 zcmbVNy>Ht_6hBfFB~emr$7)dnb#qWrI4WwYZl)SR+ayNP0I}WHNegfx7~V-@!!I96 zI}$o*=pT?R8QUdA5f2?R_b*U3gOh6&)C=S0{B4)0qL?oyvJE2ac@Sm5Ef zNAY$@{VU(y#3Zm2kNU9{JAsdb4qkb;DOWV@#x(lf{xohb3>d!Hi{mg_Z?^-O(h8l` zd^G{nV`}$Wnzj*OKZr3UPAt}DyH*ro&+-$?b^EZJ=lo<^Qd+fqFceFTT7^`*7Wf^f zyW!YzTDyxI%1a zS;*)#`A>m=h$u270Dyc4(ry%FL=_^F!h!M_!aw0th-MT?k*Y+!3|wwgI%QK5Hsu+c z$|;+&u+g{;k&OzeLeyH$X`~L^x!k`>=Eyu*I5__nlxjoj02^%cGdvatP&SSYSWHU!hIGCU25&wd>0-vS| zpJA~51C4@&*%Uhf<`WC~3^Tf$I1J`be3t@(08X%?e4`+S4Orsh^l?6^o|ai2aIg)4 z0PLK#$Nv{v^+dqI2d6+c*;CCDaD=M~hdgMUz~RKE?#!a|_Ma#%!mSAQ0sr%15GH_H zYToUe{CLs^F9pTrpV;Jwk{&~R`b#at`m=0Y1|JXRK)CD*`9{T{n}ZPvW zCWnU}_E`Ngar@LT9!421f z8~6b&?!SGu1Ep40Wh(DLp%~9iFOCOeVIV^dCe*+Qmt0fJ8H}_lz>YcGFS*?NW*?Z! zs)9>Ptxyuw2yVUEmAB&fi_7T8)62LkqtdWFwzf38NuuydT8i$9jnX~KvvDVm?D$I^4~>syG&sv($x2sbr}O zm1FoF8rEiFnYM4k)7GbNdEsZ>%t1YW9a3`WR|!_FtS``!KyuHN~h zgVmh|=vs_pjyyS}QcY68?x0X&FDbTO8ekPR3|91i*XZ8rz>6|`-PxG8(iA%^P3Li% zjw)Meo~Am$*VH(DWZtyXQpgh>I_1hzN%=#|rNO(6b|X0tgtYU(SUukwVA+p^WNPv` zHuA6JDf-FtpOdjFc%mzbZJtb&K20X|+;q!n7w6?nWZe9h=~bU$r`^?H;n9l|>sF+Q zp^VN}&g3%0>RhrM!K7}GNli6%L)R;(&!ao&taARTzJj!Ix{3J%w?*K2-l7qCjRkSr zJH)#=Bk!-TzsP&Dm)FAgJ%2%7w?(gW)F&cx^~RIN=9B2{g-_aF2FRejA3O_!u(^mx xxbwh{D#hAinB9-dbEIotoO1a!mxA~F2?{?GMuvoW%+I~TANrn?gFGmLVNlDByitV1u$IHTS+s^N zkMNMUc)*$?|Gi7E1T7J3y3H<3U0U- z+`tcLasQq3T`0A(DpPp}3dMMCdT~4$3j-NyFrfxcx#XH!&S0cf0d~ycLCNL*HwVB} zRux=YYK4-ZMsWN8J$XBhzqs;#GQIM!2Vce0Om8;M0%$yWd|?m`rJAIG-9e$mUQ%p5HNYxt7|iH@&e8qVg;#0#y0bBFr73n;n$F`i z9aXl{JWX|g)zmnBWZtyXQpi&sI_1VvN%+FJL|3{3$I?@Shpfa zbY*n5I!vxytnMYt8BFR9nbcg<%8~7r)0ffbcv|KBj=q7salVQ99k)f`dETNCd5r~e z+dIU&H6tIauRqEAv)9+c_dS0>-nK<=JE(6&Wc%i`#^$r=`obseF9T%IJ_ud}LD*bG yB)s-hHrpP|t_}WZ9M!N52RrZ`>??l>+la!}iy+?ipKLAOC0>PG+^)AUpnm{z<*PLS literal 0 HcmV?d00001 diff --git a/waylay-sdk-queries-types/src/waylay/services/queries/models/__pycache__/validation_error.cpython-311.pyc b/waylay-sdk-queries-types/src/waylay/services/queries/models/__pycache__/validation_error.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..b0a8e34ae75a6a294348e6110db1ab9a8d993d7b GIT binary patch literal 1481 zcmb7EPmj|^6d(VIlQ`Kf>TW@7K^oBmRMJs>-29K1O<5`Lt3`+=AeQRH<+5Y?R$1RUMC?-+S}#z2EPRU#+eA2-^Pa z_3&>Sp}&lA+#0oFy&r<|0x=XKW-&XlQaiLQqdSR{x}jU?Zqi7-&`X|82ch5Lty{Rp{QIcap`L}%PqavAf$vSYEOxMtQ?9s- zxx$aZW4>4Rui{(^Eh3Tha4Hy2RNwa>jAMl(u%MEHW&H`11cd^0M#WS?>O@Snj)U3W=|bwa(Q}5C}Mu=JEC-8X^0dN8_IF z-xfF%8gmxwDz+%0O5v1d6PhFiWb@V_)3eGB&0t~`sshv9jg{`%rGHCg!+3N%j&#|+ zuO)mz!i4rss`z&Xlea*r*(gX{=60_>)Z>1FS$(d7*{*w)p&d(>*-fAAYBy?B%f$$L(DCKvf60d~p5f@C!1<)$eJ9s%E#t#TT1RW|sq zTGBzUS++>!C#3WVfs&ad9P}{gXVq6&Dq4zBm` zqK_|wu}FC!CkEc&K*&eIK~=)rd9e+pyB|X+pK_fZQ|!_9qQ+tA@rqTiK|%#eMvK8< zxy52#P~V1Ne~CQd2Ks(p$PNTsiSwYSdmyGO&!M|DbGMG%3$v>K>0UT=Kc5b!gQtT- zcVoIY-Fv!sv~ltI&f)osf82aCo;&uY_YQ&hV8nFSJaX&!j6v@+c@7K%_i&;o5&)Lw zzLy>(5oaUm8l#mLjAlBHDu`>+&(`SmA@M%koxY(9Zn$ik1?%-yT^4!yMLpVwnyD&{ z#D)ghhRJothNwEOFG2g*x&{k?{p<1)nDDzn>J5mwV_DYRZCUOd8L^41uV(1dYCl5f uW+(gHbu4?1{#&$=^|duaH&*)*x;i`A=U&_L=IGzzxp-&1A3iZuW%dtk>bM#J literal 0 HcmV?d00001 diff --git a/waylay-sdk-queries-types/src/waylay/services/queries/models/__pycache__/window.cpython-311.pyc b/waylay-sdk-queries-types/src/waylay/services/queries/models/__pycache__/window.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..6c4904d9f6024a958767d32bae4ce109ec7cafa5 GIT binary patch literal 933 zcmb7Cy>HV%6uRY(h?bObkzO&Gs)XluUhY@$U#~aKYSohbN&>yYuGw&3&8x%az z87)&0HNzI;YemYRE2;Mg;S}<;dC+cPF{9k){`XW`d`rBcbbhmtEGU@ zb;L~+SV1bS;?-riNwJCxm+J$qs2O(i^4fm_P?7SdY8%MHJ|g`I#N5Uh&mA8-b5x6a z2=82=2RFaDV_|EKZWI1(7mElV1=};HHS@P-{y7wDGJIv*u6Jd-f%Vaw-$6KsVee5>{nv*ZEZ54aSfy>2DFLbJ2EofgVpxn48*#&qK!WBL z1nX;+F*^XZmxJ7TzQcryiwvaYHc^tPK3n_0l50WmY@YqFoae2TO0)HWwYk|0Lxm-I zo^)z9N_Q>9gLV*XD<+j?AQC&}7N^`8mT_6|G%fKpzp6I1>3E4tbevK(C^lY6B#mHk zYo-VB@y!;?u`^1rM6$O#`+JWcJ=|cTz~`gyyEz$<-BEI!Em!ToqZ=SJ2>-U5`+1d>TjD7 z$DMjPF!VCwsutN{Dx>4t7|v7Fap7!@uq74KNYzxkd3oVKL0gf+Q+*Rz; zDV=ye^(LgcZWFqCLLOZGCZ0o`3Ayg_uQN;|e6n)y)N7skOQ-%J7F!hb+;tnxbGNbL Rd|IB|AoT7DxuaXi=3.9 +) + +from ..models.aggregation_by_resource_or_metric import AggregationByResourceOrMetric + +AggregationByResourceAndMetric = Union[ + Annotated[ + Dict[str, AggregationByResourceOrMetric], + "Aggregation methods specified per resource or metric.", + ] +] +"""AggregationByResourceAndMetric.""" diff --git a/waylay-sdk-queries-types/src/waylay/services/queries/models/aggregation_by_resource_or_metric.py b/waylay-sdk-queries-types/src/waylay/services/queries/models/aggregation_by_resource_or_metric.py new file mode 100644 index 0000000..cf7c3a2 --- /dev/null +++ b/waylay-sdk-queries-types/src/waylay/services/queries/models/aggregation_by_resource_or_metric.py @@ -0,0 +1,32 @@ +# coding: utf-8 +"""Waylay Query: timeseries queries (v1 protocol) models. + +This code was generated from the OpenAPI documentation of 'Waylay Query: timeseries queries (v1 protocol)' + +Generated by OpenAPI Generator (https://openapi-generator.tech) + +Do not edit the class manually. + +""" + +from __future__ import annotations + +from typing import ( + List, + Union, +) + +from typing_extensions import ( + Annotated, # >=3.9 +) + +from ..models.aggregation_method import AggregationMethod +from ..models.aggregations_inner import AggregationsInner + +AggregationByResourceOrMetric = Union[ + Annotated[AggregationMethod, ""], + Annotated[ + List[AggregationsInner], "Aggregation methods, leading to sepearate series." + ], +] +"""AggregationByResourceOrMetric.""" diff --git a/waylay-sdk-queries-types/src/waylay/services/queries/models/aggregation_method.py b/waylay-sdk-queries-types/src/waylay/services/queries/models/aggregation_method.py new file mode 100644 index 0000000..aea55fa --- /dev/null +++ b/waylay-sdk-queries-types/src/waylay/services/queries/models/aggregation_method.py @@ -0,0 +1,43 @@ +# coding: utf-8 +"""Waylay Query: timeseries queries (v1 protocol) models. + +This code was generated from the OpenAPI documentation of 'Waylay Query: timeseries queries (v1 protocol)' + +Generated by OpenAPI Generator (https://openapi-generator.tech) + +Do not edit the class manually. + +""" + +from __future__ import annotations + +from typing import ( + Union, +) + +from typing_extensions import ( + Annotated, # >=3.9 +) + +from ..models.aggregation_method_one_of import AggregationMethodOneOf +from ..models.aggregation_method_one_of1 import AggregationMethodOneOf1 +from ..models.aggregation_method_one_of2 import AggregationMethodOneOf2 +from ..models.aggregation_method_one_of3 import AggregationMethodOneOf3 +from ..models.aggregation_method_one_of4 import AggregationMethodOneOf4 +from ..models.aggregation_method_one_of5 import AggregationMethodOneOf5 +from ..models.aggregation_method_one_of6 import AggregationMethodOneOf6 +from ..models.aggregation_method_one_of7 import AggregationMethodOneOf7 +from ..models.aggregation_method_one_of8 import AggregationMethodOneOf8 + +AggregationMethod = Union[ + Annotated[AggregationMethodOneOf, ""], + Annotated[AggregationMethodOneOf1, ""], + Annotated[AggregationMethodOneOf2, ""], + Annotated[AggregationMethodOneOf3, ""], + Annotated[AggregationMethodOneOf4, ""], + Annotated[AggregationMethodOneOf5, ""], + Annotated[AggregationMethodOneOf6, ""], + Annotated[AggregationMethodOneOf7, ""], + Annotated[AggregationMethodOneOf8, ""], +] +"""AggregationMethod.""" diff --git a/waylay-sdk-queries-types/src/waylay/services/queries/models/aggregation_method_one_of.py b/waylay-sdk-queries-types/src/waylay/services/queries/models/aggregation_method_one_of.py new file mode 100644 index 0000000..1124f5f --- /dev/null +++ b/waylay-sdk-queries-types/src/waylay/services/queries/models/aggregation_method_one_of.py @@ -0,0 +1,23 @@ +# coding: utf-8 +"""Waylay Query: timeseries queries (v1 protocol) models. + +This code was generated from the OpenAPI documentation of 'Waylay Query: timeseries queries (v1 protocol)' + +Generated by OpenAPI Generator (https://openapi-generator.tech) + +Do not edit the class manually. + +""" + +from __future__ import annotations + +from enum import Enum + + +class AggregationMethodOneOf(str, Enum): + """Use the first value (in time) to represent all data for the sample interval..""" + + FIRST = "first" + + def __str__(self) -> str: + return str(self.value) diff --git a/waylay-sdk-queries-types/src/waylay/services/queries/models/aggregation_method_one_of1.py b/waylay-sdk-queries-types/src/waylay/services/queries/models/aggregation_method_one_of1.py new file mode 100644 index 0000000..60c63cf --- /dev/null +++ b/waylay-sdk-queries-types/src/waylay/services/queries/models/aggregation_method_one_of1.py @@ -0,0 +1,23 @@ +# coding: utf-8 +"""Waylay Query: timeseries queries (v1 protocol) models. + +This code was generated from the OpenAPI documentation of 'Waylay Query: timeseries queries (v1 protocol)' + +Generated by OpenAPI Generator (https://openapi-generator.tech) + +Do not edit the class manually. + +""" + +from __future__ import annotations + +from enum import Enum + + +class AggregationMethodOneOf1(str, Enum): + """Use the last value (in time) to represent all data for the sample interval..""" + + LAST = "last" + + def __str__(self) -> str: + return str(self.value) diff --git a/waylay-sdk-queries-types/src/waylay/services/queries/models/aggregation_method_one_of2.py b/waylay-sdk-queries-types/src/waylay/services/queries/models/aggregation_method_one_of2.py new file mode 100644 index 0000000..97880a2 --- /dev/null +++ b/waylay-sdk-queries-types/src/waylay/services/queries/models/aggregation_method_one_of2.py @@ -0,0 +1,23 @@ +# coding: utf-8 +"""Waylay Query: timeseries queries (v1 protocol) models. + +This code was generated from the OpenAPI documentation of 'Waylay Query: timeseries queries (v1 protocol)' + +Generated by OpenAPI Generator (https://openapi-generator.tech) + +Do not edit the class manually. + +""" + +from __future__ import annotations + +from enum import Enum + + +class AggregationMethodOneOf2(str, Enum): + """Aggregate data by the mean value: The sum of values divided by number of observations..""" + + MEAN = "mean" + + def __str__(self) -> str: + return str(self.value) diff --git a/waylay-sdk-queries-types/src/waylay/services/queries/models/aggregation_method_one_of3.py b/waylay-sdk-queries-types/src/waylay/services/queries/models/aggregation_method_one_of3.py new file mode 100644 index 0000000..eb84db3 --- /dev/null +++ b/waylay-sdk-queries-types/src/waylay/services/queries/models/aggregation_method_one_of3.py @@ -0,0 +1,23 @@ +# coding: utf-8 +"""Waylay Query: timeseries queries (v1 protocol) models. + +This code was generated from the OpenAPI documentation of 'Waylay Query: timeseries queries (v1 protocol)' + +Generated by OpenAPI Generator (https://openapi-generator.tech) + +Do not edit the class manually. + +""" + +from __future__ import annotations + +from enum import Enum + + +class AggregationMethodOneOf3(str, Enum): + """Aggregate data by the median value: The n/2-th value when ordered, the average of the (n-1)/2-th and (n+1)/2-th value when n is uneven..""" + + MEDIAN = "median" + + def __str__(self) -> str: + return str(self.value) diff --git a/waylay-sdk-queries-types/src/waylay/services/queries/models/aggregation_method_one_of4.py b/waylay-sdk-queries-types/src/waylay/services/queries/models/aggregation_method_one_of4.py new file mode 100644 index 0000000..4b7debb --- /dev/null +++ b/waylay-sdk-queries-types/src/waylay/services/queries/models/aggregation_method_one_of4.py @@ -0,0 +1,23 @@ +# coding: utf-8 +"""Waylay Query: timeseries queries (v1 protocol) models. + +This code was generated from the OpenAPI documentation of 'Waylay Query: timeseries queries (v1 protocol)' + +Generated by OpenAPI Generator (https://openapi-generator.tech) + +Do not edit the class manually. + +""" + +from __future__ import annotations + +from enum import Enum + + +class AggregationMethodOneOf4(str, Enum): + """The sum of all values summarizes the data for the sample interval..""" + + SUM = "sum" + + def __str__(self) -> str: + return str(self.value) diff --git a/waylay-sdk-queries-types/src/waylay/services/queries/models/aggregation_method_one_of5.py b/waylay-sdk-queries-types/src/waylay/services/queries/models/aggregation_method_one_of5.py new file mode 100644 index 0000000..68878e4 --- /dev/null +++ b/waylay-sdk-queries-types/src/waylay/services/queries/models/aggregation_method_one_of5.py @@ -0,0 +1,23 @@ +# coding: utf-8 +"""Waylay Query: timeseries queries (v1 protocol) models. + +This code was generated from the OpenAPI documentation of 'Waylay Query: timeseries queries (v1 protocol)' + +Generated by OpenAPI Generator (https://openapi-generator.tech) + +Do not edit the class manually. + +""" + +from __future__ import annotations + +from enum import Enum + + +class AggregationMethodOneOf5(str, Enum): + """Use the count of observations in the sample interval..""" + + COUNT = "count" + + def __str__(self) -> str: + return str(self.value) diff --git a/waylay-sdk-queries-types/src/waylay/services/queries/models/aggregation_method_one_of6.py b/waylay-sdk-queries-types/src/waylay/services/queries/models/aggregation_method_one_of6.py new file mode 100644 index 0000000..bce2635 --- /dev/null +++ b/waylay-sdk-queries-types/src/waylay/services/queries/models/aggregation_method_one_of6.py @@ -0,0 +1,23 @@ +# coding: utf-8 +"""Waylay Query: timeseries queries (v1 protocol) models. + +This code was generated from the OpenAPI documentation of 'Waylay Query: timeseries queries (v1 protocol)' + +Generated by OpenAPI Generator (https://openapi-generator.tech) + +Do not edit the class manually. + +""" + +from __future__ import annotations + +from enum import Enum + + +class AggregationMethodOneOf6(str, Enum): + """Use the standard deviation of all observations in the sample interval..""" + + STD = "std" + + def __str__(self) -> str: + return str(self.value) diff --git a/waylay-sdk-queries-types/src/waylay/services/queries/models/aggregation_method_one_of7.py b/waylay-sdk-queries-types/src/waylay/services/queries/models/aggregation_method_one_of7.py new file mode 100644 index 0000000..fcf428b --- /dev/null +++ b/waylay-sdk-queries-types/src/waylay/services/queries/models/aggregation_method_one_of7.py @@ -0,0 +1,23 @@ +# coding: utf-8 +"""Waylay Query: timeseries queries (v1 protocol) models. + +This code was generated from the OpenAPI documentation of 'Waylay Query: timeseries queries (v1 protocol)' + +Generated by OpenAPI Generator (https://openapi-generator.tech) + +Do not edit the class manually. + +""" + +from __future__ import annotations + +from enum import Enum + + +class AggregationMethodOneOf7(str, Enum): + """Use the maximum of all values in the sample interval..""" + + MAX = "max" + + def __str__(self) -> str: + return str(self.value) diff --git a/waylay-sdk-queries-types/src/waylay/services/queries/models/aggregation_method_one_of8.py b/waylay-sdk-queries-types/src/waylay/services/queries/models/aggregation_method_one_of8.py new file mode 100644 index 0000000..b8cfa9d --- /dev/null +++ b/waylay-sdk-queries-types/src/waylay/services/queries/models/aggregation_method_one_of8.py @@ -0,0 +1,23 @@ +# coding: utf-8 +"""Waylay Query: timeseries queries (v1 protocol) models. + +This code was generated from the OpenAPI documentation of 'Waylay Query: timeseries queries (v1 protocol)' + +Generated by OpenAPI Generator (https://openapi-generator.tech) + +Do not edit the class manually. + +""" + +from __future__ import annotations + +from enum import Enum + + +class AggregationMethodOneOf8(str, Enum): + """Use the minimum of all values in the sample interval..""" + + MIN = "min" + + def __str__(self) -> str: + return str(self.value) diff --git a/waylay-sdk-queries-types/src/waylay/services/queries/models/aggregations_inner.py b/waylay-sdk-queries-types/src/waylay/services/queries/models/aggregations_inner.py new file mode 100644 index 0000000..f78b570 --- /dev/null +++ b/waylay-sdk-queries-types/src/waylay/services/queries/models/aggregations_inner.py @@ -0,0 +1,25 @@ +# coding: utf-8 +"""Waylay Query: timeseries queries (v1 protocol) models. + +This code was generated from the OpenAPI documentation of 'Waylay Query: timeseries queries (v1 protocol)' + +Generated by OpenAPI Generator (https://openapi-generator.tech) + +Do not edit the class manually. + +""" + +from __future__ import annotations + +from typing import ( + Union, +) + +from typing_extensions import ( + Annotated, # >=3.9 +) + +from ..models.aggregation_method import AggregationMethod + +AggregationsInner = Union[Annotated[AggregationMethod, ""]] +"""AggregationsInner.""" diff --git a/waylay-sdk-queries-types/src/waylay/services/queries/models/align_at.py b/waylay-sdk-queries-types/src/waylay/services/queries/models/align_at.py new file mode 100644 index 0000000..b774886 --- /dev/null +++ b/waylay-sdk-queries-types/src/waylay/services/queries/models/align_at.py @@ -0,0 +1,26 @@ +# coding: utf-8 +"""Waylay Query: timeseries queries (v1 protocol) models. + +This code was generated from the OpenAPI documentation of 'Waylay Query: timeseries queries (v1 protocol)' + +Generated by OpenAPI Generator (https://openapi-generator.tech) + +Do not edit the class manually. + +""" + +from __future__ import annotations + +from enum import Enum + + +class AlignAt(str, Enum): + """Possible values for `align.at`. * 'grid' Align to a fixed grid (possibly using timezone information) * 'from' Align a the `from` boundary * 'until' Align a the `until` boundary * 'boundary' Align a the `from` boundary if specified, otherwise the `until` boundary. When not specified, 'grid' is used..""" + + GRID = "grid" + BOUNDARY = "boundary" + FROM = "from" + UNTIL = "until" + + def __str__(self) -> str: + return str(self.value) diff --git a/waylay-sdk-queries-types/src/waylay/services/queries/models/align_shift.py b/waylay-sdk-queries-types/src/waylay/services/queries/models/align_shift.py new file mode 100644 index 0000000..917b43c --- /dev/null +++ b/waylay-sdk-queries-types/src/waylay/services/queries/models/align_shift.py @@ -0,0 +1,25 @@ +# coding: utf-8 +"""Waylay Query: timeseries queries (v1 protocol) models. + +This code was generated from the OpenAPI documentation of 'Waylay Query: timeseries queries (v1 protocol)' + +Generated by OpenAPI Generator (https://openapi-generator.tech) + +Do not edit the class manually. + +""" + +from __future__ import annotations + +from enum import Enum + + +class AlignShift(str, Enum): + """Possible values for `align.shift`. * 'backward': keep the window size of the original interval specification, shifting back. * 'forward': keep the window size of the original interval specification, shifting forward. * 'wrap': enlarge the window size to include all of the original interval. When not specified, 'backward' is used..""" + + BACKWARD = "backward" + FORWARD = "forward" + WRAP = "wrap" + + def __str__(self) -> str: + return str(self.value) diff --git a/waylay-sdk-queries-types/src/waylay/services/queries/models/alignment.py b/waylay-sdk-queries-types/src/waylay/services/queries/models/alignment.py new file mode 100644 index 0000000..57b6197 --- /dev/null +++ b/waylay-sdk-queries-types/src/waylay/services/queries/models/alignment.py @@ -0,0 +1,35 @@ +# coding: utf-8 +"""Waylay Query: timeseries queries (v1 protocol) models. + +This code was generated from the OpenAPI documentation of 'Waylay Query: timeseries queries (v1 protocol)' + +Generated by OpenAPI Generator (https://openapi-generator.tech) + +Do not edit the class manually. + +""" + +from __future__ import annotations + +from pydantic import ( + ConfigDict, +) +from waylay.sdk.api._models import BaseModel as WaylayBaseModel + +from ..models.align_at import AlignAt +from ..models.align_shift import AlignShift +from ..models.alignment_grid_interval import AlignmentGridInterval +from ..models.alignment_timezone import AlignmentTimezone + + +class Alignment(WaylayBaseModel): + """Aggregation Alignment Options. Specifies how the aggregation grid is aligned..""" + + at: AlignAt | None = None + shift: AlignShift | None = None + freq: AlignmentGridInterval | None = None + timezone: AlignmentTimezone | None = None + + model_config = ConfigDict( + populate_by_name=True, protected_namespaces=(), extra="allow" + ) diff --git a/waylay-sdk-queries-types/src/waylay/services/queries/models/alignment_grid_interval.py b/waylay-sdk-queries-types/src/waylay/services/queries/models/alignment_grid_interval.py new file mode 100644 index 0000000..806de12 --- /dev/null +++ b/waylay-sdk-queries-types/src/waylay/services/queries/models/alignment_grid_interval.py @@ -0,0 +1,31 @@ +# coding: utf-8 +"""Waylay Query: timeseries queries (v1 protocol) models. + +This code was generated from the OpenAPI documentation of 'Waylay Query: timeseries queries (v1 protocol)' + +Generated by OpenAPI Generator (https://openapi-generator.tech) + +Do not edit the class manually. + +""" + +from __future__ import annotations + +from typing import ( + Union, +) + +from typing_extensions import ( + Annotated, # >=3.9 +) + +from ..models.grouping_interval_override_one_of import GroupingIntervalOverrideOneOf + +AlignmentGridInterval = Union[ + Annotated[ + str, + "A period in [ISO8601 duration](https://en.wikipedia.org/wiki/ISO_8601#Durations) format.", + ], + Annotated[GroupingIntervalOverrideOneOf, ""], +] +""" Defines the grid used to align the aggregation window. The window will align at whole-unit multiples of this interval. For intervals like `PT1D`, that are timezone-dependent, use the `align.timezone` to fix the absolute timestamp of the grid boundaries. If not specified, defaults to the `freq` aggregation interval. .""" diff --git a/waylay-sdk-queries-types/src/waylay/services/queries/models/alignment_timezone.py b/waylay-sdk-queries-types/src/waylay/services/queries/models/alignment_timezone.py new file mode 100644 index 0000000..ee932f9 --- /dev/null +++ b/waylay-sdk-queries-types/src/waylay/services/queries/models/alignment_timezone.py @@ -0,0 +1,29 @@ +# coding: utf-8 +"""Waylay Query: timeseries queries (v1 protocol) models. + +This code was generated from the OpenAPI documentation of 'Waylay Query: timeseries queries (v1 protocol)' + +Generated by OpenAPI Generator (https://openapi-generator.tech) + +Do not edit the class manually. + +""" + +from __future__ import annotations + +from typing import ( + Union, +) + +from typing_extensions import ( + Annotated, # >=3.9 +) + +AlignmentTimezone = Union[ + Annotated[ + str, + "[ICANN timezone identifier](https://en.wikipedia.org/wiki/List_of_tz_database_time_zones)", + ], + Annotated[str, "[UTC offset](https://en.wikipedia.org/wiki/UTC_offset)"], +] +""" The timezone to use when shifting boundaries, especially at day granularity. Also affects the rendering of timestamps when `render.iso_timestamp` is enabled. When not specified, the `UTC` timezone is used. .""" diff --git a/waylay-sdk-queries-types/src/waylay/services/queries/models/cause_exception.py b/waylay-sdk-queries-types/src/waylay/services/queries/models/cause_exception.py new file mode 100644 index 0000000..1739613 --- /dev/null +++ b/waylay-sdk-queries-types/src/waylay/services/queries/models/cause_exception.py @@ -0,0 +1,32 @@ +# coding: utf-8 +"""Waylay Query: timeseries queries (v1 protocol) models. + +This code was generated from the OpenAPI documentation of 'Waylay Query: timeseries queries (v1 protocol)' + +Generated by OpenAPI Generator (https://openapi-generator.tech) + +Do not edit the class manually. + +""" + +from __future__ import annotations + +from typing import List + +from pydantic import ( + ConfigDict, + StrictStr, +) +from waylay.sdk.api._models import BaseModel as WaylayBaseModel + + +class CauseException(WaylayBaseModel): + """Describes the exception that caused a message..""" + + type: StrictStr + message: StrictStr + stacktrace: List[StrictStr] + + model_config = ConfigDict( + populate_by_name=True, protected_namespaces=(), extra="allow" + ) diff --git a/waylay-sdk-queries-types/src/waylay/services/queries/models/column_data_set.py b/waylay-sdk-queries-types/src/waylay/services/queries/models/column_data_set.py new file mode 100644 index 0000000..f439cc5 --- /dev/null +++ b/waylay-sdk-queries-types/src/waylay/services/queries/models/column_data_set.py @@ -0,0 +1,44 @@ +# coding: utf-8 +"""Waylay Query: timeseries queries (v1 protocol) models. + +This code was generated from the OpenAPI documentation of 'Waylay Query: timeseries queries (v1 protocol)' + +Generated by OpenAPI Generator (https://openapi-generator.tech) + +Do not edit the class manually. + +""" + +from __future__ import annotations + +from typing import List + +from pydantic import ( + ConfigDict, + Field, +) +from waylay.sdk.api._models import BaseModel as WaylayBaseModel + +from ..models.column_data_set_data_axis import ColumnDataSetDataAxis +from ..models.data_set_attributes import DataSetAttributes +from ..models.data_set_window import DataSetWindow +from ..models.datum import Datum +from ..models.row_headers_inner import RowHeadersInner + + +class ColumnDataSet(WaylayBaseModel): + """Column-oriented dataset with rows header. Timeseries data layout with a rows header containing the index data. The data array contains series data prefixed by series attributes. The `rows` index is prefix by the names of these series attributes. Result for render options `data_axis=row` and `header_array=column`..""" + + attributes: DataSetAttributes | None = None + window_spec: DataSetWindow | None = None + data_axis: ColumnDataSetDataAxis | None = ColumnDataSetDataAxis.ROW + rows: List[RowHeadersInner] = Field( + description="Header Attributes for the index data. The initial string-valued headers (normally `resource`, `metric`,`aggregation`) indicate that row to contain series attributes. The remaining object-valued row headers contain the index data." + ) + data: List[List[Datum]] = Field( + description="All metric observation values for a single series. Prefixed by the series attributes." + ) + + model_config = ConfigDict( + populate_by_name=True, protected_namespaces=(), extra="allow" + ) diff --git a/waylay-sdk-queries-types/src/waylay/services/queries/models/column_data_set_data_axis.py b/waylay-sdk-queries-types/src/waylay/services/queries/models/column_data_set_data_axis.py new file mode 100644 index 0000000..a7aeb4a --- /dev/null +++ b/waylay-sdk-queries-types/src/waylay/services/queries/models/column_data_set_data_axis.py @@ -0,0 +1,23 @@ +# coding: utf-8 +"""Waylay Query: timeseries queries (v1 protocol) models. + +This code was generated from the OpenAPI documentation of 'Waylay Query: timeseries queries (v1 protocol)' + +Generated by OpenAPI Generator (https://openapi-generator.tech) + +Do not edit the class manually. + +""" + +from __future__ import annotations + +from enum import Enum + + +class ColumnDataSetDataAxis(str, Enum): + """ColumnDataSetDataAxis.""" + + ROW = "row" + + def __str__(self) -> str: + return str(self.value) diff --git a/waylay-sdk-queries-types/src/waylay/services/queries/models/column_header.py b/waylay-sdk-queries-types/src/waylay/services/queries/models/column_header.py new file mode 100644 index 0000000..269b5dd --- /dev/null +++ b/waylay-sdk-queries-types/src/waylay/services/queries/models/column_header.py @@ -0,0 +1,30 @@ +# coding: utf-8 +"""Waylay Query: timeseries queries (v1 protocol) models. + +This code was generated from the OpenAPI documentation of 'Waylay Query: timeseries queries (v1 protocol)' + +Generated by OpenAPI Generator (https://openapi-generator.tech) + +Do not edit the class manually. + +""" + +from __future__ import annotations + +from pydantic import ( + ConfigDict, + StrictStr, +) +from waylay.sdk.api._models import BaseModel as WaylayBaseModel + + +class ColumnHeader(WaylayBaseModel): + """Column attributes. Attributes that identify and describe the data in this column..""" + + resource: StrictStr + metric: StrictStr + aggregation: StrictStr | None = None + + model_config = ConfigDict( + populate_by_name=True, protected_namespaces=(), extra="allow" + ) diff --git a/waylay-sdk-queries-types/src/waylay/services/queries/models/column_headers_inner.py b/waylay-sdk-queries-types/src/waylay/services/queries/models/column_headers_inner.py new file mode 100644 index 0000000..258fad1 --- /dev/null +++ b/waylay-sdk-queries-types/src/waylay/services/queries/models/column_headers_inner.py @@ -0,0 +1,31 @@ +# coding: utf-8 +"""Waylay Query: timeseries queries (v1 protocol) models. + +This code was generated from the OpenAPI documentation of 'Waylay Query: timeseries queries (v1 protocol)' + +Generated by OpenAPI Generator (https://openapi-generator.tech) + +Do not edit the class manually. + +""" + +from __future__ import annotations + +from typing import ( + Union, +) + +from typing_extensions import ( + Annotated, # >=3.9 +) + +from ..models.column_header import ColumnHeader + +ColumnHeadersInner = Union[ + Annotated[ + str, + "Header for a column containing a (representation of) the row index value. These headers precede the header attributes for row data.", + ], + Annotated[ColumnHeader, ""], +] +"""ColumnHeadersInner.""" diff --git a/waylay-sdk-queries-types/src/waylay/services/queries/models/data_axis_option.py b/waylay-sdk-queries-types/src/waylay/services/queries/models/data_axis_option.py new file mode 100644 index 0000000..d3c339d --- /dev/null +++ b/waylay-sdk-queries-types/src/waylay/services/queries/models/data_axis_option.py @@ -0,0 +1,24 @@ +# coding: utf-8 +"""Waylay Query: timeseries queries (v1 protocol) models. + +This code was generated from the OpenAPI documentation of 'Waylay Query: timeseries queries (v1 protocol)' + +Generated by OpenAPI Generator (https://openapi-generator.tech) + +Do not edit the class manually. + +""" + +from __future__ import annotations + +from enum import Enum + + +class DataAxisOption(str, Enum): + """Allowed values for the render.data_axis option..""" + + ROW = "row" + COLUMN = "column" + + def __str__(self) -> str: + return str(self.value) diff --git a/waylay-sdk-queries-types/src/waylay/services/queries/models/data_set_attributes.py b/waylay-sdk-queries-types/src/waylay/services/queries/models/data_set_attributes.py new file mode 100644 index 0000000..7ba134c --- /dev/null +++ b/waylay-sdk-queries-types/src/waylay/services/queries/models/data_set_attributes.py @@ -0,0 +1,32 @@ +# coding: utf-8 +"""Waylay Query: timeseries queries (v1 protocol) models. + +This code was generated from the OpenAPI documentation of 'Waylay Query: timeseries queries (v1 protocol)' + +Generated by OpenAPI Generator (https://openapi-generator.tech) + +Do not edit the class manually. + +""" + +from __future__ import annotations + +from pydantic import ( + ConfigDict, + Field, + StrictStr, +) +from waylay.sdk.api._models import BaseModel as WaylayBaseModel + + +class DataSetAttributes(WaylayBaseModel): + """Data Set Attributes. Data attributes that apply to all data in this set..""" + + role: StrictStr | None = Field( + default=None, + description="The role of series specification that was used to compile this data set.", + ) + + model_config = ConfigDict( + populate_by_name=True, protected_namespaces=(), extra="allow" + ) diff --git a/waylay-sdk-queries-types/src/waylay/services/queries/models/data_set_window.py b/waylay-sdk-queries-types/src/waylay/services/queries/models/data_set_window.py new file mode 100644 index 0000000..c5f7720 --- /dev/null +++ b/waylay-sdk-queries-types/src/waylay/services/queries/models/data_set_window.py @@ -0,0 +1,36 @@ +# coding: utf-8 +"""Waylay Query: timeseries queries (v1 protocol) models. + +This code was generated from the OpenAPI documentation of 'Waylay Query: timeseries queries (v1 protocol)' + +Generated by OpenAPI Generator (https://openapi-generator.tech) + +Do not edit the class manually. + +""" + +from __future__ import annotations + +from pydantic import ( + ConfigDict, + Field, + StrictInt, + StrictStr, +) +from waylay.sdk.api._models import BaseModel as WaylayBaseModel + + +class DataSetWindow(WaylayBaseModel): + """Data Window. Statistics of the time axis of a data set. Present with render option `include_window_spec=true`.\",.""" + + until: StrictInt = Field( + description="Exclusive higher bound of the time axis in unix epoch milliseconds." + ) + window: StrictStr = Field(description="Time axis length as ISO8601 period.") + freq: StrictStr = Field( + description="Time axis aggregation interval as an ISO8601 period ." + ) + + model_config = ConfigDict( + populate_by_name=True, protected_namespaces=(), extra="allow" + ) diff --git a/waylay-sdk-queries-types/src/waylay/services/queries/models/datum.py b/waylay-sdk-queries-types/src/waylay/services/queries/models/datum.py new file mode 100644 index 0000000..5abb53f --- /dev/null +++ b/waylay-sdk-queries-types/src/waylay/services/queries/models/datum.py @@ -0,0 +1,23 @@ +# coding: utf-8 +"""Waylay Query: timeseries queries (v1 protocol) models. + +This code was generated from the OpenAPI documentation of 'Waylay Query: timeseries queries (v1 protocol)' + +Generated by OpenAPI Generator (https://openapi-generator.tech) + +Do not edit the class manually. + +""" + +from __future__ import annotations + +from typing import ( + Union, +) + +from typing_extensions import ( + Annotated, # >=3.9 +) + +Datum = Union[Annotated[float, ""], Annotated[str, ""], Annotated[bool, ""]] +"""A single metric value for a timeseries. A null value indicates that no (aggregated/interpolated) value exists for the corresponding timestamp..""" diff --git a/waylay-sdk-queries-types/src/waylay/services/queries/models/default_aggregation.py b/waylay-sdk-queries-types/src/waylay/services/queries/models/default_aggregation.py new file mode 100644 index 0000000..145dd32 --- /dev/null +++ b/waylay-sdk-queries-types/src/waylay/services/queries/models/default_aggregation.py @@ -0,0 +1,43 @@ +# coding: utf-8 +"""Waylay Query: timeseries queries (v1 protocol) models. + +This code was generated from the OpenAPI documentation of 'Waylay Query: timeseries queries (v1 protocol)' + +Generated by OpenAPI Generator (https://openapi-generator.tech) + +Do not edit the class manually. + +""" + +from __future__ import annotations + +from typing import ( + Dict, + List, + Union, +) + +from typing_extensions import ( + Annotated, # >=3.9 +) + +from ..models.aggregation_by_resource_and_metric import AggregationByResourceAndMetric +from ..models.aggregation_by_resource_or_metric import AggregationByResourceOrMetric +from ..models.aggregation_method import AggregationMethod +from ..models.aggregations_inner import AggregationsInner + +DefaultAggregation = Union[ + Annotated[AggregationMethod, ""], + Annotated[ + List[AggregationsInner], "Aggregation methods, leading to sepearate series." + ], + Annotated[ + Dict[str, AggregationByResourceOrMetric], + "Aggregation methods specified per resource or metric.", + ], + Annotated[ + Dict[str, AggregationByResourceAndMetric], + "Aggregation methods specified per resource and metric.", + ], +] +"""Default aggregation method(s) for the series in the query..""" diff --git a/waylay-sdk-queries-types/src/waylay/services/queries/models/default_interpolation.py b/waylay-sdk-queries-types/src/waylay/services/queries/models/default_interpolation.py new file mode 100644 index 0000000..576c90d --- /dev/null +++ b/waylay-sdk-queries-types/src/waylay/services/queries/models/default_interpolation.py @@ -0,0 +1,28 @@ +# coding: utf-8 +"""Waylay Query: timeseries queries (v1 protocol) models. + +This code was generated from the OpenAPI documentation of 'Waylay Query: timeseries queries (v1 protocol)' + +Generated by OpenAPI Generator (https://openapi-generator.tech) + +Do not edit the class manually. + +""" + +from __future__ import annotations + +from typing import ( + Union, +) + +from typing_extensions import ( + Annotated, # >=3.9 +) + +from ..models.interpolation_method import InterpolationMethod +from ..models.interpolation_spec import InterpolationSpec + +DefaultInterpolation = Union[ + Annotated[InterpolationMethod, ""], Annotated[InterpolationSpec, ""] +] +"""Default Interpolation method for the series (if aggregated)..""" diff --git a/waylay-sdk-queries-types/src/waylay/services/queries/models/delete_response.py b/waylay-sdk-queries-types/src/waylay/services/queries/models/delete_response.py new file mode 100644 index 0000000..226aaa8 --- /dev/null +++ b/waylay-sdk-queries-types/src/waylay/services/queries/models/delete_response.py @@ -0,0 +1,42 @@ +# coding: utf-8 +"""Waylay Query: timeseries queries (v1 protocol) models. + +This code was generated from the OpenAPI documentation of 'Waylay Query: timeseries queries (v1 protocol)' + +Generated by OpenAPI Generator (https://openapi-generator.tech) + +Do not edit the class manually. + +""" + +from __future__ import annotations + +from typing import Dict, List + +from pydantic import ( + ConfigDict, + Field, +) +from waylay.sdk.api._models import BaseModel as WaylayBaseModel + +from ..models.embeddings import Embeddings +from ..models.links import Links +from ..models.message import Message + + +class DeleteResponse(WaylayBaseModel): + """Confirmation of a delete request..""" + + messages: List[Message] | None = None + links: Dict[str, Links] | None = Field( + default=None, description="HAL links, indexed by link relation.", alias="_links" + ) + embeddings: Dict[str, Embeddings] | None = Field( + default=None, + description="Hal embeddings, indexed by relation.", + alias="_embeddings", + ) + + model_config = ConfigDict( + populate_by_name=True, protected_namespaces=(), extra="allow" + ) diff --git a/waylay-sdk-queries-types/src/waylay/services/queries/models/embeddings.py b/waylay-sdk-queries-types/src/waylay/services/queries/models/embeddings.py new file mode 100644 index 0000000..12cd697 --- /dev/null +++ b/waylay-sdk-queries-types/src/waylay/services/queries/models/embeddings.py @@ -0,0 +1,28 @@ +# coding: utf-8 +"""Waylay Query: timeseries queries (v1 protocol) models. + +This code was generated from the OpenAPI documentation of 'Waylay Query: timeseries queries (v1 protocol)' + +Generated by OpenAPI Generator (https://openapi-generator.tech) + +Do not edit the class manually. + +""" + +from __future__ import annotations + +from typing import ( + Dict, + List, + Union, +) + +from typing_extensions import ( + Annotated, # >=3.9 +) + +Embeddings = Union[ + Annotated[Dict[str, object], "Any embedded representation in a HAL response."], + Annotated[List[Dict[str, object]], ""], +] +"""Embeddings.""" diff --git a/waylay-sdk-queries-types/src/waylay/services/queries/models/from_override.py b/waylay-sdk-queries-types/src/waylay/services/queries/models/from_override.py new file mode 100644 index 0000000..87017aa --- /dev/null +++ b/waylay-sdk-queries-types/src/waylay/services/queries/models/from_override.py @@ -0,0 +1,34 @@ +# coding: utf-8 +"""Waylay Query: timeseries queries (v1 protocol) models. + +This code was generated from the OpenAPI documentation of 'Waylay Query: timeseries queries (v1 protocol)' + +Generated by OpenAPI Generator (https://openapi-generator.tech) + +Do not edit the class manually. + +""" + +from __future__ import annotations + +from datetime import datetime +from typing import ( + Union, +) + +from typing_extensions import ( + Annotated, # >=3.9 +) + +FromOverride = Union[ + Annotated[ + datetime, + "A date or date-time in [ISO8601](https://en.wikipedia.org/wiki/ISO_8601#Combined_date_and_time_representations) format. When no timezone is specified, the UTC timezone is assumed (`+00:00`)", + ], + Annotated[int, "Absolute timestamp milliseconds in unix epoch since 1970-01-01."], + Annotated[ + str, + "Specifies a timestamp before _now_ as a period in [ISO8601 duration](https://en.wikipedia.org/wiki/ISO_8601#Durations) format.", + ], +] +"""FromOverride.""" diff --git a/waylay-sdk-queries-types/src/waylay/services/queries/models/grouping_interval.py b/waylay-sdk-queries-types/src/waylay/services/queries/models/grouping_interval.py new file mode 100644 index 0000000..85bf912 --- /dev/null +++ b/waylay-sdk-queries-types/src/waylay/services/queries/models/grouping_interval.py @@ -0,0 +1,31 @@ +# coding: utf-8 +"""Waylay Query: timeseries queries (v1 protocol) models. + +This code was generated from the OpenAPI documentation of 'Waylay Query: timeseries queries (v1 protocol)' + +Generated by OpenAPI Generator (https://openapi-generator.tech) + +Do not edit the class manually. + +""" + +from __future__ import annotations + +from typing import ( + Union, +) + +from typing_extensions import ( + Annotated, # >=3.9 +) + +from ..models.grouping_interval_override_one_of import GroupingIntervalOverrideOneOf + +GroupingInterval = Union[ + Annotated[ + str, + "A period in [ISO8601 duration](https://en.wikipedia.org/wiki/ISO_8601#Durations) format.", + ], + Annotated[GroupingIntervalOverrideOneOf, ""], +] +"""Interval used to aggregate or regularize data. One of the [time line](https://docs.waylay.io/#/api/query/?id=time-line-properties) specifiers..""" diff --git a/waylay-sdk-queries-types/src/waylay/services/queries/models/grouping_interval_override.py b/waylay-sdk-queries-types/src/waylay/services/queries/models/grouping_interval_override.py new file mode 100644 index 0000000..1022229 --- /dev/null +++ b/waylay-sdk-queries-types/src/waylay/services/queries/models/grouping_interval_override.py @@ -0,0 +1,31 @@ +# coding: utf-8 +"""Waylay Query: timeseries queries (v1 protocol) models. + +This code was generated from the OpenAPI documentation of 'Waylay Query: timeseries queries (v1 protocol)' + +Generated by OpenAPI Generator (https://openapi-generator.tech) + +Do not edit the class manually. + +""" + +from __future__ import annotations + +from typing import ( + Union, +) + +from typing_extensions import ( + Annotated, # >=3.9 +) + +from ..models.grouping_interval_override_one_of import GroupingIntervalOverrideOneOf + +GroupingIntervalOverride = Union[ + Annotated[ + str, + "A period in [ISO8601 duration](https://en.wikipedia.org/wiki/ISO_8601#Durations) format.", + ], + Annotated[GroupingIntervalOverrideOneOf, ""], +] +"""Override for the `freq` query attribute..""" diff --git a/waylay-sdk-queries-types/src/waylay/services/queries/models/grouping_interval_override_one_of.py b/waylay-sdk-queries-types/src/waylay/services/queries/models/grouping_interval_override_one_of.py new file mode 100644 index 0000000..b21da63 --- /dev/null +++ b/waylay-sdk-queries-types/src/waylay/services/queries/models/grouping_interval_override_one_of.py @@ -0,0 +1,23 @@ +# coding: utf-8 +"""Waylay Query: timeseries queries (v1 protocol) models. + +This code was generated from the OpenAPI documentation of 'Waylay Query: timeseries queries (v1 protocol)' + +Generated by OpenAPI Generator (https://openapi-generator.tech) + +Do not edit the class manually. + +""" + +from __future__ import annotations + +from enum import Enum + + +class GroupingIntervalOverrideOneOf(str, Enum): + """When `inferred` is specified, the frequency of aggregation will be inferred from the main/first time series. This can be used to regularize the time series.""" + + INFERRED = "inferred" + + def __str__(self) -> str: + return str(self.value) diff --git a/waylay-sdk-queries-types/src/waylay/services/queries/models/hal_link.py b/waylay-sdk-queries-types/src/waylay/services/queries/models/hal_link.py new file mode 100644 index 0000000..b78704c --- /dev/null +++ b/waylay-sdk-queries-types/src/waylay/services/queries/models/hal_link.py @@ -0,0 +1,35 @@ +# coding: utf-8 +"""Waylay Query: timeseries queries (v1 protocol) models. + +This code was generated from the OpenAPI documentation of 'Waylay Query: timeseries queries (v1 protocol)' + +Generated by OpenAPI Generator (https://openapi-generator.tech) + +Do not edit the class manually. + +""" + +from __future__ import annotations + +from pydantic import ( + ConfigDict, + Field, + StrictStr, +) +from waylay.sdk.api._models import BaseModel as WaylayBaseModel + +from ..models.hal_link_method import HALLinkMethod + + +class HALLink(WaylayBaseModel): + """A link target in a HAL response..""" + + href: StrictStr = Field(description="Target url for this link.") + type: StrictStr | None = Field( + default=None, description="Type of the resource referenced by this link." + ) + method: HALLinkMethod | None = None + + model_config = ConfigDict( + populate_by_name=True, protected_namespaces=(), extra="allow" + ) diff --git a/waylay-sdk-queries-types/src/waylay/services/queries/models/hal_link_method.py b/waylay-sdk-queries-types/src/waylay/services/queries/models/hal_link_method.py new file mode 100644 index 0000000..4bf55f7 --- /dev/null +++ b/waylay-sdk-queries-types/src/waylay/services/queries/models/hal_link_method.py @@ -0,0 +1,27 @@ +# coding: utf-8 +"""Waylay Query: timeseries queries (v1 protocol) models. + +This code was generated from the OpenAPI documentation of 'Waylay Query: timeseries queries (v1 protocol)' + +Generated by OpenAPI Generator (https://openapi-generator.tech) + +Do not edit the class manually. + +""" + +from __future__ import annotations + +from enum import Enum + + +class HALLinkMethod(str, Enum): + """An http method that can be specified in a HAL link..""" + + GET = "GET" + POST = "POST" + PUT = "PUT" + DELETE = "DELETE" + PATCH = "PATCH" + + def __str__(self) -> str: + return str(self.value) diff --git a/waylay-sdk-queries-types/src/waylay/services/queries/models/hal_link_role.py b/waylay-sdk-queries-types/src/waylay/services/queries/models/hal_link_role.py new file mode 100644 index 0000000..ca755a1 --- /dev/null +++ b/waylay-sdk-queries-types/src/waylay/services/queries/models/hal_link_role.py @@ -0,0 +1,28 @@ +# coding: utf-8 +"""Waylay Query: timeseries queries (v1 protocol) models. + +This code was generated from the OpenAPI documentation of 'Waylay Query: timeseries queries (v1 protocol)' + +Generated by OpenAPI Generator (https://openapi-generator.tech) + +Do not edit the class manually. + +""" + +from __future__ import annotations + +from enum import Enum + + +class HALLinkRole(str, Enum): + """Supported link and embedding roles in HAL representations..""" + + SELF = "self" + FIRST = "first" + PREV = "prev" + NEXT = "next" + LAST = "last" + EXECUTE = "execute" + + def __str__(self) -> str: + return str(self.value) diff --git a/waylay-sdk-queries-types/src/waylay/services/queries/models/header_array_option.py b/waylay-sdk-queries-types/src/waylay/services/queries/models/header_array_option.py new file mode 100644 index 0000000..ad220a4 --- /dev/null +++ b/waylay-sdk-queries-types/src/waylay/services/queries/models/header_array_option.py @@ -0,0 +1,24 @@ +# coding: utf-8 +"""Waylay Query: timeseries queries (v1 protocol) models. + +This code was generated from the OpenAPI documentation of 'Waylay Query: timeseries queries (v1 protocol)' + +Generated by OpenAPI Generator (https://openapi-generator.tech) + +Do not edit the class manually. + +""" + +from __future__ import annotations + +from enum import Enum + + +class HeaderArrayOption(str, Enum): + """Allowed values for the render.header_array option..""" + + ROW = "row" + COLUMN = "column" + + def __str__(self) -> str: + return str(self.value) diff --git a/waylay-sdk-queries-types/src/waylay/services/queries/models/hierarchical.py b/waylay-sdk-queries-types/src/waylay/services/queries/models/hierarchical.py new file mode 100644 index 0000000..9afb977 --- /dev/null +++ b/waylay-sdk-queries-types/src/waylay/services/queries/models/hierarchical.py @@ -0,0 +1,24 @@ +# coding: utf-8 +"""Waylay Query: timeseries queries (v1 protocol) models. + +This code was generated from the OpenAPI documentation of 'Waylay Query: timeseries queries (v1 protocol)' + +Generated by OpenAPI Generator (https://openapi-generator.tech) + +Do not edit the class manually. + +""" + +from __future__ import annotations + +from typing import ( + List, + Union, +) + +from typing_extensions import ( + Annotated, # >=3.9 +) + +Hierarchical = Union[Annotated[bool, ""], Annotated[List[str], ""]] +"""if true, use hierarchical objects to represent multiple row (or column) dimensions, otherwise multi-keys get concatenated with a dot-delimiter. If the value is a list, only these levels are kept as separate levels, while remaining levels get concatenated keys.""" diff --git a/waylay-sdk-queries-types/src/waylay/services/queries/models/http_validation_error.py b/waylay-sdk-queries-types/src/waylay/services/queries/models/http_validation_error.py new file mode 100644 index 0000000..22308a1 --- /dev/null +++ b/waylay-sdk-queries-types/src/waylay/services/queries/models/http_validation_error.py @@ -0,0 +1,31 @@ +# coding: utf-8 +"""Waylay Query: timeseries queries (v1 protocol) models. + +This code was generated from the OpenAPI documentation of 'Waylay Query: timeseries queries (v1 protocol)' + +Generated by OpenAPI Generator (https://openapi-generator.tech) + +Do not edit the class manually. + +""" + +from __future__ import annotations + +from typing import List + +from pydantic import ( + ConfigDict, +) +from waylay.sdk.api._models import BaseModel as WaylayBaseModel + +from ..models.validation_error import ValidationError + + +class HTTPValidationError(WaylayBaseModel): + """HTTPValidationError.""" + + detail: List[ValidationError] | None = None + + model_config = ConfigDict( + populate_by_name=True, protected_namespaces=(), extra="ignore" + ) diff --git a/waylay-sdk-queries-types/src/waylay/services/queries/models/interpolation.py b/waylay-sdk-queries-types/src/waylay/services/queries/models/interpolation.py new file mode 100644 index 0000000..a3adbf0 --- /dev/null +++ b/waylay-sdk-queries-types/src/waylay/services/queries/models/interpolation.py @@ -0,0 +1,28 @@ +# coding: utf-8 +"""Waylay Query: timeseries queries (v1 protocol) models. + +This code was generated from the OpenAPI documentation of 'Waylay Query: timeseries queries (v1 protocol)' + +Generated by OpenAPI Generator (https://openapi-generator.tech) + +Do not edit the class manually. + +""" + +from __future__ import annotations + +from typing import ( + Union, +) + +from typing_extensions import ( + Annotated, # >=3.9 +) + +from ..models.interpolation_method import InterpolationMethod +from ..models.interpolation_spec import InterpolationSpec + +Interpolation = Union[ + Annotated[InterpolationMethod, ""], Annotated[InterpolationSpec, ""] +] +"""Interpolation.""" diff --git a/waylay-sdk-queries-types/src/waylay/services/queries/models/interpolation_method.py b/waylay-sdk-queries-types/src/waylay/services/queries/models/interpolation_method.py new file mode 100644 index 0000000..88015ef --- /dev/null +++ b/waylay-sdk-queries-types/src/waylay/services/queries/models/interpolation_method.py @@ -0,0 +1,53 @@ +# coding: utf-8 +"""Waylay Query: timeseries queries (v1 protocol) models. + +This code was generated from the OpenAPI documentation of 'Waylay Query: timeseries queries (v1 protocol)' + +Generated by OpenAPI Generator (https://openapi-generator.tech) + +Do not edit the class manually. + +""" + +from __future__ import annotations + +from typing import ( + Union, +) + +from typing_extensions import ( + Annotated, # >=3.9 +) + +from ..models.interpolation_method_one_of import InterpolationMethodOneOf +from ..models.interpolation_method_one_of1 import InterpolationMethodOneOf1 +from ..models.interpolation_method_one_of2 import InterpolationMethodOneOf2 +from ..models.interpolation_method_one_of3 import InterpolationMethodOneOf3 +from ..models.interpolation_method_one_of4 import InterpolationMethodOneOf4 +from ..models.interpolation_method_one_of5 import InterpolationMethodOneOf5 +from ..models.interpolation_method_one_of6 import InterpolationMethodOneOf6 +from ..models.interpolation_method_one_of7 import InterpolationMethodOneOf7 +from ..models.interpolation_method_one_of8 import InterpolationMethodOneOf8 +from ..models.interpolation_method_one_of9 import InterpolationMethodOneOf9 +from ..models.interpolation_method_one_of10 import InterpolationMethodOneOf10 +from ..models.interpolation_method_one_of11 import InterpolationMethodOneOf11 +from ..models.interpolation_method_one_of12 import InterpolationMethodOneOf12 +from ..models.interpolation_method_one_of13 import InterpolationMethodOneOf13 + +InterpolationMethod = Union[ + Annotated[InterpolationMethodOneOf, ""], + Annotated[InterpolationMethodOneOf1, ""], + Annotated[InterpolationMethodOneOf2, ""], + Annotated[InterpolationMethodOneOf3, ""], + Annotated[InterpolationMethodOneOf4, ""], + Annotated[InterpolationMethodOneOf5, ""], + Annotated[InterpolationMethodOneOf6, ""], + Annotated[InterpolationMethodOneOf7, ""], + Annotated[InterpolationMethodOneOf8, ""], + Annotated[InterpolationMethodOneOf9, ""], + Annotated[InterpolationMethodOneOf10, ""], + Annotated[InterpolationMethodOneOf11, ""], + Annotated[InterpolationMethodOneOf12, ""], + Annotated[InterpolationMethodOneOf13, ""], +] +"""InterpolationMethod.""" diff --git a/waylay-sdk-queries-types/src/waylay/services/queries/models/interpolation_method_one_of.py b/waylay-sdk-queries-types/src/waylay/services/queries/models/interpolation_method_one_of.py new file mode 100644 index 0000000..3d20cad --- /dev/null +++ b/waylay-sdk-queries-types/src/waylay/services/queries/models/interpolation_method_one_of.py @@ -0,0 +1,23 @@ +# coding: utf-8 +"""Waylay Query: timeseries queries (v1 protocol) models. + +This code was generated from the OpenAPI documentation of 'Waylay Query: timeseries queries (v1 protocol)' + +Generated by OpenAPI Generator (https://openapi-generator.tech) + +Do not edit the class manually. + +""" + +from __future__ import annotations + +from enum import Enum + + +class InterpolationMethodOneOf(str, Enum): + """Interpolate with the value of the first observed point. This method also extrapolates..""" + + PAD = "pad" + + def __str__(self) -> str: + return str(self.value) diff --git a/waylay-sdk-queries-types/src/waylay/services/queries/models/interpolation_method_one_of1.py b/waylay-sdk-queries-types/src/waylay/services/queries/models/interpolation_method_one_of1.py new file mode 100644 index 0000000..f9d2eaf --- /dev/null +++ b/waylay-sdk-queries-types/src/waylay/services/queries/models/interpolation_method_one_of1.py @@ -0,0 +1,23 @@ +# coding: utf-8 +"""Waylay Query: timeseries queries (v1 protocol) models. + +This code was generated from the OpenAPI documentation of 'Waylay Query: timeseries queries (v1 protocol)' + +Generated by OpenAPI Generator (https://openapi-generator.tech) + +Do not edit the class manually. + +""" + +from __future__ import annotations + +from enum import Enum + + +class InterpolationMethodOneOf1(str, Enum): + """Interpolate with a fixed, user-specified value. This method also extrapolates..""" + + FIXED = "fixed" + + def __str__(self) -> str: + return str(self.value) diff --git a/waylay-sdk-queries-types/src/waylay/services/queries/models/interpolation_method_one_of10.py b/waylay-sdk-queries-types/src/waylay/services/queries/models/interpolation_method_one_of10.py new file mode 100644 index 0000000..70f3251 --- /dev/null +++ b/waylay-sdk-queries-types/src/waylay/services/queries/models/interpolation_method_one_of10.py @@ -0,0 +1,23 @@ +# coding: utf-8 +"""Waylay Query: timeseries queries (v1 protocol) models. + +This code was generated from the OpenAPI documentation of 'Waylay Query: timeseries queries (v1 protocol)' + +Generated by OpenAPI Generator (https://openapi-generator.tech) + +Do not edit the class manually. + +""" + +from __future__ import annotations + +from enum import Enum + + +class InterpolationMethodOneOf10(str, Enum): + """Interpolate with a spline function of a user-specified order..""" + + SPLINE = "spline" + + def __str__(self) -> str: + return str(self.value) diff --git a/waylay-sdk-queries-types/src/waylay/services/queries/models/interpolation_method_one_of11.py b/waylay-sdk-queries-types/src/waylay/services/queries/models/interpolation_method_one_of11.py new file mode 100644 index 0000000..ef92d1c --- /dev/null +++ b/waylay-sdk-queries-types/src/waylay/services/queries/models/interpolation_method_one_of11.py @@ -0,0 +1,23 @@ +# coding: utf-8 +"""Waylay Query: timeseries queries (v1 protocol) models. + +This code was generated from the OpenAPI documentation of 'Waylay Query: timeseries queries (v1 protocol)' + +Generated by OpenAPI Generator (https://openapi-generator.tech) + +Do not edit the class manually. + +""" + +from __future__ import annotations + +from enum import Enum + + +class InterpolationMethodOneOf11(str, Enum): + """Interpolate with the derivative of order 1..""" + + FROM_DERIVATIVES = "from_derivatives" + + def __str__(self) -> str: + return str(self.value) diff --git a/waylay-sdk-queries-types/src/waylay/services/queries/models/interpolation_method_one_of12.py b/waylay-sdk-queries-types/src/waylay/services/queries/models/interpolation_method_one_of12.py new file mode 100644 index 0000000..544ef7c --- /dev/null +++ b/waylay-sdk-queries-types/src/waylay/services/queries/models/interpolation_method_one_of12.py @@ -0,0 +1,23 @@ +# coding: utf-8 +"""Waylay Query: timeseries queries (v1 protocol) models. + +This code was generated from the OpenAPI documentation of 'Waylay Query: timeseries queries (v1 protocol)' + +Generated by OpenAPI Generator (https://openapi-generator.tech) + +Do not edit the class manually. + +""" + +from __future__ import annotations + +from enum import Enum + + +class InterpolationMethodOneOf12(str, Enum): + """Interpolate with a piecewise cubic spline function..""" + + PCHIP = "pchip" + + def __str__(self) -> str: + return str(self.value) diff --git a/waylay-sdk-queries-types/src/waylay/services/queries/models/interpolation_method_one_of13.py b/waylay-sdk-queries-types/src/waylay/services/queries/models/interpolation_method_one_of13.py new file mode 100644 index 0000000..84e800f --- /dev/null +++ b/waylay-sdk-queries-types/src/waylay/services/queries/models/interpolation_method_one_of13.py @@ -0,0 +1,23 @@ +# coding: utf-8 +"""Waylay Query: timeseries queries (v1 protocol) models. + +This code was generated from the OpenAPI documentation of 'Waylay Query: timeseries queries (v1 protocol)' + +Generated by OpenAPI Generator (https://openapi-generator.tech) + +Do not edit the class manually. + +""" + +from __future__ import annotations + +from enum import Enum + + +class InterpolationMethodOneOf13(str, Enum): + """Interpolate with a non-smoothing spline of order 2, called Akima interpolation..""" + + AKIMA = "akima" + + def __str__(self) -> str: + return str(self.value) diff --git a/waylay-sdk-queries-types/src/waylay/services/queries/models/interpolation_method_one_of2.py b/waylay-sdk-queries-types/src/waylay/services/queries/models/interpolation_method_one_of2.py new file mode 100644 index 0000000..65b89fa --- /dev/null +++ b/waylay-sdk-queries-types/src/waylay/services/queries/models/interpolation_method_one_of2.py @@ -0,0 +1,23 @@ +# coding: utf-8 +"""Waylay Query: timeseries queries (v1 protocol) models. + +This code was generated from the OpenAPI documentation of 'Waylay Query: timeseries queries (v1 protocol)' + +Generated by OpenAPI Generator (https://openapi-generator.tech) + +Do not edit the class manually. + +""" + +from __future__ import annotations + +from enum import Enum + + +class InterpolationMethodOneOf2(str, Enum): + """Same as pad, but using the last observed value. This method also extrapolates.""" + + BACKFILL = "backfill" + + def __str__(self) -> str: + return str(self.value) diff --git a/waylay-sdk-queries-types/src/waylay/services/queries/models/interpolation_method_one_of3.py b/waylay-sdk-queries-types/src/waylay/services/queries/models/interpolation_method_one_of3.py new file mode 100644 index 0000000..556e37e --- /dev/null +++ b/waylay-sdk-queries-types/src/waylay/services/queries/models/interpolation_method_one_of3.py @@ -0,0 +1,23 @@ +# coding: utf-8 +"""Waylay Query: timeseries queries (v1 protocol) models. + +This code was generated from the OpenAPI documentation of 'Waylay Query: timeseries queries (v1 protocol)' + +Generated by OpenAPI Generator (https://openapi-generator.tech) + +Do not edit the class manually. + +""" + +from __future__ import annotations + +from enum import Enum + + +class InterpolationMethodOneOf3(str, Enum): + """Linearly go from the first observed value of the gap to the last observed oneThis method also extrapolates.""" + + LINEAR = "linear" + + def __str__(self) -> str: + return str(self.value) diff --git a/waylay-sdk-queries-types/src/waylay/services/queries/models/interpolation_method_one_of4.py b/waylay-sdk-queries-types/src/waylay/services/queries/models/interpolation_method_one_of4.py new file mode 100644 index 0000000..c29bb4c --- /dev/null +++ b/waylay-sdk-queries-types/src/waylay/services/queries/models/interpolation_method_one_of4.py @@ -0,0 +1,23 @@ +# coding: utf-8 +"""Waylay Query: timeseries queries (v1 protocol) models. + +This code was generated from the OpenAPI documentation of 'Waylay Query: timeseries queries (v1 protocol)' + +Generated by OpenAPI Generator (https://openapi-generator.tech) + +Do not edit the class manually. + +""" + +from __future__ import annotations + +from enum import Enum + + +class InterpolationMethodOneOf4(str, Enum): + """Use the value that is closest in time..""" + + NEAREST = "nearest" + + def __str__(self) -> str: + return str(self.value) diff --git a/waylay-sdk-queries-types/src/waylay/services/queries/models/interpolation_method_one_of5.py b/waylay-sdk-queries-types/src/waylay/services/queries/models/interpolation_method_one_of5.py new file mode 100644 index 0000000..edeb2f1 --- /dev/null +++ b/waylay-sdk-queries-types/src/waylay/services/queries/models/interpolation_method_one_of5.py @@ -0,0 +1,23 @@ +# coding: utf-8 +"""Waylay Query: timeseries queries (v1 protocol) models. + +This code was generated from the OpenAPI documentation of 'Waylay Query: timeseries queries (v1 protocol)' + +Generated by OpenAPI Generator (https://openapi-generator.tech) + +Do not edit the class manually. + +""" + +from __future__ import annotations + +from enum import Enum + + +class InterpolationMethodOneOf5(str, Enum): + """Interpolate with a spline function of order 0, which is a piecewise polynomial..""" + + ZERO = "zero" + + def __str__(self) -> str: + return str(self.value) diff --git a/waylay-sdk-queries-types/src/waylay/services/queries/models/interpolation_method_one_of6.py b/waylay-sdk-queries-types/src/waylay/services/queries/models/interpolation_method_one_of6.py new file mode 100644 index 0000000..5cef45a --- /dev/null +++ b/waylay-sdk-queries-types/src/waylay/services/queries/models/interpolation_method_one_of6.py @@ -0,0 +1,23 @@ +# coding: utf-8 +"""Waylay Query: timeseries queries (v1 protocol) models. + +This code was generated from the OpenAPI documentation of 'Waylay Query: timeseries queries (v1 protocol)' + +Generated by OpenAPI Generator (https://openapi-generator.tech) + +Do not edit the class manually. + +""" + +from __future__ import annotations + +from enum import Enum + + +class InterpolationMethodOneOf6(str, Enum): + """Interpolate with a spline function of order 1, which is a piecewise polynomial..""" + + SLINEAR = "slinear" + + def __str__(self) -> str: + return str(self.value) diff --git a/waylay-sdk-queries-types/src/waylay/services/queries/models/interpolation_method_one_of7.py b/waylay-sdk-queries-types/src/waylay/services/queries/models/interpolation_method_one_of7.py new file mode 100644 index 0000000..44afd80 --- /dev/null +++ b/waylay-sdk-queries-types/src/waylay/services/queries/models/interpolation_method_one_of7.py @@ -0,0 +1,23 @@ +# coding: utf-8 +"""Waylay Query: timeseries queries (v1 protocol) models. + +This code was generated from the OpenAPI documentation of 'Waylay Query: timeseries queries (v1 protocol)' + +Generated by OpenAPI Generator (https://openapi-generator.tech) + +Do not edit the class manually. + +""" + +from __future__ import annotations + +from enum import Enum + + +class InterpolationMethodOneOf7(str, Enum): + """Interpolate with a spline function of order 2, which is a piecewise polynomial..""" + + QUADRATIC = "quadratic" + + def __str__(self) -> str: + return str(self.value) diff --git a/waylay-sdk-queries-types/src/waylay/services/queries/models/interpolation_method_one_of8.py b/waylay-sdk-queries-types/src/waylay/services/queries/models/interpolation_method_one_of8.py new file mode 100644 index 0000000..b6bef66 --- /dev/null +++ b/waylay-sdk-queries-types/src/waylay/services/queries/models/interpolation_method_one_of8.py @@ -0,0 +1,23 @@ +# coding: utf-8 +"""Waylay Query: timeseries queries (v1 protocol) models. + +This code was generated from the OpenAPI documentation of 'Waylay Query: timeseries queries (v1 protocol)' + +Generated by OpenAPI Generator (https://openapi-generator.tech) + +Do not edit the class manually. + +""" + +from __future__ import annotations + +from enum import Enum + + +class InterpolationMethodOneOf8(str, Enum): + """Interpolate with a spline function of order 3, which is a piecewise polynomial..""" + + CUBIC = "cubic" + + def __str__(self) -> str: + return str(self.value) diff --git a/waylay-sdk-queries-types/src/waylay/services/queries/models/interpolation_method_one_of9.py b/waylay-sdk-queries-types/src/waylay/services/queries/models/interpolation_method_one_of9.py new file mode 100644 index 0000000..10fef22 --- /dev/null +++ b/waylay-sdk-queries-types/src/waylay/services/queries/models/interpolation_method_one_of9.py @@ -0,0 +1,23 @@ +# coding: utf-8 +"""Waylay Query: timeseries queries (v1 protocol) models. + +This code was generated from the OpenAPI documentation of 'Waylay Query: timeseries queries (v1 protocol)' + +Generated by OpenAPI Generator (https://openapi-generator.tech) + +Do not edit the class manually. + +""" + +from __future__ import annotations + +from enum import Enum + + +class InterpolationMethodOneOf9(str, Enum): + """Interpolate with a polynomial of the lowest possible degree passing trough the data points..""" + + POLYNOMIAL = "polynomial" + + def __str__(self) -> str: + return str(self.value) diff --git a/waylay-sdk-queries-types/src/waylay/services/queries/models/interpolation_spec.py b/waylay-sdk-queries-types/src/waylay/services/queries/models/interpolation_spec.py new file mode 100644 index 0000000..2f6a0a0 --- /dev/null +++ b/waylay-sdk-queries-types/src/waylay/services/queries/models/interpolation_spec.py @@ -0,0 +1,39 @@ +# coding: utf-8 +"""Waylay Query: timeseries queries (v1 protocol) models. + +This code was generated from the OpenAPI documentation of 'Waylay Query: timeseries queries (v1 protocol)' + +Generated by OpenAPI Generator (https://openapi-generator.tech) + +Do not edit the class manually. + +""" + +from __future__ import annotations + +from pydantic import ( + ConfigDict, + Field, + StrictInt, +) +from waylay.sdk.api._models import BaseModel as WaylayBaseModel + +from ..models.interpolation_method import InterpolationMethod + + +class InterpolationSpec(WaylayBaseModel): + """Defines whether, and how to treat missing values. This can occur in two circumstances when aggregating (setting a sample frequency): * missing values: if there are missing (or invalid) values stored for a given freq-interval, \"interpolation\" specifies how to compute these. * down-sampling: when the specified freq is smaller than the series’ actual frequency. \"interpolation\" specifies how to compute intermediate values..""" + + method: InterpolationMethod + value: StrictInt | None = Field( + default=None, + description="Optional parameter value for the interpolation method (see method description).", + ) + order: StrictInt | None = Field( + default=None, + description="Optional order parameter for the interpolation method (see method description).", + ) + + model_config = ConfigDict( + populate_by_name=True, protected_namespaces=(), extra="allow" + ) diff --git a/waylay-sdk-queries-types/src/waylay/services/queries/models/links.py b/waylay-sdk-queries-types/src/waylay/services/queries/models/links.py new file mode 100644 index 0000000..2e82141 --- /dev/null +++ b/waylay-sdk-queries-types/src/waylay/services/queries/models/links.py @@ -0,0 +1,26 @@ +# coding: utf-8 +"""Waylay Query: timeseries queries (v1 protocol) models. + +This code was generated from the OpenAPI documentation of 'Waylay Query: timeseries queries (v1 protocol)' + +Generated by OpenAPI Generator (https://openapi-generator.tech) + +Do not edit the class manually. + +""" + +from __future__ import annotations + +from typing import ( + List, + Union, +) + +from typing_extensions import ( + Annotated, # >=3.9 +) + +from ..models.hal_link import HALLink + +Links = Union[Annotated[HALLink, ""], Annotated[List[HALLink], ""]] +"""Links.""" diff --git a/waylay-sdk-queries-types/src/waylay/services/queries/models/location_inner.py b/waylay-sdk-queries-types/src/waylay/services/queries/models/location_inner.py new file mode 100644 index 0000000..47bea4d --- /dev/null +++ b/waylay-sdk-queries-types/src/waylay/services/queries/models/location_inner.py @@ -0,0 +1,23 @@ +# coding: utf-8 +"""Waylay Query: timeseries queries (v1 protocol) models. + +This code was generated from the OpenAPI documentation of 'Waylay Query: timeseries queries (v1 protocol)' + +Generated by OpenAPI Generator (https://openapi-generator.tech) + +Do not edit the class manually. + +""" + +from __future__ import annotations + +from typing import ( + Union, +) + +from typing_extensions import ( + Annotated, # >=3.9 +) + +LocationInner = Union[Annotated[str, ""], Annotated[int, ""]] +"""LocationInner.""" diff --git a/waylay-sdk-queries-types/src/waylay/services/queries/models/message.py b/waylay-sdk-queries-types/src/waylay/services/queries/models/message.py new file mode 100644 index 0000000..7d2dc39 --- /dev/null +++ b/waylay-sdk-queries-types/src/waylay/services/queries/models/message.py @@ -0,0 +1,35 @@ +# coding: utf-8 +"""Waylay Query: timeseries queries (v1 protocol) models. + +This code was generated from the OpenAPI documentation of 'Waylay Query: timeseries queries (v1 protocol)' + +Generated by OpenAPI Generator (https://openapi-generator.tech) + +Do not edit the class manually. + +""" + +from __future__ import annotations + +from typing import Any, Dict + +from pydantic import ( + ConfigDict, + StrictStr, +) +from waylay.sdk.api._models import BaseModel as WaylayBaseModel + +from ..models.message_level import MessageLevel + + +class Message(WaylayBaseModel): + """Individual (info/warning/error) message in a response..""" + + code: StrictStr | None = None + message: StrictStr + level: MessageLevel | None = MessageLevel.INFO + args: Dict[str, Any] | None = None + + model_config = ConfigDict( + populate_by_name=True, protected_namespaces=(), extra="ignore" + ) diff --git a/waylay-sdk-queries-types/src/waylay/services/queries/models/message_arguments.py b/waylay-sdk-queries-types/src/waylay/services/queries/models/message_arguments.py new file mode 100644 index 0000000..fa5d17d --- /dev/null +++ b/waylay-sdk-queries-types/src/waylay/services/queries/models/message_arguments.py @@ -0,0 +1,25 @@ +# coding: utf-8 +"""Waylay Query: timeseries queries (v1 protocol) models. + +This code was generated from the OpenAPI documentation of 'Waylay Query: timeseries queries (v1 protocol)' + +Generated by OpenAPI Generator (https://openapi-generator.tech) + +Do not edit the class manually. + +""" + +from __future__ import annotations + +from typing import ( + Union, +) + +from typing_extensions import ( + Annotated, # >=3.9 +) + +from ..models.message_properties import MessageProperties + +MessageArguments = Union[Annotated[str, ""], Annotated[MessageProperties, ""]] +"""MessageArguments.""" diff --git a/waylay-sdk-queries-types/src/waylay/services/queries/models/message_level.py b/waylay-sdk-queries-types/src/waylay/services/queries/models/message_level.py new file mode 100644 index 0000000..05f3671 --- /dev/null +++ b/waylay-sdk-queries-types/src/waylay/services/queries/models/message_level.py @@ -0,0 +1,27 @@ +# coding: utf-8 +"""Waylay Query: timeseries queries (v1 protocol) models. + +This code was generated from the OpenAPI documentation of 'Waylay Query: timeseries queries (v1 protocol)' + +Generated by OpenAPI Generator (https://openapi-generator.tech) + +Do not edit the class manually. + +""" + +from __future__ import annotations + +from enum import Enum + + +class MessageLevel(str, Enum): + """MessageLevel.""" + + DEBUG = "debug" + INFO = "info" + WARNING = "warning" + ERROR = "error" + FATAL = "fatal" + + def __str__(self) -> str: + return str(self.value) diff --git a/waylay-sdk-queries-types/src/waylay/services/queries/models/message_properties.py b/waylay-sdk-queries-types/src/waylay/services/queries/models/message_properties.py new file mode 100644 index 0000000..3bb7616 --- /dev/null +++ b/waylay-sdk-queries-types/src/waylay/services/queries/models/message_properties.py @@ -0,0 +1,29 @@ +# coding: utf-8 +"""Waylay Query: timeseries queries (v1 protocol) models. + +This code was generated from the OpenAPI documentation of 'Waylay Query: timeseries queries (v1 protocol)' + +Generated by OpenAPI Generator (https://openapi-generator.tech) + +Do not edit the class manually. + +""" + +from __future__ import annotations + +from pydantic import ( + ConfigDict, + StrictStr, +) +from waylay.sdk.api._models import BaseModel as WaylayBaseModel + + +class MessageProperties(WaylayBaseModel): + """Additional message arguments..""" + + resource: StrictStr | None = None + metric: StrictStr | None = None + + model_config = ConfigDict( + populate_by_name=True, protected_namespaces=(), extra="allow" + ) diff --git a/waylay-sdk-queries-types/src/waylay/services/queries/models/object.py b/waylay-sdk-queries-types/src/waylay/services/queries/models/object.py new file mode 100644 index 0000000..6cbd270 --- /dev/null +++ b/waylay-sdk-queries-types/src/waylay/services/queries/models/object.py @@ -0,0 +1,4 @@ +# workaround definition to resolve the import +# from ..models.object import object +# generated by `vendorExtensions.x-py-model-imports` +object = object diff --git a/waylay-sdk-queries-types/src/waylay/services/queries/models/object_data.py b/waylay-sdk-queries-types/src/waylay/services/queries/models/object_data.py new file mode 100644 index 0000000..514885c --- /dev/null +++ b/waylay-sdk-queries-types/src/waylay/services/queries/models/object_data.py @@ -0,0 +1,54 @@ +# coding: utf-8 +"""Waylay Query: timeseries queries (v1 protocol) models. + +This code was generated from the OpenAPI documentation of 'Waylay Query: timeseries queries (v1 protocol)' + +Generated by OpenAPI Generator (https://openapi-generator.tech) + +Do not edit the class manually. + +""" + +from __future__ import annotations + +from datetime import datetime +from typing import List + +from pydantic import ( + ConfigDict, + Field, + StrictInt, + StrictStr, +) +from waylay.sdk.api._models import BaseModel as WaylayBaseModel + + +class ObjectData(WaylayBaseModel): + """Result data for a timestamp in object format..""" + + timestamp: StrictInt = Field(description="Unix epoch milliseconds timestamp.") + timestamp_iso: datetime | None = Field( + default=None, + description="ISO8601 rendering of the timestamp, present when `render.iso_timestamp=true`", + ) + role: StrictStr | None = Field( + default=None, + description="The role of series specification that was used to compile this data set.", + ) + resource: StrictStr | None = Field( + default=None, description="Series resource id, if applicable for all values." + ) + metric: StrictStr | None = Field( + default=None, description="Series metric, if applicable for all values." + ) + aggregation: StrictStr | None = Field( + default=None, description="Series aggregation, if applicable for all values." + ) + levels: List[StrictStr] | None = Field( + default=None, + description="Attribute level names used to key the values for this observation. Levels that are flattened have a dot-separated key. If all observations have the same attribute for a level, that level might be omitted.", + ) + + model_config = ConfigDict( + populate_by_name=True, protected_namespaces=(), extra="allow" + ) diff --git a/waylay-sdk-queries-types/src/waylay/services/queries/models/object_data_set.py b/waylay-sdk-queries-types/src/waylay/services/queries/models/object_data_set.py new file mode 100644 index 0000000..75fff8e --- /dev/null +++ b/waylay-sdk-queries-types/src/waylay/services/queries/models/object_data_set.py @@ -0,0 +1,35 @@ +# coding: utf-8 +"""Waylay Query: timeseries queries (v1 protocol) models. + +This code was generated from the OpenAPI documentation of 'Waylay Query: timeseries queries (v1 protocol)' + +Generated by OpenAPI Generator (https://openapi-generator.tech) + +Do not edit the class manually. + +""" + +from __future__ import annotations + +from typing import List + +from pydantic import ( + ConfigDict, +) +from waylay.sdk.api._models import BaseModel as WaylayBaseModel + +from ..models.data_set_attributes import DataSetAttributes +from ..models.data_set_window import DataSetWindow +from ..models.object_data import ObjectData + + +class ObjectDataSet(WaylayBaseModel): + """Data result in object format. Result item when render option `render.header_array` is not set. The data values are keyed by their attributes (`resource`, `metric`, `aggregation`), according to the render options: * _hierachical_: for each level, a sub-object is created (e.g. `render.mode=hier_dict`) * _flattened_: the attributes are '.'-separated concatenation of the attributes (e.g `render.mode=flat_dict`) * _mixed_: (.e.g. `render.mode=metric_flat_dict`) a single level (e.g. `metric`) is used as main key, any remaining levels (`resource`,`aggregation`) are indicated with a flattened subkey. When `render.rollup=true`, the attribute levels that are the same for all series are not used as key, but reported as a data or table attribute..""" + + attributes: DataSetAttributes | None = None + window_spec: DataSetWindow | None = None + data: List[ObjectData] + + model_config = ConfigDict( + populate_by_name=True, protected_namespaces=(), extra="allow" + ) diff --git a/waylay-sdk-queries-types/src/waylay/services/queries/models/object_data_value.py b/waylay-sdk-queries-types/src/waylay/services/queries/models/object_data_value.py new file mode 100644 index 0000000..f51d477 --- /dev/null +++ b/waylay-sdk-queries-types/src/waylay/services/queries/models/object_data_value.py @@ -0,0 +1,31 @@ +# coding: utf-8 +"""Waylay Query: timeseries queries (v1 protocol) models. + +This code was generated from the OpenAPI documentation of 'Waylay Query: timeseries queries (v1 protocol)' + +Generated by OpenAPI Generator (https://openapi-generator.tech) + +Do not edit the class manually. + +""" + +from __future__ import annotations + +from typing import ( + Union, +) + +from typing_extensions import ( + Annotated, # >=3.9 +) + +from ..models.datum import Datum + +ObjectDataValue = Union[ + Annotated[ + object, + "Values for the series whose attributes corresponds with the key. Keyed by sub-levels.", + ], + Annotated[Datum, ""], +] +"""ObjectDataValue.""" diff --git a/waylay-sdk-queries-types/src/waylay/services/queries/models/py.typed b/waylay-sdk-queries-types/src/waylay/services/queries/models/py.typed new file mode 100644 index 0000000..e69de29 diff --git a/waylay-sdk-queries-types/src/waylay/services/queries/models/queries_list_response.py b/waylay-sdk-queries-types/src/waylay/services/queries/models/queries_list_response.py new file mode 100644 index 0000000..c2048c5 --- /dev/null +++ b/waylay-sdk-queries-types/src/waylay/services/queries/models/queries_list_response.py @@ -0,0 +1,52 @@ +# coding: utf-8 +"""Waylay Query: timeseries queries (v1 protocol) models. + +This code was generated from the OpenAPI documentation of 'Waylay Query: timeseries queries (v1 protocol)' + +Generated by OpenAPI Generator (https://openapi-generator.tech) + +Do not edit the class manually. + +""" + +from __future__ import annotations + +from typing import List + +from pydantic import ( + ConfigDict, + Field, + StrictInt, +) +from waylay.sdk.api._models import BaseModel as WaylayBaseModel + +from ..models.message import Message +from ..models.query_list_hal_links import QueryListHALLinks +from ..models.query_list_item import QueryListItem + + +class QueriesListResponse(WaylayBaseModel): + """Listing of named queries, with paging links..""" + + messages: List[Message] | None = None + queries: List[QueryListItem] = Field( + description="One page of matching query definitions." + ) + count: StrictInt = Field( + description="Number of query definitions returned in the current response." + ) + offset: StrictInt = Field( + description="Offset in the full listing (skipped definitions)." + ) + limit: StrictInt = Field( + description="Maximal number of query definitions returned in one response." + ) + total_count: StrictInt | None = Field( + default=None, + description="Total number of query definitions matching the filter.", + ) + links: QueryListHALLinks = Field(alias="_links") + + model_config = ConfigDict( + populate_by_name=True, protected_namespaces=(), extra="allow" + ) diff --git a/waylay-sdk-queries-types/src/waylay/services/queries/models/query_definition.py b/waylay-sdk-queries-types/src/waylay/services/queries/models/query_definition.py new file mode 100644 index 0000000..f4f763d --- /dev/null +++ b/waylay-sdk-queries-types/src/waylay/services/queries/models/query_definition.py @@ -0,0 +1,26 @@ +# coding: utf-8 +"""Waylay Query: timeseries queries (v1 protocol) models. + +This code was generated from the OpenAPI documentation of 'Waylay Query: timeseries queries (v1 protocol)' + +Generated by OpenAPI Generator (https://openapi-generator.tech) + +Do not edit the class manually. + +""" + +from __future__ import annotations + +from typing import ( + Union, +) + +from typing_extensions import ( + Annotated, # >=3.9 +) + +from ..models.query_input import QueryInput +from ..models.query_update_input import QueryUpdateInput + +QueryDefinition = Union[Annotated[QueryUpdateInput, ""], Annotated[QueryInput, ""]] +"""QueryDefinition.""" diff --git a/waylay-sdk-queries-types/src/waylay/services/queries/models/query_entity_input.py b/waylay-sdk-queries-types/src/waylay/services/queries/models/query_entity_input.py new file mode 100644 index 0000000..040f6e4 --- /dev/null +++ b/waylay-sdk-queries-types/src/waylay/services/queries/models/query_entity_input.py @@ -0,0 +1,37 @@ +# coding: utf-8 +"""Waylay Query: timeseries queries (v1 protocol) models. + +This code was generated from the OpenAPI documentation of 'Waylay Query: timeseries queries (v1 protocol)' + +Generated by OpenAPI Generator (https://openapi-generator.tech) + +Do not edit the class manually. + +""" + +from __future__ import annotations + +from typing import Any, Dict + +from pydantic import ( + ConfigDict, + Field, + StrictStr, +) +from waylay.sdk.api._models import BaseModel as WaylayBaseModel + +from ..models.query_input import QueryInput + + +class QueryEntityInput(WaylayBaseModel): + """Input data to create a query definition..""" + + name: StrictStr = Field(description="Name of the stored query definition.") + meta: Dict[str, Any] | None = Field( + default=None, description="User metadata for the query definition." + ) + query: QueryInput + + model_config = ConfigDict( + populate_by_name=True, protected_namespaces=(), extra="allow" + ) diff --git a/waylay-sdk-queries-types/src/waylay/services/queries/models/query_execution_message.py b/waylay-sdk-queries-types/src/waylay/services/queries/models/query_execution_message.py new file mode 100644 index 0000000..1663981 --- /dev/null +++ b/waylay-sdk-queries-types/src/waylay/services/queries/models/query_execution_message.py @@ -0,0 +1,43 @@ +# coding: utf-8 +"""Waylay Query: timeseries queries (v1 protocol) models. + +This code was generated from the OpenAPI documentation of 'Waylay Query: timeseries queries (v1 protocol)' + +Generated by OpenAPI Generator (https://openapi-generator.tech) + +Do not edit the class manually. + +""" + +from __future__ import annotations + +from datetime import datetime + +from pydantic import ( + ConfigDict, + Field, + StrictStr, +) +from waylay.sdk.api._models import BaseModel as WaylayBaseModel + +from ..models.cause_exception import CauseException +from ..models.message_arguments import MessageArguments +from ..models.query_execution_message_level import QueryExecutionMessageLevel + + +class QueryExecutionMessage(WaylayBaseModel): + """A message object that informs or warns about a query execution issue..""" + + message: StrictStr = Field(description="A human readable message.") + level: QueryExecutionMessageLevel + timestamp: datetime + action: StrictStr = Field( + description="The request action that caused this message." + ) + category: StrictStr = Field(description="The subsystem that issued this message.") + properties: MessageArguments | None = None + exception: CauseException | None = None + + model_config = ConfigDict( + populate_by_name=True, protected_namespaces=(), extra="allow" + ) diff --git a/waylay-sdk-queries-types/src/waylay/services/queries/models/query_execution_message_level.py b/waylay-sdk-queries-types/src/waylay/services/queries/models/query_execution_message_level.py new file mode 100644 index 0000000..9cf6928 --- /dev/null +++ b/waylay-sdk-queries-types/src/waylay/services/queries/models/query_execution_message_level.py @@ -0,0 +1,26 @@ +# coding: utf-8 +"""Waylay Query: timeseries queries (v1 protocol) models. + +This code was generated from the OpenAPI documentation of 'Waylay Query: timeseries queries (v1 protocol)' + +Generated by OpenAPI Generator (https://openapi-generator.tech) + +Do not edit the class manually. + +""" + +from __future__ import annotations + +from enum import Enum + + +class QueryExecutionMessageLevel(str, Enum): + """QueryExecutionMessageLevel.""" + + DEBUG = "debug" + INFO = "info" + WARNING = "warning" + ERROR = "error" + + def __str__(self) -> str: + return str(self.value) diff --git a/waylay-sdk-queries-types/src/waylay/services/queries/models/query_hal_links.py b/waylay-sdk-queries-types/src/waylay/services/queries/models/query_hal_links.py new file mode 100644 index 0000000..3307223 --- /dev/null +++ b/waylay-sdk-queries-types/src/waylay/services/queries/models/query_hal_links.py @@ -0,0 +1,31 @@ +# coding: utf-8 +"""Waylay Query: timeseries queries (v1 protocol) models. + +This code was generated from the OpenAPI documentation of 'Waylay Query: timeseries queries (v1 protocol)' + +Generated by OpenAPI Generator (https://openapi-generator.tech) + +Do not edit the class manually. + +""" + +from __future__ import annotations + +from pydantic import ( + ConfigDict, + Field, +) +from waylay.sdk.api._models import BaseModel as WaylayBaseModel + +from ..models.hal_link import HALLink + + +class QueryHALLinks(WaylayBaseModel): + """HAL Links for a query entity..""" + + var_self: HALLink = Field(alias="self") + execute: HALLink + + model_config = ConfigDict( + populate_by_name=True, protected_namespaces=(), extra="allow" + ) diff --git a/waylay-sdk-queries-types/src/waylay/services/queries/models/query_input.py b/waylay-sdk-queries-types/src/waylay/services/queries/models/query_input.py new file mode 100644 index 0000000..291f029 --- /dev/null +++ b/waylay-sdk-queries-types/src/waylay/services/queries/models/query_input.py @@ -0,0 +1,63 @@ +# coding: utf-8 +"""Waylay Query: timeseries queries (v1 protocol) models. + +This code was generated from the OpenAPI documentation of 'Waylay Query: timeseries queries (v1 protocol)' + +Generated by OpenAPI Generator (https://openapi-generator.tech) + +Do not edit the class manually. + +""" + +from __future__ import annotations + +from typing import List + +from pydantic import ( + ConfigDict, + Field, + StrictInt, + StrictStr, +) +from waylay.sdk.api._models import BaseModel as WaylayBaseModel + +from ..models.alignment import Alignment +from ..models.default_aggregation import DefaultAggregation +from ..models.default_interpolation import DefaultInterpolation +from ..models.grouping_interval import GroupingInterval +from ..models.render import Render +from ..models.series_spec import SeriesSpec +from ..models.time_window_from import TimeWindowFrom +from ..models.time_window_until import TimeWindowUntil +from ..models.window import Window + + +class QueryInput(WaylayBaseModel): + """Query definition for a Waylay analytics query. See also [api docs](https://docs.waylay.io/#/api/query/?id=data-query-json-representation)..""" + + resource: StrictStr | None = Field( + default=None, description="Default resource for the series in the query." + ) + metric: StrictStr | None = Field( + default=None, description="Default metric for the series in the query." + ) + aggregation: DefaultAggregation | None = None + interpolation: DefaultInterpolation | None = None + freq: GroupingInterval | None = None + var_from: TimeWindowFrom | None = Field(default=None, alias="from") + until: TimeWindowUntil | None = None + window: Window | None = None + periods: StrictInt | None = Field( + default=None, + description="The size of the time window in number of `freq` units. One of the [time line](https://docs.waylay.io/#/api/query/?id=time-line-properties) specifiers.", + ) + align: Alignment | None = None + data: List[SeriesSpec] | None = Field( + default=None, + description="List of series specifications. When not specified, a single default series specification is assumed(`[{}]`, using the default `metric`,`resource`, ... ).", + ) + render: Render | None = None + + model_config = ConfigDict( + populate_by_name=True, protected_namespaces=(), extra="allow" + ) diff --git a/waylay-sdk-queries-types/src/waylay/services/queries/models/query_list_hal_links.py b/waylay-sdk-queries-types/src/waylay/services/queries/models/query_list_hal_links.py new file mode 100644 index 0000000..4f8e349 --- /dev/null +++ b/waylay-sdk-queries-types/src/waylay/services/queries/models/query_list_hal_links.py @@ -0,0 +1,34 @@ +# coding: utf-8 +"""Waylay Query: timeseries queries (v1 protocol) models. + +This code was generated from the OpenAPI documentation of 'Waylay Query: timeseries queries (v1 protocol)' + +Generated by OpenAPI Generator (https://openapi-generator.tech) + +Do not edit the class manually. + +""" + +from __future__ import annotations + +from pydantic import ( + ConfigDict, + Field, +) +from waylay.sdk.api._models import BaseModel as WaylayBaseModel + +from ..models.hal_link import HALLink + + +class QueryListHALLinks(WaylayBaseModel): + """HAL Links for a query entity..""" + + var_self: HALLink = Field(alias="self") + first: HALLink | None = None + prev: HALLink | None = None + next: HALLink | None = None + last: HALLink | None = None + + model_config = ConfigDict( + populate_by_name=True, protected_namespaces=(), extra="allow" + ) diff --git a/waylay-sdk-queries-types/src/waylay/services/queries/models/query_list_item.py b/waylay-sdk-queries-types/src/waylay/services/queries/models/query_list_item.py new file mode 100644 index 0000000..bf749da --- /dev/null +++ b/waylay-sdk-queries-types/src/waylay/services/queries/models/query_list_item.py @@ -0,0 +1,40 @@ +# coding: utf-8 +"""Waylay Query: timeseries queries (v1 protocol) models. + +This code was generated from the OpenAPI documentation of 'Waylay Query: timeseries queries (v1 protocol)' + +Generated by OpenAPI Generator (https://openapi-generator.tech) + +Do not edit the class manually. + +""" + +from __future__ import annotations + +from typing import Any, Dict + +from pydantic import ( + ConfigDict, + Field, + StrictStr, +) +from waylay.sdk.api._models import BaseModel as WaylayBaseModel + +from ..models.query_hal_links import QueryHALLinks + + +class QueryListItem(WaylayBaseModel): + """Listing of a query definition item..""" + + links: QueryHALLinks = Field(alias="_links") + attrs: Dict[str, Any] = Field( + description="System provided metadata for the query definition." + ) + name: StrictStr = Field(description="Name of the stored query definition.") + meta: Dict[str, Any] | None = Field( + default=None, description="User metadata for the query definition." + ) + + model_config = ConfigDict( + populate_by_name=True, protected_namespaces=(), extra="allow" + ) diff --git a/waylay-sdk-queries-types/src/waylay/services/queries/models/query_output.py b/waylay-sdk-queries-types/src/waylay/services/queries/models/query_output.py new file mode 100644 index 0000000..2bf8f09 --- /dev/null +++ b/waylay-sdk-queries-types/src/waylay/services/queries/models/query_output.py @@ -0,0 +1,63 @@ +# coding: utf-8 +"""Waylay Query: timeseries queries (v1 protocol) models. + +This code was generated from the OpenAPI documentation of 'Waylay Query: timeseries queries (v1 protocol)' + +Generated by OpenAPI Generator (https://openapi-generator.tech) + +Do not edit the class manually. + +""" + +from __future__ import annotations + +from typing import List + +from pydantic import ( + ConfigDict, + Field, + StrictInt, + StrictStr, +) +from waylay.sdk.api._models import BaseModel as WaylayBaseModel + +from ..models.alignment import Alignment +from ..models.default_aggregation import DefaultAggregation +from ..models.default_interpolation import DefaultInterpolation +from ..models.grouping_interval import GroupingInterval +from ..models.render import Render +from ..models.series_spec import SeriesSpec +from ..models.time_window_from import TimeWindowFrom +from ..models.time_window_until import TimeWindowUntil +from ..models.window import Window + + +class QueryOutput(WaylayBaseModel): + """Query definition for a Waylay analytics query. See also [api docs](https://docs.waylay.io/#/api/query/?id=data-query-json-representation)..""" + + resource: StrictStr | None = Field( + default=None, description="Default resource for the series in the query." + ) + metric: StrictStr | None = Field( + default=None, description="Default metric for the series in the query." + ) + aggregation: DefaultAggregation | None = None + interpolation: DefaultInterpolation | None = None + freq: GroupingInterval | None = None + var_from: TimeWindowFrom | None = Field(default=None, alias="from") + until: TimeWindowUntil | None = None + window: Window | None = None + periods: StrictInt | None = Field( + default=None, + description="The size of the time window in number of `freq` units. One of the [time line](https://docs.waylay.io/#/api/query/?id=time-line-properties) specifiers.", + ) + align: Alignment | None = None + data: List[SeriesSpec] | None = Field( + default=None, + description="List of series specifications. When not specified, a single default series specification is assumed(`[{}]`, using the default `metric`,`resource`, ... ).", + ) + render: Render | None = None + + model_config = ConfigDict( + populate_by_name=True, protected_namespaces=(), extra="allow" + ) diff --git a/waylay-sdk-queries-types/src/waylay/services/queries/models/query_response.py b/waylay-sdk-queries-types/src/waylay/services/queries/models/query_response.py new file mode 100644 index 0000000..2283101 --- /dev/null +++ b/waylay-sdk-queries-types/src/waylay/services/queries/models/query_response.py @@ -0,0 +1,44 @@ +# coding: utf-8 +"""Waylay Query: timeseries queries (v1 protocol) models. + +This code was generated from the OpenAPI documentation of 'Waylay Query: timeseries queries (v1 protocol)' + +Generated by OpenAPI Generator (https://openapi-generator.tech) + +Do not edit the class manually. + +""" + +from __future__ import annotations + +from typing import Any, Dict, List + +from pydantic import ( + ConfigDict, + Field, + StrictStr, +) +from waylay.sdk.api._models import BaseModel as WaylayBaseModel + +from ..models.message import Message +from ..models.query_hal_links import QueryHALLinks +from ..models.query_output import QueryOutput + + +class QueryResponse(WaylayBaseModel): + """Represents a single named query..""" + + links: QueryHALLinks = Field(alias="_links") + attrs: Dict[str, Any] = Field( + description="System provided metadata for the query definition." + ) + name: StrictStr = Field(description="Name of the stored query definition.") + meta: Dict[str, Any] | None = Field( + default=None, description="User metadata for the query definition." + ) + query: QueryOutput + messages: List[Message] | None = None + + model_config = ConfigDict( + populate_by_name=True, protected_namespaces=(), extra="allow" + ) diff --git a/waylay-sdk-queries-types/src/waylay/services/queries/models/query_result.py b/waylay-sdk-queries-types/src/waylay/services/queries/models/query_result.py new file mode 100644 index 0000000..90ed5c1 --- /dev/null +++ b/waylay-sdk-queries-types/src/waylay/services/queries/models/query_result.py @@ -0,0 +1,38 @@ +# coding: utf-8 +"""Waylay Query: timeseries queries (v1 protocol) models. + +This code was generated from the OpenAPI documentation of 'Waylay Query: timeseries queries (v1 protocol)' + +Generated by OpenAPI Generator (https://openapi-generator.tech) + +Do not edit the class manually. + +""" + +from __future__ import annotations + +from typing import List + +from pydantic import ( + ConfigDict, + Field, +) +from waylay.sdk.api._models import BaseModel as WaylayBaseModel + +from ..models.query_execution_message import QueryExecutionMessage +from ..models.query_input import QueryInput +from ..models.response_data_set import ResponseDataSet + + +class QueryResult(WaylayBaseModel): + """A json data response. Uses the format as specified by the `render` options of the request (defaults to `COMPACT_WS`). '.""" + + data: List[ResponseDataSet] = Field( + description="A list of data sets, each with their own time axis. There will be one dataset for each `role` specified in the query (by default a single `input` role). The data is represented according to the `render` options in the query (default `COMPACT_WS`)." + ) + query: QueryInput + messages: List[QueryExecutionMessage] + + model_config = ConfigDict( + populate_by_name=True, protected_namespaces=(), extra="allow" + ) diff --git a/waylay-sdk-queries-types/src/waylay/services/queries/models/query_update_input.py b/waylay-sdk-queries-types/src/waylay/services/queries/models/query_update_input.py new file mode 100644 index 0000000..99550a3 --- /dev/null +++ b/waylay-sdk-queries-types/src/waylay/services/queries/models/query_update_input.py @@ -0,0 +1,35 @@ +# coding: utf-8 +"""Waylay Query: timeseries queries (v1 protocol) models. + +This code was generated from the OpenAPI documentation of 'Waylay Query: timeseries queries (v1 protocol)' + +Generated by OpenAPI Generator (https://openapi-generator.tech) + +Do not edit the class manually. + +""" + +from __future__ import annotations + +from typing import Any, Dict + +from pydantic import ( + ConfigDict, + Field, +) +from waylay.sdk.api._models import BaseModel as WaylayBaseModel + +from ..models.query_input import QueryInput + + +class QueryUpdateInput(WaylayBaseModel): + """Input data to update a query definition..""" + + meta: Dict[str, Any] | None = Field( + default=None, description="User metadata for the query definition." + ) + query: QueryInput | None = None + + model_config = ConfigDict( + populate_by_name=True, protected_namespaces=(), extra="allow" + ) diff --git a/waylay-sdk-queries-types/src/waylay/services/queries/models/render.py b/waylay-sdk-queries-types/src/waylay/services/queries/models/render.py new file mode 100644 index 0000000..42855c4 --- /dev/null +++ b/waylay-sdk-queries-types/src/waylay/services/queries/models/render.py @@ -0,0 +1,74 @@ +# coding: utf-8 +"""Waylay Query: timeseries queries (v1 protocol) models. + +This code was generated from the OpenAPI documentation of 'Waylay Query: timeseries queries (v1 protocol)' + +Generated by OpenAPI Generator (https://openapi-generator.tech) + +Do not edit the class manually. + +""" + +from __future__ import annotations + +from pydantic import ( + ConfigDict, + Field, + StrictBool, + StrictStr, +) +from waylay.sdk.api._models import BaseModel as WaylayBaseModel + +from ..models.data_axis_option import DataAxisOption +from ..models.header_array_option import HeaderArrayOption +from ..models.hierarchical import Hierarchical +from ..models.render_mode import RenderMode + + +class Render(WaylayBaseModel): + """Configures the representation of data sets returned by the query API..""" + + mode: RenderMode | None = None + roll_up: StrictBool | None = Field( + default=None, + description="move up attributes on rows (or columns) that are the same for all rows (or columns) to a table attribute. Levels enumerated in 'hierarchical' are excluded.", + ) + hierarchical: Hierarchical | None = None + value_key: StrictStr | None = Field( + default=None, + description="if set, use this key in the value object to report data values", + ) + show_levels: StrictBool | None = Field( + default=None, + description="if set, report the levels used in the data values (either hierarchical or flat)", + ) + iso_timestamp: StrictBool | None = Field( + default=None, + description="if set, render timestamps in a row or column index with both epoch and iso representations", + ) + row_key: StrictStr | None = Field( + default=None, + description="if set, use this key as name of the row-dimension for single-dimensional rows", + ) + column_key: StrictStr | None = Field( + default=None, + description="if set, use this key as name of the column-dimension for single-dimensional columns", + ) + header_array: HeaderArrayOption | None = None + data_axis: DataAxisOption | None = None + key_seperator: StrictStr | None = Field( + default=None, + description="character used to concatenate multi-key columns or rows when required", + ) + key_skip_empty: StrictBool | None = Field( + default=None, + description="skip empty values in concatenating multi-key column or row headers", + ) + include_window_spec: StrictBool | None = Field( + default=None, + description="if set, include window specification in render modes that support it", + ) + + model_config = ConfigDict( + populate_by_name=True, protected_namespaces=(), extra="allow" + ) diff --git a/waylay-sdk-queries-types/src/waylay/services/queries/models/render1.py b/waylay-sdk-queries-types/src/waylay/services/queries/models/render1.py new file mode 100644 index 0000000..87ba513 --- /dev/null +++ b/waylay-sdk-queries-types/src/waylay/services/queries/models/render1.py @@ -0,0 +1,26 @@ +# coding: utf-8 +"""Waylay Query: timeseries queries (v1 protocol) models. + +This code was generated from the OpenAPI documentation of 'Waylay Query: timeseries queries (v1 protocol)' + +Generated by OpenAPI Generator (https://openapi-generator.tech) + +Do not edit the class manually. + +""" + +from __future__ import annotations + +from typing import ( + Union, +) + +from typing_extensions import ( + Annotated, # >=3.9 +) + +from ..models.render import Render +from ..models.render_mode import RenderMode + +Render1 = Union[Annotated[RenderMode, ""], Annotated[Render, ""]] +"""Render1.""" diff --git a/waylay-sdk-queries-types/src/waylay/services/queries/models/render_mode.py b/waylay-sdk-queries-types/src/waylay/services/queries/models/render_mode.py new file mode 100644 index 0000000..1de5aeb --- /dev/null +++ b/waylay-sdk-queries-types/src/waylay/services/queries/models/render_mode.py @@ -0,0 +1,45 @@ +# coding: utf-8 +"""Waylay Query: timeseries queries (v1 protocol) models. + +This code was generated from the OpenAPI documentation of 'Waylay Query: timeseries queries (v1 protocol)' + +Generated by OpenAPI Generator (https://openapi-generator.tech) + +Do not edit the class manually. + +""" + +from __future__ import annotations + +from typing import ( + Union, +) + +from typing_extensions import ( + Annotated, # >=3.9 +) + +from ..models.render_mode_one_of import RenderModeOneOf +from ..models.render_mode_one_of1 import RenderModeOneOf1 +from ..models.render_mode_one_of2 import RenderModeOneOf2 +from ..models.render_mode_one_of3 import RenderModeOneOf3 +from ..models.render_mode_one_of4 import RenderModeOneOf4 +from ..models.render_mode_one_of5 import RenderModeOneOf5 +from ..models.render_mode_one_of6 import RenderModeOneOf6 +from ..models.render_mode_one_of7 import RenderModeOneOf7 +from ..models.render_mode_one_of8 import RenderModeOneOf8 +from ..models.render_mode_one_of9 import RenderModeOneOf9 + +RenderMode = Union[ + Annotated[RenderModeOneOf, ""], + Annotated[RenderModeOneOf1, ""], + Annotated[RenderModeOneOf2, ""], + Annotated[RenderModeOneOf3, ""], + Annotated[RenderModeOneOf4, ""], + Annotated[RenderModeOneOf5, ""], + Annotated[RenderModeOneOf6, ""], + Annotated[RenderModeOneOf7, ""], + Annotated[RenderModeOneOf8, ""], + Annotated[RenderModeOneOf9, ""], +] +"""Render mode configuration keys..""" diff --git a/waylay-sdk-queries-types/src/waylay/services/queries/models/render_mode_one_of.py b/waylay-sdk-queries-types/src/waylay/services/queries/models/render_mode_one_of.py new file mode 100644 index 0000000..16303f4 --- /dev/null +++ b/waylay-sdk-queries-types/src/waylay/services/queries/models/render_mode_one_of.py @@ -0,0 +1,23 @@ +# coding: utf-8 +"""Waylay Query: timeseries queries (v1 protocol) models. + +This code was generated from the OpenAPI documentation of 'Waylay Query: timeseries queries (v1 protocol)' + +Generated by OpenAPI Generator (https://openapi-generator.tech) + +Do not edit the class manually. + +""" + +from __future__ import annotations + +from enum import Enum + + +class RenderModeOneOf(str, Enum): + """Render rows of timestamp and values. Show column headers. Includes an iso timestamp. ###### options - `iso_timestamp`: `True` - `header_array`: `row` - `roll_up`: `False` - `data_axis`: `column`.""" + + HEADER_ROW = "HEADER_ROW" + + def __str__(self) -> str: + return str(self.value) diff --git a/waylay-sdk-queries-types/src/waylay/services/queries/models/render_mode_one_of1.py b/waylay-sdk-queries-types/src/waylay/services/queries/models/render_mode_one_of1.py new file mode 100644 index 0000000..57e5c84 --- /dev/null +++ b/waylay-sdk-queries-types/src/waylay/services/queries/models/render_mode_one_of1.py @@ -0,0 +1,23 @@ +# coding: utf-8 +"""Waylay Query: timeseries queries (v1 protocol) models. + +This code was generated from the OpenAPI documentation of 'Waylay Query: timeseries queries (v1 protocol)' + +Generated by OpenAPI Generator (https://openapi-generator.tech) + +Do not edit the class manually. + +""" + +from __future__ import annotations + +from enum import Enum + + +class RenderModeOneOf1(str, Enum): + """Render rows of timestamp and values. Show column headers. ###### options - `iso_timestamp`: `False` - `header_array`: `row` - `roll_up`: `False` - `data_axis`: `column`.""" + + COMPACT = "COMPACT" + + def __str__(self) -> str: + return str(self.value) diff --git a/waylay-sdk-queries-types/src/waylay/services/queries/models/render_mode_one_of2.py b/waylay-sdk-queries-types/src/waylay/services/queries/models/render_mode_one_of2.py new file mode 100644 index 0000000..d7f808f --- /dev/null +++ b/waylay-sdk-queries-types/src/waylay/services/queries/models/render_mode_one_of2.py @@ -0,0 +1,23 @@ +# coding: utf-8 +"""Waylay Query: timeseries queries (v1 protocol) models. + +This code was generated from the OpenAPI documentation of 'Waylay Query: timeseries queries (v1 protocol)' + +Generated by OpenAPI Generator (https://openapi-generator.tech) + +Do not edit the class manually. + +""" + +from __future__ import annotations + +from enum import Enum + + +class RenderModeOneOf2(str, Enum): + """Render rows of timestamp and values. Show column headers. Show the time window attributes. ###### options - `iso_timestamp`: `False` - `header_array`: `row` - `roll_up`: `False` - `data_axis`: `column` - `include_window_spec`: `True`.""" + + COMPACT_WS = "COMPACT_WS" + + def __str__(self) -> str: + return str(self.value) diff --git a/waylay-sdk-queries-types/src/waylay/services/queries/models/render_mode_one_of3.py b/waylay-sdk-queries-types/src/waylay/services/queries/models/render_mode_one_of3.py new file mode 100644 index 0000000..ce5946b --- /dev/null +++ b/waylay-sdk-queries-types/src/waylay/services/queries/models/render_mode_one_of3.py @@ -0,0 +1,23 @@ +# coding: utf-8 +"""Waylay Query: timeseries queries (v1 protocol) models. + +This code was generated from the OpenAPI documentation of 'Waylay Query: timeseries queries (v1 protocol)' + +Generated by OpenAPI Generator (https://openapi-generator.tech) + +Do not edit the class manually. + +""" + +from __future__ import annotations + +from enum import Enum + + +class RenderModeOneOf3(str, Enum): + """Render timestamps and each series (column) as a values array. Show column headers. ###### options - `iso_timestamp`: `False` - `header_array`: `row` - `data_axis`: `row` - `roll_up`: `True` - `include_window_spec`: `True`.""" + + SERIES = "SERIES" + + def __str__(self) -> str: + return str(self.value) diff --git a/waylay-sdk-queries-types/src/waylay/services/queries/models/render_mode_one_of4.py b/waylay-sdk-queries-types/src/waylay/services/queries/models/render_mode_one_of4.py new file mode 100644 index 0000000..5a61f8d --- /dev/null +++ b/waylay-sdk-queries-types/src/waylay/services/queries/models/render_mode_one_of4.py @@ -0,0 +1,23 @@ +# coding: utf-8 +"""Waylay Query: timeseries queries (v1 protocol) models. + +This code was generated from the OpenAPI documentation of 'Waylay Query: timeseries queries (v1 protocol)' + +Generated by OpenAPI Generator (https://openapi-generator.tech) + +Do not edit the class manually. + +""" + +from __future__ import annotations + +from enum import Enum + + +class RenderModeOneOf4(str, Enum): + """Renders row index in `rows`, and each series as a values array. The series are prefixed by their series attributes.The `rows` index is prefixed by the labels for these attributes. ###### options - `iso_timestamp`: `True` - `header_array`: `column` - `roll_up`: `False` - `data_axis`: `row`.""" + + HEADER_COLUMN = "HEADER_COLUMN" + + def __str__(self) -> str: + return str(self.value) diff --git a/waylay-sdk-queries-types/src/waylay/services/queries/models/render_mode_one_of5.py b/waylay-sdk-queries-types/src/waylay/services/queries/models/render_mode_one_of5.py new file mode 100644 index 0000000..a26a576 --- /dev/null +++ b/waylay-sdk-queries-types/src/waylay/services/queries/models/render_mode_one_of5.py @@ -0,0 +1,23 @@ +# coding: utf-8 +"""Waylay Query: timeseries queries (v1 protocol) models. + +This code was generated from the OpenAPI documentation of 'Waylay Query: timeseries queries (v1 protocol)' + +Generated by OpenAPI Generator (https://openapi-generator.tech) + +Do not edit the class manually. + +""" + +from __future__ import annotations + +from enum import Enum + + +class RenderModeOneOf5(str, Enum): + """Render an object for each observation. Uses flattened keys. ###### options - `iso_timestamp`: `True` - `hierarchical`: `False` - `show_levels`: `True` - `roll_up`: `False`.""" + + FLAT_DICT = "FLAT_DICT" + + def __str__(self) -> str: + return str(self.value) diff --git a/waylay-sdk-queries-types/src/waylay/services/queries/models/render_mode_one_of6.py b/waylay-sdk-queries-types/src/waylay/services/queries/models/render_mode_one_of6.py new file mode 100644 index 0000000..c71b67d --- /dev/null +++ b/waylay-sdk-queries-types/src/waylay/services/queries/models/render_mode_one_of6.py @@ -0,0 +1,23 @@ +# coding: utf-8 +"""Waylay Query: timeseries queries (v1 protocol) models. + +This code was generated from the OpenAPI documentation of 'Waylay Query: timeseries queries (v1 protocol)' + +Generated by OpenAPI Generator (https://openapi-generator.tech) + +Do not edit the class manually. + +""" + +from __future__ import annotations + +from enum import Enum + + +class RenderModeOneOf6(str, Enum): + """Render an hierarchical object for each observation. Shows an iso timestamp. ###### options - `iso_timestamp`: `True` - `hierarchical`: `True` - `show_levels`: `True` - `roll_up`: `True`.""" + + HIER_DICT = "HIER_DICT" + + def __str__(self) -> str: + return str(self.value) diff --git a/waylay-sdk-queries-types/src/waylay/services/queries/models/render_mode_one_of7.py b/waylay-sdk-queries-types/src/waylay/services/queries/models/render_mode_one_of7.py new file mode 100644 index 0000000..2151afe --- /dev/null +++ b/waylay-sdk-queries-types/src/waylay/services/queries/models/render_mode_one_of7.py @@ -0,0 +1,23 @@ +# coding: utf-8 +"""Waylay Query: timeseries queries (v1 protocol) models. + +This code was generated from the OpenAPI documentation of 'Waylay Query: timeseries queries (v1 protocol)' + +Generated by OpenAPI Generator (https://openapi-generator.tech) + +Do not edit the class manually. + +""" + +from __future__ import annotations + +from enum import Enum + + +class RenderModeOneOf7(str, Enum): + """Render an object with metric keys for each observation. Shows an iso timestamp. ###### options - `iso_timestamp`: `True` - `hierarchical`: `['metric']` - `show_levels`: `False` - `roll_up`: `True` - `key_skip_empty`: `True`.""" + + METRIC_FLAT_DICT = "METRIC_FLAT_DICT" + + def __str__(self) -> str: + return str(self.value) diff --git a/waylay-sdk-queries-types/src/waylay/services/queries/models/render_mode_one_of8.py b/waylay-sdk-queries-types/src/waylay/services/queries/models/render_mode_one_of8.py new file mode 100644 index 0000000..b04bb87 --- /dev/null +++ b/waylay-sdk-queries-types/src/waylay/services/queries/models/render_mode_one_of8.py @@ -0,0 +1,23 @@ +# coding: utf-8 +"""Waylay Query: timeseries queries (v1 protocol) models. + +This code was generated from the OpenAPI documentation of 'Waylay Query: timeseries queries (v1 protocol)' + +Generated by OpenAPI Generator (https://openapi-generator.tech) + +Do not edit the class manually. + +""" + +from __future__ import annotations + +from enum import Enum + + +class RenderModeOneOf8(str, Enum): + """Render in an object format compatible with the `/data/v1/events` upload. ###### options - `iso_timestamp`: `False` - `hierarchical`: `False` - `show_levels`: `False` - `roll_up`: `True`.""" + + UPLOAD = "UPLOAD" + + def __str__(self) -> str: + return str(self.value) diff --git a/waylay-sdk-queries-types/src/waylay/services/queries/models/render_mode_one_of9.py b/waylay-sdk-queries-types/src/waylay/services/queries/models/render_mode_one_of9.py new file mode 100644 index 0000000..97a77e8 --- /dev/null +++ b/waylay-sdk-queries-types/src/waylay/services/queries/models/render_mode_one_of9.py @@ -0,0 +1,23 @@ +# coding: utf-8 +"""Waylay Query: timeseries queries (v1 protocol) models. + +This code was generated from the OpenAPI documentation of 'Waylay Query: timeseries queries (v1 protocol)' + +Generated by OpenAPI Generator (https://openapi-generator.tech) + +Do not edit the class manually. + +""" + +from __future__ import annotations + +from enum import Enum + + +class RenderModeOneOf9(str, Enum): + """Render in csv format with row headers. ###### options - `iso_timestamp`: `False`.""" + + CSV = "CSV" + + def __str__(self) -> str: + return str(self.value) diff --git a/waylay-sdk-queries-types/src/waylay/services/queries/models/response_data_set.py b/waylay-sdk-queries-types/src/waylay/services/queries/models/response_data_set.py new file mode 100644 index 0000000..95499cd --- /dev/null +++ b/waylay-sdk-queries-types/src/waylay/services/queries/models/response_data_set.py @@ -0,0 +1,33 @@ +# coding: utf-8 +"""Waylay Query: timeseries queries (v1 protocol) models. + +This code was generated from the OpenAPI documentation of 'Waylay Query: timeseries queries (v1 protocol)' + +Generated by OpenAPI Generator (https://openapi-generator.tech) + +Do not edit the class manually. + +""" + +from __future__ import annotations + +from typing import ( + Union, +) + +from typing_extensions import ( + Annotated, # >=3.9 +) + +from ..models.column_data_set import ColumnDataSet +from ..models.object_data_set import ObjectDataSet +from ..models.row_data_set import RowDataSet +from ..models.series_data_set import SeriesDataSet + +ResponseDataSet = Union[ + Annotated[RowDataSet, ""], + Annotated[SeriesDataSet, ""], + Annotated[ColumnDataSet, ""], + Annotated[ObjectDataSet, ""], +] +"""Result timeseries data set, with one time dimension..""" diff --git a/waylay-sdk-queries-types/src/waylay/services/queries/models/row_data_set.py b/waylay-sdk-queries-types/src/waylay/services/queries/models/row_data_set.py new file mode 100644 index 0000000..70a8be9 --- /dev/null +++ b/waylay-sdk-queries-types/src/waylay/services/queries/models/row_data_set.py @@ -0,0 +1,42 @@ +# coding: utf-8 +"""Waylay Query: timeseries queries (v1 protocol) models. + +This code was generated from the OpenAPI documentation of 'Waylay Query: timeseries queries (v1 protocol)' + +Generated by OpenAPI Generator (https://openapi-generator.tech) + +Do not edit the class manually. + +""" + +from __future__ import annotations + +from typing import List + +from pydantic import ( + ConfigDict, + Field, +) +from waylay.sdk.api._models import BaseModel as WaylayBaseModel + +from ..models.column_headers_inner import ColumnHeadersInner +from ..models.data_set_attributes import DataSetAttributes +from ..models.data_set_window import DataSetWindow +from ..models.datum import Datum +from ..models.row_data_set_data_axis import RowDataSetDataAxis + + +class RowDataSet(WaylayBaseModel): + """Row-oriented dataset. Timeseries data layout with a column header and a data row per timestamp. Result for render options `data_axis=column` and `header_array=row`.\",.""" + + attributes: DataSetAttributes | None = None + window_spec: DataSetWindow | None = None + data_axis: RowDataSetDataAxis | None = RowDataSetDataAxis.COLUMN + columns: List[ColumnHeadersInner] = Field( + description="Header Attributes for the column data. The initial string-valued headers (normally a single `timestamp`) indicate that column to contain row index data (i.e. timestamps). The remaining object-valued column headers identify and describe the actual series data." + ) + data: List[List[Datum]] + + model_config = ConfigDict( + populate_by_name=True, protected_namespaces=(), extra="allow" + ) diff --git a/waylay-sdk-queries-types/src/waylay/services/queries/models/row_data_set_data_axis.py b/waylay-sdk-queries-types/src/waylay/services/queries/models/row_data_set_data_axis.py new file mode 100644 index 0000000..6fbba4f --- /dev/null +++ b/waylay-sdk-queries-types/src/waylay/services/queries/models/row_data_set_data_axis.py @@ -0,0 +1,23 @@ +# coding: utf-8 +"""Waylay Query: timeseries queries (v1 protocol) models. + +This code was generated from the OpenAPI documentation of 'Waylay Query: timeseries queries (v1 protocol)' + +Generated by OpenAPI Generator (https://openapi-generator.tech) + +Do not edit the class manually. + +""" + +from __future__ import annotations + +from enum import Enum + + +class RowDataSetDataAxis(str, Enum): + """RowDataSetDataAxis.""" + + COLUMN = "column" + + def __str__(self) -> str: + return str(self.value) diff --git a/waylay-sdk-queries-types/src/waylay/services/queries/models/row_header.py b/waylay-sdk-queries-types/src/waylay/services/queries/models/row_header.py new file mode 100644 index 0000000..107b5fb --- /dev/null +++ b/waylay-sdk-queries-types/src/waylay/services/queries/models/row_header.py @@ -0,0 +1,35 @@ +# coding: utf-8 +"""Waylay Query: timeseries queries (v1 protocol) models. + +This code was generated from the OpenAPI documentation of 'Waylay Query: timeseries queries (v1 protocol)' + +Generated by OpenAPI Generator (https://openapi-generator.tech) + +Do not edit the class manually. + +""" + +from __future__ import annotations + +from datetime import datetime + +from pydantic import ( + ConfigDict, + Field, + StrictInt, +) +from waylay.sdk.api._models import BaseModel as WaylayBaseModel + + +class RowHeader(WaylayBaseModel): + """Index entry attributes. Attributes for a timestamp index entry..""" + + timestamp: StrictInt = Field(description="Unix epoch milliseconds timestamp.") + timestamp_iso: datetime | None = Field( + default=None, + description="ISO8601 rendering of the timestamp, present when `render.iso_timestamp=true`", + ) + + model_config = ConfigDict( + populate_by_name=True, protected_namespaces=(), extra="allow" + ) diff --git a/waylay-sdk-queries-types/src/waylay/services/queries/models/row_headers_inner.py b/waylay-sdk-queries-types/src/waylay/services/queries/models/row_headers_inner.py new file mode 100644 index 0000000..13aa8b4 --- /dev/null +++ b/waylay-sdk-queries-types/src/waylay/services/queries/models/row_headers_inner.py @@ -0,0 +1,27 @@ +# coding: utf-8 +"""Waylay Query: timeseries queries (v1 protocol) models. + +This code was generated from the OpenAPI documentation of 'Waylay Query: timeseries queries (v1 protocol)' + +Generated by OpenAPI Generator (https://openapi-generator.tech) + +Do not edit the class manually. + +""" + +from __future__ import annotations + +from typing import ( + Union, +) + +from typing_extensions import ( + Annotated, # >=3.9 +) + +from ..models.row_header import RowHeader + +RowHeadersInner = Union[ + Annotated[str, "Label for a series attribute"], Annotated[RowHeader, ""] +] +"""RowHeadersInner.""" diff --git a/waylay-sdk-queries-types/src/waylay/services/queries/models/series_data_set.py b/waylay-sdk-queries-types/src/waylay/services/queries/models/series_data_set.py new file mode 100644 index 0000000..0866eb3 --- /dev/null +++ b/waylay-sdk-queries-types/src/waylay/services/queries/models/series_data_set.py @@ -0,0 +1,42 @@ +# coding: utf-8 +"""Waylay Query: timeseries queries (v1 protocol) models. + +This code was generated from the OpenAPI documentation of 'Waylay Query: timeseries queries (v1 protocol)' + +Generated by OpenAPI Generator (https://openapi-generator.tech) + +Do not edit the class manually. + +""" + +from __future__ import annotations + +from typing import List + +from pydantic import ( + ConfigDict, + Field, +) +from waylay.sdk.api._models import BaseModel as WaylayBaseModel + +from ..models.column_data_set_data_axis import ColumnDataSetDataAxis +from ..models.column_headers_inner import ColumnHeadersInner +from ..models.data_set_attributes import DataSetAttributes +from ..models.data_set_window import DataSetWindow +from ..models.datum import Datum + + +class SeriesDataSet(WaylayBaseModel): + """Column-oriented dataset. Timeseries data layout with a column header and a seperate data array for the time index and each series. Result for render options `data_axis=row` and `header_array=row`..""" + + attributes: DataSetAttributes | None = None + window_spec: DataSetWindow | None = None + data_axis: ColumnDataSetDataAxis | None = ColumnDataSetDataAxis.ROW + columns: List[ColumnHeadersInner] = Field( + description="Header Attributes for the column data. The initial string-valued headers (normally a single `timestamp`) indicate that column to contain row index data (i.e. timestamps). The remaining object-valued column headers identify and describe the actual series data." + ) + data: List[List[Datum]] + + model_config = ConfigDict( + populate_by_name=True, protected_namespaces=(), extra="allow" + ) diff --git a/waylay-sdk-queries-types/src/waylay/services/queries/models/series_spec.py b/waylay-sdk-queries-types/src/waylay/services/queries/models/series_spec.py new file mode 100644 index 0000000..5328d6e --- /dev/null +++ b/waylay-sdk-queries-types/src/waylay/services/queries/models/series_spec.py @@ -0,0 +1,45 @@ +# coding: utf-8 +"""Waylay Query: timeseries queries (v1 protocol) models. + +This code was generated from the OpenAPI documentation of 'Waylay Query: timeseries queries (v1 protocol)' + +Generated by OpenAPI Generator (https://openapi-generator.tech) + +Do not edit the class manually. + +""" + +from __future__ import annotations + +from pydantic import ( + ConfigDict, + Field, + StrictStr, +) +from waylay.sdk.api._models import BaseModel as WaylayBaseModel + +from ..models.aggregation_method import AggregationMethod +from ..models.interpolation import Interpolation + + +class SeriesSpec(WaylayBaseModel): + """Query specification for a single series..""" + + name: StrictStr | None = Field( + default=None, + description="Optional alias name for the series. This name is used when exporting the dataset to CSV format.", + ) + resource: StrictStr | None = Field( + default=None, + description="Resource id for the series, required unless it is specified as a query default.", + ) + metric: StrictStr | None = Field( + default=None, + description="Metric name for the series, required unless it is specified as a query default.", + ) + aggregration: AggregationMethod | None = None + interpolation: Interpolation | None = None + + model_config = ConfigDict( + populate_by_name=True, protected_namespaces=(), extra="allow" + ) diff --git a/waylay-sdk-queries-types/src/waylay/services/queries/models/time_window_from.py b/waylay-sdk-queries-types/src/waylay/services/queries/models/time_window_from.py new file mode 100644 index 0000000..e7d4adc --- /dev/null +++ b/waylay-sdk-queries-types/src/waylay/services/queries/models/time_window_from.py @@ -0,0 +1,34 @@ +# coding: utf-8 +"""Waylay Query: timeseries queries (v1 protocol) models. + +This code was generated from the OpenAPI documentation of 'Waylay Query: timeseries queries (v1 protocol)' + +Generated by OpenAPI Generator (https://openapi-generator.tech) + +Do not edit the class manually. + +""" + +from __future__ import annotations + +from datetime import datetime +from typing import ( + Union, +) + +from typing_extensions import ( + Annotated, # >=3.9 +) + +TimeWindowFrom = Union[ + Annotated[ + datetime, + "A date or date-time in [ISO8601](https://en.wikipedia.org/wiki/ISO_8601#Combined_date_and_time_representations) format. When no timezone is specified, the UTC timezone is assumed (`+00:00`)", + ], + Annotated[int, "Absolute timestamp milliseconds in unix epoch since 1970-01-01."], + Annotated[ + str, + "Specifies a timestamp before _now_ as a period in [ISO8601 duration](https://en.wikipedia.org/wiki/ISO_8601#Durations) format.", + ], +] +"""The start of the time window for which results will be returned. One of the [time line](https://docs.waylay.io/#/api/query/?id=time-line-properties) specifiers..""" diff --git a/waylay-sdk-queries-types/src/waylay/services/queries/models/time_window_until.py b/waylay-sdk-queries-types/src/waylay/services/queries/models/time_window_until.py new file mode 100644 index 0000000..4cc057b --- /dev/null +++ b/waylay-sdk-queries-types/src/waylay/services/queries/models/time_window_until.py @@ -0,0 +1,34 @@ +# coding: utf-8 +"""Waylay Query: timeseries queries (v1 protocol) models. + +This code was generated from the OpenAPI documentation of 'Waylay Query: timeseries queries (v1 protocol)' + +Generated by OpenAPI Generator (https://openapi-generator.tech) + +Do not edit the class manually. + +""" + +from __future__ import annotations + +from datetime import datetime +from typing import ( + Union, +) + +from typing_extensions import ( + Annotated, # >=3.9 +) + +TimeWindowUntil = Union[ + Annotated[ + datetime, + "A date or date-time in [ISO8601](https://en.wikipedia.org/wiki/ISO_8601#Combined_date_and_time_representations) format. When no timezone is specified, the UTC timezone is assumed (`+00:00`)", + ], + Annotated[int, "Absolute timestamp milliseconds in unix epoch since 1970-01-01."], + Annotated[ + str, + "Specifies a timestamp before _now_ as a period in [ISO8601 duration](https://en.wikipedia.org/wiki/ISO_8601#Durations) format.", + ], +] +"""The end (not-inclusive) of the time window for which results will be returned. One of the [time line](https://docs.waylay.io/#/api/query/?id=time-line-properties)specifiers..""" diff --git a/waylay-sdk-queries-types/src/waylay/services/queries/models/validation_error.py b/waylay-sdk-queries-types/src/waylay/services/queries/models/validation_error.py new file mode 100644 index 0000000..b0b3f26 --- /dev/null +++ b/waylay-sdk-queries-types/src/waylay/services/queries/models/validation_error.py @@ -0,0 +1,34 @@ +# coding: utf-8 +"""Waylay Query: timeseries queries (v1 protocol) models. + +This code was generated from the OpenAPI documentation of 'Waylay Query: timeseries queries (v1 protocol)' + +Generated by OpenAPI Generator (https://openapi-generator.tech) + +Do not edit the class manually. + +""" + +from __future__ import annotations + +from typing import List + +from pydantic import ( + ConfigDict, + StrictStr, +) +from waylay.sdk.api._models import BaseModel as WaylayBaseModel + +from ..models.location_inner import LocationInner + + +class ValidationError(WaylayBaseModel): + """ValidationError.""" + + loc: List[LocationInner] + msg: StrictStr + type: StrictStr + + model_config = ConfigDict( + populate_by_name=True, protected_namespaces=(), extra="ignore" + ) diff --git a/waylay-sdk-queries-types/src/waylay/services/queries/models/window.py b/waylay-sdk-queries-types/src/waylay/services/queries/models/window.py new file mode 100644 index 0000000..abab347 --- /dev/null +++ b/waylay-sdk-queries-types/src/waylay/services/queries/models/window.py @@ -0,0 +1,28 @@ +# coding: utf-8 +"""Waylay Query: timeseries queries (v1 protocol) models. + +This code was generated from the OpenAPI documentation of 'Waylay Query: timeseries queries (v1 protocol)' + +Generated by OpenAPI Generator (https://openapi-generator.tech) + +Do not edit the class manually. + +""" + +from __future__ import annotations + +from typing import ( + Union, +) + +from typing_extensions import ( + Annotated, # >=3.9 +) + +Window = Union[ + Annotated[ + str, + "A period in [ISO8601 duration](https://en.wikipedia.org/wiki/ISO_8601#Durations) format.", + ] +] +"""The absolute size of the time window for which results will be returned. One of the [time line](https://docs.waylay.io/#/api/query/?id=time-line-properties) specifiers..""" diff --git a/waylay-sdk-queries-types/src/waylay/services/queries/models/window_override.py b/waylay-sdk-queries-types/src/waylay/services/queries/models/window_override.py new file mode 100644 index 0000000..3e90693 --- /dev/null +++ b/waylay-sdk-queries-types/src/waylay/services/queries/models/window_override.py @@ -0,0 +1,28 @@ +# coding: utf-8 +"""Waylay Query: timeseries queries (v1 protocol) models. + +This code was generated from the OpenAPI documentation of 'Waylay Query: timeseries queries (v1 protocol)' + +Generated by OpenAPI Generator (https://openapi-generator.tech) + +Do not edit the class manually. + +""" + +from __future__ import annotations + +from typing import ( + Union, +) + +from typing_extensions import ( + Annotated, # >=3.9 +) + +WindowOverride = Union[ + Annotated[ + str, + "A period in [ISO8601 duration](https://en.wikipedia.org/wiki/ISO_8601#Durations) format.", + ] +] +"""WindowOverride.""" diff --git a/waylay-sdk-queries-types/src/waylay/services/queries/queries/__init__.py b/waylay-sdk-queries-types/src/waylay/services/queries/queries/__init__.py new file mode 100644 index 0000000..3522154 --- /dev/null +++ b/waylay-sdk-queries-types/src/waylay/services/queries/queries/__init__.py @@ -0,0 +1,13 @@ +# coding: utf-8 +"""Waylay Query: timeseries queries (v1 protocol): Query Parameters. + +This code was generated from the OpenAPI documentation of 'Waylay Query: timeseries queries (v1 protocol)' + +version: 0.5.0 + + Execute and store queries on the Waylay timeseries. Protocol version: v1. + +Generated by OpenAPI Generator (https://openapi-generator.tech) + +Do not edit the class manually. +""" diff --git a/waylay-sdk-queries-types/src/waylay/services/queries/queries/__pycache__/__init__.cpython-311.pyc b/waylay-sdk-queries-types/src/waylay/services/queries/queries/__pycache__/__init__.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..d71aeee2aefcc6043dd662329a36255fddfb749d GIT binary patch literal 658 zcmb7Cy-wUf5MILxqD4Fa-E?rp*-+4&5K<&il!jasB%~;kweim3750wVUEkq8?~pQO z6e$mrIxR175*-!e!{-DG^ z^hpfYRLP+W)fB3Mk2Shx48fG>(HZn`&7St%n;k&qC{RYlaQv7E6XjHi0iBPfJkO1X zj5NYrdALN2P6gC3byPyg5k6FC-%j3xrmQZ}1{DlhpegLW4t-b38AEdM8201Ccwb65 zy}_&w2+C^kfgJXOGeisCLHuJD157$T(6^f%Fp+ot=wF+D=*~$F_VN%aKTZ;2KB_XK zjw-o0V3rT1JRz_Y0JRBA?5t4UL#b@7ilT|-*)aOMnWnslH2o#++OypMNOCGMakb^W zC3A9D$$WW}QPqt27BiEff64Vc=JnO6I~td+D*pF|rs7uKWnD1oTXc2F>P=H)O-R$Y lYVO}0m89zekKG2(+x{lM!)mb}MbTog6%7{RiE;yuJ^(v**aiRq literal 0 HcmV?d00001 diff --git a/waylay-sdk-queries-types/src/waylay/services/queries/queries/__pycache__/execute_api.cpython-311.pyc b/waylay-sdk-queries-types/src/waylay/services/queries/queries/__pycache__/execute_api.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..e5308f3cb53a3aad6544112a58203f43d245d629 GIT binary patch literal 4008 zcmds4&2!sC6kpl0WXpD(k0xztlW6kM#0-hc$3Uk8ltQ5t+7xK{62qvfcb#Y|OJ*e} zHB*KhddRW2G8{P+GVnL>Hz+xIbYg}RH+RxgPrSF1)qIs1dINd={C@lKcJ!cy zmo);tKjM9_b7u_EpK2+Dmzi9x7DGmg~E7#RumtdniZhAed1$u$*2X{v_W z%p3V;!6=COoTD|1Mp5XBQ)-rt0nmr2c2_nk8FG=(;$1>ZY~VqbkYC{&KgJ;RDMOzj z(PseqR1WkRri0f=b=ay%gnVvw9IK;$+-AIURuAkZ^BK39uYUtI_&dM)qTb?O;MF~+ zDr!4=%i>m(1&sTPns$A~_Vv0)nZ9QE`Z9AFw*p4>2KSnJu)_4KE#{v8=#oyodb`Qo zzzS^7)xCy3_wOd3)3l4J^_!j4Zc^!SeSRefTK?Hu&4Veemc5Xy#^Z|ttFKfw?SiMf zUZ68-2V!k?$MSu>X}N97aXO3IU+BiF6csHO`iYhL0JG=aPF0SycRaUYFJG|hL6m#X zW)6)C*8&dkk{k3@sDKfL^RWR&5xi~r>5~Bs zLMrV%0OdZp1Doa+))Ahe(lx}H6lVm^rZ_9GoMKtvT#9o7D=Ah5&Zjspa3RG7fwdHC z0vA(UM0|~GmX@MCXTI0wbrvbGJHRdA#^q(smW3aqvhBi_X?aczQ+u}e23WFR%b$WrdyfV_#W|R+vJ<+X%i?K&1p}qGvflMS%tqR1&C? zpfVkVaYG3j5H^PqWeBU#5qg9T($U|>9>~C;@Qoj1h(bzLk4D4q#$kNBvjoZdF^25h z1(C!$#7w`jFQ_*Ta^uqD%P9+d74rm0{f@rmx$Fg95Xd}bex2JbjGx&FXK42J%<95CCUM1du!J><>&|= zP^=E8j>s>+WkJ?QId(hXR#b`eEIkUM!Isx*0|_xR$;aw&lsDtdG$YM4n;vaD%rv8t z38`v1NY;Q<(}W|;G({YuifLL;&IqVQXA0K|ckx4Bi9dM(yd;RUk4i8bbIiIpS;UKR z9UI3{O!dXfp!j9ry!Bn5uKZdkzt+o>Lb;bCxpI$Wc8iAsYDsJH&{l=aR@Xla<@va5 z$@5)(X8lSi&%|X*p6Mxxg~C%TOr2VPKa^+VvL(-UC#Kfl4dto0Y{^sI$?5g?LU}qa zTk~Wf^7tPki6MLvdKj&SS%qycH3uLfv)#Jjm)WuVIJNC|*SI5(+UP zrtCA20tS`8f%YL<-#OY${g~QCuti|^2K#aT_4p8alb-_<$OiuN zAbVL!l6tZ#$vuK%m`Kwhnc7|cAYX+j~=TT)2Q?JhlKR2u7% mz2fw7N$HV;;)ltHSo`Qn)0w>kg`KC3zISf_=+us&!@mI?PZ1jc literal 0 HcmV?d00001 diff --git a/waylay-sdk-queries-types/src/waylay/services/queries/queries/__pycache__/manage_api.cpython-311.pyc b/waylay-sdk-queries-types/src/waylay/services/queries/queries/__pycache__/manage_api.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..504db06e2ea5bcf0a2baf8d3e827cde1fdf05dea GIT binary patch literal 4166 zcmcIn&2JmW6`v)S-;!v_`f?E^6DO$6S|XjIXagf|;>L&(z)|B$K?=6UX3ZT+3-4EE zmXc`%s8QtLqk#tSIhPbhod1RJiP%$so_eDppM2`?&5ERC(kfCnOYY;FnK$#^yl?(< zcDBs$?DZbE|50J=Uo;p#xfC%Do&$Nv9M)ux;bc6+&onaz;aM;1n@!WtHFJKxnfD9L zf}S_MqF-v3G@kRyex*4B{ESoj+HB5d*fr*qzh+KF%zT$+?0dZF)0_j%3}~vFW)?Ja z6EvqlQw7bura1+g`3af@&@6!Fw5B-?n#Bp4MbIpPW=Yd5gJxxdX4zTYVzpn`RfDn5 z?XG8c`HhZ{-Ag=neW8SOh2mdghJMfQy~86J#$hY;YI?TIBU{?Oh=o-3a(R2#RlF5C zg74dk?}$K1I~ERa%h2cXuHb)+L~!NPkGT`JI=%>EJ9fi>hi!iDr!hZQE?*m+eyck= z_i!?l{QPblN9t0e5rU;1xf_Slgt8us)^4p_z8dl%jJa^!Sj*P(Y^Atw2OZn(rZDTj| zMMHK1=(@2V%G-^7ZN`nLy8-jj-#`2H^Na$whk8?qazOY zHHN>?p}iw4XuTeFlNGBa1>C@*<*sFWuC1(gDCGifa0c%|5#S!{SC)F_(gASRA~1aD z{&Yn!RahEkK9xD!h|siqeixmR*33Zsrk z7rxci^qUZ(Xlc~4lCov_q0{jM@EHqAu|0AGj0%>8xUeiqchK5NWO!YYy!CtoM<1_4e$E1%?+ZxYa#9qas;G)G_^uX<7E7kcJ}V>(|yS?6@nF`Z{H zp@W`Irl5C>+cd`{{C$hYnbA0-$Jx<1OJjJvxtSPWCOOab-8jjI?Y0u}bek<%o~tH} zb^-i;hgZD|fVeEoKiGOwSnU;7`_+Z}ipHNmDZJJzyw;q@ zG>%U&_Fr-AIF3KV9h+Gv(=^jKeh;e{<((X&I)6ASI0cM~G(yZ5osv@)C8zRu=7pFq zJJ3pPHYr`l#Zu2Wd&D#7x>HC4H zLdEIww(N-7&66(miG9cQZI1^X{}%3qs_e$XS3E6F+(n@d1V$x%m4~dx7`R@fc69@E4jfAaq4)nBF3cAA!F!bC*}Sta8EsZ9M-kU)Tkzn zB~{C^$F&@Zmc*C(6dm>C_*0{PgBA!}!K=Oj7-w1ph`HV~*9UW~G&`uUTzsE5h$cwC8>W*meansj+V7f zohNl!!c($Di`De+#i#|>-BsE^=~A!Dx(e^ehXXp#-%N=h7o)_Q4`RL+)FR3U| zjHxGpgREf~1G8Y514dwh8E^I2*`wcqnKLqo?*9qQWN6#VK%N;N7(Mp>(eEH{7|R28 z92AQN($pk)(0EF-&&Es3$2aP8Ubg%G-zIh!i1%@@c!qdSf(O;7H2ZA4^zKjK{c4g= L?jC7Cr-T0hX+{8; literal 0 HcmV?d00001 diff --git a/waylay-sdk-queries-types/src/waylay/services/queries/queries/__pycache__/status_api.cpython-311.pyc b/waylay-sdk-queries-types/src/waylay/services/queries/queries/__pycache__/status_api.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..3ecc27572f812034b15777c6bae62c7f01ade466 GIT binary patch literal 1426 zcmb7E&u`pB6rS;Vy&ESX6;0Z5NEzVJu1a>{!XZNZtP~-YKxw5)zD%c{*{oIDV`jz) zMo8q)Lyz2YL*i0|=pVDkl~0v=;^rzn^~9U;?l#bJ;MsnD^Pc_Yz3+YY@9XO!0y&&M z9-r$V^wcgE(rpcV`W+Z2h@%K`%)Jz6UgTkGchXMgN4~TDw3`J{59~GGf8a-b5A7ko z@&NHr^d3R(KjCU6TH&j=&|sZyV1(|lDrFV9SqfF{5|d;?3zY~>z6X!JUp@Sg6iONy z%XHwp6)BivnJ_}>VHnFs$m&^Df4l1a6O3)tX95YT6_&1r*$|^M9OIn zaMT@bR2?W`N|na|?NY1_=;PA>j1%+|0`&3zAE1==Xd5Rlej80>CPu2v0m0FcRQE?m zZa6zdwF5&rOk$y5=lXX{^ZPsV>A|auH_m!ZRX{4O;(2hiOfi3Nw76@)pwtww92Ql* zNe_gfHdaxVCQQ?@RB8>%KX3c!gE~gD)vc+&bqY3$ty+j}6$GDt0Qv+86k*`B$8ps0 zknp+3JEF_|$K6LhuobRWqJRg0SFi5x33JnK{o^|hdjfltyHL>GS6Qj-XH|D$rt;|a zz^^wggGCIqbfeM*11#&V_`xVvZ?vr}xl*4iWKpI-VtTJ~&+psqsWU09LrOEr%T$29 zMgb0%+WEt(M=6k;Qe~@mxYTR#s7Pt-_~Xh_>o&M*)y6_y1VeuW>Uep~{A*MH+LQC! zzwFMo-=4j(HM{iw?5*u)rMnqCL!h2pb$r7fZAzPMf8aY#sh&-32jZ+js4jtROCOiO zPbgN||3Td^D$a6~#IEG}Ld&=zkY#9RZW|S;R`y?1Z?vE5lKig0wg(IM%f4RpKW+i~ zL|uk}rMLbSRMWv2H+~QM4YKM@gx{N@ch8=U?_sY&|D^(iKf_b>>DjXhFuu^Bf2w{T T2Mu~vJ^cBZ^*(=1$kqQhNZ*u= literal 0 HcmV?d00001 diff --git a/waylay-sdk-queries-types/src/waylay/services/queries/queries/execute_api.py b/waylay-sdk-queries-types/src/waylay/services/queries/queries/execute_api.py new file mode 100644 index 0000000..7fbfc87 --- /dev/null +++ b/waylay-sdk-queries-types/src/waylay/services/queries/queries/execute_api.py @@ -0,0 +1,128 @@ +# coding: utf-8 +"""Waylay Query: timeseries queries (v1 protocol) query parameters. + +This code was generated from the OpenAPI documentation of 'Waylay Query: timeseries queries (v1 protocol)' + +Generated by OpenAPI Generator (https://openapi-generator.tech) + +Do not edit the class manually. +""" + +from __future__ import annotations # for Python 3.7–3.9 + +from typing import Any + +from pydantic import ( + ConfigDict, + Field, + StrictInt, + StrictStr, +) +from typing_extensions import ( + Annotated, # >=3.11 +) +from waylay.sdk.api._models import BaseModel as WaylayBaseModel + + +def _execute_by_name_query_alias_for(field_name: str) -> str: + if field_name == "resource": + return "resource" + if field_name == "metric": + return "metric" + if field_name == "aggregation": + return "aggregation" + if field_name == "interpolation": + return "interpolation" + if field_name == "freq": + return "freq" + if field_name == "var_from": + return "from" + if field_name == "until": + return "until" + if field_name == "window": + return "window" + if field_name == "periods": + return "periods" + if field_name == "render": + return "render" + return field_name + + +class ExecuteByNameQuery(WaylayBaseModel): + """Model for `execute_by_name` query parameters.""" + + resource: Annotated[ + StrictStr | None, Field(description="Default Resource Override.") + ] = None + metric: Annotated[ + StrictStr | None, Field(description="Default Metric Override.") + ] = None + aggregation: StrictStr | None = None + interpolation: Any | None = None + freq: Annotated[ + StrictStr | None, Field(description="Override for the `freq` query attribute.") + ] = None + var_from: StrictStr | None = None + until: StrictStr | None = None + window: StrictStr | None = None + periods: StrictInt | None = None + render: Any | None = None + + model_config = ConfigDict( + protected_namespaces=(), + extra="allow", + alias_generator=_execute_by_name_query_alias_for, + populate_by_name=True, + ) + + +def _execute_query_alias_for(field_name: str) -> str: + if field_name == "resource": + return "resource" + if field_name == "metric": + return "metric" + if field_name == "aggregation": + return "aggregation" + if field_name == "interpolation": + return "interpolation" + if field_name == "freq": + return "freq" + if field_name == "var_from": + return "from" + if field_name == "until": + return "until" + if field_name == "window": + return "window" + if field_name == "periods": + return "periods" + if field_name == "render": + return "render" + return field_name + + +class ExecuteQuery(WaylayBaseModel): + """Model for `execute` query parameters.""" + + resource: Annotated[ + StrictStr | None, Field(description="Default Resource Override.") + ] = None + metric: Annotated[ + StrictStr | None, Field(description="Default Metric Override.") + ] = None + aggregation: StrictStr | None = None + interpolation: Any | None = None + freq: Annotated[ + StrictStr | None, Field(description="Override for the `freq` query attribute.") + ] = None + var_from: StrictStr | None = None + until: StrictStr | None = None + window: StrictStr | None = None + periods: StrictInt | None = None + render: Any | None = None + + model_config = ConfigDict( + protected_namespaces=(), + extra="allow", + alias_generator=_execute_query_alias_for, + populate_by_name=True, + ) diff --git a/waylay-sdk-queries-types/src/waylay/services/queries/queries/manage_api.py b/waylay-sdk-queries-types/src/waylay/services/queries/queries/manage_api.py new file mode 100644 index 0000000..4d093c2 --- /dev/null +++ b/waylay-sdk-queries-types/src/waylay/services/queries/queries/manage_api.py @@ -0,0 +1,120 @@ +# coding: utf-8 +"""Waylay Query: timeseries queries (v1 protocol) query parameters. + +This code was generated from the OpenAPI documentation of 'Waylay Query: timeseries queries (v1 protocol)' + +Generated by OpenAPI Generator (https://openapi-generator.tech) + +Do not edit the class manually. +""" + +from __future__ import annotations # for Python 3.7–3.9 + +from pydantic import ( + ConfigDict, + Field, + StrictInt, + StrictStr, +) +from typing_extensions import ( + Annotated, # >=3.11 +) +from waylay.sdk.api._models import BaseModel as WaylayBaseModel + + +def _create_query_alias_for(field_name: str) -> str: + return field_name + + +class CreateQuery(WaylayBaseModel): + """Model for `create` query parameters.""" + + model_config = ConfigDict( + protected_namespaces=(), + extra="allow", + alias_generator=_create_query_alias_for, + populate_by_name=True, + ) + + +def _get_query_alias_for(field_name: str) -> str: + return field_name + + +class GetQuery(WaylayBaseModel): + """Model for `get` query parameters.""" + + model_config = ConfigDict( + protected_namespaces=(), + extra="allow", + alias_generator=_get_query_alias_for, + populate_by_name=True, + ) + + +def _list_query_alias_for(field_name: str) -> str: + if field_name == "q": + return "q" + if field_name == "limit": + return "limit" + if field_name == "offset": + return "offset" + return field_name + + +class ListQuery(WaylayBaseModel): + """Model for `list` query parameters.""" + + q: Annotated[ + StrictStr | None, + Field( + description="The QDSL filter condition for the stored queries. Note that this value needs to be escaped when passed as an url paramater." + ), + ] = None + limit: Annotated[ + Annotated[int, Field(le=100, strict=True)] | None, + Field(description="Maximal number of items return in one response."), + ] = None + offset: Annotated[ + StrictInt | None, + Field( + description="Numbers of items to skip before listing results in the response page." + ), + ] = None + + model_config = ConfigDict( + protected_namespaces=(), + extra="allow", + alias_generator=_list_query_alias_for, + populate_by_name=True, + ) + + +def _remove_query_alias_for(field_name: str) -> str: + return field_name + + +class RemoveQuery(WaylayBaseModel): + """Model for `remove` query parameters.""" + + model_config = ConfigDict( + protected_namespaces=(), + extra="allow", + alias_generator=_remove_query_alias_for, + populate_by_name=True, + ) + + +def _update_query_alias_for(field_name: str) -> str: + return field_name + + +class UpdateQuery(WaylayBaseModel): + """Model for `update` query parameters.""" + + model_config = ConfigDict( + protected_namespaces=(), + extra="allow", + alias_generator=_update_query_alias_for, + populate_by_name=True, + ) diff --git a/waylay-sdk-queries-types/src/waylay/services/queries/queries/py.typed b/waylay-sdk-queries-types/src/waylay/services/queries/queries/py.typed new file mode 100644 index 0000000..e69de29 diff --git a/waylay-sdk-queries-types/src/waylay/services/queries/queries/status_api.py b/waylay-sdk-queries-types/src/waylay/services/queries/queries/status_api.py new file mode 100644 index 0000000..6ae43c3 --- /dev/null +++ b/waylay-sdk-queries-types/src/waylay/services/queries/queries/status_api.py @@ -0,0 +1,31 @@ +# coding: utf-8 +"""Waylay Query: timeseries queries (v1 protocol) query parameters. + +This code was generated from the OpenAPI documentation of 'Waylay Query: timeseries queries (v1 protocol)' + +Generated by OpenAPI Generator (https://openapi-generator.tech) + +Do not edit the class manually. +""" + +from __future__ import annotations # for Python 3.7–3.9 + +from pydantic import ( + ConfigDict, +) +from waylay.sdk.api._models import BaseModel as WaylayBaseModel + + +def _get_query_alias_for(field_name: str) -> str: + return field_name + + +class GetQuery(WaylayBaseModel): + """Model for `get` query parameters.""" + + model_config = ConfigDict( + protected_namespaces=(), + extra="allow", + alias_generator=_get_query_alias_for, + populate_by_name=True, + ) diff --git a/waylay-sdk-queries/.openapi-generator/FILES b/waylay-sdk-queries/.openapi-generator/FILES new file mode 100644 index 0000000..7d04e8a --- /dev/null +++ b/waylay-sdk-queries/.openapi-generator/FILES @@ -0,0 +1,10 @@ +LICENSE.txt +pyproject.toml +src/waylay/services/queries/api/__init__.py +src/waylay/services/queries/api/execute_api.py +src/waylay/services/queries/api/manage_api.py +src/waylay/services/queries/api/py.typed +src/waylay/services/queries/api/status_api.py +src/waylay/services/queries/service/__init__.py +src/waylay/services/queries/service/py.typed +src/waylay/services/queries/service/service.py diff --git a/waylay-sdk-queries/.openapi-generator/VERSION b/waylay-sdk-queries/.openapi-generator/VERSION new file mode 100644 index 0000000..1985849 --- /dev/null +++ b/waylay-sdk-queries/.openapi-generator/VERSION @@ -0,0 +1 @@ +7.7.0 diff --git a/waylay-sdk-queries/LICENSE.txt b/waylay-sdk-queries/LICENSE.txt new file mode 100644 index 0000000..2796771 --- /dev/null +++ b/waylay-sdk-queries/LICENSE.txt @@ -0,0 +1,13 @@ +ISC License (ISC) +Copyright 2024, Waylay + +Permission to use, copy, modify, and/or distribute this software for any purpose +with or without fee is hereby granted, provided that the above copyright notice +and this permission notice appear in all copies. + +THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH +REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND +FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, +OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS +ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. \ No newline at end of file diff --git a/waylay-sdk-queries/README.md b/waylay-sdk-queries/README.md new file mode 100644 index 0000000..b1d3f06 --- /dev/null +++ b/waylay-sdk-queries/README.md @@ -0,0 +1,66 @@ +# Waylay Queries Service + +Execute and store queries on the Waylay timeseries. + +Protocol version: v1. + +This Python package is automatically generated based on the +Waylay Queries OpenAPI specification (API version: 0.5.0) +For more information, please visit [the openapi specification](https://docs.waylay.io/openapi/public/redocly/queries.html). + +It consists of a plugin for the waylay-sdk-core package, and contains the Queries api methods. +Note that the typed model classes for all path params, query params, body params and responses for each of the api methods are contained in a separate package called waylay-sdk-queries-types. + +## Requirements. +This package requires Python 3.9+. + +## Installation + +Normally this package is installed together with support for other services using the [waylay-sdk](https://pypi.org/project/waylay-sdk/) umbrella package: +* `pip install waylay-sdk` will install `waylay-sdk-queries` together with the SDK api packages for other services. +* `pip install waylay-sdk[types-queries]` will additionally install the types package `waylay-sdk-queries-types`. +* `pip install waylay-sdk[types]` will install the types packages for this and all other services. + +Alternatively, you can install support for this _queries_ service only, installing or extending an existing [waylay-sdk-core](https://pypi.org/project/waylay-sdk-core/): + +- `pip install waylay-sdk-queries` to only install api support for _queries_. +- `pip install waylay-sdk-queries[types]` to additionally install type support for _queries_. + +## Usage + +```python +from pprint import pprint + +# Import the waylay-client from the waylay-sdk-core package +from waylay.sdk.client import WaylayClient +from waylay.sdk.api.api_exceptions import ApiError + +# Intialize a waylay client instance +waylay_client = WaylayClient.from_profile() + +# Note that the typed model classes for responses/parameters/... are only available when `waylay-sdk-queries-types` is installed +from waylay.services.queries.models.query_input import QueryInput +from waylay.services.queries.models.query_result import QueryResult +try: + # Execute Query + # calls `POST /queries/v1/queries/v1/data` + api_response = await waylay_client.queries.execute.execute( + # query parameters: + query = { + 'resource': '13efb488-75ac-4dac-828a-d49c5c2ebbfc' + 'metric': 'temperature' + }, + # json data: use a generated model or a json-serializable python data structure (dict, list) + json = waylay.services.queries.QueryInput() # QueryInput | + headers = { + 'accept': 'accept_example', + }, + ) + print("The response of queries.execute.execute:\n") + pprint(api_response) +except ApiError as e: + print("Exception when calling queries.execute.execute: %s\n" % e) +``` + + +For more information, please visit the [Waylay API documentation](https://docs.waylay.io/#/api/?id=software-development-kits). \ No newline at end of file diff --git a/waylay-sdk-queries/pyproject.toml b/waylay-sdk-queries/pyproject.toml new file mode 100644 index 0000000..c5cb80a --- /dev/null +++ b/waylay-sdk-queries/pyproject.toml @@ -0,0 +1,76 @@ +[build-system] +requires = ["setuptools >= 61.0"] +build-backend = "setuptools.build_meta" + +[project] +name = "waylay-sdk-queries" +version = "0.5.0.20240802" +description = "Waylay Query: timeseries queries (v1 protocol)" +authors = [ + { name = "Waylay", email = "info@waylay.io"} +] +keywords = ["Waylay Query: timeseries queries (v1 protocol)"] +requires-python = ">= 3.9" +dependencies = [ + "waylay-sdk-core ~= 0.2.3", + "pydantic ~= 2.6", + "typing-extensions ~= 4.10", + "eval-type-backport ~= 0.1.3; python_version < '3.10'", +] +readme = "README.md" +license={file = "LICENSE.txt"} + +[project.urls] +Homepage = "https://www.waylay.io/" +Documentation = "https://docs.waylay.io/#/api/?id=software-development-kits" +Repository = "https://github.com/waylayio/waylay-sdk-queries-py.git" +"Openapi Specification" = "https://docs.waylay.io/openapi/public/redocly/queries.html" + +[project.optional-dependencies] +dev = [ + "mypy", + "ruff", + "types-python-jose", + "types-appdirs", + "types-python-dateutil", + "pytest", + "pytest-mock", + "pytest-httpx", + "pytest-asyncio", + "starlette", + "python-multipart", + "typeguard", + "pyyaml", + "jsf >= 0.11.1", +] + +types = ["waylay-sdk-queries-types"] + +[project.entry-points.dynamic] +"waylay_sdk_plugins"= "waylay.services.queries.service:PLUGINS" + +[tool.setuptools.packages.find] +where = ["src/"] +namespaces = true + +[tool.ruff] +include = ["pyproject.toml", "src/**/*.py"] + +[tool.ruff.lint] +# allow duplicate imports +ignore=["F811"] +# https://docs.astral.sh/ruff/rules +select= [ + "UP007", "FA102", # convert Union to | (pep-604) + "I001", "F401", # sort and remove unused imports + "PIE790", # remove unnecessary pass statements + "E303", # too many blank lines +] + +[tool.ruff.lint.per-file-ignores] +# do not touch imports here +"__init__.py" = ["F401"] +"conftest.py" = ["F401"] + +[tool.pytest.ini_options] +asyncio_mode = "auto" \ No newline at end of file diff --git a/waylay-sdk-queries/src/waylay/services/queries/api/__init__.py b/waylay-sdk-queries/src/waylay/services/queries/api/__init__.py new file mode 100644 index 0000000..c843532 --- /dev/null +++ b/waylay-sdk-queries/src/waylay/services/queries/api/__init__.py @@ -0,0 +1,12 @@ +"""Waylay Query: timeseries queries (v1 protocol): apis.""" + +# import apis into api package +from .execute_api import ExecuteApi +from .manage_api import ManageApi +from .status_api import StatusApi + +__all__ = [ + "ExecuteApi", + "ManageApi", + "StatusApi", +] diff --git a/waylay-sdk-queries/src/waylay/services/queries/api/__pycache__/__init__.cpython-311.pyc b/waylay-sdk-queries/src/waylay/services/queries/api/__pycache__/__init__.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..b49069d01bcfd3b33ae2c7fa3842f6fa562ba4ab GIT binary patch literal 563 zcmZutJx{|h5IrYpQ&P%r2!eqOZNvaWi;x%?K|&osS*$2AC2GE~la?^?ClEUeLgL3{ ztgR@@ugC}so0vEZGj{?b( zkceep4irnNV#RL-ZL5u70&eRWS*qI}gQ4CZT-up$XZl4-Xg1UnFCdIik1+j~BjVkg z?dvg(lE{gCW2oD)#|9sK7%)(wo!${AO~^^?@oeMF4(&;kj1xOanW)HA=IvAwuEpKC z(J54n-N?bX=#no9%!RAILJKOH3J{z^W0h0|2)-cOzK`)MEO`p6NAo5Mh)L5hB-ETo zbZXA4wfb?^=j+Tohp_*k-!kOK!18W_O9zRbLF;CTrAwC7ZJ zlTC`WEPKcEB3dkVSDjm(t~zz<>+(Ohw+99IEU*7t=C?luIh-FJ73kjm0t4xCC^<|$S_ge2IY@hwd*Is#-+s6s zvhP0@@}3ppQ}@This%xkUk-l_p77`gOIIWVrsuL<_b#7Z)ku;6uqfFVdbMIZ6yI{Dd@+HGFolWaT+iX^c4l736e5pXMOU&@A z%akdqB*)xF@S4tm>a40NM!>v=(g-2#lq?m16{tcNsU%Z|m73AXy?<3=QqHXKe?YZ@ zn%5|p<-H7kR^X!j!>qnERmh%GvfxpW(Q|Qr{_1r}$;#a58OBs*1i7qB`9e`QLi`$J z6%{?^GP-9zrRkzh&z9z-9OZ3B*s9}q^XCn5K5dN>{^K`q#Hatw=NT1}BFr_HEGFI5 zBfDg`jHMU8z6U<}xZHQ&_cgHmt|}wxtQvH2?i-6%%qhR zvnGfU(x^hyda5AlOGdk0ozh`q8C}cfG+8mDBxW>{}b-c=Kal|2z$Eg{uQgA(4C>fph{X&U9wz~th5j@$@ z_7U{yX*(2ufPbG0m42abU@iR=DukG~(J%aA5NKk3P`rq*Sq!NUVR0CWdKa=utdB$S zJPR|>UT#Fzb-g|_f40fYU6D1nX{N_9II82~HMwsMeRCWO90kw( z^HwN$Hu65kJ#!g{I;@8qo*%#^PY>!$#6_D&h&hNAR)i3Bj2qUcEY>HBS@B*VE8Gi~ zU0)p0?N|e}ELQfhsBR_O$gE=ovOe`PzVz7j&fl`Dp6Z^f?ES(cyUX6JnBOIP${wvv z=V`vlmG|l48b8<-lD&FIT}`+g`qD~EYV~+kZb*Se!6lT1+Zf;Y=XO<(9Fl!e{M0PSgT+TT+_pyAg$@ zT`jUSjou_CzNrmnQxgj=bDpjA+mfHBU0PgZbdhKKO-*pL*X*eIv-V7GL>;8jn+Y;ilMLoU z7FgqQJoOvVY#s($K~-AYP)D(q6?MdD$0euy7B*yH;5O|(Hq~CzB5FJbZwlN={+BoxKFCB z=<334*w28;nhtvv#7s<57=jSq5r82%LKhGo+Ng_%Sh_BdA2^Ec)^R6l1)9!gvQ!?gw-olM&|65I@tLdW zFm$AphutlB5_?KwUNo=O_dW@)7H!HtwV>*o#HK6C1e26_#*ApQvf^-91erXdgy#W zr#Vbj^RGEJC|RJ2x>Bo7yhls0&6LR$TjWromZ;i^EQfgdq!#rArb;l16iV_y2&=H& zf?m{UTFuMacpWeD!|afVUMv6`41g3+Z^tL8O&So+cBBpL; zu(v?!tw|0s)%DP_afL|*4Y~%lprh-GKfd?SWB4E^gH(vaN<4=&QKk^aO1OlyTQhv- zF9&iSy3M^U->vhlE@A|+5PKVbjIPU9re|iarKYY=U7DRbJ3GU0tHXM+t<#PYsX_@< zny?Sw6tiw@_Z16ZAT@#z{!`}6GTN-?7HenYC}?ZUhfN^e1r!*-z?DJ($mq65FpsWU zDkl|;fxMbef#a$;Tdhq)T*aOf{P)EWkKX{B_BQN7EllPem(afFA4h+E`yb*D;uW_m z8e9!kg2I95YM|m1!n@W(L*MN?3g!CA^HBai^2T@M*rUkt$C2aTN6vj4Irl#^k0S3r zj=Z}%Q}GL3!|R=66}QmQvvzqsJOY0pWY_M0IlSKY&fkBw_St`(02SRGl{O(TSm_el zyT9u>2sI~z>wcsR41Vw5_pN{5`pBtA{?m{Br`P?bp?dek+Waq5k9)@}LTGnzqo;pk zV0xo}6fPTQS6*<0zv+b&^n0-5(5sPtBwQLZUQ2zB9A z%OVgo(IF2m*Q^J;`RstT(|jNCfz4Ygs6n_fZSVZsfCsOepocX?>tVngO&b zK=IMk1p6}DtR3iG`-KCfBsM~aubkKsl#L+A_Do|x0hT5T*>$LIrmPEc7C@ph02J^IMakTll(xpN zY74jpS7E5bS5Vd-#i_wT%d=UNl=qLn{A``j@-_Zt@T(SKb_-2TWN8Pvf&{neX4?Tr zZMEZeknSK?Rw9<*bAXTR8_^x)3R80v=DQKKfu|;O&urRiyx9VFkgFZ!Y6rP8!N(os z3Q(3E?#U;9|{d$;oCkke@)P+)z1AQY~eHs3JWaysVGEafDidNKC}_)Tn`PdlOs_6o*e%7 zcOQ{AACos%XE%D@_`WCpZBP6^Jdb)#JnlKMI=wMORs(AXANltHb2C)wpTdtK6OSVk z-$zb=8#(=-^igE`ab)^6f=YWf2HyNDgG#Y36Fr2Tq6PYl;1!23NAZfoKl||tkF&7@ zSkxb4V+XM=iUp3X?MlR>SFI&t>+>X@KyGg1NxXUi8}V4w^CZ@Kjo9srNW>FN+m-lg zy~gt_X0K~Dp2oVCPv(qiBM&h=D&VO{b`6VHd)C{M_(HvIDeg0BNW@iS+|jp+Es=z)#sVf;IIsL~Vi4gkcx zsrZu{SnhvRabeRy1N)OIZx`}577pGn2k(=Kx9jxwA#Y>h;O%qpg4w9FsyBkXjfI0Z zQqK$P%-Fcq-9~G94;-vrl@ac!(Xoxe;f;}lw$cUB3oiqnTV6z`fuG+x^(t<*xnIJ| zZ=HH+Cv&YY=VQ*gT^9pWqlabg;TJ9W+X_DR=VBvFg7J^jDN}^kt1y9>8!LQ(!2s0B zJaEJC%p^l(n&Dd)hA1?jU539;G5L?Lkr7DT3P}=8}Vg7+V*{oPQg_;r05zCvJ!p z0nt}+dAvTbXd6Y)jl^3Q;Q?{~Ur>Bd=pS15MBwj-jkfNJ&;i=2#YP{tJqh(=1l+$d zyl>qOKN$Zv!w;2V5b^{3jtJiH=NDGbeKC7~_H(h~ oyXh4nJ~l7chX2G{{@kKn!%_cDM`UVL_-3?k>a_ctQzDfA2m4S5;{X5v literal 0 HcmV?d00001 diff --git a/waylay-sdk-queries/src/waylay/services/queries/api/__pycache__/manage_api.cpython-311.pyc b/waylay-sdk-queries/src/waylay/services/queries/api/__pycache__/manage_api.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..b31d53e0ef67f7cd2e5faf548553305d2c4ef669 GIT binary patch literal 25812 zcmeHPYiu0Xb)MxuxDUR$5-F0BMkFP2DT9z5>tH@u2&F@Xa5`Lwq$7pKbYmf!juv9+7|##ozQD{mx z6`Iq{g_d*+PY>r?3vKB(ejUlT7dp}%h0b(mA(>9{w8s37!p`(gejUws6}r>i0YM3| zJ&+m8?<(}9dkVej-a=oxudqA4yRav{r?5A@mzR&{#lpVyzCwSxzc7#&phV^7pTXik$Di>@ry7LQg52`HAh#;rKMNuc ze`el@+;&+=wM*y`;SFgaFD;0d<`lLtA!@mTqADz>sN&m5q3_|lN5nEKX{Br_pAw~V zZY&<3p3SLZwj?X!yrhb^l%m2UO_9YJRw{_vtRh}0E5*r+XGFP_ohv9sP116uqF9;{ zhc+f}C>}p;*M4)suGdT~F>!cS)5_|^_;?8-q1_=y&c0>Z*LWZYir(Z^%ddWqhrAQ+@`ma|Gnh=d;jV}*a-=sOM&nc8xb`Y!2>Ggo zh%54nE=*${55G+dvfjj``3y5Bem$XLa?fg+vZT%G%~o&86E20&H@U9+}WF_wO3p+U;|5*GA9D%xT$b=O{z@~U#3?We?ql{hqX zogJW*W-Em_ud^Yfu>_G}%I$EiYi8|wgelq_E3#cEkhQ#)M*N`bKgZV>zHsFS*=Ci#Z>#-|4 zLZzP}@(mELx!7}*{yd0ZuRlZT7aqNu+ZIo<7m%#SGjOCbbE+a|EFEd!)O3+EYNpwo za(!ioHHd~Bb_}p~aBgW!K7atPg_B+PzrkB#X;1e;jrMv_)fns8YUTdcr(ApTe$Y@Z zpc1IW<%VM@QfYYauoiL3 zvJ@l^c_fmC=Eqx49cc~TQui7v;rBvvuoBJ%itTc!5>gvAj+~83ixI8Ks$URtfqPAI zSZnd5G*_BFc4^_{Rcg>)Kxhyu!fl%C_~*7QM^4BQxv>(fG|179LY4SWfoCg?xxh~Y zl_>t2DxpeHj(-&VY2YsdKLpzSe($)2y>~ViPTs?L`f_v z^I}md0Q%9?1~6sJv!XarCgdX0%0ug_!mmVgX%cUiWOrFwz|5k29Jw&Zs8}i!8jBT8EQozY&p zc^iwgm@BFp7GMIsM$ugHmM9eoL5l@~Z=z8Uf*ERIrFpXe92O4KT&*yS>013K#8V39 zSio~a+hk=lUz0NT~>y4VI)v*_TWf(!7&A@tU##M@kka*)6`;qfXd*63YnRR4UDB6PPbljH0|E7EutpBUTPs zQB|^~qO6X3c!?i2kVI{+3^oja3`!Nr2ObsS=t?qu&ok`DWOyfL%GhtoSoOLl0z(rF zV?`=Vh&k&f_S_`%IgI3+3fG1gq#;lJ?9pii8(*b6@cU{~mG5avQH5=5Gk_yzYs$`) z@~|NqAm?x^Y3c-qVJUB*1k!ZExI-r}snDHj+~v53=JJ|#D^nA2Gw`0Wrd4$=n^hDU zT{(|!A>6c*HfQeB4L$Sbn?tTnV^U7VNW~rjeP9+$5w;VR!HGgX1Gtt zcHl~n%<=s$J&rj)W86-9quE)h7WOQa{%R=0j#9aERAG!}s|?{9y~(&Vb`tdt&jhPx z3Q}3`DVB;E*v`g}eDdXaD)|{S(45a&zW%?Vw0aZXn2ABI285y1Vxk%m_75$_mJ_W@ ziQXmgFzBzvgP)Badng`%BpzQpyWF|=^Um>4JI8+!df0jNQRmUcQ_FqgV(k8bhtXZ& zZfajj^nJGP2kN>Enedj;Cw$ydvgM0Vy{qjmR*wE2ZZ4_d?)i$BI;46s3}} z-p`}^K8@~M>Ob}{di+uJ_)_#Zl6M}uKmFs(qaCAFA+a;Q+_`JH=Y{3&f#uHbY77ZH zwHg;%yQ>NNXOpm_ui9+?Y!O;_R9oq1o6viRn0M{3?y$3|UZWZz(MDHwNi1#xDDJUj z$g^5GWp5E*!v->DdeBjkZ!!I*-!!8mVEOx16$})b*8p*5)ky@=N5Z zU9@+WO&>mM`OxGQ*FoV9T6_>QhVNS_?1CYyz&t*DSHYEf@Rp*z)9m0~{A`C@Hx%pR zV3*ruW9qT%G-N&4-x%QEMS6|UeGuwKvVDS$WVcS}5uZ>SbZ(u{NuN*~Om3afOAyL# z&@ds)=#gV%!1E|$?)3!R7_1h-0VNp-kFOd8FA8I?Q`%)B(;yF;H{`f-+{LaC_Zvjs1mPa4gPd?x*SD15*r+dnn8@in z0ik))178V5ERiUUT)IgA1nSrrdOA0|_elBv&=FMgVQ@ss@zlP^C?zWg=f zq3-3LsoygmTIshBl=v5X6TYyW=ovf0us#eEHHN|fbu0(|b>R#7aaND>&elVDoN;-l z#epyM`(LTMT|u#(!ruN5vxeh~EdE)SYAlbks!u8_Ah}lPzoTY1e%a~5FIy(`zkDrq z@XMA7)qO%8{IX?2e}kG?33lh*xH3Y1C#EVIk@jBJSH!!h%c(DUyz4OPv*TS+ig_X4 zby!2T^#Pg*BNi33ek1zj!Yp3w@Ug3uQ@$2A-3wGgh($G2LOd1~tOOB@B8|)sVo`R) zh{vMha;PRcm8ir&ZnVm~zbgr^MkboEYj>hjavZ0(B9&+*AU7fw6+|v778AGdA|NILs?diAF^1(y7a5#hF|l5i4vd7mba1(b)4xl*8G%d;P`^yB*ZA_EcfKTkg1x18E&K zR#kNyac(2dZNzCz#oLj?ZN&NYL=L@Rlih-|!p;y`4MxUY2(pg~aRfmCFGU$5lpgv|yqAxrV2^f2|)2B|{t6pG< z4z$vP4(@}JM#>c86mCq|C-m(8u+tw5*|caj52gKbuRv~{xXaTPrI4tb&|>RbHAkZ4 zuSL|4JO*6Z?|rfcgKE_?j$q;+59ZsBZ*A&y;@a`8AHl@NUG58UnaO|55iX+%8%Chp zkYgKiY(oyizuJZz+mPeyfE=p_xgt0qI5j=RX31Gu4SFP4O$2K=5%-%#(nqEdTSIaRkVJ=uGxe*=QQgkX1M zYL6>2W%riAR^A8^o{Va!B;+7}4l9V*mmMpD`YA~C z#=cyUDQ`V>qy@dD?gc9m#J)llX~J_@;Yt{>FV~Y-h<(*ObtOl%Hb;A$Ic%vke@tgd zeVTfxU4YJ$UiTbbT<@WPmC1a=Dvs;3$4Na1W)e zc_uK`x^e&872CN=0-V!(7pJ>%$jg4$oVXHFVA z(qUwlCc^vr8eKhEUvH?!b+x)~jhpW4x;1XPuQycVleK!2ecfX8@a-q)VLAhVhjjT! zS-YNfw9r@2CVSIY&nEkDUG;3HT^sK&mF(Qc_fTE;=G+tX9POTNw8nL`bqyUi*_&(B zxXFIqV2w}K>W%kxg?gsL)z{q7qit2=KKqj===EJsRQEb8u`azgITF@Y_a?{0rt5xM zHre<%;p=r=k7oG(R3?Krie>O3j=8*o>!wWRZM?db4t(QRV4BMpd+W)Ezk#Mvs5NQ)4EqFZV`EM={jV=%D zUmiM0{|}5*I}_nPJjm}OzYT)p{Wq%(l-1+qer&V05o;}Rv9>v^j}N`*k=jM9wZz5R z<*-6$5@}0K5^F7Su_isNI9@h9YBsf2Rj$5^v#r`sHX0aS?%loIf4~xXF%ZVv4%Vb{ z1KFrWc=m-_3wJe>as9*=OIdro+@^)W3XT25#oFeudMpf97}rl+tX&SP$HHKRas9-_ zn)I;R7G9UWBV?l*3wNz)Tf_2(g`>hzj3e(DZjXoitAd}{3R6}$S=iw=Eeuvz*iT%n zZ4Rr)!eE7k{lvxE<*<4z3|3g!Ph6}?536nAb?Li@Y*b_6_6vLruSsv3W7t1SpksH_ zkfVT*ecWBB=RdMvz=G0depv&2TmFlV(byv{KUrWy;ce+;*+G7s-+p;^LD zYztGCNMqRHHZ2TRjA1`v^9t(pNW7tnztX&SPXAFZCW7tnztVs{6ZQ*t4JGRO^ zyz31+0=B9U14nS&ZUvdW-Qw)-k+Gbqw!KVziycC?3b( z1gh`!W{;6ypyXA4T0(DkWtQ`Ew{k_+Npn;cmJo{2FiU}q$5mK zZH_cG5N|ya2~qAwNL&b{mV{yV|7GFelK21PAa3o}K&0Bx7>>XaPmQ!isH!I=9Y+F# zf1s+h3Eh25p(Or)x!l-M74||?n=E%x-s41fRp<*3F87K{(eB4PdlnPR-Mbf?AMY7h ziuOM4>{^Vvep7Xmp`6}&J{zt!fA}IVSc<{uL;I9q`K>r{7PZzWR literal 0 HcmV?d00001 diff --git a/waylay-sdk-queries/src/waylay/services/queries/api/__pycache__/status_api.cpython-311.pyc b/waylay-sdk-queries/src/waylay/services/queries/api/__pycache__/status_api.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..34ff65165e059fc9c638143b0a63dd72b730f521 GIT binary patch literal 6662 zcmcH-O>Y~=b(UXRk`nb{>cg^~jHNgdWqmkl8YD!VMv-O3jp8_w>Ld(|^_n}B)?V&1 zvr92dnZQPk!a#w-hZN4i1#(Ez8tD({rH7n)Wdau=7ARn#m$WAa?!nNh@6GP=OHtz# z&2ss6_RV`UZ)V=-{$XGsLEze{|EciTaYFuqFToY{8q)oLLE{$DNRDWd7BZw_C>N5j z9X7(nNG?*0=Ay+|E>`Tz^%douT#V=9qCa9JipgBE*q`ec?@?o*n98M!gSo-tP;N-z zV#aWBBsU`3ea3-eI+vCRi|`nXFB_x9vD}zM;y7FDO^fHo&EaXnCLSXkXG-M8S;P*p zgSoM{h#9Gncf)UyiWDMD){>t|gnSNv@5)Vv$Qsf5uM=&6r9TTpAN>8kLt1KsWCm4O z9eG2o8fulkR%X1KrH)=?Hsd<8={tbI=j_fCw8SmP%3DT;swI6fk=WeUZJM_M)HKxK*UiHlweWn7MrJ4ArcBxyVdMb#%+5R)Nm^u=!>ZiM7_~m#VFCeWbZPTJ^mQ};3E++noyONRI zq-p}4kkrn^+=0!v&aEmdFRiY;eCF($8(uc6Zse4ncig^p-GK!gZr^6L#LlbSm8~7d z4NKKBAvdw%aG-k8vJ5wg1k0LQ0{TqYO}@lbjd4WU?x5K6b1GMh9zuSd*(J-g8ORcS z1vb}!#=sl8v%Or>R}3At5fJhka|Gw+X;<3J`$sAsviBn0{{|Yj2qQTOlsTkHxiE`p zAuX&SjKV*5JEqNQqt|1f0p;f&8^Bz&MTb;lx1(A{o7jiypg-0mP|azN>_ZjysU8KY zyy(U^;MB@C?9zL8T1^USyrbtCEiz}@ z(rnOL3fI|JH&?UN(_f(npvY?3u{xCayVOkZzRn6+`rp;fo81?3-ITAzZ=Y5Tn_b`&h)f2^nVAdxAYujr402xJlYrysOZg$}9qG_$ ze{?s-nN#NGZVHX%ZQJ4V6u^ai;G1H=i0$9N<30}cGQ6VS-5__Qvv*FNzKqUQkg$n-%5LAO%C`J=7k4H&$8XVc?1 zeJAbp)bXLVX_mB)D>Vo^czKr)5*4;B5_O+Ye>v@Q?uW zEl58EkqSf*4S)!IE(S$ffE>wpfg;i@icp5U*%Ia+BF}@&?-#GHd*Ol#G=q!GddcPWMGwZNCJBW>4>aZdWwNdgB%yP z@Ujh?i~$!0FG04YQOF9gBM86#RP+*qJw-G|Ih;;++Ov4uMd=0{4Cb5O5Uf~osu%^4 z{NmKqMeN`#&-5K8<|vd6qj#eAp#Dh(f`~joY@%IadA$I#&UZ@+Neyf}cxu={mmul1rxCyX41+w0Ch*z4fT?-S6)8@%A$ophTSOv z8i0fKik~jE6+-BAi&KMaWqI5+3z8yB;5S%XqSXnE&6C8#Q3!$FDsLl+927kPVo ze^Ea+7y~6TtV$c5eVJ7uThZt;-x39roo&g9EOVkVv&v4Es?-K8G8i?15GswJ2Y1nC zdCS!7`7U1MhdofKQ!W7;D1ZV~Cgzv(6p~0)!)JvF>WLY%POnD-QkeGGSlQdCRsq-mK7>`SZU5eQd>1XQlR70NpT0Z)fe6&9G+?VpnyYk7pd=l8l7H)2SsN5Z$ zZ<6F#qH$oNG5KU;Vj3FFI3NVJnIMA`&1CDfpNt-E4zylVWN@@Oh_6HB&;l|aJk}g- zb>q0+FeEvIt$jf};bpoh?-UQ?VF}$if-Rv+k6;TEGyW)o?rM`$#2rO21t9ZK<6yb8 z|2WvYcbp~U5%QeC)o3+UpWZ{t)A!9X#AP|I4~C753KEmglF4+jpOzMtNec ztSF{hWQqbspaRakY+$=zQQm=XXns$hqQKWaMd6tKirUgEKC!;=Oel>l1W&==z6OSK zwe@R;Vo|wC5Dbx63asI&XBso}jp<{Jnd5jrKGz&hM2|GdUhr)gIIh3h3}M$qH}}03 z>kzW`f)3W9HtW5GXS-${N7i1@!8+b%1(|Wm)~sn{?FAjI=`L0<*x7l1slB2K@jEz& znvdWfP0uzC9cfHG9!$9=MZpLk77BwDXL2@km}B*iCtN5)z=RX#Sb@1Q$de$5b1c+2 zek}L=Hr7TQiym>{u3V~Ws_E!?@9PkHeK+M59*gkVWD$HiN6*Uf>w+l%-LdZOMbs>2 z*j_Lg?&vHT^zG~5pweIqE*L>n~5 z4@1YjB%q||MB~8t4f(-?W*lf9z%xan{a4p+tXx~azJ66|#$F3apvT`0Zw`Dbdj7pn Yzm3lE3nDMa$rthD@_6`*F$v&*06m<>SO5S3 literal 0 HcmV?d00001 diff --git a/waylay-sdk-queries/src/waylay/services/queries/api/execute_api.py b/waylay-sdk-queries/src/waylay/services/queries/api/execute_api.py new file mode 100644 index 0000000..11480bf --- /dev/null +++ b/waylay-sdk-queries/src/waylay/services/queries/api/execute_api.py @@ -0,0 +1,428 @@ +# coding: utf-8 +"""Waylay Query: timeseries queries (v1 protocol) api. + +This code was generated from the OpenAPI documentation of 'Waylay Query: timeseries queries (v1 protocol)' + +Generated by OpenAPI Generator (https://openapi-generator.tech) + +Do not edit the class manually. +""" + +from __future__ import annotations # for Python 3.7–3.9 + +from typing import ( + TYPE_CHECKING, + Any, + Dict, + Literal, + TypeVar, + overload, +) + +from pydantic import ( + StrictBool, + StrictStr, + TypeAdapter, +) +from waylay.sdk.api import ( + HeaderTypes, + QueryParamTypes, + Response, +) +from waylay.sdk.api._models import Model +from waylay.sdk.plugin import WithApiClient + +if TYPE_CHECKING: + from waylay.services.queries.models import ( + HTTPValidationError, + QueryInput, + QueryResult, + ) + from waylay.services.queries.queries.execute_api import ( + ExecuteByNameQuery, + ExecuteQuery, + ) + + +try: + from waylay.services.queries.models import ( + HTTPValidationError, + QueryInput, + QueryResult, + ) + from waylay.services.queries.queries.execute_api import ( + ExecuteByNameQuery, + ExecuteQuery, + ) + + MODELS_AVAILABLE = True +except ImportError: + MODELS_AVAILABLE = False + + if not TYPE_CHECKING: + ExecuteByNameQuery = dict + QueryResult = Model + + HTTPValidationError = Model + + QueryInput = Model + + ExecuteQuery = dict + QueryResult = Model + + HTTPValidationError = Model + + +T = TypeVar("T") + + +class ExecuteApi(WithApiClient): + """ExecuteApi service methods. + + NOTE: This class is auto generated by OpenAPI Generator + Ref: https://openapi-generator.tech + + Do not edit the class manually. + """ + + @overload + async def execute_by_name( + self, + query_name: StrictStr, + *, + query: ExecuteByNameQuery | QueryParamTypes | None = None, + raw_response: Literal[False] = False, + select_path: Literal[""] = "", + response_type: Literal[None] = None, + validate_request: StrictBool = True, + headers: HeaderTypes | None = None, + **kwargs, + ) -> QueryResult: ... + + @overload + async def execute_by_name( + self, + query_name: StrictStr, + *, + query: ExecuteByNameQuery | QueryParamTypes | None = None, + raw_response: Literal[False] = False, + select_path: Literal[""] = "", + response_type: T, + validate_request: StrictBool = True, + headers: HeaderTypes | None = None, + **kwargs, + ) -> T: ... + + @overload + async def execute_by_name( + self, + query_name: StrictStr, + *, + query: ExecuteByNameQuery | QueryParamTypes | None = None, + raw_response: Literal[True], + select_path: Literal["_not_used_"] = "_not_used_", + response_type: Literal[None] = None, # not used + validate_request: StrictBool = True, + headers: HeaderTypes | None = None, + **kwargs, + ) -> Response: ... + + @overload + async def execute_by_name( + self, + query_name: StrictStr, + *, + query: ExecuteByNameQuery | QueryParamTypes | None = None, + raw_response: Literal[False] = False, + select_path: str, + response_type: Literal[None] = None, + validate_request: StrictBool = True, + headers: HeaderTypes | None = None, + **kwargs, + ) -> Model: ... + + @overload + async def execute_by_name( + self, + query_name: StrictStr, + *, + query: ExecuteByNameQuery | QueryParamTypes | None = None, + raw_response: Literal[False] = False, + select_path: str, + response_type: T, + validate_request: StrictBool = True, + headers: HeaderTypes | None = None, + **kwargs, + ) -> T: ... + + async def execute_by_name( + self, + query_name: StrictStr, + *, + query: ExecuteByNameQuery | QueryParamTypes | None = None, + raw_response: StrictBool = False, + select_path: str = "", + response_type: T | None = None, + validate_request: StrictBool = True, + headers: HeaderTypes | None = None, + **kwargs, + ) -> QueryResult | T | Response | Model: + """Execute Named Query. + + Execute a named timeseries query. Retrieves a stored query definition by name, applies overrides from the url parameters, and executes it. + :param query_name: (required) + :type query_name: str + :param query: URL Query parameters. + :type query: ExecuteByNameQuery | QueryParamTypes, optional + :param query['resource'] (dict)
query.resource (Query) : Default Resource Override. + :type query['resource']: str + :param query['metric'] (dict)
query.metric (Query) : Default Metric Override. + :type query['metric']: str + :param query['aggregation'] (dict)
query.aggregation (Query) : + :type query['aggregation']: AggregationMethod + :param query['interpolation'] (dict)
query.interpolation (Query) : + :type query['interpolation']: Interpolation + :param query['freq'] (dict)
query.freq (Query) : Override for the `freq` query attribute. + :type query['freq']: GroupingIntervalOverride + :param query['from'] (dict)
query.var_from (Query) : + :type query['from']: FromOverride + :param query['until'] (dict)
query.until (Query) : + :type query['until']: FromOverride + :param query['window'] (dict)
query.window (Query) : + :type query['window']: WindowOverride + :param query['periods'] (dict)
query.periods (Query) : + :type query['periods']: int + :param query['render'] (dict)
query.render (Query) : + :type query['render']: Render1 + :param raw_response: If true, return the http Response object instead of returning an api model object, or throwing an ApiError. + :param select_path: Denotes the json path applied to the response object before returning it. + Set it to the empty string `""` to receive the full response object. + :param response_type: If specified, the response is parsed into an instance of the specified type. + :param validate_request: If set to false, the request body and query parameters are NOT validated against the models in the service types package, even when available. + :param headers: Header parameters for this request + :type headers: dict, optional + :param `**kwargs`: Additional parameters passed on to the http client. + See below. + :Keyword Arguments: + * timeout: a single numeric timeout in seconds, + or a tuple of _connect_, _read_, _write_ and _pool_ timeouts. + * stream: if true, the response will be in streaming mode + * cookies + * extensions + * auth + * follow_redirects: bool + + :return: Returns the result object if the http request succeeded with status code '2XX'. + :raises APIError: If the http request has a status code different from `2XX`. This + object wraps both the http Response and any parsed data. + """ + + # path parameters + path_params: Dict[str, str] = { + "query_name": str(query_name), + } + + ## named body parameters + body_args: Dict[str, Any] = {} + + # query parameters + if query is not None and MODELS_AVAILABLE and validate_request: + query = TypeAdapter(ExecuteByNameQuery).validate_python(query) + + response_types_map: Dict[str, Any] = ( + {"2XX": response_type} + if response_type is not None + else { + "200": QueryResult if not select_path else Model, + } + ) + non_200_response_types_map: Dict[str, Any] = { + "422": HTTPValidationError, + } + response_types_map.update(non_200_response_types_map) + + ## peform request + return await self.api_client.request( + method="GET", + resource_path="/queries/v1/queries/v1/data/{query_name}", + path_params=path_params, + params=query, + **body_args, + headers=headers, + **kwargs, + response_type=response_types_map, + select_path=select_path, + raw_response=raw_response, + ) + + @overload + async def execute( + self, + *, + json: QueryInput, + query: ExecuteQuery | QueryParamTypes | None = None, + raw_response: Literal[False] = False, + select_path: Literal[""] = "", + response_type: Literal[None] = None, + validate_request: StrictBool = True, + headers: HeaderTypes | None = None, + **kwargs, + ) -> QueryResult: ... + + @overload + async def execute( + self, + *, + json: QueryInput, + query: ExecuteQuery | QueryParamTypes | None = None, + raw_response: Literal[False] = False, + select_path: Literal[""] = "", + response_type: T, + validate_request: StrictBool = True, + headers: HeaderTypes | None = None, + **kwargs, + ) -> T: ... + + @overload + async def execute( + self, + *, + json: QueryInput, + query: ExecuteQuery | QueryParamTypes | None = None, + raw_response: Literal[True], + select_path: Literal["_not_used_"] = "_not_used_", + response_type: Literal[None] = None, # not used + validate_request: StrictBool = True, + headers: HeaderTypes | None = None, + **kwargs, + ) -> Response: ... + + @overload + async def execute( + self, + *, + json: QueryInput, + query: ExecuteQuery | QueryParamTypes | None = None, + raw_response: Literal[False] = False, + select_path: str, + response_type: Literal[None] = None, + validate_request: StrictBool = True, + headers: HeaderTypes | None = None, + **kwargs, + ) -> Model: ... + + @overload + async def execute( + self, + *, + json: QueryInput, + query: ExecuteQuery | QueryParamTypes | None = None, + raw_response: Literal[False] = False, + select_path: str, + response_type: T, + validate_request: StrictBool = True, + headers: HeaderTypes | None = None, + **kwargs, + ) -> T: ... + + async def execute( + self, + *, + json: QueryInput, + query: ExecuteQuery | QueryParamTypes | None = None, + raw_response: StrictBool = False, + select_path: str = "", + response_type: T | None = None, + validate_request: StrictBool = True, + headers: HeaderTypes | None = None, + **kwargs, + ) -> QueryResult | T | Response | Model: + """Execute Query. + + Execute a timeseries query. Executes the timeseries query specified in the request body, after applying any overrides from the url parameters. + :param json: The json request body. + :type json: QueryInput, optional + :param query: URL Query parameters. + :type query: ExecuteQuery | QueryParamTypes, optional + :param query['resource'] (dict)
query.resource (Query) : Default Resource Override. + :type query['resource']: str + :param query['metric'] (dict)
query.metric (Query) : Default Metric Override. + :type query['metric']: str + :param query['aggregation'] (dict)
query.aggregation (Query) : + :type query['aggregation']: AggregationMethod + :param query['interpolation'] (dict)
query.interpolation (Query) : + :type query['interpolation']: Interpolation + :param query['freq'] (dict)
query.freq (Query) : Override for the `freq` query attribute. + :type query['freq']: GroupingIntervalOverride + :param query['from'] (dict)
query.var_from (Query) : + :type query['from']: FromOverride + :param query['until'] (dict)
query.until (Query) : + :type query['until']: FromOverride + :param query['window'] (dict)
query.window (Query) : + :type query['window']: WindowOverride + :param query['periods'] (dict)
query.periods (Query) : + :type query['periods']: int + :param query['render'] (dict)
query.render (Query) : + :type query['render']: Render1 + :param raw_response: If true, return the http Response object instead of returning an api model object, or throwing an ApiError. + :param select_path: Denotes the json path applied to the response object before returning it. + Set it to the empty string `""` to receive the full response object. + :param response_type: If specified, the response is parsed into an instance of the specified type. + :param validate_request: If set to false, the request body and query parameters are NOT validated against the models in the service types package, even when available. + :param headers: Header parameters for this request + :type headers: dict, optional + :param `**kwargs`: Additional parameters passed on to the http client. + See below. + :Keyword Arguments: + * timeout: a single numeric timeout in seconds, + or a tuple of _connect_, _read_, _write_ and _pool_ timeouts. + * stream: if true, the response will be in streaming mode + * cookies + * extensions + * auth + * follow_redirects: bool + + :return: Returns the result object if the http request succeeded with status code '2XX'. + :raises APIError: If the http request has a status code different from `2XX`. This + object wraps both the http Response and any parsed data. + """ + + # path parameters + path_params: Dict[str, str] = {} + + ## named body parameters + body_args: Dict[str, Any] = {} + if json is not None and validate_request: + body_adapter: Any = TypeAdapter(QueryInput) + json = body_adapter.validate_python(json) # type: ignore # https://github.com/pydantic/pydantic/discussions/7094 + body_args["json"] = json + + # query parameters + if query is not None and MODELS_AVAILABLE and validate_request: + query = TypeAdapter(ExecuteQuery).validate_python(query) + + response_types_map: Dict[str, Any] = ( + {"2XX": response_type} + if response_type is not None + else { + "200": QueryResult if not select_path else Model, + } + ) + non_200_response_types_map: Dict[str, Any] = { + "422": HTTPValidationError, + } + response_types_map.update(non_200_response_types_map) + + ## peform request + return await self.api_client.request( + method="POST", + resource_path="/queries/v1/queries/v1/data", + path_params=path_params, + params=query, + **body_args, + headers=headers, + **kwargs, + response_type=response_types_map, + select_path=select_path, + raw_response=raw_response, + ) diff --git a/waylay-sdk-queries/src/waylay/services/queries/api/manage_api.py b/waylay-sdk-queries/src/waylay/services/queries/api/manage_api.py new file mode 100644 index 0000000..150991e --- /dev/null +++ b/waylay-sdk-queries/src/waylay/services/queries/api/manage_api.py @@ -0,0 +1,915 @@ +# coding: utf-8 +"""Waylay Query: timeseries queries (v1 protocol) api. + +This code was generated from the OpenAPI documentation of 'Waylay Query: timeseries queries (v1 protocol)' + +Generated by OpenAPI Generator (https://openapi-generator.tech) + +Do not edit the class manually. +""" + +from __future__ import annotations # for Python 3.7–3.9 + +from typing import ( + TYPE_CHECKING, + Any, + Dict, + Literal, + TypeVar, + overload, +) + +from pydantic import ( + Field, + StrictBool, + StrictStr, + TypeAdapter, +) +from typing_extensions import ( + Annotated, # >=3.9, +) +from waylay.sdk.api import ( + HeaderTypes, + QueryParamTypes, + Response, +) +from waylay.sdk.api._models import Model +from waylay.sdk.plugin import WithApiClient + +if TYPE_CHECKING: + from waylay.services.queries.models import ( + DeleteResponse, + HTTPValidationError, + QueriesListResponse, + QueryDefinition, + QueryEntityInput, + QueryResponse, + ) + from waylay.services.queries.queries.manage_api import ( + CreateQuery, + GetQuery, + ListQuery, + RemoveQuery, + UpdateQuery, + ) + + +try: + from waylay.services.queries.models import ( + DeleteResponse, + HTTPValidationError, + QueriesListResponse, + QueryDefinition, + QueryEntityInput, + QueryResponse, + ) + from waylay.services.queries.queries.manage_api import ( + CreateQuery, + GetQuery, + ListQuery, + RemoveQuery, + UpdateQuery, + ) + + MODELS_AVAILABLE = True +except ImportError: + MODELS_AVAILABLE = False + + if not TYPE_CHECKING: + QueryEntityInput = Model + + CreateQuery = dict + QueryResponse = Model + + HTTPValidationError = Model + + GetQuery = dict + QueryResponse = Model + + HTTPValidationError = Model + + ListQuery = dict + QueriesListResponse = Model + + HTTPValidationError = Model + + RemoveQuery = dict + DeleteResponse = Model + + HTTPValidationError = Model + + QueryDefinition = Model + + UpdateQuery = dict + QueryResponse = Model + + HTTPValidationError = Model + + +T = TypeVar("T") + + +class ManageApi(WithApiClient): + """ManageApi service methods. + + NOTE: This class is auto generated by OpenAPI Generator + Ref: https://openapi-generator.tech + + Do not edit the class manually. + """ + + @overload + async def create( + self, + *, + json: QueryEntityInput, + query: CreateQuery | QueryParamTypes | None = None, + raw_response: Literal[False] = False, + select_path: Literal[""] = "", + response_type: Literal[None] = None, + validate_request: StrictBool = True, + headers: HeaderTypes | None = None, + **kwargs, + ) -> QueryResponse: ... + + @overload + async def create( + self, + *, + json: QueryEntityInput, + query: CreateQuery | QueryParamTypes | None = None, + raw_response: Literal[False] = False, + select_path: Literal[""] = "", + response_type: T, + validate_request: StrictBool = True, + headers: HeaderTypes | None = None, + **kwargs, + ) -> T: ... + + @overload + async def create( + self, + *, + json: QueryEntityInput, + query: CreateQuery | QueryParamTypes | None = None, + raw_response: Literal[True], + select_path: Literal["_not_used_"] = "_not_used_", + response_type: Literal[None] = None, # not used + validate_request: StrictBool = True, + headers: HeaderTypes | None = None, + **kwargs, + ) -> Response: ... + + @overload + async def create( + self, + *, + json: QueryEntityInput, + query: CreateQuery | QueryParamTypes | None = None, + raw_response: Literal[False] = False, + select_path: str, + response_type: Literal[None] = None, + validate_request: StrictBool = True, + headers: HeaderTypes | None = None, + **kwargs, + ) -> Model: ... + + @overload + async def create( + self, + *, + json: QueryEntityInput, + query: CreateQuery | QueryParamTypes | None = None, + raw_response: Literal[False] = False, + select_path: str, + response_type: T, + validate_request: StrictBool = True, + headers: HeaderTypes | None = None, + **kwargs, + ) -> T: ... + + async def create( + self, + *, + json: QueryEntityInput, + query: CreateQuery | QueryParamTypes | None = None, + raw_response: StrictBool = False, + select_path: str = "", + response_type: T | None = None, + validate_request: StrictBool = True, + headers: HeaderTypes | None = None, + **kwargs, + ) -> QueryResponse | T | Response | Model: + """Post Query. + + Create a new named query. + :param json: The json request body. + :type json: QueryEntityInput, optional + :param query: URL Query parameters. + :type query: CreateQuery | QueryParamTypes, optional + :param raw_response: If true, return the http Response object instead of returning an api model object, or throwing an ApiError. + :param select_path: Denotes the json path applied to the response object before returning it. + Set it to the empty string `""` to receive the full response object. + :param response_type: If specified, the response is parsed into an instance of the specified type. + :param validate_request: If set to false, the request body and query parameters are NOT validated against the models in the service types package, even when available. + :param headers: Header parameters for this request + :type headers: dict, optional + :param `**kwargs`: Additional parameters passed on to the http client. + See below. + :Keyword Arguments: + * timeout: a single numeric timeout in seconds, + or a tuple of _connect_, _read_, _write_ and _pool_ timeouts. + * stream: if true, the response will be in streaming mode + * cookies + * extensions + * auth + * follow_redirects: bool + + :return: Returns the result object if the http request succeeded with status code '2XX'. + :raises APIError: If the http request has a status code different from `2XX`. This + object wraps both the http Response and any parsed data. + """ + + # path parameters + path_params: Dict[str, str] = {} + + ## named body parameters + body_args: Dict[str, Any] = {} + if json is not None and validate_request: + body_adapter: Any = TypeAdapter(QueryEntityInput) + json = body_adapter.validate_python(json) # type: ignore # https://github.com/pydantic/pydantic/discussions/7094 + body_args["json"] = json + + # query parameters + if query is not None and MODELS_AVAILABLE and validate_request: + query = TypeAdapter(CreateQuery).validate_python(query) + + response_types_map: Dict[str, Any] = ( + {"2XX": response_type} + if response_type is not None + else { + "200": QueryResponse if not select_path else Model, + } + ) + non_200_response_types_map: Dict[str, Any] = { + "422": HTTPValidationError, + } + response_types_map.update(non_200_response_types_map) + + ## peform request + return await self.api_client.request( + method="POST", + resource_path="/queries/v1/queries/v1/query", + path_params=path_params, + params=query, + **body_args, + headers=headers, + **kwargs, + response_type=response_types_map, + select_path=select_path, + raw_response=raw_response, + ) + + @overload + async def get( + self, + query_name: Annotated[ + StrictStr, Field(description="Name of the stored query.") + ], + *, + query: GetQuery | QueryParamTypes | None = None, + raw_response: Literal[False] = False, + select_path: Literal[""] = "", + response_type: Literal[None] = None, + validate_request: StrictBool = True, + headers: HeaderTypes | None = None, + **kwargs, + ) -> QueryResponse: ... + + @overload + async def get( + self, + query_name: Annotated[ + StrictStr, Field(description="Name of the stored query.") + ], + *, + query: GetQuery | QueryParamTypes | None = None, + raw_response: Literal[False] = False, + select_path: Literal[""] = "", + response_type: T, + validate_request: StrictBool = True, + headers: HeaderTypes | None = None, + **kwargs, + ) -> T: ... + + @overload + async def get( + self, + query_name: Annotated[ + StrictStr, Field(description="Name of the stored query.") + ], + *, + query: GetQuery | QueryParamTypes | None = None, + raw_response: Literal[True], + select_path: Literal["_not_used_"] = "_not_used_", + response_type: Literal[None] = None, # not used + validate_request: StrictBool = True, + headers: HeaderTypes | None = None, + **kwargs, + ) -> Response: ... + + @overload + async def get( + self, + query_name: Annotated[ + StrictStr, Field(description="Name of the stored query.") + ], + *, + query: GetQuery | QueryParamTypes | None = None, + raw_response: Literal[False] = False, + select_path: str, + response_type: Literal[None] = None, + validate_request: StrictBool = True, + headers: HeaderTypes | None = None, + **kwargs, + ) -> Model: ... + + @overload + async def get( + self, + query_name: Annotated[ + StrictStr, Field(description="Name of the stored query.") + ], + *, + query: GetQuery | QueryParamTypes | None = None, + raw_response: Literal[False] = False, + select_path: str, + response_type: T, + validate_request: StrictBool = True, + headers: HeaderTypes | None = None, + **kwargs, + ) -> T: ... + + async def get( + self, + query_name: Annotated[ + StrictStr, Field(description="Name of the stored query.") + ], + *, + query: GetQuery | QueryParamTypes | None = None, + raw_response: StrictBool = False, + select_path: str = "", + response_type: T | None = None, + validate_request: StrictBool = True, + headers: HeaderTypes | None = None, + **kwargs, + ) -> QueryResponse | T | Response | Model: + """Get Query. + + Get the definition of a named query. + :param query_name: Name of the stored query. (required) + :type query_name: str + :param query: URL Query parameters. + :type query: GetQuery | QueryParamTypes, optional + :param raw_response: If true, return the http Response object instead of returning an api model object, or throwing an ApiError. + :param select_path: Denotes the json path applied to the response object before returning it. + Set it to the empty string `""` to receive the full response object. + :param response_type: If specified, the response is parsed into an instance of the specified type. + :param validate_request: If set to false, the request body and query parameters are NOT validated against the models in the service types package, even when available. + :param headers: Header parameters for this request + :type headers: dict, optional + :param `**kwargs`: Additional parameters passed on to the http client. + See below. + :Keyword Arguments: + * timeout: a single numeric timeout in seconds, + or a tuple of _connect_, _read_, _write_ and _pool_ timeouts. + * stream: if true, the response will be in streaming mode + * cookies + * extensions + * auth + * follow_redirects: bool + + :return: Returns the result object if the http request succeeded with status code '2XX'. + :raises APIError: If the http request has a status code different from `2XX`. This + object wraps both the http Response and any parsed data. + """ + + # path parameters + path_params: Dict[str, str] = { + "query_name": str(query_name), + } + + ## named body parameters + body_args: Dict[str, Any] = {} + + # query parameters + if query is not None and MODELS_AVAILABLE and validate_request: + query = TypeAdapter(GetQuery).validate_python(query) + + response_types_map: Dict[str, Any] = ( + {"2XX": response_type} + if response_type is not None + else { + "200": QueryResponse if not select_path else Model, + } + ) + non_200_response_types_map: Dict[str, Any] = { + "422": HTTPValidationError, + } + response_types_map.update(non_200_response_types_map) + + ## peform request + return await self.api_client.request( + method="GET", + resource_path="/queries/v1/queries/v1/query/{query_name}", + path_params=path_params, + params=query, + **body_args, + headers=headers, + **kwargs, + response_type=response_types_map, + select_path=select_path, + raw_response=raw_response, + ) + + @overload + async def list( + self, + *, + query: ListQuery | QueryParamTypes | None = None, + raw_response: Literal[False] = False, + select_path: Literal[""] = "", + response_type: Literal[None] = None, + validate_request: StrictBool = True, + headers: HeaderTypes | None = None, + **kwargs, + ) -> QueriesListResponse: ... + + @overload + async def list( + self, + *, + query: ListQuery | QueryParamTypes | None = None, + raw_response: Literal[False] = False, + select_path: Literal[""] = "", + response_type: T, + validate_request: StrictBool = True, + headers: HeaderTypes | None = None, + **kwargs, + ) -> T: ... + + @overload + async def list( + self, + *, + query: ListQuery | QueryParamTypes | None = None, + raw_response: Literal[True], + select_path: Literal["_not_used_"] = "_not_used_", + response_type: Literal[None] = None, # not used + validate_request: StrictBool = True, + headers: HeaderTypes | None = None, + **kwargs, + ) -> Response: ... + + @overload + async def list( + self, + *, + query: ListQuery | QueryParamTypes | None = None, + raw_response: Literal[False] = False, + select_path: str, + response_type: Literal[None] = None, + validate_request: StrictBool = True, + headers: HeaderTypes | None = None, + **kwargs, + ) -> Model: ... + + @overload + async def list( + self, + *, + query: ListQuery | QueryParamTypes | None = None, + raw_response: Literal[False] = False, + select_path: str, + response_type: T, + validate_request: StrictBool = True, + headers: HeaderTypes | None = None, + **kwargs, + ) -> T: ... + + async def list( + self, + *, + query: ListQuery | QueryParamTypes | None = None, + raw_response: StrictBool = False, + select_path: str = "", + response_type: T | None = None, + validate_request: StrictBool = True, + headers: HeaderTypes | None = None, + **kwargs, + ) -> QueriesListResponse | T | Response | Model: + """List Queries. + + List named queries. + :param query: URL Query parameters. + :type query: ListQuery | QueryParamTypes, optional + :param query['q'] (dict)
query.q (Query) : The QDSL filter condition for the stored queries. Note that this value needs to be escaped when passed as an url paramater. + :type query['q']: str + :param query['limit'] (dict)
query.limit (Query) : Maximal number of items return in one response. + :type query['limit']: int + :param query['offset'] (dict)
query.offset (Query) : Numbers of items to skip before listing results in the response page. + :type query['offset']: int + :param raw_response: If true, return the http Response object instead of returning an api model object, or throwing an ApiError. + :param select_path: Denotes the json path applied to the response object before returning it. + Set it to the empty string `""` to receive the full response object. + :param response_type: If specified, the response is parsed into an instance of the specified type. + :param validate_request: If set to false, the request body and query parameters are NOT validated against the models in the service types package, even when available. + :param headers: Header parameters for this request + :type headers: dict, optional + :param `**kwargs`: Additional parameters passed on to the http client. + See below. + :Keyword Arguments: + * timeout: a single numeric timeout in seconds, + or a tuple of _connect_, _read_, _write_ and _pool_ timeouts. + * stream: if true, the response will be in streaming mode + * cookies + * extensions + * auth + * follow_redirects: bool + + :return: Returns the result object if the http request succeeded with status code '2XX'. + :raises APIError: If the http request has a status code different from `2XX`. This + object wraps both the http Response and any parsed data. + """ + + # path parameters + path_params: Dict[str, str] = {} + + ## named body parameters + body_args: Dict[str, Any] = {} + + # query parameters + if query is not None and MODELS_AVAILABLE and validate_request: + query = TypeAdapter(ListQuery).validate_python(query) + + response_types_map: Dict[str, Any] = ( + {"2XX": response_type} + if response_type is not None + else { + "200": QueriesListResponse if not select_path else Model, + } + ) + non_200_response_types_map: Dict[str, Any] = { + "422": HTTPValidationError, + } + response_types_map.update(non_200_response_types_map) + + ## peform request + return await self.api_client.request( + method="GET", + resource_path="/queries/v1/queries/v1/query", + path_params=path_params, + params=query, + **body_args, + headers=headers, + **kwargs, + response_type=response_types_map, + select_path=select_path, + raw_response=raw_response, + ) + + @overload + async def remove( + self, + query_name: Annotated[ + StrictStr, Field(description="Name of the stored query.") + ], + *, + query: RemoveQuery | QueryParamTypes | None = None, + raw_response: Literal[False] = False, + select_path: Literal[""] = "", + response_type: Literal[None] = None, + validate_request: StrictBool = True, + headers: HeaderTypes | None = None, + **kwargs, + ) -> DeleteResponse: ... + + @overload + async def remove( + self, + query_name: Annotated[ + StrictStr, Field(description="Name of the stored query.") + ], + *, + query: RemoveQuery | QueryParamTypes | None = None, + raw_response: Literal[False] = False, + select_path: Literal[""] = "", + response_type: T, + validate_request: StrictBool = True, + headers: HeaderTypes | None = None, + **kwargs, + ) -> T: ... + + @overload + async def remove( + self, + query_name: Annotated[ + StrictStr, Field(description="Name of the stored query.") + ], + *, + query: RemoveQuery | QueryParamTypes | None = None, + raw_response: Literal[True], + select_path: Literal["_not_used_"] = "_not_used_", + response_type: Literal[None] = None, # not used + validate_request: StrictBool = True, + headers: HeaderTypes | None = None, + **kwargs, + ) -> Response: ... + + @overload + async def remove( + self, + query_name: Annotated[ + StrictStr, Field(description="Name of the stored query.") + ], + *, + query: RemoveQuery | QueryParamTypes | None = None, + raw_response: Literal[False] = False, + select_path: str, + response_type: Literal[None] = None, + validate_request: StrictBool = True, + headers: HeaderTypes | None = None, + **kwargs, + ) -> Model: ... + + @overload + async def remove( + self, + query_name: Annotated[ + StrictStr, Field(description="Name of the stored query.") + ], + *, + query: RemoveQuery | QueryParamTypes | None = None, + raw_response: Literal[False] = False, + select_path: str, + response_type: T, + validate_request: StrictBool = True, + headers: HeaderTypes | None = None, + **kwargs, + ) -> T: ... + + async def remove( + self, + query_name: Annotated[ + StrictStr, Field(description="Name of the stored query.") + ], + *, + query: RemoveQuery | QueryParamTypes | None = None, + raw_response: StrictBool = False, + select_path: str = "", + response_type: T | None = None, + validate_request: StrictBool = True, + headers: HeaderTypes | None = None, + **kwargs, + ) -> DeleteResponse | T | Response | Model: + """Remove Query. + + Remove definition of a named query. + :param query_name: Name of the stored query. (required) + :type query_name: str + :param query: URL Query parameters. + :type query: RemoveQuery | QueryParamTypes, optional + :param raw_response: If true, return the http Response object instead of returning an api model object, or throwing an ApiError. + :param select_path: Denotes the json path applied to the response object before returning it. + Set it to the empty string `""` to receive the full response object. + :param response_type: If specified, the response is parsed into an instance of the specified type. + :param validate_request: If set to false, the request body and query parameters are NOT validated against the models in the service types package, even when available. + :param headers: Header parameters for this request + :type headers: dict, optional + :param `**kwargs`: Additional parameters passed on to the http client. + See below. + :Keyword Arguments: + * timeout: a single numeric timeout in seconds, + or a tuple of _connect_, _read_, _write_ and _pool_ timeouts. + * stream: if true, the response will be in streaming mode + * cookies + * extensions + * auth + * follow_redirects: bool + + :return: Returns the result object if the http request succeeded with status code '2XX'. + :raises APIError: If the http request has a status code different from `2XX`. This + object wraps both the http Response and any parsed data. + """ + + # path parameters + path_params: Dict[str, str] = { + "query_name": str(query_name), + } + + ## named body parameters + body_args: Dict[str, Any] = {} + + # query parameters + if query is not None and MODELS_AVAILABLE and validate_request: + query = TypeAdapter(RemoveQuery).validate_python(query) + + response_types_map: Dict[str, Any] = ( + {"2XX": response_type} + if response_type is not None + else { + "200": DeleteResponse if not select_path else Model, + } + ) + non_200_response_types_map: Dict[str, Any] = { + "422": HTTPValidationError, + } + response_types_map.update(non_200_response_types_map) + + ## peform request + return await self.api_client.request( + method="DELETE", + resource_path="/queries/v1/queries/v1/query/{query_name}", + path_params=path_params, + params=query, + **body_args, + headers=headers, + **kwargs, + response_type=response_types_map, + select_path=select_path, + raw_response=raw_response, + ) + + @overload + async def update( + self, + query_name: Annotated[ + StrictStr, Field(description="Name of the stored query.") + ], + *, + json: QueryDefinition, + query: UpdateQuery | QueryParamTypes | None = None, + raw_response: Literal[False] = False, + select_path: Literal[""] = "", + response_type: Literal[None] = None, + validate_request: StrictBool = True, + headers: HeaderTypes | None = None, + **kwargs, + ) -> QueryResponse: ... + + @overload + async def update( + self, + query_name: Annotated[ + StrictStr, Field(description="Name of the stored query.") + ], + *, + json: QueryDefinition, + query: UpdateQuery | QueryParamTypes | None = None, + raw_response: Literal[False] = False, + select_path: Literal[""] = "", + response_type: T, + validate_request: StrictBool = True, + headers: HeaderTypes | None = None, + **kwargs, + ) -> T: ... + + @overload + async def update( + self, + query_name: Annotated[ + StrictStr, Field(description="Name of the stored query.") + ], + *, + json: QueryDefinition, + query: UpdateQuery | QueryParamTypes | None = None, + raw_response: Literal[True], + select_path: Literal["_not_used_"] = "_not_used_", + response_type: Literal[None] = None, # not used + validate_request: StrictBool = True, + headers: HeaderTypes | None = None, + **kwargs, + ) -> Response: ... + + @overload + async def update( + self, + query_name: Annotated[ + StrictStr, Field(description="Name of the stored query.") + ], + *, + json: QueryDefinition, + query: UpdateQuery | QueryParamTypes | None = None, + raw_response: Literal[False] = False, + select_path: str, + response_type: Literal[None] = None, + validate_request: StrictBool = True, + headers: HeaderTypes | None = None, + **kwargs, + ) -> Model: ... + + @overload + async def update( + self, + query_name: Annotated[ + StrictStr, Field(description="Name of the stored query.") + ], + *, + json: QueryDefinition, + query: UpdateQuery | QueryParamTypes | None = None, + raw_response: Literal[False] = False, + select_path: str, + response_type: T, + validate_request: StrictBool = True, + headers: HeaderTypes | None = None, + **kwargs, + ) -> T: ... + + async def update( + self, + query_name: Annotated[ + StrictStr, Field(description="Name of the stored query.") + ], + *, + json: QueryDefinition, + query: UpdateQuery | QueryParamTypes | None = None, + raw_response: StrictBool = False, + select_path: str = "", + response_type: T | None = None, + validate_request: StrictBool = True, + headers: HeaderTypes | None = None, + **kwargs, + ) -> QueryResponse | T | Response | Model: + """Update Query. + + Create or update a named query definition. + :param query_name: Name of the stored query. (required) + :type query_name: str + :param json: The json request body. + :type json: QueryDefinition, optional + :param query: URL Query parameters. + :type query: UpdateQuery | QueryParamTypes, optional + :param raw_response: If true, return the http Response object instead of returning an api model object, or throwing an ApiError. + :param select_path: Denotes the json path applied to the response object before returning it. + Set it to the empty string `""` to receive the full response object. + :param response_type: If specified, the response is parsed into an instance of the specified type. + :param validate_request: If set to false, the request body and query parameters are NOT validated against the models in the service types package, even when available. + :param headers: Header parameters for this request + :type headers: dict, optional + :param `**kwargs`: Additional parameters passed on to the http client. + See below. + :Keyword Arguments: + * timeout: a single numeric timeout in seconds, + or a tuple of _connect_, _read_, _write_ and _pool_ timeouts. + * stream: if true, the response will be in streaming mode + * cookies + * extensions + * auth + * follow_redirects: bool + + :return: Returns the result object if the http request succeeded with status code '2XX'. + :raises APIError: If the http request has a status code different from `2XX`. This + object wraps both the http Response and any parsed data. + """ + + # path parameters + path_params: Dict[str, str] = { + "query_name": str(query_name), + } + + ## named body parameters + body_args: Dict[str, Any] = {} + if json is not None and validate_request: + body_adapter: Any = TypeAdapter(QueryDefinition) + json = body_adapter.validate_python(json) # type: ignore # https://github.com/pydantic/pydantic/discussions/7094 + body_args["json"] = json + + # query parameters + if query is not None and MODELS_AVAILABLE and validate_request: + query = TypeAdapter(UpdateQuery).validate_python(query) + + response_types_map: Dict[str, Any] = ( + {"2XX": response_type} + if response_type is not None + else { + "200": QueryResponse if not select_path else Model, + } + ) + non_200_response_types_map: Dict[str, Any] = { + "422": HTTPValidationError, + } + response_types_map.update(non_200_response_types_map) + + ## peform request + return await self.api_client.request( + method="PUT", + resource_path="/queries/v1/queries/v1/query/{query_name}", + path_params=path_params, + params=query, + **body_args, + headers=headers, + **kwargs, + response_type=response_types_map, + select_path=select_path, + raw_response=raw_response, + ) diff --git a/waylay-sdk-queries/src/waylay/services/queries/api/py.typed b/waylay-sdk-queries/src/waylay/services/queries/api/py.typed new file mode 100644 index 0000000..e69de29 diff --git a/waylay-sdk-queries/src/waylay/services/queries/api/status_api.py b/waylay-sdk-queries/src/waylay/services/queries/api/status_api.py new file mode 100644 index 0000000..290cb07 --- /dev/null +++ b/waylay-sdk-queries/src/waylay/services/queries/api/status_api.py @@ -0,0 +1,197 @@ +# coding: utf-8 +"""Waylay Query: timeseries queries (v1 protocol) api. + +This code was generated from the OpenAPI documentation of 'Waylay Query: timeseries queries (v1 protocol)' + +Generated by OpenAPI Generator (https://openapi-generator.tech) + +Do not edit the class manually. +""" + +from __future__ import annotations # for Python 3.7–3.9 + +from typing import ( + TYPE_CHECKING, + Any, + Dict, + Literal, + TypeVar, + overload, +) + +from pydantic import ( + StrictBool, + TypeAdapter, +) +from waylay.sdk.api import ( + HeaderTypes, + QueryParamTypes, + Response, +) +from waylay.sdk.api._models import Model +from waylay.sdk.plugin import WithApiClient + +if TYPE_CHECKING: + from waylay.services.queries.queries.status_api import GetQuery + + +try: + from waylay.services.queries.queries.status_api import GetQuery + + MODELS_AVAILABLE = True +except ImportError: + MODELS_AVAILABLE = False + + if not TYPE_CHECKING: + GetQuery = dict + + +T = TypeVar("T") + + +class StatusApi(WithApiClient): + """StatusApi service methods. + + NOTE: This class is auto generated by OpenAPI Generator + Ref: https://openapi-generator.tech + + Do not edit the class manually. + """ + + @overload + async def get( + self, + *, + query: GetQuery | QueryParamTypes | None = None, + raw_response: Literal[False] = False, + select_path: Literal[""] = "", + response_type: Literal[None] = None, + validate_request: StrictBool = True, + headers: HeaderTypes | None = None, + **kwargs, + ) -> Dict[str, str]: ... + + @overload + async def get( + self, + *, + query: GetQuery | QueryParamTypes | None = None, + raw_response: Literal[False] = False, + select_path: Literal[""] = "", + response_type: T, + validate_request: StrictBool = True, + headers: HeaderTypes | None = None, + **kwargs, + ) -> T: ... + + @overload + async def get( + self, + *, + query: GetQuery | QueryParamTypes | None = None, + raw_response: Literal[True], + select_path: Literal["_not_used_"] = "_not_used_", + response_type: Literal[None] = None, # not used + validate_request: StrictBool = True, + headers: HeaderTypes | None = None, + **kwargs, + ) -> Response: ... + + @overload + async def get( + self, + *, + query: GetQuery | QueryParamTypes | None = None, + raw_response: Literal[False] = False, + select_path: str, + response_type: Literal[None] = None, + validate_request: StrictBool = True, + headers: HeaderTypes | None = None, + **kwargs, + ) -> Model: ... + + @overload + async def get( + self, + *, + query: GetQuery | QueryParamTypes | None = None, + raw_response: Literal[False] = False, + select_path: str, + response_type: T, + validate_request: StrictBool = True, + headers: HeaderTypes | None = None, + **kwargs, + ) -> T: ... + + async def get( + self, + *, + query: GetQuery | QueryParamTypes | None = None, + raw_response: StrictBool = False, + select_path: str = "", + response_type: T | None = None, + validate_request: StrictBool = True, + headers: HeaderTypes | None = None, + **kwargs, + ) -> Dict[str, str] | T | Response | Model: + """Get Version And Health. + + Get the version and health status for waylay-query. + :param query: URL Query parameters. + :type query: GetQuery | QueryParamTypes, optional + :param raw_response: If true, return the http Response object instead of returning an api model object, or throwing an ApiError. + :param select_path: Denotes the json path applied to the response object before returning it. + Set it to the empty string `""` to receive the full response object. + :param response_type: If specified, the response is parsed into an instance of the specified type. + :param validate_request: If set to false, the request body and query parameters are NOT validated against the models in the service types package, even when available. + :param headers: Header parameters for this request + :type headers: dict, optional + :param `**kwargs`: Additional parameters passed on to the http client. + See below. + :Keyword Arguments: + * timeout: a single numeric timeout in seconds, + or a tuple of _connect_, _read_, _write_ and _pool_ timeouts. + * stream: if true, the response will be in streaming mode + * cookies + * extensions + * auth + * follow_redirects: bool + + :return: Returns the result object if the http request succeeded with status code '2XX'. + :raises APIError: If the http request has a status code different from `2XX`. This + object wraps both the http Response and any parsed data. + """ + + # path parameters + path_params: Dict[str, str] = {} + + ## named body parameters + body_args: Dict[str, Any] = {} + + # query parameters + if query is not None and MODELS_AVAILABLE and validate_request: + query = TypeAdapter(GetQuery).validate_python(query) + + response_types_map: Dict[str, Any] = ( + {"2XX": response_type} + if response_type is not None + else { + "200": Dict[str, str] if not select_path else Model, + } + ) + non_200_response_types_map: Dict[str, Any] = {} + response_types_map.update(non_200_response_types_map) + + ## peform request + return await self.api_client.request( + method="GET", + resource_path="/queries/v1/queries/v1", + path_params=path_params, + params=query, + **body_args, + headers=headers, + **kwargs, + response_type=response_types_map, + select_path=select_path, + raw_response=raw_response, + ) diff --git a/waylay-sdk-queries/src/waylay/services/queries/service/__init__.py b/waylay-sdk-queries/src/waylay/services/queries/service/__init__.py new file mode 100644 index 0000000..54cbf3c --- /dev/null +++ b/waylay-sdk-queries/src/waylay/services/queries/service/__init__.py @@ -0,0 +1,24 @@ +# coding: utf-8 +"""Waylay Query: timeseries queries (v1 protocol): Service. + +This code was generated from the OpenAPI documentation of 'Waylay Query: timeseries queries (v1 protocol)' + +version: 0.5.0 + + Execute and store queries on the Waylay timeseries. Protocol version: v1. + +Generated by OpenAPI Generator (https://openapi-generator.tech) + +Do not edit the class manually. +""" + +__version__ = "0.5.0.20240802" + +from .service import QueriesService + +PLUGINS = [QueriesService] + +__all__ = [ + "__version__", + "QueriesService", +] diff --git a/waylay-sdk-queries/src/waylay/services/queries/service/__pycache__/__init__.cpython-311.pyc b/waylay-sdk-queries/src/waylay/services/queries/service/__pycache__/__init__.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..f36b985193ef4a2b5cc3b1df29db12e00632b0d7 GIT binary patch literal 809 zcmb7D&x_MQ6rMC`BU5(;*^7Jefro7mO}b?TDI$o+HdRp-0t+2N}IVoxVffpxXhWX~b`M&qPsf|4A@;aJ2r)!?xephcA_g#NN7#9&Q#y`g{ddVqE1z+ke~Cayy>9QM`=HzVVSFcTYqejxZal6$T{Ri2lrbi46La2ftX#&7 zfd+64uyRdzO8+;5t@~0v}U*@Ulia!_f!k=#%-N}kh zb%pvD^!J(K7oF-$Fsa*&-%wx4u!8+va+R?Ke8!?Q(u{doaed=qB6uF-BYD#(EuBzL z%(S*G%UU~4%UP3hIwZI5E}EC*-ty1)vUz7o4;SvbLF%`^IS1>y-K;I#@{#2q@)L1o B0B!&P literal 0 HcmV?d00001 diff --git a/waylay-sdk-queries/src/waylay/services/queries/service/__pycache__/service.cpython-311.pyc b/waylay-sdk-queries/src/waylay/services/queries/service/__pycache__/service.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..e28f60e1de92f7d91c4ae657cd785e6fb7a0da3c GIT binary patch literal 1617 zcmb7E&x_ke6rRy<$@XptSv#bZs<4#0iS2VCl$LGisY}aJ3W72S&uk+i$<9blvL=T; z1mZ#py_Dp*r!8gsSM)EC%R(Hw0M1iHQGh6>T8tAd&=Nh+F`_y(Vk0pFQ~73WC3avd--?~Y z4P1;g^a-N&BSamhALdRd88l|-0S=nL#T9E6 zmujKY_6j$DD-N@)FYLP|=jr-Nfv{Q0Nmz-ZBdkm@5necs$WX~Kl>F-^Daq&TXE5L6 zrzppD3ZX-AkCx%Vxy%wo5Ah-3N6Q>WdA<2iw3>a0NG&4D-G3hi>XxJAt^cgE>nz0} zqBebFi?c9ietw(zl}>(EosI3TBg||vW?VRgL}`>0!YvqpH>Ht7aXA}zq*(*g)rFC< zc$cq3AY1|(!WIycNgBSt|MJ=3_9$TkK1ox?2lq$(&fvZ}ZN2ecubMZz2wKf$^iHo@ zFML{maSk11d|1JQ<;T?*HBi6%<2`;ERygfcCuFBmpk{pqlG!$xzxL6e7IN3Vv7gw# zI#+*ju0FdqcQ%im&BEDy-g*1ry?Lj1-097XC(Y;Ww+_5{`}%SFI)sgtaMqYL&R|5; zZAo?0FkyrUkC0?UC$aRKgxsBkah0(Np`#(dh6IF}M|sTDZisb4!ZaPh(Tzqas9o-i z+7zj~q9$6^W(-*z6Vk<8agqn|L%t!a7)uTotvfpAMi~Gr99cUU`}<6@dC9A q)ILFj;-Y?n-Ys733-nI$YJVL$wJu@M=5_PkSHDa2j|)<2xqkytq@Gj& literal 0 HcmV?d00001 diff --git a/waylay-sdk-queries/src/waylay/services/queries/service/py.typed b/waylay-sdk-queries/src/waylay/services/queries/service/py.typed new file mode 100644 index 0000000..e69de29 diff --git a/waylay-sdk-queries/src/waylay/services/queries/service/service.py b/waylay-sdk-queries/src/waylay/services/queries/service/service.py new file mode 100644 index 0000000..d084370 --- /dev/null +++ b/waylay-sdk-queries/src/waylay/services/queries/service/service.py @@ -0,0 +1,26 @@ +"""Queries Service.""" + +from waylay.sdk import ApiClient, WaylayService + +from ..api.execute_api import ExecuteApi +from ..api.manage_api import ManageApi +from ..api.status_api import StatusApi + + +class QueriesService(WaylayService): + """Queries Service Class.""" + + name = "queries" + title = "Queries Service" + + execute: ExecuteApi + manage: ManageApi + status: StatusApi + + def __init__(self, api_client: ApiClient): + """Create the queries service.""" + + super().__init__(api_client) + self.execute = ExecuteApi(api_client) + self.manage = ManageApi(api_client) + self.status = StatusApi(api_client)