Skip to content

Commit

Permalink
Rename string2datetime to to_datetime
Browse files Browse the repository at this point in the history
to_datetime now can handle datetime, date, and strings
  • Loading branch information
seisman committed Jun 13, 2019
1 parent 30c07f9 commit c9662a3
Show file tree
Hide file tree
Showing 4 changed files with 40 additions and 32 deletions.
18 changes: 7 additions & 11 deletions HinetPy/client.py
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,7 @@
from .win32 import merge
from .header import NETWORK
from .utils import point_inside_box, point_inside_circular, split_integer, \
string2datetime
to_datetime

# Setup the logger
FORMAT = "[%(asctime)s] %(levelname)s: %(message)s"
Expand Down Expand Up @@ -401,8 +401,7 @@ def get_continuous_waveform(self, code, starttime, span,
time0 = NETWORK[code].starttime
# time1 = UTCTime + JST(GMT+0900) - 2 hour delay
time1 = datetime.utcnow() + timedelta(hours=9) + timedelta(hours=-2)
if not isinstance(starttime, datetime):
starttime = string2datetime(starttime)
starttime = to_datetime(starttime)
endtime = starttime + timedelta(minutes=span)
if not time0 <= starttime < endtime <= time1:
msg = "Data not available in the time period. " + \
Expand Down Expand Up @@ -502,8 +501,8 @@ def get_waveform(self, code, starttime, span,
:meth:`~HinetPy.client.Client.get_waveform` has been renamed to
:meth:`~HinetPy.client.Client.get_continuous_waveform`.
"""
logger.warn("The get_waveform() function is deprecated. Please "
"use get_continuous_waveform().")
logger.warning("The get_waveform() function is deprecated. Please "
"use get_continuous_waveform().")
return self.get_continuous_waveform(code, starttime, span,
max_span=max_span, data=data,
ctable=ctable, outdir=outdir,
Expand Down Expand Up @@ -723,8 +722,8 @@ def get_event_waveform(self, starttime, endtime,
from the geographic point defined by the latitude and longitude
parameters.
'''
starttime = string2datetime(starttime)
endtime = string2datetime(endtime)
starttime = to_datetime(starttime)
endtime = to_datetime(endtime)

# get event list
events = []
Expand Down Expand Up @@ -790,10 +789,7 @@ def get_event_waveform(self, starttime, endtime,
def _get_catalog(self, datatype, startdate, span, filename=None, os="DOS"):
"""Request JMA catalog."""

if not (isinstance(startdate, datetime) or
isinstance(startdate, date)):
startdate = string2datetime(startdate)

startdate = to_datetime(startdate)
if int(span) not in range(1, 8):
raise ValueError("span is not digit or not in [1, 7].")

Expand Down
15 changes: 10 additions & 5 deletions HinetPy/utils.py
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@
Utility functions used by HinetPy.
"""
import math
from datetime import datetime
from datetime import datetime, date


def split_integer(number, maxn):
Expand Down Expand Up @@ -93,18 +93,23 @@ def point_inside_circular(lat1, lon1, lat2, lon2, minradius=None, maxradius=None
return True


def string2datetime(value):
"""Convert string to datetime.
def to_datetime(value):
"""Convert to datetime in a hard way.
>>> string2datetime('201001010000')
>>> to_datetime('201001010000')
datetime.datetime(2010, 1, 1, 0, 0)
>>> string2datetime('2010-01-01T03:45')
>>> to_datetime('2010-01-01T03:45')
datetime.datetime(2010, 1, 1, 3, 45)
"""

# is datetime
if isinstance(value, datetime):
return value
# is date
elif isinstance(value, date):
return datetime.combine(value, datetime.min.time())

# is a string
value = value.replace("T", " ")
value = value.replace("-", " ")
value = value.replace(":", " ")
Expand Down
2 changes: 1 addition & 1 deletion tests/test_client_nologin.py
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@

from HinetPy import Client
from HinetPy.client import _parse_code
from HinetPy.utils import string2datetime
from HinetPy.utils import to_datetime


# http://docs.pytest.org/en/latest/fixture.html
Expand Down
37 changes: 22 additions & 15 deletions tests/test_utils.py
Original file line number Diff line number Diff line change
@@ -1,11 +1,11 @@
#!/usr/bin/env python
# -*- coding: utf-8 -*-

from datetime import datetime
from datetime import datetime, date
import pytest

from HinetPy.utils import split_integer, point_inside_box, haversine, \
point_inside_circular, string2datetime
point_inside_circular, to_datetime

class TestUtilsClass:
def test_split_integer(self):
Expand All @@ -29,25 +29,32 @@ def test_point_inside_circular(self):
assert point_inside_circular(30, 50, 30, 52, 0, 5)
assert not point_inside_circular(30, 50, 30, 60, 0, 5)

def test_string2datetime(self):
def test_to_datetime(self):
dt = datetime(2010, 2, 3)
assert dt == string2datetime("20100203")
assert dt == string2datetime("2010-02-03")
assert dt == to_datetime(dt)

dt1 = date(2010, 2, 3)
dt2 = datetime(2010, 2, 3)
assert dt2 == to_datetime(dt1)

dt = datetime(2010, 2, 3)
assert dt == to_datetime("20100203")
assert dt == to_datetime("2010-02-03")

dt = datetime(2001, 2, 3, 4, 5)
assert dt == string2datetime("200102030405")
assert dt == string2datetime("2001-02-03T04:05")
assert dt == string2datetime("2001-02-03 04:05")
assert dt == to_datetime("200102030405")
assert dt == to_datetime("2001-02-03T04:05")
assert dt == to_datetime("2001-02-03 04:05")

dt = datetime(2001, 2, 3, 4, 5, 6)
assert dt == string2datetime("20010203040506")
assert dt == string2datetime("2001-02-03T04:05:06")
assert dt == string2datetime("2001-02-03 04:05:06")
assert dt == to_datetime("20010203040506")
assert dt == to_datetime("2001-02-03T04:05:06")
assert dt == to_datetime("2001-02-03 04:05:06")

dt = datetime(2001, 2, 3, 4, 5, 6, 789000)
assert dt == string2datetime("20010203040506.789")
assert dt == string2datetime("2001-02-03T04:05:06.789")
assert dt == string2datetime("2001-02-03 04:05:06.789")
assert dt == to_datetime("20010203040506.789")
assert dt == to_datetime("2001-02-03T04:05:06.789")
assert dt == to_datetime("2001-02-03 04:05:06.789")

with pytest.raises(ValueError):
string2datetime("2001023040506")
to_datetime("2001023040506")

0 comments on commit c9662a3

Please sign in to comment.