Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Chore/idsse 602/name changes #56

Merged
merged 3 commits into from
Mar 1, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view

Large diffs are not rendered by default.

Large diffs are not rendered by default.

Large diffs are not rendered by default.

Original file line number Diff line number Diff line change
Expand Up @@ -43,7 +43,7 @@
"name": "A",
"duration": 0,
"arealPercentage": 0,
"region": "CO",
"region": "CONUS",
"product": { "fcst": ["NBM"] },
"field": "TEMP",
"units": "Fahrenheit",
Expand All @@ -55,7 +55,7 @@
"name": "B",
"duration": 0,
"arealPercentage": 0,
"region": "CO",
"region": "CONUS",
"product": { "fcst": ["NBM"] },
"field": "1 HR RAINFALL",
"units": "INCHES",
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -94,7 +94,7 @@
"name": "A",
"duration": 0,
"arealPercentage": 0,
"region": "CO",
"region": "CONUS",
"product": { "fcst": ["NBM"] },
"field": "1 HR SNOWFALL",
"units": "INCHES",
Expand Down

Large diffs are not rendered by default.

30 changes: 15 additions & 15 deletions python/idsse_common/idsse/common/aws_utils.py
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@
import logging
import fnmatch
import os
from datetime import datetime, timedelta
from datetime import datetime, timedelta, UTC
from typing import Sequence, Set, Tuple, Optional

from .path_builder import PathBuilder
Expand Down Expand Up @@ -118,7 +118,7 @@ def check_for(self, issue: datetime, valid: datetime) -> Optional[Tuple[datetime
def get_issues(self,
num_issues: int = 1,
issue_start: Optional[datetime] = None,
issue_end: datetime = datetime.utcnow(),
issue_end: datetime = datetime.now(UTC),
time_delta: timedelta = timedelta(hours=1)
) -> Sequence[datetime]:
"""Determine the available issue date/times
Expand Down Expand Up @@ -182,22 +182,22 @@ def get_valids(self,
return [valids_and_filenames] if valids_and_filenames is not None else []

dir_path = self.path_builder.build_dir(issue=issue)
valid_file = [(self.path_builder.get_valid(file_path), file_path)
for file_path in self.aws_ls(dir_path)
if file_path.endswith(self.path_builder.file_ext)]
valid_and_file = [(self.path_builder.get_valid(file_path), file_path)
for file_path in self.aws_ls(dir_path)
if file_path.endswith(self.path_builder.file_ext)]

if valid_start:
if valid_end:
valid_file = [(valid, filename)
for valid, filename in valid_file
if valid_start <= valid <= valid_end]
valid_and_file = [(valid, filename)
for valid, filename in valid_and_file
if valid_start <= valid <= valid_end]
else:
valid_file = [(valid, filename)
for valid, filename in valid_file
if valid >= valid_start]
valid_and_file = [(valid, filename)
for valid, filename in valid_and_file
if valid >= valid_start]
elif valid_end:
valid_file = [(valid, filename)
for valid, filename in valid_file
if valid <= valid_end]
valid_and_file = [(valid, filename)
for valid, filename in valid_and_file
if valid <= valid_end]

return valid_file
return valid_and_file
8 changes: 5 additions & 3 deletions python/idsse_common/idsse/common/path_builder.py
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,7 @@

import os
import re
from datetime import datetime, timedelta
from datetime import datetime, timedelta, UTC
from typing import Dict, Self, Union

from .utils import TimeDelta
Expand Down Expand Up @@ -258,7 +258,8 @@ def get_issue_from_time_args(parsed_args: Dict,
parsed_args.get('issue.hour', 0),
parsed_args.get('issue.minute', 0),
parsed_args.get('issue.second', 0),
parsed_args.get('issue.microsecond', 0))
parsed_args.get('issue.microsecond', 0),
tzinfo=UTC)

if lead is None and 'lead.hour' in parsed_args:
lead = PathBuilder.get_lead_from_time_args(parsed_args)
Expand Down Expand Up @@ -295,7 +296,8 @@ def get_valid_from_time_args(parsed_args: dict,
parsed_args.get('valid.hour', 0),
parsed_args.get('valid.minute', 0),
parsed_args.get('valid.second', 0),
parsed_args.get('valid.microsecond', 0))
parsed_args.get('valid.microsecond', 0),
tzinfo=UTC)

if lead is None and 'lead.hour' in parsed_args:
lead = PathBuilder.get_lead_from_time_args(parsed_args)
Expand Down
2 changes: 1 addition & 1 deletion python/idsse_common/idsse/common/schema/region.json
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,6 @@
"Region": {
"description": "Identifier for a geographic region",
"type": "string",
"enum": ["CO", "AK", "PR", "HI"]
"enum": ["CONUS", "ALASKA", "PUERTO_RICO", "HAWAII", "GUAM"]
}
}
Binary file modified python/idsse_common/test/resources/gridstore55657865.nc
Binary file not shown.
2 changes: 1 addition & 1 deletion python/idsse_common/test/sci/test_netcdf_io.py
Original file line number Diff line number Diff line change
Expand Up @@ -28,7 +28,7 @@
'valid_dt': '2022-11-11 17:00:00+00:00',
'issue_dt': '2022-11-11 14:00:00+00:00',
'task': 'data_task',
'region': 'CO',
'region': 'CONUS',
'units': 'Fahrenheit',
'proj_name': 'NBM',
'proj_spec': '+proj=lcc +lat_0=25.0 +lon_0=-95.0 +lat_1=25.0 +a=6371200',
Expand Down
10 changes: 5 additions & 5 deletions python/idsse_common/test/test_aws_utils.py
Original file line number Diff line number Diff line change
Expand Up @@ -13,16 +13,16 @@
# pylint: disable=missing-function-docstring,redefined-outer-name,pointless-statement
# pylint: disable=invalid-name,unused-argument

from datetime import datetime, timedelta
from datetime import datetime, timedelta, UTC
from typing import List
from unittest.mock import Mock

from pytest import fixture, MonkeyPatch

from idsse.common.aws_utils import AwsUtils

EXAMPLE_ISSUE = datetime(1970, 10, 3, 12)
EXAMPLE_VALID = datetime(1970, 10, 3, 14)
EXAMPLE_ISSUE = datetime(1970, 10, 3, 12, tzinfo=UTC)
EXAMPLE_VALID = datetime(1970, 10, 3, 14, tzinfo=UTC)

EXAMPLE_DIR = 's3://noaa-nbm-grib2-pds/blend.19701003/12/core/'
EXAMPLE_FILES = ['blend.t12z.core.f002.co.grib2',
Expand Down Expand Up @@ -146,7 +146,7 @@ def test_check_for_succeeds(aws_utils: AwsUtils, mock_exec_cmd):


def test_check_for_does_not_find_valid(aws_utils: AwsUtils, mock_exec_cmd):
unexpected_valid = datetime(1970, 10, 3, 23)
unexpected_valid = datetime(1970, 10, 3, 23, tzinfo=UTC)
result = aws_utils.check_for(EXAMPLE_ISSUE, unexpected_valid)
assert result is None

Expand All @@ -172,7 +172,7 @@ def test_get_issues_latest_issue_from_today_if_no_args_passed(aws_utils: AwsUtil
# with current mocks returned issue (latest issue) will always be "now" with
# truncated minute, second, and microsecond
assert len(result) == 1
assert result[0] == datetime.utcnow().replace(minute=0, second=0, microsecond=0)
assert result[0] == datetime.now(UTC).replace(minute=0, second=0, microsecond=0)


def test_get_valids_all(aws_utils: AwsUtils, mock_exec_cmd):
Expand Down
6 changes: 3 additions & 3 deletions python/idsse_common/test/test_path_builder.py
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@
# pylint: disable=missing-function-docstring,invalid-name,redefined-outer-name,protected-access
# cspell:words pathbuilder

from datetime import datetime, timedelta
from datetime import datetime, timedelta, UTC
import pytest

from idsse.common.utils import TimeDelta
Expand Down Expand Up @@ -70,8 +70,8 @@ def test_path_fmt(local_path_builder: PathBuilder):


# methods
EXAMPLE_ISSUE = datetime(1970, 10, 3, 12) # a.k.a. issued at
EXAMPLE_VALID = datetime(1970, 10, 3, 14) # a.k.a. valid until
EXAMPLE_ISSUE = datetime(1970, 10, 3, 12, tzinfo=UTC) # a.k.a. issued at
EXAMPLE_VALID = datetime(1970, 10, 3, 14, tzinfo=UTC) # a.k.a. valid until
EXAMPLE_LEAD = TimeDelta(EXAMPLE_VALID - EXAMPLE_ISSUE) # a.k.a. duration of time that issue lasts

EXAMPLE_FULL_PATH = '~/blend.19701003/12/core/blend.t12z.core.f002.co.grib2.idx'
Expand Down
6 changes: 3 additions & 3 deletions python/idsse_common/test/test_validate_criteria_schema.py
Original file line number Diff line number Diff line change
Expand Up @@ -72,7 +72,7 @@ def simple_criteria_message() -> dict:
},
"field": "TEMPERATURE",
"units": "DEG F",
"region": "CO",
"region": "CONUS",
"relational": "GREATER THAN",
"thresh": 30,
"mapping": {
Expand Down Expand Up @@ -141,7 +141,7 @@ def criteria_message() -> dict:
},
"field": "DEW POINT",
"units": "Fahrenheit",
"region": "CO",
"region": "CONUS",
"relational": "LESS THAN",
"thresh": 60,
"mapping": {
Expand All @@ -161,7 +161,7 @@ def criteria_message() -> dict:
},
"field": "RELATIVE HUMIDITY",
"units": "PERCENT",
"region": "CO",
"region": "CONUS",
"relational": "GREATER THAN",
"thresh": 30,
"mapping": {
Expand Down
26 changes: 13 additions & 13 deletions python/idsse_common/test/test_validate_das_schema.py
Original file line number Diff line number Diff line change
Expand Up @@ -53,7 +53,7 @@ def das_data_message() -> dict:
'sourceObj': {
'product': 'NBM',
'field': 'TEMP',
'region': 'CO',
'region': 'CONUS',
'valid': '2022-11-12T00:00:00.000Z',
'issue': '2022-11-11T14:00:00.000Z'}}},
'label': 'NBM:TEMP:Fahrenheit'},
Expand All @@ -76,7 +76,7 @@ def das_data_message() -> dict:
'sourceObj': {
'product': 'NBM',
'field': 'WINDSPEED',
'region': 'CO',
'region': 'CONUS',
'valid': '2022-11-12T00:00:00.000Z',
'issue': '2022-11-11T14:00:00.000Z'}}},
'label': 'NBM:WINDSPEED:MilesPerHour'},
Expand All @@ -92,7 +92,7 @@ def das_data_message() -> dict:
def test_validate_das_issue_request(available_data_validator: Validator):
message = {'sourceType': 'issue',
'sourceObj': {'product': 'NBM.AWS.GRIB',
'region': 'PR',
'region': 'PUERTO_RICO',
'field': 'TEMP',
}}
try:
Expand All @@ -115,7 +115,7 @@ def test_validate_das_bad_issue_request(available_data_validator: Validator):
def test_validate_das_valid_request(available_data_validator: Validator):
message = {'sourceType': 'valid',
'sourceObj': {'product': 'NBM.AWS.GRIB',
'region': 'PR',
'region': 'PUERTO_RICO',
'field': 'TEMP',
'issue': '2022-01-02T12:00:00.000Z'
}}
Expand All @@ -129,7 +129,7 @@ def test_validate_das_bad_valid_request(available_data_validator: Validator):
# message is missing 'field'
message = {'sourceType': 'valid',
'sourceObj': {'product': 'NBM.AWS.GRIB',
'region': 'PR',
'region': 'PUERTO_RICO',
'issue': '2022-01-02T12:00:00.000Z'
}}
with raises(ValidationError):
Expand All @@ -139,7 +139,7 @@ def test_validate_das_bad_valid_request(available_data_validator: Validator):
def test_validate_das_lead_request(available_data_validator: Validator):
message = {'sourceType': 'lead',
'sourceObj': {'product': 'NBM.AWS.GRIB',
'region': 'PR',
'region': 'PUERTO_RICO',
'field': 'TEMP',
'issue': '2022-01-02T12:00:00.000Z'
}}
Expand All @@ -152,7 +152,7 @@ def test_validate_das_lead_request(available_data_validator: Validator):
def test_validate_das_bad_lead_request(available_data_validator: Validator):
# message is missing 'product'
message = {'sourceType': 'valid',
'sourceObj': {'region': 'PR',
'sourceObj': {'region': 'PUERTO_RICO',
'field': 'TEMP',
'issue': '2022-01-02T12:00:00.000Z'
}}
Expand All @@ -163,7 +163,7 @@ def test_validate_das_bad_lead_request(available_data_validator: Validator):
def test_validate_das_field_request(available_data_validator: Validator):
message = {'sourceType': 'field',
'sourceObj': {'product': 'NBM.AWS.GRIB',
'region': 'PR',
'region': 'PUERTO_RICO',
'field': 'TEMP',
'issue': '2022-01-02T12:00:00.000Z',
'valid': '2022-01-02T15:00:00.000Z'
Expand All @@ -178,7 +178,7 @@ def test_validate_das_bad_field_request(available_data_validator: Validator):
# message is missing 'issue'
message = {'sourceType': 'field',
'sourceObj': {'product': 'NBM.AWS.GRIB',
'region': 'PR',
'region': 'PUERTO_RICO',
'field': 'TEMP',
'valid': '2022-01-02T15:00:00.000Z'
}}
Expand All @@ -191,7 +191,7 @@ def test_validate_das_data_request(data_request_validator: Validator):
'sourceType': 'data',
'sourceObj': {
'product': 'NBM',
'region': 'CO',
'region': 'CONUS',
'field': 'WINDSPEED',
'valid': '2022-11-12T00:00:00.000Z',
'issue': '2022-11-11T14:00:00.000Z'
Expand All @@ -208,7 +208,7 @@ def test_validate_das_bad_data_request(data_request_validator: Validator):
message = {
'sourceType': 'data',
'sourceObj': {
'region': 'CO',
'region': 'CONUS',
'field': 'WINDSPEED',
'valid': '2022-11-12T00:00:00.000Z',
'issue': '2022-11-11T14:00:00.000Z'
Expand All @@ -228,7 +228,7 @@ def test_validate_das_opr_with_single_source_request(data_request_validator: Val
'sourceType': 'data',
'sourceObj': {
'product': 'NBM.AWS.GRIB',
'region': 'CO',
'region': 'CONUS',
'issue': '2022-01-02T12:00:00.000Z',
'valid': '2022-01-02T15:00:00.000Z',
'field': 'TEMP'
Expand All @@ -252,7 +252,7 @@ def test_validate_das_bad_opr_with_single_source_request(data_request_validator:
'sourceType': 'field',
'sourceObj': {
'product': 'NBM.AWS.GRIB',
'region': 'CO',
'region': 'CONUS',
'issue': '2022-01-02T12:00:00.000Z',
'valid': '2022-01-02T15:00:00.000Z',
'field': 'TEMP'
Expand Down
6 changes: 3 additions & 3 deletions python/idsse_common/test/test_validate_das_web_schema.py
Original file line number Diff line number Diff line change
Expand Up @@ -44,7 +44,7 @@ def das_web_request_message() -> dict:
'product': 'NBM',
'field': 'WINDSPEED',
'units': 'MilesPerHour',
'region': 'CO',
'region': 'CONUS',
'relational': 'GREATER THAN',
'thresh': 5,
'mapping': {
Expand All @@ -60,7 +60,7 @@ def das_web_request_message() -> dict:
'product': 'NBM',
'field': 'TEMPERATURE',
'units': 'Fahrenheit',
'region': 'CO',
'region': 'CONUS',
'relational': 'LESS THAN OR EQUAL',
'thresh': 30,
'mapping': {
Expand Down Expand Up @@ -105,7 +105,7 @@ def das_web_response_message() -> dict:
'product': 'NBM',
'field': 'WINDSPEED',
'units': 'MilesPerHour',
'region': 'CO',
'region': 'CONUS',
'relational': 'GREATER THAN',
'thresh': 5,
'mapping': {
Expand Down
4 changes: 2 additions & 2 deletions python/idsse_common/test/test_validate_event_port_schema.py
Original file line number Diff line number Diff line change
Expand Up @@ -65,7 +65,7 @@ def simple_event_port_message() -> dict:
"name": "A",
"duration": 0,
"arealPercentage": 0,
"region": "CO",
"region": "CONUS",
"product": {
"fcst": [
"NBM"
Expand Down Expand Up @@ -102,7 +102,7 @@ def simple_event_port_message() -> dict:
],
"dataDescript": [
{
"partName": "B",
"partName": "A",
"dataName": "Temperature: 2m",
"dataLocation": "arn:aws:s3:::noaa-nbm-grib2-pds:",
"issueDt": "2022-11-11T14:00:00.000Z"
Expand Down
Loading
Loading