diff --git a/.github/workflows/stale_issues.yml b/.github/workflows/stale_issues.yml new file mode 100644 index 000000000..d5cd3cf15 --- /dev/null +++ b/.github/workflows/stale_issues.yml @@ -0,0 +1,22 @@ +name: Close inactive issues +on: + schedule: + - cron: "30 1 * * *" + +jobs: + close-issues: + runs-on: ubuntu-latest + permissions: + issues: write + pull-requests: write + steps: + - uses: actions/stale@v5 + with: + days-before-issue-stale: 30 + days-before-issue-close: 14 + stale-issue-label: "stale" + stale-issue-message: "This issue is stale because it has been open for 30 days with no activity." + close-issue-message: "This issue was closed because it has been inactive for 14 days since being marked as stale." + days-before-pr-stale: -1 + days-before-pr-close: -1 + repo-token: ${{ secrets.GITHUB_TOKEN }} diff --git a/README.md b/README.md index 6e3883197..e6730513c 100644 --- a/README.md +++ b/README.md @@ -7,6 +7,7 @@ [![PyPI version](https://img.shields.io/pypi/v/rtdip-sdk.svg?logo=pypi&logoColor=FFE873)](https://pypi.org/project/rtdip-sdk/) [![Supported Python versions](https://img.shields.io/pypi/pyversions/rtdip-sdk.svg?logo=python&logoColor=FFE873)](https://pypi.org/project/rtdip-sdk/) [![PyPI downloads](https://img.shields.io/pypi/dm/rtdip-sdk.svg)](https://pypistats.org/packages/rtdip-sdk) +![PyPI Downloads](https://static.pepy.tech/badge/rtdip-sdk) [![OpenSSF Best Practices](https://bestpractices.coreinfrastructure.org/projects/7557/badge)](https://bestpractices.coreinfrastructure.org/projects/7557) [![Code Style Black](https://img.shields.io/badge/code%20style-black-000000.svg)](https://github.com/psf/black) @@ -115,4 +116,4 @@ Distributed under the Apache License Version 2.0. See [LICENSE.md](https://githu * Check previous questions and answers or ask new ones on our slack channel [**#rtdip**](https://lfenergy.slack.com/archives/C0484R9Q6A0) ### Community -* Chat with other community members by joining the **#rtdip** Slack channel. [Click here to join our slack community](https://lfenergy.slack.com/archives/C0484R9Q6A0) \ No newline at end of file +* Chat with other community members by joining the **#rtdip** Slack channel. [Click here to join our slack community](https://lfenergy.slack.com/archives/C0484R9Q6A0) diff --git a/src/sdk/python/rtdip_sdk/queries/time_series/_time_series_query_builder.py b/src/sdk/python/rtdip_sdk/queries/time_series/_time_series_query_builder.py index e89c7b07c..72b85d5ff 100644 --- a/src/sdk/python/rtdip_sdk/queries/time_series/_time_series_query_builder.py +++ b/src/sdk/python/rtdip_sdk/queries/time_series/_time_series_query_builder.py @@ -146,13 +146,13 @@ def _sample_query(parameters_dict: dict) -> tuple: "`{{ business_unit|lower }}`.`sensors`.`{{ asset|lower }}_{{ data_security_level|lower }}_events_{{ data_type|lower }}` " "{% endif %}" "{% if case_insensitivity_tag_search is defined and case_insensitivity_tag_search == true %}" - "WHERE `{{ timestamp_column }}` BETWEEN to_timestamp(\"{{ start_date }}\") AND to_timestamp(\"{{ end_date }}\") AND UPPER(`{{ tagname_column }}`) IN ('{{ tag_names | join('\\', \\'') | upper }}') " + "WHERE `{{ timestamp_column }}` BETWEEN to_timestamp(\"{{ start_date }}\") AND timestampadd({{ time_interval_unit }}, {{ time_interval_rate }}, to_timestamp(\"{{ end_date }}\")) AND UPPER(`{{ tagname_column }}`) IN ('{{ tag_names | join('\\', \\'') | upper }}') " "{% else %}" - "WHERE `{{ timestamp_column }}` BETWEEN to_timestamp(\"{{ start_date }}\") AND to_timestamp(\"{{ end_date }}\") AND `{{ tagname_column }}` IN ('{{ tag_names | join('\\', \\'') }}') " + "WHERE `{{ timestamp_column }}` BETWEEN to_timestamp(\"{{ start_date }}\") AND timestampadd({{ time_interval_unit }}, {{ time_interval_rate }}, to_timestamp(\"{{ end_date }}\")) AND `{{ tagname_column }}` IN ('{{ tag_names | join('\\', \\'') }}') " "{% endif %}" "{% if include_status is defined and include_status == true and include_bad_data is defined and include_bad_data == false %} AND `{{ status_column }}` <> 'Bad' {% endif %}) " ',date_array AS (SELECT explode(sequence(from_utc_timestamp(to_timestamp("{{ start_date }}"), "{{ time_zone }}"), from_utc_timestamp(to_timestamp("{{ end_date }}"), "{{ time_zone }}"), INTERVAL \'{{ time_interval_rate + \' \' + time_interval_unit }}\')) AS timestamp_array) ' - ",window_buckets AS (SELECT timestamp_array AS window_start, timestampadd({{time_interval_unit }}, {{ time_interval_rate }}, timestamp_array) AS window_end FROM date_array) " + ",window_buckets AS (SELECT timestamp_array AS window_start, timestampadd({{ time_interval_unit }}, {{ time_interval_rate }}, timestamp_array) AS window_end FROM date_array) " ",resample AS (SELECT /*+ RANGE_JOIN(d, {{ range_join_seconds }} ) */ d.window_start, d.window_end, e.`{{ tagname_column }}`, {{ agg_method }}(e.`{{ value_column }}`) OVER (PARTITION BY e.`{{ tagname_column }}`, d.window_start ORDER BY e.`{{ timestamp_column }}` ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING) AS `{{ value_column }}` FROM window_buckets d INNER JOIN raw_events e ON d.window_start <= e.`{{ timestamp_column }}` AND d.window_end > e.`{{ timestamp_column }}`) " ",project AS (SELECT window_start AS `{{ timestamp_column }}`, `{{ tagname_column }}`, `{{ value_column }}` FROM resample GROUP BY window_start, `{{ tagname_column }}`, `{{ value_column }}` " "{% if is_resample is defined and is_resample == true %}" diff --git a/tests/api/v1/test_api_batch.py b/tests/api/v1/test_api_batch.py index 3b6076396..3349afc77 100644 --- a/tests/api/v1/test_api_batch.py +++ b/tests/api/v1/test_api_batch.py @@ -38,7 +38,7 @@ RawResponse, ) from pandas.io.json import build_table_schema -from httpx import AsyncClient +from httpx import AsyncClient, ASGITransport from src.api.v1 import app from src.api.v1.common import json_response_batch from src.sdk.python.rtdip_sdk.queries.time_series import batch @@ -87,7 +87,7 @@ async def test_api_batch_single_get_success(mocker: MockerFixture): mock_lookup = "src.api.v1.batch.lookup_before_get" mocked_lookup_before_get = mocker.patch(mock_lookup, return_value=None) - async with AsyncClient(app=app, base_url=BASE_URL) as ac: + async with AsyncClient(transport=ASGITransport(app=app), base_url=BASE_URL) as ac: actual = await ac.post( MOCK_API_NAME, headers=TEST_HEADERS, @@ -175,7 +175,7 @@ async def test_api_batch_single_get_success_with_lookup(mocker: MockerFixture): mock_lookup = "src.api.v1.batch.lookup_before_get" mocked_lookup_before_get = mocker.patch(mock_lookup, return_value=test_data) - async with AsyncClient(app=app, base_url=BASE_URL) as ac: + async with AsyncClient(transport=ASGITransport(app=app), base_url=BASE_URL) as ac: actual = await ac.post( MOCK_API_NAME, headers=TEST_HEADERS, @@ -255,7 +255,7 @@ async def test_api_batch_single_post_success(mocker: MockerFixture): # Make a surveillance batch method reference to check if called and what args with surveillance_batch = mocker.patch(mock_method, return_value=mock_method_return_data) - async with AsyncClient(app=app, base_url=BASE_URL) as ac: + async with AsyncClient(transport=ASGITransport(app=app), base_url=BASE_URL) as ac: actual = await ac.post( MOCK_API_NAME, headers=TEST_HEADERS, @@ -300,7 +300,7 @@ async def test_api_batch_single_get_unsupported_route_error(mocker: MockerFixtur os.environ, {"DATABRICKS_SERVING_ENDPOINT": MOCK_MAPPING_ENDPOINT_URL} ) - async with AsyncClient(app=app, base_url=BASE_URL) as ac: + async with AsyncClient(transport=ASGITransport(app=app), base_url=BASE_URL) as ac: actual = await ac.post( MOCK_API_NAME, headers=TEST_HEADERS, @@ -343,7 +343,7 @@ async def test_api_batch_single_post_missing_body_error(mocker: MockerFixture): os.environ, {"DATABRICKS_SERVING_ENDPOINT": MOCK_MAPPING_ENDPOINT_URL} ) - async with AsyncClient(app=app, base_url=BASE_URL) as ac: + async with AsyncClient(transport=ASGITransport(app=app), base_url=BASE_URL) as ac: actual = await ac.post( MOCK_API_NAME, headers=TEST_HEADERS, @@ -406,7 +406,7 @@ async def test_api_batch_multiple_success(mocker: MockerFixture): # Make a surveillance batch method reference to check if called and what args with surveillance_batch = mocker.patch(mock_method, side_effect=mock_patch_side_effect) - async with AsyncClient(app=app, base_url=BASE_URL) as ac: + async with AsyncClient(transport=ASGITransport(app=app), base_url=BASE_URL) as ac: actual = await ac.post( MOCK_API_NAME, headers=TEST_HEADERS, @@ -464,7 +464,7 @@ async def test_api_batch_one_success_one_fail(mocker: MockerFixture): os.environ, {"DATABRICKS_SERVING_ENDPOINT": MOCK_MAPPING_ENDPOINT_URL} ) - async with AsyncClient(app=app, base_url=BASE_URL) as ac: + async with AsyncClient(transport=ASGITransport(app=app), base_url=BASE_URL) as ac: actual = await ac.post( MOCK_API_NAME, headers=TEST_HEADERS, @@ -515,7 +515,7 @@ async def test_api_batch_one_success_one_fail(mocker: MockerFixture): os.environ, {"DATABRICKS_SERVING_ENDPOINT": MOCK_MAPPING_ENDPOINT_URL} ) - async with AsyncClient(app=app, base_url=BASE_URL) as ac: + async with AsyncClient(transport=ASGITransport(app=app), base_url=BASE_URL) as ac: actual = await ac.post( MOCK_API_NAME, headers=TEST_HEADERS, diff --git a/tests/api/v1/test_api_circular_average.py b/tests/api/v1/test_api_circular_average.py index 99100c52f..a31b727e9 100644 --- a/tests/api/v1/test_api_circular_average.py +++ b/tests/api/v1/test_api_circular_average.py @@ -30,7 +30,7 @@ MOCK_TAG_MAPPING_EMPTY, MOCK_MAPPING_ENDPOINT_URL, ) -from httpx import AsyncClient +from httpx import AsyncClient, ASGITransport from src.api.v1 import app MOCK_METHOD = "src.sdk.python.rtdip_sdk.queries.time_series.circular_average.get" @@ -42,7 +42,7 @@ async def test_api_circular_average_get_success(mocker: MockerFixture, api_test_data): mocker = mocker_setup(mocker, MOCK_METHOD, api_test_data["mock_data_agg"]) - async with AsyncClient(app=app, base_url=BASE_URL) as ac: + async with AsyncClient(transport=ASGITransport(app=app), base_url=BASE_URL) as ac: response = await ac.get( MOCK_API_NAME, headers=TEST_HEADERS, @@ -59,7 +59,7 @@ async def test_api_circular_average_get_validation_error( ): mocker = mocker_setup(mocker, MOCK_METHOD, api_test_data["mock_data_agg"]) - async with AsyncClient(app=app, base_url=BASE_URL) as ac: + async with AsyncClient(transport=ASGITransport(app=app), base_url=BASE_URL) as ac: response = await ac.get( MOCK_API_NAME, headers=TEST_HEADERS, @@ -82,7 +82,7 @@ async def test_api_circular_average_get_error(mocker: MockerFixture, api_test_da Exception("Error Connecting to Database"), ) - async with AsyncClient(app=app, base_url=BASE_URL) as ac: + async with AsyncClient(transport=ASGITransport(app=app), base_url=BASE_URL) as ac: response = await ac.get( MOCK_API_NAME, headers=TEST_HEADERS, @@ -97,7 +97,7 @@ async def test_api_circular_average_get_error(mocker: MockerFixture, api_test_da async def test_api_circular_average_post_success(mocker: MockerFixture, api_test_data): mocker = mocker_setup(mocker, MOCK_METHOD, api_test_data["mock_data_agg"]) - async with AsyncClient(app=app, base_url=BASE_URL) as ac: + async with AsyncClient(transport=ASGITransport(app=app), base_url=BASE_URL) as ac: response = await ac.post( MOCK_API_NAME, headers=TEST_HEADERS, @@ -115,7 +115,7 @@ async def test_api_circular_average_post_validation_error( ): mocker = mocker_setup(mocker, MOCK_METHOD, api_test_data["mock_data_agg"]) - async with AsyncClient(app=app, base_url=BASE_URL) as ac: + async with AsyncClient(transport=ASGITransport(app=app), base_url=BASE_URL) as ac: response = await ac.post( MOCK_API_NAME, headers=TEST_HEADERS, @@ -139,7 +139,7 @@ async def test_api_circular_average_post_error(mocker: MockerFixture, api_test_d Exception("Error Connecting to Database"), ) - async with AsyncClient(app=app, base_url=BASE_URL) as ac: + async with AsyncClient(transport=ASGITransport(app=app), base_url=BASE_URL) as ac: response = await ac.post( MOCK_API_NAME, headers=TEST_HEADERS, @@ -182,7 +182,7 @@ async def test_api_circular_average_get_lookup_success(mocker: MockerFixture): modified_param_dict = CIRCULAR_AVERAGE_MOCKED_PARAMETER_DICT.copy() del modified_param_dict["business_unit"] - async with AsyncClient(app=app, base_url=BASE_URL) as ac: + async with AsyncClient(transport=ASGITransport(app=app), base_url=BASE_URL) as ac: actual = await ac.get( MOCK_API_NAME, headers=TEST_HEADERS, params=modified_param_dict ) @@ -228,7 +228,7 @@ async def test_api_circular_average_post_lookup_success(mocker: MockerFixture): modified_param_dict = CIRCULAR_AVERAGE_MOCKED_PARAMETER_DICT.copy() del modified_param_dict["business_unit"] - async with AsyncClient(app=app, base_url=BASE_URL) as ac: + async with AsyncClient(transport=ASGITransport(app=app), base_url=BASE_URL) as ac: actual = await ac.post( MOCK_API_NAME, headers=TEST_HEADERS, @@ -278,7 +278,7 @@ async def test_api_circular_average_get_lookup_no_tag_map_error(mocker: MockerFi modified_param_dict["tagname"] = ["NonExistentTag"] del modified_param_dict["business_unit"] - async with AsyncClient(app=app, base_url=BASE_URL) as ac: + async with AsyncClient(transport=ASGITransport(app=app), base_url=BASE_URL) as ac: actual = await ac.get( MOCK_API_NAME, headers=TEST_HEADERS, params=modified_param_dict ) diff --git a/tests/api/v1/test_api_circular_standard_deviation.py b/tests/api/v1/test_api_circular_standard_deviation.py index 8db08ce19..1c5b92ca3 100644 --- a/tests/api/v1/test_api_circular_standard_deviation.py +++ b/tests/api/v1/test_api_circular_standard_deviation.py @@ -25,7 +25,7 @@ TEST_HEADERS, BASE_URL, ) -from httpx import AsyncClient +from httpx import AsyncClient, ASGITransport from src.api.v1 import app MOCK_METHOD = ( @@ -41,7 +41,7 @@ async def test_api_circular_standard_deviation_get_success( ): mocker = mocker_setup(mocker, MOCK_METHOD, api_test_data["mock_data_agg"]) - async with AsyncClient(app=app, base_url=BASE_URL) as ac: + async with AsyncClient(transport=ASGITransport(app=app), base_url=BASE_URL) as ac: response = await ac.get( MOCK_API_NAME, headers=TEST_HEADERS, @@ -58,7 +58,7 @@ async def test_api_circular_standard_deviation_get_validation_error( ): mocker = mocker_setup(mocker, MOCK_METHOD, api_test_data["mock_data_agg"]) - async with AsyncClient(app=app, base_url=BASE_URL) as ac: + async with AsyncClient(transport=ASGITransport(app=app), base_url=BASE_URL) as ac: response = await ac.get( MOCK_API_NAME, headers=TEST_HEADERS, @@ -83,7 +83,7 @@ async def test_api_circular_standard_deviation_get_error( Exception("Error Connecting to Database"), ) - async with AsyncClient(app=app, base_url=BASE_URL) as ac: + async with AsyncClient(transport=ASGITransport(app=app), base_url=BASE_URL) as ac: response = await ac.get( MOCK_API_NAME, headers=TEST_HEADERS, @@ -100,7 +100,7 @@ async def test_api_circular_standard_deviation_post_success( ): mocker = mocker_setup(mocker, MOCK_METHOD, api_test_data["mock_data_agg"]) - async with AsyncClient(app=app, base_url=BASE_URL) as ac: + async with AsyncClient(transport=ASGITransport(app=app), base_url=BASE_URL) as ac: response = await ac.post( MOCK_API_NAME, headers=TEST_HEADERS, @@ -118,7 +118,7 @@ async def test_api_circular_standard_deviation_post_validation_error( ): mocker = mocker_setup(mocker, MOCK_METHOD, api_test_data["mock_data_agg"]) - async with AsyncClient(app=app, base_url=BASE_URL) as ac: + async with AsyncClient(transport=ASGITransport(app=app), base_url=BASE_URL) as ac: response = await ac.post( MOCK_API_NAME, headers=TEST_HEADERS, @@ -144,7 +144,7 @@ async def test_api_circular_standard_deviation_post_error( Exception("Error Connecting to Database"), ) - async with AsyncClient(app=app, base_url=BASE_URL) as ac: + async with AsyncClient(transport=ASGITransport(app=app), base_url=BASE_URL) as ac: response = await ac.post( MOCK_API_NAME, headers=TEST_HEADERS, diff --git a/tests/api/v1/test_api_interpolate.py b/tests/api/v1/test_api_interpolate.py index 80f67ba6b..4b6e118e4 100644 --- a/tests/api/v1/test_api_interpolate.py +++ b/tests/api/v1/test_api_interpolate.py @@ -25,7 +25,7 @@ TEST_HEADERS, BASE_URL, ) -from httpx import AsyncClient +from httpx import AsyncClient, ASGITransport from src.api.v1 import app MOCK_METHOD = "src.sdk.python.rtdip_sdk.queries.time_series.interpolate.get" @@ -37,7 +37,7 @@ async def test_api_interpolate_get_success(mocker: MockerFixture, api_test_data): mocker = mocker_setup(mocker, MOCK_METHOD, api_test_data["mock_data_agg"]) - async with AsyncClient(app=app, base_url=BASE_URL) as ac: + async with AsyncClient(transport=ASGITransport(app=app), base_url=BASE_URL) as ac: response = await ac.get( MOCK_API_NAME, headers=TEST_HEADERS, @@ -54,7 +54,7 @@ async def test_api_interpolate_get_validation_error( ): mocker = mocker_setup(mocker, MOCK_METHOD, api_test_data["mock_data_agg"]) - async with AsyncClient(app=app, base_url=BASE_URL) as ac: + async with AsyncClient(transport=ASGITransport(app=app), base_url=BASE_URL) as ac: response = await ac.get( MOCK_API_NAME, headers=TEST_HEADERS, @@ -77,7 +77,7 @@ async def test_api_interpolate_get_error(mocker: MockerFixture, api_test_data): Exception("Error Connecting to Database"), ) - async with AsyncClient(app=app, base_url=BASE_URL) as ac: + async with AsyncClient(transport=ASGITransport(app=app), base_url=BASE_URL) as ac: response = await ac.get( MOCK_API_NAME, headers=TEST_HEADERS, @@ -92,7 +92,7 @@ async def test_api_interpolate_get_error(mocker: MockerFixture, api_test_data): async def test_api_interpolate_post_success(mocker: MockerFixture, api_test_data): mocker = mocker_setup(mocker, MOCK_METHOD, api_test_data["mock_data_agg"]) - async with AsyncClient(app=app, base_url=BASE_URL) as ac: + async with AsyncClient(transport=ASGITransport(app=app), base_url=BASE_URL) as ac: response = await ac.post( MOCK_API_NAME, headers=TEST_HEADERS, @@ -110,7 +110,7 @@ async def test_api_interpolate_post_validation_error( ): mocker = mocker_setup(mocker, MOCK_METHOD, api_test_data["mock_data_agg"]) - async with AsyncClient(app=app, base_url=BASE_URL) as ac: + async with AsyncClient(transport=ASGITransport(app=app), base_url=BASE_URL) as ac: response = await ac.post( MOCK_API_NAME, headers=TEST_HEADERS, @@ -134,7 +134,7 @@ async def test_api_interpolate_post_error(mocker: MockerFixture, api_test_data): Exception("Error Connecting to Database"), ) - async with AsyncClient(app=app, base_url=BASE_URL) as ac: + async with AsyncClient(transport=ASGITransport(app=app), base_url=BASE_URL) as ac: response = await ac.post( MOCK_API_NAME, headers=TEST_HEADERS, diff --git a/tests/api/v1/test_api_interpolation_at_time.py b/tests/api/v1/test_api_interpolation_at_time.py index 23218d5f4..879973225 100644 --- a/tests/api/v1/test_api_interpolation_at_time.py +++ b/tests/api/v1/test_api_interpolation_at_time.py @@ -24,7 +24,7 @@ TEST_HEADERS, BASE_URL, ) -from httpx import AsyncClient +from httpx import AsyncClient, ASGITransport from src.api.v1 import app MOCK_METHOD = "src.sdk.python.rtdip_sdk.queries.time_series.interpolation_at_time.get" @@ -38,7 +38,7 @@ async def test_api_interpolation_at_time_get_success( ): mocker = mocker_setup(mocker, MOCK_METHOD, api_test_data["mock_data_agg"]) - async with AsyncClient(app=app, base_url=BASE_URL) as ac: + async with AsyncClient(transport=ASGITransport(app=app), base_url=BASE_URL) as ac: response = await ac.get( MOCK_API_NAME, headers=TEST_HEADERS, @@ -57,7 +57,7 @@ async def test_api_interpolation_at_time_get_success( # ) # mocker = mocker_setup(mocker, MOCK_METHOD, test_data) -# async with AsyncClient(app=app, base_url=BASE_URL) as ac: +# async with AsyncClient(transport=ASGITransport(app=app), base_url=BASE_URL) as ac: # response = await ac.get( # MOCK_API_NAME, # headers=TEST_HEADERS, @@ -82,7 +82,7 @@ async def test_api_interpolation_at_time_get_error( Exception("Error Connecting to Database"), ) - async with AsyncClient(app=app, base_url=BASE_URL) as ac: + async with AsyncClient(transport=ASGITransport(app=app), base_url=BASE_URL) as ac: response = await ac.get( MOCK_API_NAME, headers=TEST_HEADERS, @@ -99,7 +99,7 @@ async def test_api_interpolation_at_time_post_success( ): mocker = mocker_setup(mocker, MOCK_METHOD, api_test_data["mock_data_agg"]) - async with AsyncClient(app=app, base_url=BASE_URL) as ac: + async with AsyncClient(transport=ASGITransport(app=app), base_url=BASE_URL) as ac: response = await ac.post( MOCK_API_NAME, headers=TEST_HEADERS, @@ -119,7 +119,7 @@ async def test_api_interpolation_at_time_post_success( # ) # mocker = mocker_setup(mocker, MOCK_METHOD, test_data) -# async with AsyncClient(app=app, base_url=BASE_URL) as ac: +# async with AsyncClient(transport=ASGITransport(app=app), base_url=BASE_URL) as ac: # response = await ac.post( # MOCK_API_NAME, # headers=TEST_HEADERS, @@ -145,7 +145,7 @@ async def test_api_interpolation_at_time_post_error( Exception("Error Connecting to Database"), ) - async with AsyncClient(app=app, base_url=BASE_URL) as ac: + async with AsyncClient(transport=ASGITransport(app=app), base_url=BASE_URL) as ac: response = await ac.post( MOCK_API_NAME, headers=TEST_HEADERS, diff --git a/tests/api/v1/test_api_latest.py b/tests/api/v1/test_api_latest.py index 1bc3b29a3..7c2e941db 100644 --- a/tests/api/v1/test_api_latest.py +++ b/tests/api/v1/test_api_latest.py @@ -29,7 +29,7 @@ MOCK_TAG_MAPPING_EMPTY, MOCK_MAPPING_ENDPOINT_URL, ) -from httpx import AsyncClient +from httpx import AsyncClient, ASGITransport from src.api.v1 import app MOCK_METHOD = "src.sdk.python.rtdip_sdk.queries.time_series.latest.get" @@ -43,7 +43,7 @@ async def test_api_latest_get_tags_provided_success( ): mocker = mocker_setup(mocker, MOCK_METHOD, api_test_data["mock_data_latest"]) - async with AsyncClient(app=app, base_url=BASE_URL) as ac: + async with AsyncClient(transport=ASGITransport(app=app), base_url=BASE_URL) as ac: response = await ac.get( MOCK_API_NAME, headers=TEST_HEADERS, params=METADATA_MOCKED_PARAMETER_DICT ) @@ -58,7 +58,7 @@ async def test_api_latest_get_no_good_values_tags_provided_success( ): mocker = mocker_setup(mocker, MOCK_METHOD, api_test_data["mock_data_latest"]) - async with AsyncClient(app=app, base_url=BASE_URL) as ac: + async with AsyncClient(transport=ASGITransport(app=app), base_url=BASE_URL) as ac: response = await ac.get( MOCK_API_NAME, headers=TEST_HEADERS, params=METADATA_MOCKED_PARAMETER_DICT ) @@ -75,7 +75,7 @@ async def test_api_latest_get_no_tags_provided_success( METADATA_MOCKED_PARAMETER_NO_TAG_DICT = METADATA_MOCKED_PARAMETER_DICT.copy() METADATA_MOCKED_PARAMETER_NO_TAG_DICT.pop("tag_name") - async with AsyncClient(app=app, base_url=BASE_URL) as ac: + async with AsyncClient(transport=ASGITransport(app=app), base_url=BASE_URL) as ac: response = await ac.get( MOCK_API_NAME, headers=TEST_HEADERS, @@ -90,7 +90,7 @@ async def test_api_latest_get_no_tags_provided_success( async def test_api_latest_get_validation_error(mocker: MockerFixture, api_test_data): mocker = mocker_setup(mocker, MOCK_METHOD, api_test_data["mock_data_latest"]) - async with AsyncClient(app=app, base_url=BASE_URL) as ac: + async with AsyncClient(transport=ASGITransport(app=app), base_url=BASE_URL) as ac: response = await ac.get( MOCK_API_NAME, headers=TEST_HEADERS, @@ -113,7 +113,7 @@ async def test_api_latest_get_error(mocker: MockerFixture, api_test_data): Exception("Error Connecting to Database"), ) - async with AsyncClient(app=app, base_url=BASE_URL) as ac: + async with AsyncClient(transport=ASGITransport(app=app), base_url=BASE_URL) as ac: response = await ac.get( MOCK_API_NAME, headers=TEST_HEADERS, params=METADATA_MOCKED_PARAMETER_DICT ) @@ -128,7 +128,7 @@ async def test_api_latest_post_tags_provided_success( ): mocker = mocker_setup(mocker, MOCK_METHOD, api_test_data["mock_data_latest"]) - async with AsyncClient(app=app, base_url=BASE_URL) as ac: + async with AsyncClient(transport=ASGITransport(app=app), base_url=BASE_URL) as ac: response = await ac.post( MOCK_API_NAME, headers=TEST_HEADERS, @@ -148,7 +148,7 @@ async def test_api_latest_post_no_tags_provided_error( METADATA_MOCKED_PARAMETER_NO_TAG_DICT = METADATA_MOCKED_PARAMETER_DICT.copy() METADATA_MOCKED_PARAMETER_NO_TAG_DICT.pop("tag_name") - async with AsyncClient(app=app, base_url=BASE_URL) as ac: + async with AsyncClient(transport=ASGITransport(app=app), base_url=BASE_URL) as ac: response = await ac.post( MOCK_API_NAME, headers=TEST_HEADERS, @@ -166,7 +166,7 @@ async def test_api_latest_post_no_tags_provided_error( async def test_api_latest_post_validation_error(mocker: MockerFixture, api_test_data): mocker = mocker_setup(mocker, MOCK_METHOD, api_test_data["mock_data_latest"]) - async with AsyncClient(app=app, base_url=BASE_URL) as ac: + async with AsyncClient(transport=ASGITransport(app=app), base_url=BASE_URL) as ac: response = await ac.post( MOCK_API_NAME, headers=TEST_HEADERS, @@ -190,7 +190,7 @@ async def test_api_raw_post_error(mocker: MockerFixture, api_test_data): Exception("Error Connecting to Database"), ) - async with AsyncClient(app=app, base_url=BASE_URL) as ac: + async with AsyncClient(transport=ASGITransport(app=app), base_url=BASE_URL) as ac: response = await ac.post( MOCK_API_NAME, headers=TEST_HEADERS, @@ -238,7 +238,7 @@ async def test_api_latest_get_lookup_success(mocker: MockerFixture): modified_param_dict = METADATA_MOCKED_PARAMETER_DICT.copy() del modified_param_dict["business_unit"] - async with AsyncClient(app=app, base_url=BASE_URL) as ac: + async with AsyncClient(transport=ASGITransport(app=app), base_url=BASE_URL) as ac: actual = await ac.get( MOCK_API_NAME, headers=TEST_HEADERS, params=modified_param_dict ) @@ -288,7 +288,7 @@ async def test_api_latest_post_lookup_success(mocker: MockerFixture): modified_param_dict = METADATA_MOCKED_PARAMETER_DICT.copy() del modified_param_dict["business_unit"] - async with AsyncClient(app=app, base_url=BASE_URL) as ac: + async with AsyncClient(transport=ASGITransport(app=app), base_url=BASE_URL) as ac: actual = await ac.post( MOCK_API_NAME, headers=TEST_HEADERS, @@ -342,7 +342,7 @@ async def test_api_latest_get_lookup_no_tag_map_error(mocker: MockerFixture): modified_param_dict["tagname"] = ["NonExistentTag"] del modified_param_dict["business_unit"] - async with AsyncClient(app=app, base_url=BASE_URL) as ac: + async with AsyncClient(transport=ASGITransport(app=app), base_url=BASE_URL) as ac: actual = await ac.get( MOCK_API_NAME, headers=TEST_HEADERS, params=modified_param_dict ) diff --git a/tests/api/v1/test_api_metadata.py b/tests/api/v1/test_api_metadata.py index 966014ecb..585b41267 100644 --- a/tests/api/v1/test_api_metadata.py +++ b/tests/api/v1/test_api_metadata.py @@ -28,7 +28,7 @@ MOCK_TAG_MAPPING_EMPTY, MOCK_MAPPING_ENDPOINT_URL, ) -from httpx import AsyncClient +from httpx import AsyncClient, ASGITransport from src.api.v1 import app MOCK_METHOD = "src.sdk.python.rtdip_sdk.queries.metadata.get" @@ -45,7 +45,7 @@ async def test_api_metadata_get_tags_provided_success( ): mocker = mocker_setup(mocker, MOCK_METHOD, api_test_data["mock_data_metadata"]) - async with AsyncClient(app=app, base_url=BASE_URL) as ac: + async with AsyncClient(transport=ASGITransport(app=app), base_url=BASE_URL) as ac: response = await ac.get( MOCK_API_NAME, headers=TEST_HEADERS, params=METADATA_MOCKED_PARAMETER_DICT ) @@ -62,7 +62,7 @@ async def test_api_metadata_get_no_tags_provided_success( METADATA_MOCKED_PARAMETER_NO_TAG_DICT = METADATA_MOCKED_PARAMETER_DICT.copy() METADATA_MOCKED_PARAMETER_NO_TAG_DICT.pop("tag_name") - async with AsyncClient(app=app, base_url=BASE_URL) as ac: + async with AsyncClient(transport=ASGITransport(app=app), base_url=BASE_URL) as ac: response = await ac.get( MOCK_API_NAME, headers=TEST_HEADERS, @@ -77,7 +77,7 @@ async def test_api_metadata_get_no_tags_provided_success( async def test_api_metadata_get_validation_error(mocker: MockerFixture, api_test_data): mocker = mocker_setup(mocker, MOCK_METHOD, api_test_data["mock_data_metadata"]) - async with AsyncClient(app=app, base_url=BASE_URL) as ac: + async with AsyncClient(transport=ASGITransport(app=app), base_url=BASE_URL) as ac: response = await ac.get( MOCK_API_NAME, headers=TEST_HEADERS, @@ -100,7 +100,7 @@ async def test_api_metadata_get_error(mocker: MockerFixture, api_test_data): Exception("Error Connecting to Database"), ) - async with AsyncClient(app=app, base_url=BASE_URL) as ac: + async with AsyncClient(transport=ASGITransport(app=app), base_url=BASE_URL) as ac: response = await ac.get( MOCK_API_NAME, headers=TEST_HEADERS, params=METADATA_MOCKED_PARAMETER_DICT ) @@ -115,7 +115,7 @@ async def test_api_metadata_post_tags_provided_success( ): mocker = mocker_setup(mocker, MOCK_METHOD, api_test_data["mock_data_metadata"]) - async with AsyncClient(app=app, base_url=BASE_URL) as ac: + async with AsyncClient(transport=ASGITransport(app=app), base_url=BASE_URL) as ac: response = await ac.post( MOCK_API_NAME, headers=TEST_HEADERS, @@ -135,7 +135,7 @@ async def test_api_metadata_post_no_tags_provided_error( METADATA_MOCKED_PARAMETER_NO_TAG_DICT = METADATA_MOCKED_PARAMETER_DICT.copy() METADATA_MOCKED_PARAMETER_NO_TAG_DICT.pop("tag_name") - async with AsyncClient(app=app, base_url=BASE_URL) as ac: + async with AsyncClient(transport=ASGITransport(app=app), base_url=BASE_URL) as ac: response = await ac.post( MOCK_API_NAME, headers=TEST_HEADERS, @@ -153,7 +153,7 @@ async def test_api_metadata_post_no_tags_provided_error( async def test_api_metadata_post_validation_error(mocker: MockerFixture, api_test_data): mocker = mocker_setup(mocker, MOCK_METHOD, api_test_data["mock_data_metadata"]) - async with AsyncClient(app=app, base_url=BASE_URL) as ac: + async with AsyncClient(transport=ASGITransport(app=app), base_url=BASE_URL) as ac: response = await ac.post( MOCK_API_NAME, headers=TEST_HEADERS, @@ -177,7 +177,7 @@ async def test_api_metadata_post_error(mocker: MockerFixture, api_test_data): Exception("Error Connecting to Database"), ) - async with AsyncClient(app=app, base_url=BASE_URL) as ac: + async with AsyncClient(transport=ASGITransport(app=app), base_url=BASE_URL) as ac: response = await ac.post( MOCK_API_NAME, headers=TEST_HEADERS, @@ -212,7 +212,7 @@ async def test_api_metadata_get_lookup_success(mocker: MockerFixture): modified_param_dict = METADATA_MOCKED_PARAMETER_DICT.copy() del modified_param_dict["business_unit"] - async with AsyncClient(app=app, base_url=BASE_URL) as ac: + async with AsyncClient(transport=ASGITransport(app=app), base_url=BASE_URL) as ac: actual = await ac.get( MOCK_API_NAME, headers=TEST_HEADERS, params=modified_param_dict ) @@ -249,7 +249,7 @@ async def test_api_metadata_post_lookup_success(mocker: MockerFixture): modified_param_dict = METADATA_MOCKED_PARAMETER_DICT.copy() del modified_param_dict["business_unit"] - async with AsyncClient(app=app, base_url=BASE_URL) as ac: + async with AsyncClient(transport=ASGITransport(app=app), base_url=BASE_URL) as ac: actual = await ac.post( MOCK_API_NAME, headers=TEST_HEADERS, @@ -290,7 +290,7 @@ async def test_api_metadata_get_lookup_no_tag_map_error(mocker: MockerFixture): modified_param_dict["tagname"] = ["NonExistentTag"] del modified_param_dict["business_unit"] - async with AsyncClient(app=app, base_url=BASE_URL) as ac: + async with AsyncClient(transport=ASGITransport(app=app), base_url=BASE_URL) as ac: actual = await ac.get( MOCK_API_NAME, headers=TEST_HEADERS, params=modified_param_dict ) diff --git a/tests/api/v1/test_api_plot.py b/tests/api/v1/test_api_plot.py index 52560e293..df01aee95 100644 --- a/tests/api/v1/test_api_plot.py +++ b/tests/api/v1/test_api_plot.py @@ -25,7 +25,7 @@ TEST_HEADERS, BASE_URL, ) -from httpx import AsyncClient +from httpx import AsyncClient, ASGITransport from src.api.v1 import app MOCK_METHOD = "src.sdk.python.rtdip_sdk.queries.time_series.plot.get" @@ -37,7 +37,7 @@ async def test_api_plot_get_success(mocker: MockerFixture, api_test_data): mocker = mocker_setup(mocker, MOCK_METHOD, api_test_data["mock_data_plot"]) - async with AsyncClient(app=app, base_url=BASE_URL) as ac: + async with AsyncClient(transport=ASGITransport(app=app), base_url=BASE_URL) as ac: response = await ac.get( MOCK_API_NAME, headers=TEST_HEADERS, params=PLOT_MOCKED_PARAMETER_DICT ) @@ -50,7 +50,7 @@ async def test_api_plot_get_success(mocker: MockerFixture, api_test_data): async def test_api_plot_get_validation_error(mocker: MockerFixture, api_test_data): mocker = mocker_setup(mocker, MOCK_METHOD, api_test_data["mock_data_plot"]) - async with AsyncClient(app=app, base_url=BASE_URL) as ac: + async with AsyncClient(transport=ASGITransport(app=app), base_url=BASE_URL) as ac: response = await ac.get( MOCK_API_NAME, headers=TEST_HEADERS, @@ -73,7 +73,7 @@ async def test_api_pot_get_error(mocker: MockerFixture, api_test_data): Exception("Error Connecting to Database"), ) - async with AsyncClient(app=app, base_url=BASE_URL) as ac: + async with AsyncClient(transport=ASGITransport(app=app), base_url=BASE_URL) as ac: response = await ac.get( MOCK_API_NAME, headers=TEST_HEADERS, params=PLOT_MOCKED_PARAMETER_DICT ) @@ -86,7 +86,7 @@ async def test_api_pot_get_error(mocker: MockerFixture, api_test_data): async def test_api_plot_post_success(mocker: MockerFixture, api_test_data): mocker = mocker_setup(mocker, MOCK_METHOD, api_test_data["mock_data_plot"]) - async with AsyncClient(app=app, base_url=BASE_URL) as ac: + async with AsyncClient(transport=ASGITransport(app=app), base_url=BASE_URL) as ac: response = await ac.post( MOCK_API_NAME, headers=TEST_HEADERS, @@ -102,7 +102,7 @@ async def test_api_plot_post_success(mocker: MockerFixture, api_test_data): async def test_api_plot_post_validation_error(mocker: MockerFixture, api_test_data): mocker = mocker_setup(mocker, MOCK_METHOD, api_test_data["mock_data_plot"]) - async with AsyncClient(app=app, base_url=BASE_URL) as ac: + async with AsyncClient(transport=ASGITransport(app=app), base_url=BASE_URL) as ac: response = await ac.post( MOCK_API_NAME, headers=TEST_HEADERS, @@ -126,7 +126,7 @@ async def test_api_plot_post_error(mocker: MockerFixture, api_test_data): Exception("Error Connecting to Database"), ) - async with AsyncClient(app=app, base_url=BASE_URL) as ac: + async with AsyncClient(transport=ASGITransport(app=app), base_url=BASE_URL) as ac: response = await ac.post( MOCK_API_NAME, headers=TEST_HEADERS, diff --git a/tests/api/v1/test_api_raw.py b/tests/api/v1/test_api_raw.py index afde6d60b..93d681b66 100644 --- a/tests/api/v1/test_api_raw.py +++ b/tests/api/v1/test_api_raw.py @@ -29,7 +29,7 @@ ) from pandas.io.json import build_table_schema import pandas as pd -from httpx import AsyncClient +from httpx import AsyncClient, ASGITransport from src.api.v1 import app MOCK_METHOD = "src.sdk.python.rtdip_sdk.queries.time_series.raw.get" @@ -41,7 +41,7 @@ async def test_api_raw_get_success(mocker: MockerFixture, api_test_data): mocker = mocker_setup(mocker, MOCK_METHOD, api_test_data["mock_data_raw"]) - async with AsyncClient(app=app, base_url=BASE_URL) as ac: + async with AsyncClient(transport=ASGITransport(app=app), base_url=BASE_URL) as ac: response = await ac.get( MOCK_API_NAME, headers=TEST_HEADERS, params=RAW_MOCKED_PARAMETER_DICT ) @@ -54,7 +54,7 @@ async def test_api_raw_get_success(mocker: MockerFixture, api_test_data): async def test_api_raw_get_validation_error(mocker: MockerFixture, api_test_data): mocker = mocker_setup(mocker, MOCK_METHOD, api_test_data["mock_data_raw"]) - async with AsyncClient(app=app, base_url=BASE_URL) as ac: + async with AsyncClient(transport=ASGITransport(app=app), base_url=BASE_URL) as ac: response = await ac.get( MOCK_API_NAME, headers=TEST_HEADERS, params=RAW_MOCKED_PARAMETER_ERROR_DICT ) @@ -75,7 +75,7 @@ async def test_api_raw_get_error(mocker: MockerFixture, api_test_data): Exception("Error Connecting to Database"), ) - async with AsyncClient(app=app, base_url=BASE_URL) as ac: + async with AsyncClient(transport=ASGITransport(app=app), base_url=BASE_URL) as ac: response = await ac.get( MOCK_API_NAME, headers=TEST_HEADERS, params=RAW_MOCKED_PARAMETER_DICT ) @@ -88,7 +88,7 @@ async def test_api_raw_get_error(mocker: MockerFixture, api_test_data): async def test_api_raw_post_success(mocker: MockerFixture, api_test_data): mocker = mocker_setup(mocker, MOCK_METHOD, api_test_data["mock_data_raw"]) - async with AsyncClient(app=app, base_url=BASE_URL) as ac: + async with AsyncClient(transport=ASGITransport(app=app), base_url=BASE_URL) as ac: response = await ac.post( MOCK_API_NAME, headers=TEST_HEADERS, @@ -104,7 +104,7 @@ async def test_api_raw_post_success(mocker: MockerFixture, api_test_data): async def test_api_raw_post_validation_error(mocker: MockerFixture, api_test_data): mocker = mocker_setup(mocker, MOCK_METHOD, api_test_data["mock_data_raw"]) - async with AsyncClient(app=app, base_url=BASE_URL) as ac: + async with AsyncClient(transport=ASGITransport(app=app), base_url=BASE_URL) as ac: response = await ac.post( MOCK_API_NAME, headers=TEST_HEADERS, @@ -128,7 +128,7 @@ async def test_api_raw_post_error(mocker: MockerFixture, api_test_data): Exception("Error Connecting to Database"), ) - async with AsyncClient(app=app, base_url=BASE_URL) as ac: + async with AsyncClient(transport=ASGITransport(app=app), base_url=BASE_URL) as ac: response = await ac.post( MOCK_API_NAME, headers=TEST_HEADERS, @@ -172,7 +172,7 @@ async def test_api_raw_get_lookup_success(mocker: MockerFixture, api_test_data): modified_param_dict = RAW_MOCKED_PARAMETER_DICT.copy() del modified_param_dict["business_unit"] - async with AsyncClient(app=app, base_url=BASE_URL) as ac: + async with AsyncClient(transport=ASGITransport(app=app), base_url=BASE_URL) as ac: actual = await ac.get( MOCK_API_NAME, headers=TEST_HEADERS, params=modified_param_dict ) @@ -217,7 +217,7 @@ async def test_api_raw_post_lookup_success(mocker: MockerFixture): modified_param_dict = RAW_POST_MOCKED_PARAMETER_DICT.copy() del modified_param_dict["business_unit"] - async with AsyncClient(app=app, base_url=BASE_URL) as ac: + async with AsyncClient(transport=ASGITransport(app=app), base_url=BASE_URL) as ac: actual = await ac.post( MOCK_API_NAME, headers=TEST_HEADERS, @@ -267,7 +267,7 @@ async def test_api_raw_get_lookup_no_tag_map_error(mocker: MockerFixture): modified_param_dict["tagname"] = ["NonExistentTag"] del modified_param_dict["business_unit"] - async with AsyncClient(app=app, base_url=BASE_URL) as ac: + async with AsyncClient(transport=ASGITransport(app=app), base_url=BASE_URL) as ac: actual = await ac.get( MOCK_API_NAME, headers=TEST_HEADERS, params=modified_param_dict ) diff --git a/tests/api/v1/test_api_resample.py b/tests/api/v1/test_api_resample.py index 2baa5a6fc..6ec815ca1 100644 --- a/tests/api/v1/test_api_resample.py +++ b/tests/api/v1/test_api_resample.py @@ -25,7 +25,7 @@ TEST_HEADERS, BASE_URL, ) -from httpx import AsyncClient +from httpx import AsyncClient, ASGITransport from src.api.v1 import app MOCK_METHOD = "src.sdk.python.rtdip_sdk.queries.time_series.resample.get" @@ -37,7 +37,7 @@ async def test_api_resample_get_success(mocker: MockerFixture, api_test_data): mocker = mocker_setup(mocker, MOCK_METHOD, api_test_data["mock_data_agg"]) - async with AsyncClient(app=app, base_url=BASE_URL) as ac: + async with AsyncClient(transport=ASGITransport(app=app), base_url=BASE_URL) as ac: response = await ac.get( MOCK_API_NAME, headers=TEST_HEADERS, params=RESAMPLE_MOCKED_PARAMETER_DICT ) @@ -50,7 +50,7 @@ async def test_api_resample_get_success(mocker: MockerFixture, api_test_data): async def test_api_resample_get_validation_error(mocker: MockerFixture, api_test_data): mocker = mocker_setup(mocker, MOCK_METHOD, api_test_data["mock_data_agg"]) - async with AsyncClient(app=app, base_url=BASE_URL) as ac: + async with AsyncClient(transport=ASGITransport(app=app), base_url=BASE_URL) as ac: response = await ac.get( MOCK_API_NAME, headers=TEST_HEADERS, @@ -73,7 +73,7 @@ async def test_api_resample_get_error(mocker: MockerFixture, api_test_data): Exception("Error Connecting to Database"), ) - async with AsyncClient(app=app, base_url=BASE_URL) as ac: + async with AsyncClient(transport=ASGITransport(app=app), base_url=BASE_URL) as ac: response = await ac.get( MOCK_API_NAME, headers=TEST_HEADERS, params=RESAMPLE_MOCKED_PARAMETER_DICT ) @@ -86,7 +86,7 @@ async def test_api_resample_get_error(mocker: MockerFixture, api_test_data): async def test_api_resample_post_success(mocker: MockerFixture, api_test_data): mocker = mocker_setup(mocker, MOCK_METHOD, api_test_data["mock_data_agg"]) - async with AsyncClient(app=app, base_url=BASE_URL) as ac: + async with AsyncClient(transport=ASGITransport(app=app), base_url=BASE_URL) as ac: response = await ac.post( MOCK_API_NAME, headers=TEST_HEADERS, @@ -102,7 +102,7 @@ async def test_api_resample_post_success(mocker: MockerFixture, api_test_data): async def test_api_resample_post_validation_error(mocker: MockerFixture, api_test_data): mocker = mocker_setup(mocker, MOCK_METHOD, api_test_data["mock_data_agg"]) - async with AsyncClient(app=app, base_url=BASE_URL) as ac: + async with AsyncClient(transport=ASGITransport(app=app), base_url=BASE_URL) as ac: response = await ac.post( MOCK_API_NAME, headers=TEST_HEADERS, @@ -126,7 +126,7 @@ async def test_api_resample_post_error(mocker: MockerFixture, api_test_data): Exception("Error Connecting to Database"), ) - async with AsyncClient(app=app, base_url=BASE_URL) as ac: + async with AsyncClient(transport=ASGITransport(app=app), base_url=BASE_URL) as ac: response = await ac.post( MOCK_API_NAME, headers=TEST_HEADERS, diff --git a/tests/api/v1/test_api_sql.py b/tests/api/v1/test_api_sql.py index 1ea88482e..064124d31 100644 --- a/tests/api/v1/test_api_sql.py +++ b/tests/api/v1/test_api_sql.py @@ -25,7 +25,7 @@ BASE_URL, ) from pandas.io.json import build_table_schema -from httpx import AsyncClient +from httpx import AsyncClient, ASGITransport from src.api.v1 import app MOCK_METHOD = "src.sdk.python.rtdip_sdk.queries.sql.sql_query.SQLQueryBuilder.get" @@ -37,7 +37,7 @@ async def test_api_sql_post_success(mocker: MockerFixture, api_test_data): mocker = mocker_setup(mocker, MOCK_METHOD, api_test_data["mock_data_raw"]) - async with AsyncClient(app=app, base_url=BASE_URL) as ac: + async with AsyncClient(transport=ASGITransport(app=app), base_url=BASE_URL) as ac: response = await ac.post( MOCK_API_NAME, headers=TEST_HEADERS, @@ -53,7 +53,7 @@ async def test_api_sql_post_success(mocker: MockerFixture, api_test_data): async def test_api_sql_post_validation_error(mocker: MockerFixture, api_test_data): mocker = mocker_setup(mocker, MOCK_METHOD, api_test_data["mock_data_raw"]) - async with AsyncClient(app=app, base_url=BASE_URL) as ac: + async with AsyncClient(transport=ASGITransport(app=app), base_url=BASE_URL) as ac: response = await ac.post( MOCK_API_NAME, headers=TEST_HEADERS, @@ -77,7 +77,7 @@ async def test_api_sql_post_error(mocker: MockerFixture, api_test_data): Exception("Error Connecting to Database"), ) - async with AsyncClient(app=app, base_url=BASE_URL) as ac: + async with AsyncClient(transport=ASGITransport(app=app), base_url=BASE_URL) as ac: response = await ac.post( MOCK_API_NAME, headers=TEST_HEADERS, diff --git a/tests/api/v1/test_api_summary.py b/tests/api/v1/test_api_summary.py index 88c2f1cbe..42319aafd 100644 --- a/tests/api/v1/test_api_summary.py +++ b/tests/api/v1/test_api_summary.py @@ -24,7 +24,7 @@ TEST_HEADERS, BASE_URL, ) -from httpx import AsyncClient +from httpx import AsyncClient, ASGITransport from src.api.v1 import app import json @@ -37,7 +37,7 @@ async def test_api_summary_get_success(mocker: MockerFixture, api_test_data): mocker = mocker_setup(mocker, MOCK_METHOD, api_test_data["mock_data_summary"]) - async with AsyncClient(app=app, base_url=BASE_URL) as ac: + async with AsyncClient(transport=ASGITransport(app=app), base_url=BASE_URL) as ac: response = await ac.get( MOCK_API_NAME, headers=TEST_HEADERS, params=SUMMARY_MOCKED_PARAMETER_DICT ) @@ -50,7 +50,7 @@ async def test_api_summary_get_success(mocker: MockerFixture, api_test_data): async def test_api_summary_get_validation_error(mocker: MockerFixture, api_test_data): mocker = mocker_setup(mocker, MOCK_METHOD, api_test_data["mock_data_summary"]) - async with AsyncClient(app=app, base_url=BASE_URL) as ac: + async with AsyncClient(transport=ASGITransport(app=app), base_url=BASE_URL) as ac: response = await ac.get( MOCK_API_NAME, headers=TEST_HEADERS, @@ -73,7 +73,7 @@ async def test_api_summary_get_error(mocker: MockerFixture, api_test_data): Exception("Error Connecting to Database"), ) - async with AsyncClient(app=app, base_url=BASE_URL) as ac: + async with AsyncClient(transport=ASGITransport(app=app), base_url=BASE_URL) as ac: response = await ac.get( MOCK_API_NAME, headers=TEST_HEADERS, params=SUMMARY_MOCKED_PARAMETER_DICT ) @@ -86,7 +86,7 @@ async def test_api_summary_get_error(mocker: MockerFixture, api_test_data): async def test_api_summary_post_success(mocker: MockerFixture, api_test_data): mocker = mocker_setup(mocker, MOCK_METHOD, api_test_data["mock_data_summary"]) - async with AsyncClient(app=app, base_url=BASE_URL) as ac: + async with AsyncClient(transport=ASGITransport(app=app), base_url=BASE_URL) as ac: response = await ac.post( MOCK_API_NAME, headers=TEST_HEADERS, @@ -102,7 +102,7 @@ async def test_api_summary_post_success(mocker: MockerFixture, api_test_data): async def test_api_summary_post_validation_error(mocker: MockerFixture, api_test_data): mocker = mocker_setup(mocker, MOCK_METHOD, api_test_data["mock_data_summary"]) - async with AsyncClient(app=app, base_url=BASE_URL) as ac: + async with AsyncClient(transport=ASGITransport(app=app), base_url=BASE_URL) as ac: response = await ac.post( MOCK_API_NAME, headers=TEST_HEADERS, @@ -126,7 +126,7 @@ async def test_api_summary_post_error(mocker: MockerFixture, api_test_data): Exception("Error Connecting to Database"), ) - async with AsyncClient(app=app, base_url=BASE_URL) as ac: + async with AsyncClient(transport=ASGITransport(app=app), base_url=BASE_URL) as ac: response = await ac.post( MOCK_API_NAME, headers=TEST_HEADERS, diff --git a/tests/api/v1/test_api_time_weighted_average.py b/tests/api/v1/test_api_time_weighted_average.py index 99eb19c8d..5ba0591b3 100644 --- a/tests/api/v1/test_api_time_weighted_average.py +++ b/tests/api/v1/test_api_time_weighted_average.py @@ -25,7 +25,7 @@ TEST_HEADERS, BASE_URL, ) -from httpx import AsyncClient +from httpx import AsyncClient, ASGITransport from src.api.v1 import app MOCK_METHOD = "src.sdk.python.rtdip_sdk.queries.time_series.time_weighted_average.get" @@ -39,7 +39,7 @@ async def test_api_time_weighted_average_get_success( ): mocker = mocker_setup(mocker, MOCK_METHOD, api_test_data["mock_data_agg"]) - async with AsyncClient(app=app, base_url=BASE_URL) as ac: + async with AsyncClient(transport=ASGITransport(app=app), base_url=BASE_URL) as ac: response = await ac.get( MOCK_API_NAME, headers=TEST_HEADERS, @@ -56,7 +56,7 @@ async def test_api_time_weighted_average_get_validation_error( ): mocker = mocker_setup(mocker, MOCK_METHOD, api_test_data["mock_data_agg"]) - async with AsyncClient(app=app, base_url=BASE_URL) as ac: + async with AsyncClient(transport=ASGITransport(app=app), base_url=BASE_URL) as ac: response = await ac.get( MOCK_API_NAME, headers=TEST_HEADERS, @@ -81,7 +81,7 @@ async def test_api_time_weighted_average_get_error( Exception("Error Connecting to Database"), ) - async with AsyncClient(app=app, base_url=BASE_URL) as ac: + async with AsyncClient(transport=ASGITransport(app=app), base_url=BASE_URL) as ac: response = await ac.get( MOCK_API_NAME, headers=TEST_HEADERS, @@ -98,7 +98,7 @@ async def test_api_time_weighted_average_post_success( ): mocker = mocker_setup(mocker, MOCK_METHOD, api_test_data["mock_data_agg"]) - async with AsyncClient(app=app, base_url=BASE_URL) as ac: + async with AsyncClient(transport=ASGITransport(app=app), base_url=BASE_URL) as ac: response = await ac.post( MOCK_API_NAME, headers=TEST_HEADERS, @@ -116,7 +116,7 @@ async def test_api_time_weighted_average_post_validation_error( ): mocker = mocker_setup(mocker, MOCK_METHOD, api_test_data["mock_data_agg"]) - async with AsyncClient(app=app, base_url=BASE_URL) as ac: + async with AsyncClient(transport=ASGITransport(app=app), base_url=BASE_URL) as ac: response = await ac.post( MOCK_API_NAME, headers=TEST_HEADERS, @@ -142,7 +142,7 @@ async def test_api_time_weighted_average_post_error( Exception("Error Connecting to Database"), ) - async with AsyncClient(app=app, base_url=BASE_URL) as ac: + async with AsyncClient(transport=ASGITransport(app=app), base_url=BASE_URL) as ac: response = await ac.post( MOCK_API_NAME, headers=TEST_HEADERS, diff --git a/tests/api/v1/test_api_utilities.py b/tests/api/v1/test_api_utilities.py index fb3042a6b..718a419dd 100644 --- a/tests/api/v1/test_api_utilities.py +++ b/tests/api/v1/test_api_utilities.py @@ -14,7 +14,7 @@ import pytest from pytest_mock import MockerFixture -from httpx import AsyncClient +from httpx import AsyncClient, ASGITransport from tests.api.v1.api_test_objects import BASE_URL from src.api.v1 import app @@ -22,7 +22,7 @@ async def test_api_home(mocker: MockerFixture): - async with AsyncClient(app=app, base_url=BASE_URL) as ac: + async with AsyncClient(transport=ASGITransport(app=app), base_url=BASE_URL) as ac: response = await ac.get("/") assert response.status_code == 307 @@ -30,14 +30,14 @@ async def test_api_home(mocker: MockerFixture): async def test_api_docs(mocker: MockerFixture): - async with AsyncClient(app=app, base_url=BASE_URL) as ac: + async with AsyncClient(transport=ASGITransport(app=app), base_url=BASE_URL) as ac: response = await ac.get("/docs") assert response.status_code == 200 async def test_api_redoc(mocker: MockerFixture): - async with AsyncClient(app=app, base_url=BASE_URL) as ac: + async with AsyncClient(transport=ASGITransport(app=app), base_url=BASE_URL) as ac: response = await ac.get("/redoc") assert response.status_code == 200 diff --git a/tests/sdk/python/rtdip_sdk/queries/_test_utils/sdk_test_objects.py b/tests/sdk/python/rtdip_sdk/queries/_test_utils/sdk_test_objects.py index daaae4cd2..1dcafbf01 100644 --- a/tests/sdk/python/rtdip_sdk/queries/_test_utils/sdk_test_objects.py +++ b/tests/sdk/python/rtdip_sdk/queries/_test_utils/sdk_test_objects.py @@ -38,10 +38,10 @@ RAW_MOCKED_QUERY_DISPLAY_UOM = 'WITH raw_events AS (SELECT DISTINCT from_utc_timestamp(date_trunc("millisecond",`EventTime`), "+0000") AS `EventTime`, `TagName`, `Status`, `Value` FROM `mocked-buiness-unit`.`sensors`.`mocked-asset_mocked-data-security-level_events_mocked-data-type` WHERE `EventTime` BETWEEN to_timestamp("2011-01-01T00:00:00+00:00") AND to_timestamp("2011-01-02T23:59:59+00:00") AND `TagName` IN (\'mocked-TAGNAME\') ORDER BY `TagName`, `EventTime` ) SELECT e.`EventTime`, e.`TagName`, e.`Status`, e.`Value`, m.`UOM` FROM raw_events e LEFT OUTER JOIN `mocked-buiness-unit`.`sensors`.`mocked-asset_mocked-data-security-level_metadata` m ON e.`TagName` = m.`TagName` ' # Resample -RESAMPLE_MOCKED_QUERY = 'WITH raw_events AS (SELECT DISTINCT from_utc_timestamp(date_trunc("millisecond",`EventTime`), "+0000") AS `EventTime`, `TagName`, `Status`, `Value` FROM `mocked-buiness-unit`.`sensors`.`mocked-asset_mocked-data-security-level_events_mocked-data-type` WHERE `EventTime` BETWEEN to_timestamp("2011-01-01T00:00:00+00:00") AND to_timestamp("2011-01-02T23:59:59+00:00") AND `TagName` IN (\'mocked-TAGNAME\') ) ,date_array AS (SELECT explode(sequence(from_utc_timestamp(to_timestamp("2011-01-01T00:00:00+00:00"), "+0000"), from_utc_timestamp(to_timestamp("2011-01-02T23:59:59+00:00"), "+0000"), INTERVAL \'15 minute\')) AS timestamp_array) ,window_buckets AS (SELECT timestamp_array AS window_start, timestampadd(minute, 15, timestamp_array) AS window_end FROM date_array) ,resample AS (SELECT /*+ RANGE_JOIN(d, 900 ) */ d.window_start, d.window_end, e.`TagName`, avg(e.`Value`) OVER (PARTITION BY e.`TagName`, d.window_start ORDER BY e.`EventTime` ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING) AS `Value` FROM window_buckets d INNER JOIN raw_events e ON d.window_start <= e.`EventTime` AND d.window_end > e.`EventTime`) ,project AS (SELECT window_start AS `EventTime`, `TagName`, `Value` FROM resample GROUP BY window_start, `TagName`, `Value` ORDER BY `TagName`, `EventTime` ) SELECT * FROM project ' -RESAMPLE_MOCKED_QUERY_CHECK_TAGS = 'WITH raw_events AS (SELECT DISTINCT from_utc_timestamp(date_trunc("millisecond",`EventTime`), "+0000") AS `EventTime`, `TagName`, `Status`, `Value` FROM `mocked-buiness-unit`.`sensors`.`mocked-asset_mocked-data-security-level_events_mocked-data-type` WHERE `EventTime` BETWEEN to_timestamp("2011-01-01T00:00:00+00:00") AND to_timestamp("2011-01-02T23:59:59+00:00") AND UPPER(`TagName`) IN (\'MOCKED-TAGNAME\') ) ,date_array AS (SELECT explode(sequence(from_utc_timestamp(to_timestamp("2011-01-01T00:00:00+00:00"), "+0000"), from_utc_timestamp(to_timestamp("2011-01-02T23:59:59+00:00"), "+0000"), INTERVAL \'15 minute\')) AS timestamp_array) ,window_buckets AS (SELECT timestamp_array AS window_start, timestampadd(minute, 15, timestamp_array) AS window_end FROM date_array) ,resample AS (SELECT /*+ RANGE_JOIN(d, 900 ) */ d.window_start, d.window_end, e.`TagName`, avg(e.`Value`) OVER (PARTITION BY e.`TagName`, d.window_start ORDER BY e.`EventTime` ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING) AS `Value` FROM window_buckets d INNER JOIN raw_events e ON d.window_start <= e.`EventTime` AND d.window_end > e.`EventTime`) ,project AS (SELECT window_start AS `EventTime`, `TagName`, `Value` FROM resample GROUP BY window_start, `TagName`, `Value` ORDER BY `TagName`, `EventTime` ) SELECT * FROM project ' -RESAMPLE_MOCKED_QUERY_PIVOT = 'WITH raw_events AS (SELECT DISTINCT from_utc_timestamp(date_trunc("millisecond",`EventTime`), "+0000") AS `EventTime`, `TagName`, `Status`, `Value` FROM `mocked-buiness-unit`.`sensors`.`mocked-asset_mocked-data-security-level_events_mocked-data-type` WHERE `EventTime` BETWEEN to_timestamp("2011-01-01T00:00:00+00:00") AND to_timestamp("2011-01-02T23:59:59+00:00") AND `TagName` IN (\'mocked-TAGNAME\') ) ,date_array AS (SELECT explode(sequence(from_utc_timestamp(to_timestamp("2011-01-01T00:00:00+00:00"), "+0000"), from_utc_timestamp(to_timestamp("2011-01-02T23:59:59+00:00"), "+0000"), INTERVAL \'15 minute\')) AS timestamp_array) ,window_buckets AS (SELECT timestamp_array AS window_start, timestampadd(minute, 15, timestamp_array) AS window_end FROM date_array) ,resample AS (SELECT /*+ RANGE_JOIN(d, 900 ) */ d.window_start, d.window_end, e.`TagName`, avg(e.`Value`) OVER (PARTITION BY e.`TagName`, d.window_start ORDER BY e.`EventTime` ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING) AS `Value` FROM window_buckets d INNER JOIN raw_events e ON d.window_start <= e.`EventTime` AND d.window_end > e.`EventTime`) ,project AS (SELECT window_start AS `EventTime`, `TagName`, `Value` FROM resample GROUP BY window_start, `TagName`, `Value` ORDER BY `TagName`, `EventTime` ) ,pivot AS (SELECT * FROM (SELECT `EventTime`, `Value`, `TagName` AS `TagName` FROM project) PIVOT (FIRST(`Value`) FOR `TagName` IN (\'mocked-TAGNAME\' AS `mocked-TAGNAME`))) SELECT * FROM pivot ORDER BY `EventTime` ' -RESAMPLE_MOCKED_QUERY_UOM = 'WITH raw_events AS (SELECT DISTINCT from_utc_timestamp(date_trunc("millisecond",`EventTime`), "+0000") AS `EventTime`, `TagName`, `Status`, `Value` FROM `mocked-buiness-unit`.`sensors`.`mocked-asset_mocked-data-security-level_events_mocked-data-type` WHERE `EventTime` BETWEEN to_timestamp("2011-01-01T00:00:00+00:00") AND to_timestamp("2011-01-02T23:59:59+00:00") AND `TagName` IN (\'mocked-TAGNAME\') ) ,date_array AS (SELECT explode(sequence(from_utc_timestamp(to_timestamp("2011-01-01T00:00:00+00:00"), "+0000"), from_utc_timestamp(to_timestamp("2011-01-02T23:59:59+00:00"), "+0000"), INTERVAL \'15 minute\')) AS timestamp_array) ,window_buckets AS (SELECT timestamp_array AS window_start, timestampadd(minute, 15, timestamp_array) AS window_end FROM date_array) ,resample AS (SELECT /*+ RANGE_JOIN(d, 900 ) */ d.window_start, d.window_end, e.`TagName`, avg(e.`Value`) OVER (PARTITION BY e.`TagName`, d.window_start ORDER BY e.`EventTime` ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING) AS `Value` FROM window_buckets d INNER JOIN raw_events e ON d.window_start <= e.`EventTime` AND d.window_end > e.`EventTime`) ,project AS (SELECT window_start AS `EventTime`, `TagName`, `Value` FROM resample GROUP BY window_start, `TagName`, `Value` ORDER BY `TagName`, `EventTime` ) SELECT p.`EventTime`, p.`TagName`, p.`Value`, m.`UoM` FROM project p LEFT OUTER JOIN `mocked-buiness-unit`.`sensors`.`mocked-asset_mocked-data-security-level_metadata` m ON p.`TagName` = m.`TagName` ' +RESAMPLE_MOCKED_QUERY = 'WITH raw_events AS (SELECT DISTINCT from_utc_timestamp(date_trunc("millisecond",`EventTime`), "+0000") AS `EventTime`, `TagName`, `Status`, `Value` FROM `mocked-buiness-unit`.`sensors`.`mocked-asset_mocked-data-security-level_events_mocked-data-type` WHERE `EventTime` BETWEEN to_timestamp("2011-01-01T00:00:00+00:00") AND timestampadd(minute, 15, to_timestamp("2011-01-02T23:59:59+00:00")) AND `TagName` IN (\'mocked-TAGNAME\') ) ,date_array AS (SELECT explode(sequence(from_utc_timestamp(to_timestamp("2011-01-01T00:00:00+00:00"), "+0000"), from_utc_timestamp(to_timestamp("2011-01-02T23:59:59+00:00"), "+0000"), INTERVAL \'15 minute\')) AS timestamp_array) ,window_buckets AS (SELECT timestamp_array AS window_start, timestampadd(minute, 15, timestamp_array) AS window_end FROM date_array) ,resample AS (SELECT /*+ RANGE_JOIN(d, 900 ) */ d.window_start, d.window_end, e.`TagName`, avg(e.`Value`) OVER (PARTITION BY e.`TagName`, d.window_start ORDER BY e.`EventTime` ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING) AS `Value` FROM window_buckets d INNER JOIN raw_events e ON d.window_start <= e.`EventTime` AND d.window_end > e.`EventTime`) ,project AS (SELECT window_start AS `EventTime`, `TagName`, `Value` FROM resample GROUP BY window_start, `TagName`, `Value` ORDER BY `TagName`, `EventTime` ) SELECT * FROM project ' +RESAMPLE_MOCKED_QUERY_CHECK_TAGS = 'WITH raw_events AS (SELECT DISTINCT from_utc_timestamp(date_trunc("millisecond",`EventTime`), "+0000") AS `EventTime`, `TagName`, `Status`, `Value` FROM `mocked-buiness-unit`.`sensors`.`mocked-asset_mocked-data-security-level_events_mocked-data-type` WHERE `EventTime` BETWEEN to_timestamp("2011-01-01T00:00:00+00:00") AND timestampadd(minute, 15, to_timestamp("2011-01-02T23:59:59+00:00")) AND UPPER(`TagName`) IN (\'MOCKED-TAGNAME\') ) ,date_array AS (SELECT explode(sequence(from_utc_timestamp(to_timestamp("2011-01-01T00:00:00+00:00"), "+0000"), from_utc_timestamp(to_timestamp("2011-01-02T23:59:59+00:00"), "+0000"), INTERVAL \'15 minute\')) AS timestamp_array) ,window_buckets AS (SELECT timestamp_array AS window_start, timestampadd(minute, 15, timestamp_array) AS window_end FROM date_array) ,resample AS (SELECT /*+ RANGE_JOIN(d, 900 ) */ d.window_start, d.window_end, e.`TagName`, avg(e.`Value`) OVER (PARTITION BY e.`TagName`, d.window_start ORDER BY e.`EventTime` ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING) AS `Value` FROM window_buckets d INNER JOIN raw_events e ON d.window_start <= e.`EventTime` AND d.window_end > e.`EventTime`) ,project AS (SELECT window_start AS `EventTime`, `TagName`, `Value` FROM resample GROUP BY window_start, `TagName`, `Value` ORDER BY `TagName`, `EventTime` ) SELECT * FROM project ' +RESAMPLE_MOCKED_QUERY_PIVOT = 'WITH raw_events AS (SELECT DISTINCT from_utc_timestamp(date_trunc("millisecond",`EventTime`), "+0000") AS `EventTime`, `TagName`, `Status`, `Value` FROM `mocked-buiness-unit`.`sensors`.`mocked-asset_mocked-data-security-level_events_mocked-data-type` WHERE `EventTime` BETWEEN to_timestamp("2011-01-01T00:00:00+00:00") AND timestampadd(minute, 15, to_timestamp("2011-01-02T23:59:59+00:00")) AND `TagName` IN (\'mocked-TAGNAME\') ) ,date_array AS (SELECT explode(sequence(from_utc_timestamp(to_timestamp("2011-01-01T00:00:00+00:00"), "+0000"), from_utc_timestamp(to_timestamp("2011-01-02T23:59:59+00:00"), "+0000"), INTERVAL \'15 minute\')) AS timestamp_array) ,window_buckets AS (SELECT timestamp_array AS window_start, timestampadd(minute, 15, timestamp_array) AS window_end FROM date_array) ,resample AS (SELECT /*+ RANGE_JOIN(d, 900 ) */ d.window_start, d.window_end, e.`TagName`, avg(e.`Value`) OVER (PARTITION BY e.`TagName`, d.window_start ORDER BY e.`EventTime` ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING) AS `Value` FROM window_buckets d INNER JOIN raw_events e ON d.window_start <= e.`EventTime` AND d.window_end > e.`EventTime`) ,project AS (SELECT window_start AS `EventTime`, `TagName`, `Value` FROM resample GROUP BY window_start, `TagName`, `Value` ORDER BY `TagName`, `EventTime` ) ,pivot AS (SELECT * FROM (SELECT `EventTime`, `Value`, `TagName` AS `TagName` FROM project) PIVOT (FIRST(`Value`) FOR `TagName` IN (\'mocked-TAGNAME\' AS `mocked-TAGNAME`))) SELECT * FROM pivot ORDER BY `EventTime` ' +RESAMPLE_MOCKED_QUERY_UOM = 'WITH raw_events AS (SELECT DISTINCT from_utc_timestamp(date_trunc("millisecond",`EventTime`), "+0000") AS `EventTime`, `TagName`, `Status`, `Value` FROM `mocked-buiness-unit`.`sensors`.`mocked-asset_mocked-data-security-level_events_mocked-data-type` WHERE `EventTime` BETWEEN to_timestamp("2011-01-01T00:00:00+00:00") AND timestampadd(minute, 15, to_timestamp("2011-01-02T23:59:59+00:00")) AND `TagName` IN (\'mocked-TAGNAME\') ) ,date_array AS (SELECT explode(sequence(from_utc_timestamp(to_timestamp("2011-01-01T00:00:00+00:00"), "+0000"), from_utc_timestamp(to_timestamp("2011-01-02T23:59:59+00:00"), "+0000"), INTERVAL \'15 minute\')) AS timestamp_array) ,window_buckets AS (SELECT timestamp_array AS window_start, timestampadd(minute, 15, timestamp_array) AS window_end FROM date_array) ,resample AS (SELECT /*+ RANGE_JOIN(d, 900 ) */ d.window_start, d.window_end, e.`TagName`, avg(e.`Value`) OVER (PARTITION BY e.`TagName`, d.window_start ORDER BY e.`EventTime` ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING) AS `Value` FROM window_buckets d INNER JOIN raw_events e ON d.window_start <= e.`EventTime` AND d.window_end > e.`EventTime`) ,project AS (SELECT window_start AS `EventTime`, `TagName`, `Value` FROM resample GROUP BY window_start, `TagName`, `Value` ORDER BY `TagName`, `EventTime` ) SELECT p.`EventTime`, p.`TagName`, p.`Value`, m.`UoM` FROM project p LEFT OUTER JOIN `mocked-buiness-unit`.`sensors`.`mocked-asset_mocked-data-security-level_metadata` m ON p.`TagName` = m.`TagName` ' # Plot PLOT_MOCKED_QUERY = 'WITH raw_events AS (SELECT DISTINCT from_utc_timestamp(date_trunc("millisecond",`EventTime`), "+0000") AS `EventTime`, `TagName`, `Status`, `Value` FROM `mocked-buiness-unit`.`sensors`.`mocked-asset_mocked-data-security-level_events_mocked-data-type` WHERE `EventTime` BETWEEN to_timestamp("2011-01-01T00:00:00+00:00") AND to_timestamp("2011-01-02T23:59:59+00:00") AND `TagName` IN (\'mocked-TAGNAME\') ) ,date_array AS (SELECT explode(sequence(from_utc_timestamp(to_timestamp("2011-01-01T00:00:00+00:00"), "+0000"), from_utc_timestamp(to_timestamp("2011-01-02T23:59:59+00:00"), "+0000"), INTERVAL \'15 minute\')) AS timestamp_array) ,window_buckets AS (SELECT timestamp_array AS window_start, timestampadd(minute, 15, timestamp_array) AS window_end FROM date_array) ,plot AS (SELECT /*+ RANGE_JOIN(d, 900 ) */ d.window_start, d.window_end, e.`TagName`, min(CASE WHEN `Status` = \'Bad\' THEN null ELSE struct(e.`Value`, e.`EventTime`) END) OVER (PARTITION BY e.`TagName`, d.window_start ORDER BY e.`EventTime` ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING) AS `min_Value`, max(CASE WHEN `Status` = \'Bad\' THEN null ELSE struct(e.`Value`, e.`EventTime`) END) OVER (PARTITION BY e.`TagName`, d.window_start ORDER BY e.`EventTime` ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING) AS `max_Value`, first(CASE WHEN `Status` = \'Bad\' THEN null ELSE struct(e.`Value`, e.`EventTime`) END, True) OVER (PARTITION BY e.`TagName`, d.window_start ORDER BY e.`EventTime` ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING) AS `first_Value`, last(CASE WHEN `Status` = \'Bad\' THEN null ELSE struct(e.`Value`, e.`EventTime`) END, True) OVER (PARTITION BY e.`TagName`, d.window_start ORDER BY e.`EventTime` ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING) AS `last_Value`, first(CASE WHEN `Status` = \'Bad\' THEN struct(e.`Value`, e.`EventTime`) ELSE null END, True) OVER (PARTITION BY e.`TagName`, d.window_start ORDER BY e.`EventTime` ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING) AS `excp_Value` FROM window_buckets d INNER JOIN raw_events e ON d.window_start <= e.`EventTime` AND d.window_end > e.`EventTime`) ,deduplicate AS (SELECT window_start AS `EventTime`, `TagName`, `min_Value` as `Min`, `max_Value` as `Max`, `first_Value` as `First`, `last_Value` as `Last`, `excp_Value` as `Exception` FROM plot GROUP BY window_start, `TagName`, `min_Value`, `max_Value`, `first_Value`, `last_Value`, `excp_Value`) ,project AS (SELECT distinct Values.EventTime, `TagName`, Values.Value FROM (SELECT * FROM deduplicate UNPIVOT (`Values` for `Aggregation` IN (`Min`, `Max`, `First`, `Last`, `Exception`))) ORDER BY `TagName`, `EventTime` ) SELECT * FROM project ' @@ -50,11 +50,11 @@ PLOT_MOCKED_QUERY_UOM = 'WITH raw_events AS (SELECT DISTINCT from_utc_timestamp(date_trunc("millisecond",`EventTime`), "+0000") AS `EventTime`, `TagName`, `Status`, `Value` FROM `mocked-buiness-unit`.`sensors`.`mocked-asset_mocked-data-security-level_events_mocked-data-type` WHERE `EventTime` BETWEEN to_timestamp("2011-01-01T00:00:00+00:00") AND to_timestamp("2011-01-02T23:59:59+00:00") AND `TagName` IN (\'mocked-TAGNAME\') ) ,date_array AS (SELECT explode(sequence(from_utc_timestamp(to_timestamp("2011-01-01T00:00:00+00:00"), "+0000"), from_utc_timestamp(to_timestamp("2011-01-02T23:59:59+00:00"), "+0000"), INTERVAL \'15 minute\')) AS timestamp_array) ,window_buckets AS (SELECT timestamp_array AS window_start, timestampadd(minute, 15, timestamp_array) AS window_end FROM date_array) ,plot AS (SELECT /*+ RANGE_JOIN(d, 900 ) */ d.window_start, d.window_end, e.`TagName`, min(CASE WHEN `Status` = \'Bad\' THEN null ELSE struct(e.`Value`, e.`EventTime`) END) OVER (PARTITION BY e.`TagName`, d.window_start ORDER BY e.`EventTime` ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING) AS `min_Value`, max(CASE WHEN `Status` = \'Bad\' THEN null ELSE struct(e.`Value`, e.`EventTime`) END) OVER (PARTITION BY e.`TagName`, d.window_start ORDER BY e.`EventTime` ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING) AS `max_Value`, first(CASE WHEN `Status` = \'Bad\' THEN null ELSE struct(e.`Value`, e.`EventTime`) END, True) OVER (PARTITION BY e.`TagName`, d.window_start ORDER BY e.`EventTime` ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING) AS `first_Value`, last(CASE WHEN `Status` = \'Bad\' THEN null ELSE struct(e.`Value`, e.`EventTime`) END, True) OVER (PARTITION BY e.`TagName`, d.window_start ORDER BY e.`EventTime` ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING) AS `last_Value`, first(CASE WHEN `Status` = \'Bad\' THEN struct(e.`Value`, e.`EventTime`) ELSE null END, True) OVER (PARTITION BY e.`TagName`, d.window_start ORDER BY e.`EventTime` ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING) AS `excp_Value` FROM window_buckets d INNER JOIN raw_events e ON d.window_start <= e.`EventTime` AND d.window_end > e.`EventTime`) ,deduplicate AS (SELECT window_start AS `EventTime`, `TagName`, `min_Value` as `Min`, `max_Value` as `Max`, `first_Value` as `First`, `last_Value` as `Last`, `excp_Value` as `Exception` FROM plot GROUP BY window_start, `TagName`, `min_Value`, `max_Value`, `first_Value`, `last_Value`, `excp_Value`) ,project AS (SELECT distinct Values.EventTime, `TagName`, Values.Value FROM (SELECT * FROM deduplicate UNPIVOT (`Values` for `Aggregation` IN (`Min`, `Max`, `First`, `Last`, `Exception`))) ORDER BY `TagName`, `EventTime` ) SELECT p.`EventTime`, p.`TagName`, p.`Value`, m.`UoM` FROM project p LEFT OUTER JOIN `mocked-buiness-unit`.`sensors`.`mocked-asset_mocked-data-security-level_metadata` m ON p.`TagName` = m.`TagName` ' # Interpolate -INTERPOLATE_MOCKED_QUERY = 'WITH resample AS (WITH raw_events AS (SELECT DISTINCT from_utc_timestamp(date_trunc("millisecond",`EventTime`), "+0000") AS `EventTime`, `TagName`, `Status`, `Value` FROM `mocked-buiness-unit`.`sensors`.`mocked-asset_mocked-data-security-level_events_mocked-data-type` WHERE `EventTime` BETWEEN to_timestamp("2011-01-01T00:00:00+00:00") AND to_timestamp("2011-01-02T23:59:59+00:00") AND `TagName` IN (\'mocked-TAGNAME\') ) ,date_array AS (SELECT explode(sequence(from_utc_timestamp(to_timestamp("2011-01-01T00:00:00+00:00"), "+0000"), from_utc_timestamp(to_timestamp("2011-01-02T23:59:59+00:00"), "+0000"), INTERVAL \'15 minute\')) AS timestamp_array) ,window_buckets AS (SELECT timestamp_array AS window_start, timestampadd(minute, 15, timestamp_array) AS window_end FROM date_array) ,resample AS (SELECT /*+ RANGE_JOIN(d, 900 ) */ d.window_start, d.window_end, e.`TagName`, avg(e.`Value`) OVER (PARTITION BY e.`TagName`, d.window_start ORDER BY e.`EventTime` ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING) AS `Value` FROM window_buckets d INNER JOIN raw_events e ON d.window_start <= e.`EventTime` AND d.window_end > e.`EventTime`) ,project AS (SELECT window_start AS `EventTime`, `TagName`, `Value` FROM resample GROUP BY window_start, `TagName`, `Value` ) SELECT * FROM project ),date_array AS (SELECT explode(sequence(from_utc_timestamp(to_timestamp("2011-01-01T00:00:00+00:00"), "+0000"), from_utc_timestamp(to_timestamp("2011-01-02T23:59:59+00:00"), "+0000"), INTERVAL \'15 minute\')) AS `EventTime`, explode(array(\'mocked-TAGNAME\')) AS `TagName`) ,project AS (SELECT a.`EventTime`, a.`TagName`, last_value(b.`Value`, true) OVER (PARTITION BY a.`TagName` ORDER BY a.`EventTime` ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW) AS `Value` FROM date_array a LEFT OUTER JOIN resample b ON a.`EventTime` = b.`EventTime` AND a.`TagName` = b.`TagName`) SELECT * FROM project ORDER BY `TagName`, `EventTime` ' -INTERPOLATE_MOCKED_QUERY_BACKWARD_FILL = 'WITH resample AS (WITH raw_events AS (SELECT DISTINCT from_utc_timestamp(date_trunc("millisecond",`EventTime`), "+0000") AS `EventTime`, `TagName`, `Status`, `Value` FROM `mocked-buiness-unit`.`sensors`.`mocked-asset_mocked-data-security-level_events_mocked-data-type` WHERE `EventTime` BETWEEN to_timestamp("2011-01-01T00:00:00+00:00") AND to_timestamp("2011-01-02T23:59:59+00:00") AND `TagName` IN (\'mocked-TAGNAME\') ) ,date_array AS (SELECT explode(sequence(from_utc_timestamp(to_timestamp("2011-01-01T00:00:00+00:00"), "+0000"), from_utc_timestamp(to_timestamp("2011-01-02T23:59:59+00:00"), "+0000"), INTERVAL \'15 minute\')) AS timestamp_array) ,window_buckets AS (SELECT timestamp_array AS window_start, timestampadd(minute, 15, timestamp_array) AS window_end FROM date_array) ,resample AS (SELECT /*+ RANGE_JOIN(d, 900 ) */ d.window_start, d.window_end, e.`TagName`, avg(e.`Value`) OVER (PARTITION BY e.`TagName`, d.window_start ORDER BY e.`EventTime` ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING) AS `Value` FROM window_buckets d INNER JOIN raw_events e ON d.window_start <= e.`EventTime` AND d.window_end > e.`EventTime`) ,project AS (SELECT window_start AS `EventTime`, `TagName`, `Value` FROM resample GROUP BY window_start, `TagName`, `Value` ) SELECT * FROM project ),date_array AS (SELECT explode(sequence(from_utc_timestamp(to_timestamp("2011-01-01T00:00:00+00:00"), "+0000"), from_utc_timestamp(to_timestamp("2011-01-02T23:59:59+00:00"), "+0000"), INTERVAL \'15 minute\')) AS `EventTime`, explode(array(\'mocked-TAGNAME\')) AS `TagName`) ,project AS (SELECT a.`EventTime`, a.`TagName`, first_value(b.`Value`, true) OVER (PARTITION BY a.`TagName` ORDER BY a.`EventTime` ROWS BETWEEN CURRENT ROW AND UNBOUNDED FOLLOWING) AS `Value` FROM date_array a LEFT OUTER JOIN resample b ON a.`EventTime` = b.`EventTime` AND a.`TagName` = b.`TagName`) SELECT * FROM project ORDER BY `TagName`, `EventTime` ' -INTERPOLATE_MOCKED_QUERY_CHECK_TAGS = 'WITH resample AS (WITH raw_events AS (SELECT DISTINCT from_utc_timestamp(date_trunc("millisecond",`EventTime`), "+0000") AS `EventTime`, `TagName`, `Status`, `Value` FROM `mocked-buiness-unit`.`sensors`.`mocked-asset_mocked-data-security-level_events_mocked-data-type` WHERE `EventTime` BETWEEN to_timestamp("2011-01-01T00:00:00+00:00") AND to_timestamp("2011-01-02T23:59:59+00:00") AND UPPER(`TagName`) IN (\'MOCKED-TAGNAME\') ) ,date_array AS (SELECT explode(sequence(from_utc_timestamp(to_timestamp("2011-01-01T00:00:00+00:00"), "+0000"), from_utc_timestamp(to_timestamp("2011-01-02T23:59:59+00:00"), "+0000"), INTERVAL \'15 minute\')) AS timestamp_array) ,window_buckets AS (SELECT timestamp_array AS window_start, timestampadd(minute, 15, timestamp_array) AS window_end FROM date_array) ,resample AS (SELECT /*+ RANGE_JOIN(d, 900 ) */ d.window_start, d.window_end, e.`TagName`, avg(e.`Value`) OVER (PARTITION BY e.`TagName`, d.window_start ORDER BY e.`EventTime` ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING) AS `Value` FROM window_buckets d INNER JOIN raw_events e ON d.window_start <= e.`EventTime` AND d.window_end > e.`EventTime`) ,project AS (SELECT window_start AS `EventTime`, `TagName`, `Value` FROM resample GROUP BY window_start, `TagName`, `Value` ) SELECT * FROM project ),date_array AS (SELECT DISTINCT explode(sequence(from_utc_timestamp(to_timestamp("2011-01-01T00:00:00+00:00"), "+0000"), from_utc_timestamp(to_timestamp("2011-01-02T23:59:59+00:00"), "+0000"), INTERVAL \'15 minute\')) AS `EventTime`, explode(array(`TagName`)) AS `TagName` FROM resample) ,project AS (SELECT a.`EventTime`, a.`TagName`, first_value(b.`Value`, true) OVER (PARTITION BY a.`TagName` ORDER BY a.`EventTime` ROWS BETWEEN CURRENT ROW AND UNBOUNDED FOLLOWING) AS `Value` FROM date_array a LEFT OUTER JOIN resample b ON a.`EventTime` = b.`EventTime` AND a.`TagName` = b.`TagName`) SELECT * FROM project ORDER BY `TagName`, `EventTime` ' -INTERPOLATE_MOCKED_QUERY_PIVOT = 'WITH resample AS (WITH raw_events AS (SELECT DISTINCT from_utc_timestamp(date_trunc("millisecond",`EventTime`), "+0000") AS `EventTime`, `TagName`, `Status`, `Value` FROM `mocked-buiness-unit`.`sensors`.`mocked-asset_mocked-data-security-level_events_mocked-data-type` WHERE `EventTime` BETWEEN to_timestamp("2011-01-01T00:00:00+00:00") AND to_timestamp("2011-01-02T23:59:59+00:00") AND `TagName` IN (\'mocked-TAGNAME\') ) ,date_array AS (SELECT explode(sequence(from_utc_timestamp(to_timestamp("2011-01-01T00:00:00+00:00"), "+0000"), from_utc_timestamp(to_timestamp("2011-01-02T23:59:59+00:00"), "+0000"), INTERVAL \'15 minute\')) AS timestamp_array) ,window_buckets AS (SELECT timestamp_array AS window_start, timestampadd(minute, 15, timestamp_array) AS window_end FROM date_array) ,resample AS (SELECT /*+ RANGE_JOIN(d, 900 ) */ d.window_start, d.window_end, e.`TagName`, avg(e.`Value`) OVER (PARTITION BY e.`TagName`, d.window_start ORDER BY e.`EventTime` ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING) AS `Value` FROM window_buckets d INNER JOIN raw_events e ON d.window_start <= e.`EventTime` AND d.window_end > e.`EventTime`) ,project AS (SELECT window_start AS `EventTime`, `TagName`, `Value` FROM resample GROUP BY window_start, `TagName`, `Value` ) SELECT * FROM project ),date_array AS (SELECT explode(sequence(from_utc_timestamp(to_timestamp("2011-01-01T00:00:00+00:00"), "+0000"), from_utc_timestamp(to_timestamp("2011-01-02T23:59:59+00:00"), "+0000"), INTERVAL \'15 minute\')) AS `EventTime`, explode(array(\'mocked-TAGNAME\')) AS `TagName`) ,project AS (SELECT a.`EventTime`, a.`TagName`, first_value(b.`Value`, true) OVER (PARTITION BY a.`TagName` ORDER BY a.`EventTime` ROWS BETWEEN CURRENT ROW AND UNBOUNDED FOLLOWING) AS `Value` FROM date_array a LEFT OUTER JOIN resample b ON a.`EventTime` = b.`EventTime` AND a.`TagName` = b.`TagName`) ,pivot AS (SELECT * FROM (SELECT `EventTime`, `Value`, `TagName` AS `TagName` FROM project) PIVOT (FIRST(`Value`) FOR `TagName` IN (\'mocked-TAGNAME\' AS `mocked-TAGNAME`))) SELECT * FROM pivot ORDER BY `EventTime` ' -INTERPOLATE_MOCKED_QUERY_UOM = 'WITH resample AS (WITH raw_events AS (SELECT DISTINCT from_utc_timestamp(date_trunc("millisecond",`EventTime`), "+0000") AS `EventTime`, `TagName`, `Status`, `Value` FROM `mocked-buiness-unit`.`sensors`.`mocked-asset_mocked-data-security-level_events_mocked-data-type` WHERE `EventTime` BETWEEN to_timestamp("2011-01-01T00:00:00+00:00") AND to_timestamp("2011-01-02T23:59:59+00:00") AND `TagName` IN (\'mocked-TAGNAME\') ) ,date_array AS (SELECT explode(sequence(from_utc_timestamp(to_timestamp("2011-01-01T00:00:00+00:00"), "+0000"), from_utc_timestamp(to_timestamp("2011-01-02T23:59:59+00:00"), "+0000"), INTERVAL \'15 minute\')) AS timestamp_array) ,window_buckets AS (SELECT timestamp_array AS window_start, timestampadd(minute, 15, timestamp_array) AS window_end FROM date_array) ,resample AS (SELECT /*+ RANGE_JOIN(d, 900 ) */ d.window_start, d.window_end, e.`TagName`, avg(e.`Value`) OVER (PARTITION BY e.`TagName`, d.window_start ORDER BY e.`EventTime` ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING) AS `Value` FROM window_buckets d INNER JOIN raw_events e ON d.window_start <= e.`EventTime` AND d.window_end > e.`EventTime`) ,project AS (SELECT window_start AS `EventTime`, `TagName`, `Value` FROM resample GROUP BY window_start, `TagName`, `Value` ) SELECT p.`EventTime`, p.`TagName`, p.`Value`, m.`UoM` FROM project p LEFT OUTER JOIN `mocked-buiness-unit`.`sensors`.`mocked-asset_mocked-data-security-level_metadata` m ON p.`TagName` = m.`TagName` ),date_array AS (SELECT explode(sequence(from_utc_timestamp(to_timestamp("2011-01-01T00:00:00+00:00"), "+0000"), from_utc_timestamp(to_timestamp("2011-01-02T23:59:59+00:00"), "+0000"), INTERVAL \'15 minute\')) AS `EventTime`, explode(array(\'mocked-TAGNAME\')) AS `TagName`) ,project AS (SELECT a.`EventTime`, a.`TagName`, first_value(b.`Value`, true) OVER (PARTITION BY a.`TagName` ORDER BY a.`EventTime` ROWS BETWEEN CURRENT ROW AND UNBOUNDED FOLLOWING) AS `Value` FROM date_array a LEFT OUTER JOIN resample b ON a.`EventTime` = b.`EventTime` AND a.`TagName` = b.`TagName`) SELECT p.`EventTime`, p.`TagName`, p.`Value`, m.`UoM` FROM project p LEFT OUTER JOIN `mocked-buiness-unit`.`sensors`.`mocked-asset_mocked-data-security-level_metadata` m ON p.`TagName` = m.`TagName` ORDER BY `TagName`, `EventTime` ' +INTERPOLATE_MOCKED_QUERY = 'WITH resample AS (WITH raw_events AS (SELECT DISTINCT from_utc_timestamp(date_trunc("millisecond",`EventTime`), "+0000") AS `EventTime`, `TagName`, `Status`, `Value` FROM `mocked-buiness-unit`.`sensors`.`mocked-asset_mocked-data-security-level_events_mocked-data-type` WHERE `EventTime` BETWEEN to_timestamp("2011-01-01T00:00:00+00:00") AND timestampadd(minute, 15, to_timestamp("2011-01-02T23:59:59+00:00")) AND `TagName` IN (\'mocked-TAGNAME\') ) ,date_array AS (SELECT explode(sequence(from_utc_timestamp(to_timestamp("2011-01-01T00:00:00+00:00"), "+0000"), from_utc_timestamp(to_timestamp("2011-01-02T23:59:59+00:00"), "+0000"), INTERVAL \'15 minute\')) AS timestamp_array) ,window_buckets AS (SELECT timestamp_array AS window_start, timestampadd(minute, 15, timestamp_array) AS window_end FROM date_array) ,resample AS (SELECT /*+ RANGE_JOIN(d, 900 ) */ d.window_start, d.window_end, e.`TagName`, avg(e.`Value`) OVER (PARTITION BY e.`TagName`, d.window_start ORDER BY e.`EventTime` ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING) AS `Value` FROM window_buckets d INNER JOIN raw_events e ON d.window_start <= e.`EventTime` AND d.window_end > e.`EventTime`) ,project AS (SELECT window_start AS `EventTime`, `TagName`, `Value` FROM resample GROUP BY window_start, `TagName`, `Value` ) SELECT * FROM project ),date_array AS (SELECT explode(sequence(from_utc_timestamp(to_timestamp("2011-01-01T00:00:00+00:00"), "+0000"), from_utc_timestamp(to_timestamp("2011-01-02T23:59:59+00:00"), "+0000"), INTERVAL \'15 minute\')) AS `EventTime`, explode(array(\'mocked-TAGNAME\')) AS `TagName`) ,project AS (SELECT a.`EventTime`, a.`TagName`, last_value(b.`Value`, true) OVER (PARTITION BY a.`TagName` ORDER BY a.`EventTime` ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW) AS `Value` FROM date_array a LEFT OUTER JOIN resample b ON a.`EventTime` = b.`EventTime` AND a.`TagName` = b.`TagName`) SELECT * FROM project ORDER BY `TagName`, `EventTime` ' +INTERPOLATE_MOCKED_QUERY_BACKWARD_FILL = 'WITH resample AS (WITH raw_events AS (SELECT DISTINCT from_utc_timestamp(date_trunc("millisecond",`EventTime`), "+0000") AS `EventTime`, `TagName`, `Status`, `Value` FROM `mocked-buiness-unit`.`sensors`.`mocked-asset_mocked-data-security-level_events_mocked-data-type` WHERE `EventTime` BETWEEN to_timestamp("2011-01-01T00:00:00+00:00") AND timestampadd(minute, 15, to_timestamp("2011-01-02T23:59:59+00:00")) AND `TagName` IN (\'mocked-TAGNAME\') ) ,date_array AS (SELECT explode(sequence(from_utc_timestamp(to_timestamp("2011-01-01T00:00:00+00:00"), "+0000"), from_utc_timestamp(to_timestamp("2011-01-02T23:59:59+00:00"), "+0000"), INTERVAL \'15 minute\')) AS timestamp_array) ,window_buckets AS (SELECT timestamp_array AS window_start, timestampadd(minute, 15, timestamp_array) AS window_end FROM date_array) ,resample AS (SELECT /*+ RANGE_JOIN(d, 900 ) */ d.window_start, d.window_end, e.`TagName`, avg(e.`Value`) OVER (PARTITION BY e.`TagName`, d.window_start ORDER BY e.`EventTime` ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING) AS `Value` FROM window_buckets d INNER JOIN raw_events e ON d.window_start <= e.`EventTime` AND d.window_end > e.`EventTime`) ,project AS (SELECT window_start AS `EventTime`, `TagName`, `Value` FROM resample GROUP BY window_start, `TagName`, `Value` ) SELECT * FROM project ),date_array AS (SELECT explode(sequence(from_utc_timestamp(to_timestamp("2011-01-01T00:00:00+00:00"), "+0000"), from_utc_timestamp(to_timestamp("2011-01-02T23:59:59+00:00"), "+0000"), INTERVAL \'15 minute\')) AS `EventTime`, explode(array(\'mocked-TAGNAME\')) AS `TagName`) ,project AS (SELECT a.`EventTime`, a.`TagName`, first_value(b.`Value`, true) OVER (PARTITION BY a.`TagName` ORDER BY a.`EventTime` ROWS BETWEEN CURRENT ROW AND UNBOUNDED FOLLOWING) AS `Value` FROM date_array a LEFT OUTER JOIN resample b ON a.`EventTime` = b.`EventTime` AND a.`TagName` = b.`TagName`) SELECT * FROM project ORDER BY `TagName`, `EventTime` ' +INTERPOLATE_MOCKED_QUERY_CHECK_TAGS = 'WITH resample AS (WITH raw_events AS (SELECT DISTINCT from_utc_timestamp(date_trunc("millisecond",`EventTime`), "+0000") AS `EventTime`, `TagName`, `Status`, `Value` FROM `mocked-buiness-unit`.`sensors`.`mocked-asset_mocked-data-security-level_events_mocked-data-type` WHERE `EventTime` BETWEEN to_timestamp("2011-01-01T00:00:00+00:00") AND timestampadd(minute, 15, to_timestamp("2011-01-02T23:59:59+00:00")) AND UPPER(`TagName`) IN (\'MOCKED-TAGNAME\') ) ,date_array AS (SELECT explode(sequence(from_utc_timestamp(to_timestamp("2011-01-01T00:00:00+00:00"), "+0000"), from_utc_timestamp(to_timestamp("2011-01-02T23:59:59+00:00"), "+0000"), INTERVAL \'15 minute\')) AS timestamp_array) ,window_buckets AS (SELECT timestamp_array AS window_start, timestampadd(minute, 15, timestamp_array) AS window_end FROM date_array) ,resample AS (SELECT /*+ RANGE_JOIN(d, 900 ) */ d.window_start, d.window_end, e.`TagName`, avg(e.`Value`) OVER (PARTITION BY e.`TagName`, d.window_start ORDER BY e.`EventTime` ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING) AS `Value` FROM window_buckets d INNER JOIN raw_events e ON d.window_start <= e.`EventTime` AND d.window_end > e.`EventTime`) ,project AS (SELECT window_start AS `EventTime`, `TagName`, `Value` FROM resample GROUP BY window_start, `TagName`, `Value` ) SELECT * FROM project ),date_array AS (SELECT DISTINCT explode(sequence(from_utc_timestamp(to_timestamp("2011-01-01T00:00:00+00:00"), "+0000"), from_utc_timestamp(to_timestamp("2011-01-02T23:59:59+00:00"), "+0000"), INTERVAL \'15 minute\')) AS `EventTime`, explode(array(`TagName`)) AS `TagName` FROM resample) ,project AS (SELECT a.`EventTime`, a.`TagName`, first_value(b.`Value`, true) OVER (PARTITION BY a.`TagName` ORDER BY a.`EventTime` ROWS BETWEEN CURRENT ROW AND UNBOUNDED FOLLOWING) AS `Value` FROM date_array a LEFT OUTER JOIN resample b ON a.`EventTime` = b.`EventTime` AND a.`TagName` = b.`TagName`) SELECT * FROM project ORDER BY `TagName`, `EventTime` ' +INTERPOLATE_MOCKED_QUERY_PIVOT = 'WITH resample AS (WITH raw_events AS (SELECT DISTINCT from_utc_timestamp(date_trunc("millisecond",`EventTime`), "+0000") AS `EventTime`, `TagName`, `Status`, `Value` FROM `mocked-buiness-unit`.`sensors`.`mocked-asset_mocked-data-security-level_events_mocked-data-type` WHERE `EventTime` BETWEEN to_timestamp("2011-01-01T00:00:00+00:00") AND timestampadd(minute, 15, to_timestamp("2011-01-02T23:59:59+00:00")) AND `TagName` IN (\'mocked-TAGNAME\') ) ,date_array AS (SELECT explode(sequence(from_utc_timestamp(to_timestamp("2011-01-01T00:00:00+00:00"), "+0000"), from_utc_timestamp(to_timestamp("2011-01-02T23:59:59+00:00"), "+0000"), INTERVAL \'15 minute\')) AS timestamp_array) ,window_buckets AS (SELECT timestamp_array AS window_start, timestampadd(minute, 15, timestamp_array) AS window_end FROM date_array) ,resample AS (SELECT /*+ RANGE_JOIN(d, 900 ) */ d.window_start, d.window_end, e.`TagName`, avg(e.`Value`) OVER (PARTITION BY e.`TagName`, d.window_start ORDER BY e.`EventTime` ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING) AS `Value` FROM window_buckets d INNER JOIN raw_events e ON d.window_start <= e.`EventTime` AND d.window_end > e.`EventTime`) ,project AS (SELECT window_start AS `EventTime`, `TagName`, `Value` FROM resample GROUP BY window_start, `TagName`, `Value` ) SELECT * FROM project ),date_array AS (SELECT explode(sequence(from_utc_timestamp(to_timestamp("2011-01-01T00:00:00+00:00"), "+0000"), from_utc_timestamp(to_timestamp("2011-01-02T23:59:59+00:00"), "+0000"), INTERVAL \'15 minute\')) AS `EventTime`, explode(array(\'mocked-TAGNAME\')) AS `TagName`) ,project AS (SELECT a.`EventTime`, a.`TagName`, first_value(b.`Value`, true) OVER (PARTITION BY a.`TagName` ORDER BY a.`EventTime` ROWS BETWEEN CURRENT ROW AND UNBOUNDED FOLLOWING) AS `Value` FROM date_array a LEFT OUTER JOIN resample b ON a.`EventTime` = b.`EventTime` AND a.`TagName` = b.`TagName`) ,pivot AS (SELECT * FROM (SELECT `EventTime`, `Value`, `TagName` AS `TagName` FROM project) PIVOT (FIRST(`Value`) FOR `TagName` IN (\'mocked-TAGNAME\' AS `mocked-TAGNAME`))) SELECT * FROM pivot ORDER BY `EventTime` ' +INTERPOLATE_MOCKED_QUERY_UOM = 'WITH resample AS (WITH raw_events AS (SELECT DISTINCT from_utc_timestamp(date_trunc("millisecond",`EventTime`), "+0000") AS `EventTime`, `TagName`, `Status`, `Value` FROM `mocked-buiness-unit`.`sensors`.`mocked-asset_mocked-data-security-level_events_mocked-data-type` WHERE `EventTime` BETWEEN to_timestamp("2011-01-01T00:00:00+00:00") AND timestampadd(minute, 15, to_timestamp("2011-01-02T23:59:59+00:00")) AND `TagName` IN (\'mocked-TAGNAME\') ) ,date_array AS (SELECT explode(sequence(from_utc_timestamp(to_timestamp("2011-01-01T00:00:00+00:00"), "+0000"), from_utc_timestamp(to_timestamp("2011-01-02T23:59:59+00:00"), "+0000"), INTERVAL \'15 minute\')) AS timestamp_array) ,window_buckets AS (SELECT timestamp_array AS window_start, timestampadd(minute, 15, timestamp_array) AS window_end FROM date_array) ,resample AS (SELECT /*+ RANGE_JOIN(d, 900 ) */ d.window_start, d.window_end, e.`TagName`, avg(e.`Value`) OVER (PARTITION BY e.`TagName`, d.window_start ORDER BY e.`EventTime` ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING) AS `Value` FROM window_buckets d INNER JOIN raw_events e ON d.window_start <= e.`EventTime` AND d.window_end > e.`EventTime`) ,project AS (SELECT window_start AS `EventTime`, `TagName`, `Value` FROM resample GROUP BY window_start, `TagName`, `Value` ) SELECT p.`EventTime`, p.`TagName`, p.`Value`, m.`UoM` FROM project p LEFT OUTER JOIN `mocked-buiness-unit`.`sensors`.`mocked-asset_mocked-data-security-level_metadata` m ON p.`TagName` = m.`TagName` ),date_array AS (SELECT explode(sequence(from_utc_timestamp(to_timestamp("2011-01-01T00:00:00+00:00"), "+0000"), from_utc_timestamp(to_timestamp("2011-01-02T23:59:59+00:00"), "+0000"), INTERVAL \'15 minute\')) AS `EventTime`, explode(array(\'mocked-TAGNAME\')) AS `TagName`) ,project AS (SELECT a.`EventTime`, a.`TagName`, first_value(b.`Value`, true) OVER (PARTITION BY a.`TagName` ORDER BY a.`EventTime` ROWS BETWEEN CURRENT ROW AND UNBOUNDED FOLLOWING) AS `Value` FROM date_array a LEFT OUTER JOIN resample b ON a.`EventTime` = b.`EventTime` AND a.`TagName` = b.`TagName`) SELECT p.`EventTime`, p.`TagName`, p.`Value`, m.`UoM` FROM project p LEFT OUTER JOIN `mocked-buiness-unit`.`sensors`.`mocked-asset_mocked-data-security-level_metadata` m ON p.`TagName` = m.`TagName` ORDER BY `TagName`, `EventTime` ' # Time Weighted Average TWA_MOCKED_QUERY = 'WITH raw_events AS (SELECT DISTINCT `TagName`, from_utc_timestamp(date_trunc("millisecond",`EventTime`), "+0000") AS `EventTime`, `Status`, `Value` FROM `mocked-buiness-unit`.`sensors`.`mocked-asset_mocked-data-security-level_events_mocked-data-type` WHERE to_date(`EventTime`) BETWEEN date_sub(to_date(to_timestamp("2011-01-01T00:00:00+00:00")), 1) AND date_add(to_date(to_timestamp("2011-01-02T23:59:59+00:00")), 1) AND `TagName` IN (\'mocked-TAGNAME\') ) ,date_array AS (SELECT explode(sequence(from_utc_timestamp(to_timestamp("2011-01-01T00:00:00+00:00"), "+0000"), from_utc_timestamp(to_timestamp("2011-01-02T23:59:59+00:00"), "+0000"), INTERVAL \'15 minute\')) AS `EventTime`, explode(array(\'mocked-TAGNAME\')) AS `TagName`) ,boundary_events AS (SELECT coalesce(a.`TagName`, b.`TagName`) AS `TagName`, coalesce(a.`EventTime`, b.`EventTime`) AS `EventTime`, b.`Status`, b.`Value` FROM date_array a FULL OUTER JOIN raw_events b ON a.`EventTime` = b.`EventTime` AND a.`TagName` = b.`TagName`) ,window_buckets AS (SELECT `EventTime` AS window_start, LEAD(`EventTime`) OVER (ORDER BY `EventTime`) AS window_end FROM (SELECT distinct `EventTime` FROM date_array) ) ,window_events AS (SELECT /*+ RANGE_JOIN(b, 900 ) */ b.`TagName`, b.`EventTime`, a.window_start AS `WindowEventTime`, b.`Status`, b.`Value` FROM boundary_events b LEFT OUTER JOIN window_buckets a ON a.window_start <= b.`EventTime` AND a.window_end > b.`EventTime`) ,fill_status AS (SELECT *, last_value(`Status`, true) OVER (PARTITION BY `TagName` ORDER BY `EventTime` ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW) AS `Fill_Status`, CASE WHEN `Fill_Status` <> "Bad" THEN `Value` ELSE null END AS `Good_Value` FROM window_events) ,fill_value AS (SELECT *, last_value(`Good_Value`, true) OVER (PARTITION BY `TagName` ORDER BY `EventTime` ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW) AS `Fill_Value` FROM fill_status) ,fill_step AS (SELECT *, false AS Step FROM fill_value) ,interpolate AS (SELECT *, CASE WHEN `Step` = false AND `Status` IS NULL AND `Value` IS NULL THEN lag(`EventTime`) OVER ( PARTITION BY `TagName` ORDER BY `EventTime` ) ELSE NULL END AS `Previous_EventTime`, CASE WHEN `Step` = false AND `Status` IS NULL AND `Value` IS NULL THEN lag(`Fill_Value`) OVER ( PARTITION BY `TagName` ORDER BY `EventTime` ) ELSE NULL END AS `Previous_Fill_Value`, lead(`EventTime`) OVER ( PARTITION BY `TagName` ORDER BY `EventTime` ) AS `Next_EventTime`, CASE WHEN `Step` = false AND `Status` IS NULL AND `Value` IS NULL THEN lead(`Fill_Value`) OVER ( PARTITION BY `TagName` ORDER BY `EventTime` ) ELSE NULL END AS `Next_Fill_Value`, CASE WHEN `Step` = false AND `Status` IS NULL AND `Value` IS NULL THEN `Previous_Fill_Value` + ( (`Next_Fill_Value` - `Previous_Fill_Value`) * ( ( unix_timestamp(`EventTime`) - unix_timestamp(`Previous_EventTime`) ) / ( unix_timestamp(`Next_EventTime`) - unix_timestamp(`Previous_EventTime`) ) ) ) ELSE NULL END AS `Interpolated_Value`, coalesce(`Interpolated_Value`, `Fill_Value`) as `Event_Value` FROM fill_step ),twa_calculations AS (SELECT `TagName`, `EventTime`, `WindowEventTime`, `Step`, `Status`, `Value`, `Previous_EventTime`, `Previous_Fill_Value`, `Next_EventTime`, `Next_Fill_Value`, `Interpolated_Value`, `Fill_Status`, `Fill_Value`, `Event_Value`, lead(`Fill_Status`) OVER (PARTITION BY `TagName` ORDER BY `EventTime`) AS `Next_Status` , CASE WHEN `Next_Status` <> "Bad" OR (`Fill_Status` <> "Bad" AND `Next_Status` = "Bad") THEN lead(`Event_Value`) OVER (PARTITION BY `TagName` ORDER BY `EventTime`) ELSE `Value` END AS `Next_Value_For_Status` , CASE WHEN `Fill_Status` <> "Bad" THEN `Next_Value_For_Status` ELSE 0 END AS `Next_Value` , CASE WHEN `Fill_Status` <> "Bad" AND `Next_Status` <> "Bad" THEN ((cast(`Next_EventTime` AS double) - cast(`EventTime` AS double)) / 60) WHEN `Fill_Status` <> "Bad" AND `Next_Status` = "Bad" THEN ((cast(`Next_EventTime` AS integer) - cast(`EventTime` AS double)) / 60) ELSE 0 END AS good_minutes , CASE WHEN Step == false THEN ((`Event_Value` + `Next_Value`) * 0.5) * good_minutes ELSE (`Event_Value` * good_minutes) END AS twa_value FROM interpolate) ,twa AS (SELECT `TagName`, `WindowEventTime` AS `EventTime`, sum(twa_value) / sum(good_minutes) AS `Value` from twa_calculations GROUP BY `TagName`, `WindowEventTime`) ,project AS (SELECT * FROM twa WHERE `EventTime` BETWEEN to_timestamp("2011-01-01T00:00:00") AND to_timestamp("2011-01-02T23:59:59")) SELECT * FROM project ORDER BY `TagName`, `EventTime` '