Compare commits

..

14 Commits

Author SHA1 Message Date
kennethreitz 450dff000b v0.1.8 2017-02-09 21:29:03 -05:00
kennethreitz 90ba4ded70 fix for rand-day 2017-02-09 21:28:40 -05:00
kennethreitz 2e33ede5ac document add 2017-02-09 21:28:27 -05:00
kennethreitz 6a9661759f fix add/subtract 2017-02-09 21:28:22 -05:00
kennethreitz f46c3792e8 pipfile.lock 2017-02-09 21:23:37 -05:00
kennethreitz c07e51bf4d Update README.rst 2017-02-09 20:54:51 -05:00
kennethreitz 63d5e0ce90 Subtract and add! 2017-02-09 20:43:55 -05:00
kennethreitz 361f7a45ad Merge pull request #51 from sdispater/improve-iso8601-parsing
Improve iso8601 parsing
2017-02-09 19:15:19 -06:00
Sébastien Eustace 09db746027 Updates AUTHORS.rst 2017-02-09 19:40:09 -05:00
Sébastien Eustace 15a447491a Improves ISO8601 parsing 2017-02-09 19:39:18 -05:00
kennethreitz f8d83c0370 Update README.rst 2017-02-09 17:19:19 -05:00
kennethreitz 7c47796ac6 Update README.rst 2017-02-09 17:18:44 -05:00
kennethreitz 9c88519e63 only test 3.6 and 2.7 2017-02-09 17:15:22 -05:00
kennethreitz 50d4558ffa travis 2017-02-09 17:07:03 -05:00
8 changed files with 179 additions and 24 deletions
+2 -5
View File
@@ -1,12 +1,9 @@
language: python
python:
- "2.7"
- "3.3"
- "3.4"
- "3.5"
- "3.6"
# command to install dependencies
install: pip install -r requirements.txt
install: pip install pipenv; pipenv install --dev
# command to run tests
script: make
script: pipenv run pytest
+1
View File
@@ -20,3 +20,4 @@ In chronological order:
- aaronjeline (`@aaronjeline <https://github.com/aaronjeline>`_)
- jerry2yu (`@jerry2yu <https://github.com/jerry2yu>`_)
- Joshua Li <joshua.r.li.98@gmail.com> (`@JoshuaRLi <https://github.com/JoshuaRLi>`_)
- Sébastien Eustace <sebastien@eustace.io> (`@sdispater <https://github.com/sdispater>`_)
+1 -2
View File
@@ -2,10 +2,9 @@
humanize = "*"
pytz = "*"
dateparser = "*"
iso8601 = "*"
python-dateutil = "*"
"ruamel.yaml" = "*"
tzlocal = "*"
pendulum = ">=1.0"
[dev-packages]
pytest = "*"
Generated
+102
View File
@@ -0,0 +1,102 @@
{
"_meta": {
"sources": [
{
"url": "https://pypi.python.org/simple",
"verify_ssl": true
}
],
"requires": {},
"hash": {
"sha256": "5617ff73ba51e60721267b24dc01e83f33d2a3692870b60e394b0f75ed2dc313"
}
},
"default": {
"convertdate": {
"hash": "sha256:9c5d8dc984e51789ffaa92e988939ba8734c56ed718a3943998e7832fffa66ed",
"version": "==2.1.0"
},
"dateparser": {
"hash": "sha256:bbdb38e35dcf42653bbc88dc8870d0ef7eb5679af64b4f2ffc43d43acd3b24ba",
"version": "==0.5.1"
},
"ephem": {
"hash": "sha256:7a4c82b1def2893e02aec0394f108d24adb17bd7b0ca6f4bc78eb7120c0212ac",
"version": "==3.7.6.0"
},
"humanize": {
"hash": "sha256:a43f57115831ac7c70de098e6ac46ac13be00d69abbf60bdcac251344785bb19",
"version": "==0.5.1"
},
"jdatetime": {
"hash": "sha256:b6bb0bbd822eb0d3f9a55c4e8bfda0ccace3dcfa6d16bdcb29c124ad2ce66335",
"version": "==1.8.1"
},
"pendulum": {
"hash": "sha256:2417888ceddbb9c3903317ad321e27b2217aacf4ddcc1993ac3ad4db96f3a701",
"version": "==1.0.2"
},
"python-dateutil": {
"hash": "sha256:537bf2a8f8ce6f6862ad705cd68f9e405c0b5db014aa40fa29eab4335d4b1716",
"version": "==2.6.0"
},
"pytz": {
"hash": "sha256:a1ea35e87a63c7825846d5b5c81d23d668e8a102d3b1b465ce95afe1b3a2e065",
"version": "==2016.10"
},
"pytzdata": {
"hash": "sha256:cf28a9bbb4e7f94ae21f4a3c64439aa44f81d5814fe9989e9ab7374658b6e596",
"version": "==2016.10"
},
"regex": {
"hash": "sha256:45b62acff46cb886246e40227a872089d8d4972dbf2f114ec1ae64e5893e87bf",
"version": "==2017.02.08"
},
"ruamel.yaml": {
"hash": "sha256:7cfd653648a1d4a635ce7ae254b4dc6ec7df931a5a653c79e627547be5dda71b",
"version": "==0.13.13"
},
"six": {
"hash": "sha256:0ff78c403d9bccf5a425a6d31a12aa6b47f1c21ca4dc2573a7e2f32a97335eb1",
"version": "==1.10.0"
},
"tzlocal": {
"hash": "sha256:d160c2ce4f8b1831dabfe766bd844cf9012f766539cf84139c2faac5201882ce",
"version": "==1.3"
},
"umalqurra": {
"hash": "sha256:719f6a36f908ada1c29dae0d934dd0f1e1f6e3305784edbec23ad719397de678",
"version": "==0.2"
}
},
"develop": {
"appdirs": {
"hash": "sha256:85e58578db8f29538f3109c11250c2a5514a2fcdc9890d9b2fe777eb55517736",
"version": "==1.4.0"
},
"packaging": {
"hash": "sha256:99276dc6e3a7851f32027a68f1095cd3f77c148091b092ea867a351811cfe388",
"version": "==16.8"
},
"py": {
"hash": "sha256:2d4bba2e25fff58140e6bdce1e485e89bb59776adbe01d490baa6b1f37a3dd6b",
"version": "==1.4.32"
},
"pyparsing": {
"hash": "sha256:67101d7acee692962f33dd30b5dce079ff532dd9aa99ff48d52a3dad51d2fe84",
"version": "==2.1.10"
},
"pytest": {
"hash": "sha256:da0ab50c7eec0683bc24f1c1137db1f4111752054ecdad63125e7ec71316b813",
"version": "==3.0.6"
},
"setuptools": {
"hash": "sha256:5f74aabe68c441b99dca68c22796d5cbf532cb38b0aeada17d1d3988809de6e6",
"version": "==34.1.1"
},
"six": {
"hash": "sha256:0ff78c403d9bccf5a425a6d31a12aa6b47f1c21ca4dc2573a7e2f32a97335eb1",
"version": "==1.10.0"
}
}
}
+15 -7
View File
@@ -1,5 +1,5 @@
Maya: Datetime for Humans™
==========================
Maya: Timestamps for Humans™
============================
.. image:: https://img.shields.io/pypi/v/maya.svg
:target: https://pypi.python.org/pypi/maya
@@ -7,7 +7,7 @@ Maya: Datetime for Humans™
.. image:: https://travis-ci.org/kennethreitz/maya.svg?branch=master
:target: https://travis-ci.org/kennethreitz/maya
.. image:: https://img.shields.io/badge/SayThanks.io-☼-1EAEDB.svg
.. image:: https://img.shields.io/badge/SayThanks-!-1EAEDB.svg
:target: https://saythanks.io/to/kennethreitz
@@ -40,11 +40,17 @@ Behold, datetimes for humans!
>>> tomorrow.slang_time()
'23 hours from now'
# Also: MayaDT.from_iso8601(...)
>>> tomorrow.iso8601()
'2016-12-16T15:11:30.263350Z'
'2017-02-10T22:17:01.445418Z'
# Also: MayaDT.from_rfc2822(...)
>>> tomorrow.rfc2822()
'Fri, 16 Dec 2016 20:11:30 -0000'
'Fri, 10 Feb 2017 22:17:01 GMT'
# Also: MayaDT.from_rfc3339(...)
>>> tomorrow.rfc3339()
'2017-02-10T22:17:01.44Z'
>>> tomorrow.datetime()
datetime.datetime(2016, 12, 16, 15, 11, 30, 263350, tzinfo=<UTC>)
@@ -57,9 +63,11 @@ Behold, datetimes for humans!
>>> rand_day = maya.when('2011-02-07', timezone='US/Eastern')
<MayaDT epoch=1297036800.0>
# Note how this is the 6th, not the 7th.
>>> rand_day.day
6
7
>>> rand_day.add(days=10).day
17
# Always.
>>> rand_day.timezone
+11 -6
View File
@@ -16,8 +16,7 @@ from datetime import datetime as Datetime
import pytz
import humanize
import dateparser
import iso8601
import dateutil.parser
import pendulum
from tzlocal import get_localzone
_EPOCH_START = (1970, 1, 1)
@@ -85,6 +84,13 @@ class MayaDT(object):
def __ge__(self, maya_dt):
return self._epoch >= maya_dt._epoch
def add(self, **kwargs):
""""Returns a new MayaDT object with the given offsets."""
return self.from_datetime(pendulum.instance(self.datetime()).add(**kwargs))
def subtract(self, **kwargs):
""""Returns a new MayaDT object with the given offsets."""
return self.from_datetime(pendulum.instance(self.datetime()).subtract(**kwargs))
# Timezone Crap
# -------------
@@ -131,8 +137,7 @@ class MayaDT(object):
@classmethod
def from_iso8601(klass, string):
"""Returns MayaDT instance from iso8601 string."""
dt = iso8601.parse_date(string)
return klass.from_datetime(dt)
return parse(string)
@staticmethod
def from_rfc2822(string):
@@ -272,11 +277,11 @@ def when(string, timezone='UTC'):
def parse(string, day_first=False):
""""Returns a MayaDT instance for the machine-produced moment specified.
Powered by dateutil. Accepts most known formats. Useful for working with data.
Powered by pendulum. Accepts most known formats. Useful for working with data.
Keyword Arguments:
string -- string to be parsed
day_first -- if true, the first value (e.g. 01/05/2016) is parsed as day (default: False)
"""
dt = dateutil.parser.parse(string, dayfirst=day_first)
dt = pendulum.parse(string, day_first=day_first)
return MayaDT.from_datetime(dt)
+3 -4
View File
@@ -28,15 +28,14 @@ required = [
'humanize',
'pytz',
'dateparser',
'iso8601',
'python-dateutil',
'ruamel.yaml',
'tzlocal'
'tzlocal',
'pendulum'
]
setup(
name='maya',
version='0.1.7',
version='0.1.8',
description='Datetimes for Humans.',
long_description=long_description,
author='Kenneth Reitz',
+44
View File
@@ -18,6 +18,50 @@ def test_iso8601():
assert r == d.iso8601()
def test_parse_iso8601():
string = '20161001T1430.4+05:30'
expected = '2016-10-01T09:00:00.400000Z'
d = maya.MayaDT.from_iso8601(string)
assert expected == d.iso8601()
string = '2016T14'
expected = '2016-01-01T14:00:00Z'
d = maya.MayaDT.from_iso8601(string)
assert expected == d.iso8601()
string = '2016-10T14'
expected = '2016-10-01T14:00:00Z'
d = maya.MayaDT.from_iso8601(string)
assert expected == d.iso8601()
string = '2012W05'
expected = '2012-01-30T00:00:00Z'
d = maya.MayaDT.from_iso8601(string)
assert expected == d.iso8601()
string = '2012W055'
expected = '2012-02-03T00:00:00Z'
d = maya.MayaDT.from_iso8601(string)
assert expected == d.iso8601()
string = '2012007'
expected = '2012-01-07T00:00:00Z'
d = maya.MayaDT.from_iso8601(string)
assert expected == d.iso8601()
string = '2016-W07T09'
expected = '2016-02-15T09:00:00Z'
d = maya.MayaDT.from_iso8601(string)
assert expected == d.iso8601()
def test_human_when():
r1 = maya.when('yesterday')
r2 = maya.when('today')