Skip to content

Commit

Permalink
Merge pull request #23 from thombashi/develop
Browse files Browse the repository at this point in the history
Develop
  • Loading branch information
thombashi authored Jul 3, 2016
2 parents 17c8500 + 6b1b412 commit d7edc40
Show file tree
Hide file tree
Showing 6 changed files with 21 additions and 54 deletions.
4 changes: 2 additions & 2 deletions README.rst
Original file line number Diff line number Diff line change
Expand Up @@ -170,8 +170,8 @@ Dependencies

Python 2.6+ or 3.3+

- `python-dateutil <https://pypi.python.org/pypi/python-dateutil/>`__
- `pytz <https://pypi.python.org/pypi/pytz>`__
- `DataPropery <https://github.com/thombashi/DataProperty>`__
- `python-dateutil <https://pypi.python.org/pypi/python-dateutil/>`__

Test dependencies
-----------------
Expand Down
61 changes: 14 additions & 47 deletions datetimerange/__init__.py
Original file line number Diff line number Diff line change
@@ -1,14 +1,14 @@
# encoding: utf-8

'''
@author: Tsuyoshi Hombashi
'''
"""
.. codeauthor:: Tsuyoshi Hombashi <gogogo.vm@gmail.com>
"""

import datetime

import dataproperty as dp
import dateutil.parser
import dateutil.relativedelta as rdelta
import pytz


class DateTimeRange(object):
Expand Down Expand Up @@ -465,11 +465,9 @@ def set_start_datetime(self, value):
2015-03-22T10:00:00+0900 - NaT
"""

if is_datetime(value):
self.__start_datetime = value
return

self.__start_datetime = self.__convert_datetime(value)
data_prop = dp.DataProperty(value)
self.__validate_value(data_prop)
self.__start_datetime = data_prop.data

def set_end_datetime(self, value):
"""
Expand All @@ -493,11 +491,9 @@ def set_end_datetime(self, value):
NaT - 2015-03-22T10:10:00+0900
"""

if is_datetime(value):
self.__end_datetime = value
return

self.__end_datetime = self.__convert_datetime(value)
data_prop = dp.DataProperty(value)
self.__validate_value(data_prop)
self.__end_datetime = data_prop.data

def set_time_range(self, start, end):
"""
Expand Down Expand Up @@ -738,41 +734,12 @@ def truncate(self, percentage):
self.__start_datetime += discard_time
self.__end_datetime -= discard_time

def __validate_value(self, data_prop):
if data_prop.typecode not in [dp.Typecode.DATETIME, dp.Typecode.NONE]:
raise ValueError("invalid datetime value")

@staticmethod
def __get_timedelta_sec(dt):
return int(
dt.days * 60 ** 2 * 24 + float(dt.seconds) +
float(dt.microseconds / (1000.0 ** 2)))

def __get_dst_timezone_name(self, offset):
return self.__COMMON_DST_TIMEZONE_TABLE.get(offset)

def __convert_datetime(self, value):
try:
dt = dateutil.parser.parse(value)
except AttributeError:
return None

try:
dst_timezone_name = self.__get_dst_timezone_name(
self.__get_timedelta_sec(dt.utcoffset()))
except AttributeError:
return dt

if dst_timezone_name is None:
return dt

pytz_timezone = pytz.timezone(dst_timezone_name)
dt = dt.replace(tzinfo=None)
dt = pytz_timezone.localize(dt)

return dt


def is_datetime(value):
"""
:return: |True| if the type of `value` is |datetime|.
:rtype: bool
"""

return value is not None and isinstance(value, datetime.datetime)
4 changes: 2 additions & 2 deletions docs/pages/installation.rst
Original file line number Diff line number Diff line change
Expand Up @@ -11,8 +11,8 @@ Dependencies

Python 2.6+ or 3.3+

- `python-dateutil <https://pypi.python.org/pypi/python-dateutil/>`__
- `pytz <https://pypi.python.org/pypi/pytz>`__
- `DataPropery <https://github.com/thombashi/DataProperty>`__
- `python-dateutil <https://pypi.python.org/pypi/python-dateutil/>`__

Test dependencies
-----------------
Expand Down
2 changes: 1 addition & 1 deletion requirements/requirements.txt
Original file line number Diff line number Diff line change
@@ -1,2 +1,2 @@
DataProperty>=0.5.3
python-dateutil>=2.5.0
pytz
2 changes: 1 addition & 1 deletion setup.py
Original file line number Diff line number Diff line change
Expand Up @@ -25,7 +25,7 @@

setuptools.setup(
name="DateTimeRange",
version="0.2.2",
version="0.2.3",
author="Tsuyoshi Hombashi",
author_email="gogogo.vm@gmail.com",
url="https://github.com/thombashi/DateTimeRange",
Expand Down
2 changes: 1 addition & 1 deletion test/test_datetimerange.py
Original file line number Diff line number Diff line change
Expand Up @@ -832,7 +832,6 @@ class Test_DateTimeRange_set_start_datetime:
[START_DATETIME_TEXT, TEST_START_DATETIME],
[TEST_START_DATETIME, TEST_START_DATETIME],
[None, None],
[11111, None],
])
def test_normal(self, value, expected):
dtr = DateTimeRange(TEST_END_DATETIME, TEST_END_DATETIME)
Expand All @@ -841,6 +840,7 @@ def test_normal(self, value, expected):

@pytest.mark.parametrize(["value", "expected"], [
["invalid time string", ValueError],
[11111, ValueError],
])
def test_null_start(self, datetimerange_null_start, value, expected):
with pytest.raises(expected):
Expand Down

0 comments on commit d7edc40

Please sign in to comment.