Compare commits

...

23 Commits

Author SHA1 Message Date
Kenneth Reitz 4fd8baf3eb v0.1.5 2016-12-25 19:47:20 -05:00
kennethreitz 5c255d2682 Merge pull request #29 from moin18/maya_operations
comparision operation support and subtraction of MayaDT object
2016-12-24 14:14:33 -05:00
kennethreitz 702eaab906 Merge pull request #28 from moin18/contributors
contributor firendly repository
2016-12-24 13:26:40 -05:00
Moin 5bbe383061 comparision operation support and subtraction of MayaDT object 2016-12-24 22:39:47 +05:30
Moin d40e698fb9 contributor firendly repository 2016-12-24 21:22:47 +05:30
kennethreitz 327f057e63 Merge pull request #27 from moin18/master
'week' and 'weekday' as properties to 'MayaDT' object
2016-12-24 00:45:38 -05:00
Moin 470516146a 'week' and 'weekday' as properties to 'MayaDT' object 2016-12-24 03:33:37 +05:30
kennethreitz dbed0555db _EPOCH_START 2016-12-23 13:11:25 -05:00
kennethreitz 2fce84195e v0.1.4 2016-12-21 13:24:53 -05:00
kennethreitz 7ab9e48d45 Merge pull request #25 from Factr/master
Added .gitignore
2016-12-20 22:19:15 -05:00
Adam Nelson ee1a8e2438 Added .gitignore
From https://github.com/github/gitignore/blob/master/Python.gitignore with Pycharm exclusion for .idea/
2016-12-20 16:08:29 -05:00
kennethreitz b0e91d6c0e Merge pull request #24 from Factr/master
Added tzlocal to setup.py
2016-12-20 14:30:11 -05:00
Adam Nelson bce5d13401 Merge branch 'master' of github.com:Factr/maya into HEAD 2016-12-20 13:36:19 -05:00
Adam Nelson b4a23d668d Added tzlocal as setup requirement 2016-12-20 13:34:49 -05:00
kennethreitz 90051da96d fix maya link to travis 2016-12-20 13:09:48 -05:00
kennethreitz 8f0ff0d68c skip 3 builds 2016-12-20 13:08:55 -05:00
kennethreitz fd1262a8e8 shields 2016-12-20 12:57:11 -05:00
kennethreitz 7558261dc8 basic travis file 2016-12-20 12:49:56 -05:00
kennethreitz 1407e688fd improve test name 2016-12-20 12:29:31 -05:00
kennethreitz 0c2b936111 cleanup tests 2016-12-20 12:27:16 -05:00
kennethreitz 9e72ef3d2f test for #19 2016-12-20 12:25:19 -05:00
kennethreitz eabba0b79e v0.1.3 2016-12-20 12:25:01 -05:00
Adam Nelson 0efc489ba1 Added tzlocal as a requirement as well 2016-12-19 17:15:35 -05:00
7 changed files with 233 additions and 8 deletions
+94
View File
@@ -0,0 +1,94 @@
# Byte-compiled / optimized / DLL files
__pycache__/
*.py[cod]
*$py.class
# C extensions
*.so
# Distribution / packaging
.Python
env/
build/
develop-eggs/
dist/
downloads/
eggs/
.eggs/
lib/
lib64/
parts/
sdist/
var/
wheels/
*.egg-info/
.installed.cfg
*.egg
# PyInstaller
# Usually these files are written by a python script from a template
# before PyInstaller builds the exe, so as to inject date/other infos into it.
*.manifest
*.spec
# Installer logs
pip-log.txt
pip-delete-this-directory.txt
# Unit test / coverage reports
htmlcov/
.tox/
.coverage
.coverage.*
.cache
nosetests.xml
coverage.xml
*,cover
.hypothesis/
# Translations
*.mo
*.pot
# Django stuff:
*.log
local_settings.py
# Flask stuff:
instance/
.webassets-cache
# Scrapy stuff:
.scrapy
# Sphinx documentation
docs/_build/
# PyBuilder
target/
# Jupyter Notebook
.ipynb_checkpoints
# pyenv
.python-version
# celery beat schedule file
celerybeat-schedule
# dotenv
.env
# virtualenv
.venv/
venv/
ENV/
# Spyder project settings
.spyderproject
# Rope project settings
.ropeproject
# PyCharm
.idea/
+8
View File
@@ -0,0 +1,8 @@
language: python
python:
- "2.7"
# - "3.5" # looks like ruamel.ordereddict doesn't build for python3
# command to install dependencies
install: "pip install -r requirements.txt"
# command to run tests
script: make
+19
View File
@@ -0,0 +1,19 @@
# Contributions to the maya project
## Creator & Maintainer
- Kenneth Reitz <me@kennethreitz.org> `@kennethreitz <https://github.com/kennethreitz>`_
## Contributors
In chronological order:
- Adam Nelson <adam@varud.com> (`@adamn <https://github.com/adamn>`_)
- Timo Furrer <tuxtimo@gmail.com> (`@timofurrer <https://github.com/timofurrer>`_)
- Moinuddin Quadri <moin18@gmail.com> (`@moin18 <https://github.com/moin18>`_)
- Grigouze <grigouze@yahoo.fr> (`@grigouze <https://github.com/grigouze>`_)
- Tzu-ping Chung <uranusjr@gmail.com> (`@uranusjr <https://github.com/uranusjr>`_)
- aaronjeline (`@aaronjeline <https://github.com/aaronjeline>`_)
- jerry2yu (`@jerry2yu <https://github.com/jerry2yu>`_)
+23 -1
View File
@@ -1,6 +1,16 @@
Maya: Datetime for Humans™
==========================
.. image:: https://img.shields.io/pypi/v/maya.svg
:target: https://pypi.python.org/pypi/maya
.. 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
:target: https://saythanks.io/to/kennethreitz
Datetimes are very frustrating to work with in Python, especially when dealing
with different locales on different systems. This library exists to make the
simple things **much** easier, while admitting that time is an illusion
@@ -61,7 +71,7 @@ Behold, datetimes for humans!
- All timezone algebra will behave identically on all machines, regardless of system locale.
- Complete symmetric import and export of both ISO 8601 and RFC 2822 datetime stamps.
- Fantastic parsing of both dates written for/by humans and machines (``maya.when()`` vs ``maya.parse()``).
- Support for human slang, both import and export (e.g. `an hour ago`).
- Support for human slang, both import and export (e.g. `an hour ago`).
- Datetimes can very easily be generated, with or without tzinfo attached.
- This library is based around epoch time, but dates before Jan 1 1970 are indeed supported, via negative integers.
- Maya never panics, and always carries a towel.
@@ -90,3 +100,15 @@ Installation is easy, with pip::
----------
`Say Thanks <https://saythanks.io/to/kennethreitz>`_!
How to Contribute
-----------------
#. Check for open issues or open a fresh issue to start a discussion around a feature idea or a bug.
#. Fork `the repository`_ on GitHub to start making your changes to the **master** branch (or branch off of it).
#. Write a test which shows that the bug was fixed or that the feature works as expected.
#. Send a pull request and bug the maintainer until it gets merged and published. :) Make sure to add yourself to AUTHORS_.
.. _`the repository`: http://github.com/kennethreitz/maya
.. _AUTHORS: https://github.com/kennethreitz/maya/blob/master/AUTHORS.rst
+54 -2
View File
@@ -20,7 +20,21 @@ import iso8601
import dateutil.parser
from tzlocal import get_localzone
EPOCH_START = (1970, 1, 1)
_EPOCH_START = (1970, 1, 1)
def validate_type_mayadt(func):
"""
Decorator to validate all the arguments to function
are of type `MayaDT`
"""
def inner(*args, **kwargs):
for arg in args + tuple(kwargs.values()):
if not isinstance(arg, MayaDT):
raise ValueError("Operation allowed only on object of type '{}'".format(MayaDT.__name__))
return func(*args, **kwargs)
return inner
class MayaDT(object):
"""The Maya Datetime object."""
@@ -36,6 +50,35 @@ class MayaDT(object):
"""Return's the datetime's format"""
return format(self.datetime(), *args, **kwargs)
@validate_type_mayadt
def __sub__(self, maya_dt):
return MayaDT(self._epoch - maya_dt._epoch)
@validate_type_mayadt
def __eq__(self, maya_dt):
return self._epoch == maya_dt._epoch
@validate_type_mayadt
def __ne__(self, maya_dt):
return not self.__eq__(maya_dt)
@validate_type_mayadt
def __lt__(self, maya_dt):
return self._epoch < maya_dt._epoch
@validate_type_mayadt
def __le__(self, maya_dt):
return self.__lt__(maya_dt) or self.__eq__(maya_dt)
@validate_type_mayadt
def __gt__(self, maya_dt):
return self._epoch > maya_dt._epoch
@validate_type_mayadt
def __ge__(self, maya_dt):
return self.__gt__(maya_dt) or self.__eq__(maya_dt)
# Timezone Crap
# -------------
@@ -67,7 +110,7 @@ class MayaDT(object):
if dt.tzinfo is None:
dt = dt.replace(tzinfo=pytz.utc)
epoch_start = Datetime(*EPOCH_START, tzinfo=pytz.timezone('UTC'))
epoch_start = Datetime(*_EPOCH_START, tzinfo=pytz.timezone('UTC'))
return (dt - epoch_start).total_seconds()
# Importers
@@ -140,6 +183,15 @@ class MayaDT(object):
def day(self):
return self.datetime().day
@property
def week(self):
return self.datetime().isocalendar()[1]
@property
def weekday(self):
"""Return the day of the week as an integer. Monday is 1 and Sunday is 7"""
return self.datetime().isoweekday()
@property
def hour(self):
return self.datetime().hour
+3 -2
View File
@@ -29,12 +29,13 @@ required = [
'dateparser',
'iso8601',
'python-dateutil',
'ruamel.yaml'
'ruamel.yaml',
'tzlocal'
]
setup(
name='maya',
version='0.1.2',
version='0.1.5',
description='Datetimes for Humans.',
long_description= '\n' + read('README.rst'),
author='Kenneth Reitz',
+32 -3
View File
@@ -1,5 +1,6 @@
import pytest
from datetime import datetime
import copy
import maya
@@ -66,7 +67,7 @@ def test_print_date(capsys):
def test_invalid_date():
with pytest.raises(ValueError):
d = maya.when('another day')
maya.when('another day')
def test_slang_date():
@@ -79,7 +80,7 @@ def test_slang_time():
assert d.slang_time() == 'an hour ago'
def test_format():
def test_parse():
d = maya.parse('February 21, 1994')
assert format(d) == '1994-02-21 00:00:00+00:00'
@@ -89,4 +90,32 @@ def test_format():
d = maya.parse('01/05/2016', day_first=True)
assert format(d) == '2016-05-01 00:00:00+00:00'
# rand_day = maya.when('2011-02-07', timezone='US/Eastern')
def test_datetime_to_timezone():
dt = maya.when('2016-01-01').datetime(to_timezone='US/Eastern')
assert dt.tzinfo.zone == 'US/Eastern'
def test_comparison_operations():
now = maya.now()
now_copy = copy.deepcopy(now)
tomorrow = maya.when('tomorrow')
assert (now == now_copy) is True
assert (now == tomorrow) is False
assert (now != now_copy) is False
assert (now != tomorrow) is True
assert (now < now_copy) is False
assert (now < tomorrow) is True
assert (now <= now_copy) is True
assert (now <= tomorrow) is True
assert (now > now_copy) is False
assert (now > tomorrow) is False
assert (now >= now_copy) is True
assert (now >= tomorrow) is False