diff --git a/stormevents/nhc/track.py b/stormevents/nhc/track.py index 455facf..cd71f2b 100644 --- a/stormevents/nhc/track.py +++ b/stormevents/nhc/track.py @@ -3,6 +3,7 @@ import logging import pathlib import re +import warnings from datetime import datetime from datetime import timedelta from functools import partial @@ -53,7 +54,7 @@ def __init__( :param start_date: start date of track :param end_date: end date of track :param file_deck: ATCF file deck; one of `a`, `b`, `f` - :param advisories: ATCF advisory types; one of `BEST`, `OFCL`, `OFCP`, `HMON`, `CARQ`, `HWRF` + :param advisories: ATCF advisory type; one of ``BEST``, ``OFCL``, ``OFCP``, ``HMON``, ``CARQ``, ``HWRF`` >>> VortexTrack('AL112017') VortexTrack('AL112017', Timestamp('2017-08-30 00:00:00'), Timestamp('2017-09-13 12:00:00'), , , [], None) @@ -115,7 +116,7 @@ def from_storm_name( start_date: datetime = None, end_date: datetime = None, file_deck: ATCF_FileDeck = None, - advisories: [ATCF_Advisory] = None, + advisories: List[ATCF_Advisory] = None, ) -> "VortexTrack": """ :param name: storm name @@ -123,7 +124,7 @@ def from_storm_name( :param start_date: start date of track :param end_date: end date of track :param file_deck: ATCF file deck; one of ``a``, ``b``, ``f`` - :param advisories: ATCF advisory type; one of ``BEST``, ``OFCL``, ``OFCP``, ``HMON``, ``CARQ``, ``HWRF`` + :param advisories: list of ATCF advisory types; valid choices are: ``BEST``, ``OFCL``, ``OFCP``, ``HMON``, ``CARQ``, `HWRF`` >>> VortexTrack.from_storm_name('irma', 2017) VortexTrack('AL112017', Timestamp('2017-08-30 00:00:00'), Timestamp('2017-09-13 12:00:00'), , [], None) @@ -146,11 +147,15 @@ def from_file( path: PathLike, start_date: datetime = None, end_date: datetime = None, + file_deck: ATCF_FileDeck = None, + advisories: List[ATCF_Advisory] = None, ) -> "VortexTrack": """ :param path: file path to ATCF data :param start_date: start date of track :param end_date: end date of track + :param file_deck: ATCF file deck; one of ``a``, ``b``, ``f`` + :param advisories: list of ATCF advisory types; valid choices are: ``BEST``, ``OFCL``, ``OFCP``, ``HMON``, ``CARQ``, `HWRF`` >>> VortexTrack.from_file('tests/data/input/test_vortex_track_from_file/AL062018.dat') VortexTrack('AL062018', Timestamp('2018-08-30 06:00:00'), Timestamp('2018-09-18 12:00:00'), None, , ['BEST', 'OFCL', 'OFCP', 'HMON', 'CARQ', 'HWRF'], PosixPath('/home/zrb/Projects/StormEvents/tests/data/input/test_vortex_track_from_file/AL062018.dat')) @@ -158,12 +163,23 @@ def from_file( VortexTrack('AL112017', Timestamp('2017-09-05 00:00:00'), Timestamp('2017-09-12 00:00:00'), None, , ['BEST', 'OFCL', 'OFCP', 'HMON', 'CARQ', 'HWRF'], PosixPath('/home/zrb/Projects/StormEvents/tests/data/input/test_vortex_track_from_file/irma2017_fort.22')) """ + if file_deck is None and advisories is None: + warnings.warn( + "It is recommended to specify the file_deck and/or advisories when reading from file" + ) + try: path = pathlib.Path(path) except: pass - return cls(storm=path, start_date=start_date, end_date=end_date) + return cls( + storm=path, + start_date=start_date, + end_date=end_date, + file_deck=file_deck, + advisories=advisories, + ) @property def name(self) -> str: diff --git a/tests/test_nhc.py b/tests/test_nhc.py index f72ed73..cc57d97 100644 --- a/tests/test_nhc.py +++ b/tests/test_nhc.py @@ -257,7 +257,7 @@ def test_vortex_track_no_internet(): with pytest.raises((ConnectionError, SocketBlockedError)): VortexTrack(storm="al062018", start_date="20180911", end_date=None) - track_1 = VortexTrack.from_file(input_directory / "fort.22") + track_1 = VortexTrack.from_file(input_directory / "fort.22", file_deck="b") track_1.to_file(output_directory / "vortex_1.22", overwrite=True) track_2 = VortexTrack.from_file(track_1.filename) @@ -266,10 +266,8 @@ def test_vortex_track_no_internet(): track_3 = copy(track_1) track_3.to_file(output_directory / "vortex_3.22", overwrite=True) - assert track_1 == track_2 - assert ( - track_1 != track_3 - ) # these are not the same because of the velocity recalculation + assert track_1 != track_2 # because file_deck is not specified for track_2 + assert track_1 == track_3 check_reference_directory(output_directory, reference_directory)