示例#1
0
    def download_datafile(self, start_date, end_date):
        """
        Download a datafile container this spotters data from start_date to end_date

        :param start_date: Start date string
        :param end_date: End date String
        """
        from pysofar.tools import parse_date
        self._session.grab_datafile(self.id, parse_date(start_date), parse_date(end_date))
示例#2
0
    def __init__(self,
                 spotter_id: str,
                 limit: int = 20,
                 start_date=_MISSING,
                 end_date=_MISSING,
                 params=None):
        """
        Query the Sofar api for spotter data

        :param spotter_id: String id of the spotter to query for
        :param limit: The limit of data to query. Defaults to 20, max of 100 for frequency data, max of 500 otherwise
        :param start_date: ISO8601 formatted string for start date, otherwise if not included, defaults to
                            a date arbitrarily far back to include all spotter data
        :param end_date: ISO8601 formatted string for end date, otherwise if not included defaults to present
        :param params: Defaults to None. Parameters to overwrite/add to the default query parameter set
        """
        super().__init__()
        self.spotter_id = spotter_id
        self._limit = limit

        if start_date is self._MISSING or start_date is None:
            self.start_date = None
        else:
            self.start_date = parse_date(start_date)

        if end_date is self._MISSING or end_date is None:
            self.end_date = None
        else:
            self.end_date = parse_date(end_date)

        self._params = {
            'spotterId': spotter_id,
            'limit': limit,
            'includeWaves': 'true',
            'includeWindData': 'false',
            'includeTrack': 'false',
            'includeFrequencyData': 'false',
            'includeDirectionalMoments': 'false',
            'includeSurfaceTempData': 'false',
            'includeNonObs': 'false'
        }
        if params is not None:
            self._params.update(params)

        if self.start_date is not None:
            self._params.update({'startDate': self.start_date})

        if self.end_date is not None:
            self._params.update({'endDate': self.end_date})
示例#3
0
def test_parse_date_datetime():
    # test passing in a datetime works
    ts = datetime(1997, 2, 16, 5, 25)
    dt = parse_date(ts)

    assert dt is not None
    assert dt == '1997-02-16T05:25:00.000Z'
示例#4
0
def test_parse_date_string_utc_offset():
    # test Y-M-DTH:M:S parses
    ts = '1985-11-15T12:34:56.000+00:00'
    dt = parse_date(ts)

    assert dt is not None
    assert dt == '1985-11-15T12:34:56.000Z'
示例#5
0
def test_parse_date_string_no_milliseconds():
    # test Y-M-DTH:M:S parses
    ts = '1985-11-15T12:34:56'
    dt = parse_date(ts)

    assert dt is not None
    assert dt == '1985-11-15T12:34:56.000Z'
示例#6
0
def test_parse_date_string_only_days():
    # test Y-M-D parses
    ts = '1985-11-15'
    dt = parse_date(ts)

    assert dt is not None
    assert dt == '1985-11-15T00:00:00.000Z'
示例#7
0
def test_parse_date_string():
    # test iso representation parses correctly
    ts = '1985-11-15T12:34:56.000Z'
    dt = parse_date(ts)

    assert dt is not None
    assert dt == '1985-11-15T12:34:56.000Z'
示例#8
0
def test_parse_date_datetime_aware():
    # test passing in aware datetime
    from datetime import timezone

    ts = datetime.now(tz=timezone.utc)
    dt = parse_date(ts)

    assert dt is not None
示例#9
0
def test_time_stamp_to_epoch():
    ts = '1985-11-15T23:56:12.000Z'
    epoch = time_stamp_to_epoch(ts)

    assert isinstance(epoch, int)
    dt = parse_date(epoch)

    assert dt == ts
示例#10
0
 def set_end_date(self, new_date: str):
     self.end_date = parse_date(new_date)
     self._params.update({'endDate': self.end_date})
示例#11
0
 def set_start_date(self, new_date: str):
     self.start_date = parse_date(new_date)
     self._params.update({'startDate': self.start_date})
示例#12
0
def test_parse_date_datetime_unaware():
    # passing in another datetime func
    ts = datetime.utcnow()
    dt = parse_date(ts)

    assert dt is not None