Compare commits

...

53 Commits

Author SHA1 Message Date
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
kennethreitz 8af92bc33c fixes #19 2016-12-20 12:20:50 -05:00
kennethreitz 917420071f v0.1.2 2016-12-20 12:15:01 -05:00
kennethreitz 2bb430b91d make setup.py python 2/3 compatible 2016-12-20 12:14:48 -05:00
kennethreitz 967638228a -e . 2016-12-20 12:12:59 -05:00
kennethreitz 1ba2dac284 Merge pull request #23 from aaronjeline/master
setup.py fix
2016-12-20 12:12:04 -05:00
Aaron Eline 89a54abf1f Added fix from @joaoleveiga 2016-12-20 09:56:00 -05:00
Aaron Eline f119fe927b Fixed missing comma in setup.py 2016-12-20 09:53:51 -05:00
Adam Nelson 0efc489ba1 Added tzlocal as a requirement as well 2016-12-19 17:15:35 -05:00
kennethreitz 8b6ca639cb Merge pull request #21 from Factr/master
Python files executable, ruamel.yaml required
2016-12-19 13:29:32 -08:00
Adam Nelson 48c245a8ad Python files executable, ruamel.yaml required 2016-12-19 16:22:22 -05:00
kennethreitz 29a5b990fd day_first in tests 2016-12-19 13:31:03 -05:00
kennethreitz 69c88552d7 day_first 2016-12-19 13:02:47 -05:00
kennethreitz 2126c8f33e Merge pull request #20 from jerry2yu/master
Add datafirst parameter to parse method. Set datafirst true to parse …
2016-12-19 10:01:31 -08:00
kennethreitz dbc20b3026 Merge pull request #18 from harshit98/master
Update README.rst
2016-12-19 09:49:19 -08:00
Jerry Yu c521672f0e Add datafirst parameter to parse method. Set datafirst true to parse the first value in date (e.g. 01/05/2016) as the day 2016-12-19 13:00:18 -04:00
Harshit Prasad f756b13d4d Update README.rst 2016-12-19 21:01:07 +05:30
kennethreitz 2ce5a23e38 Merge pull request #16 from andrewthehan/typoReadme
Fix typo in README.rst
2016-12-18 21:37:03 -08:00
Andrew Han 605e15ae27 Fix typo in README.rst 2016-12-18 20:10:00 -08:00
kennethreitz 07a3e814a2 Update README.rst 2016-12-18 16:49:37 -05:00
kennethreitz 2e811d8689 Update README.rst 2016-12-18 16:47:28 -05:00
kennethreitz cbbd7d92c1 Update README.rst 2016-12-18 16:45:59 -05:00
kennethreitz d9e08034dd Update README.rst 2016-12-18 16:29:14 -05:00
kennethreitz e3b1eacb77 fix datetime formatting 2016-12-18 13:09:21 -05:00
kennethreitz be29d01160 Merge branch 'master' of github.com:kennethreitz/maya 2016-12-18 12:43:02 -05:00
kennethreitz 5e4853936b Merge pull request #8 from timofurrer/bugfix/format
Fix formatting MayaDT object
2016-12-18 09:41:58 -08:00
kennethreitz 7dbe450c28 Merge pull request #12 from djrobstep/bugfix/py-modules
my_modules -> py_modules
2016-12-18 09:41:29 -08:00
kennethreitz 3ce6734a5e Merge pull request #13 from grigouze/add_tests_for_coverage
Just add some tests to have full coverage
2016-12-18 09:41:12 -08:00
kennethreitz 6e2f530207 Merge pull request #7 from Kraymer/patch-1
Update README.rst (typo)
2016-12-18 09:40:04 -08:00
Grigouze c46d9874d4 Just add some tests to have full coverage
Now it's 💯 % coverage, i don't if it's good or bad but it was easy :)
2016-12-18 15:12:02 +01:00
Robert Lechte 87013d71e0 my_modules -> py_modules 2016-12-18 22:38:40 +11:00
Timo Furrer a562f48e24 Fix formatting MayaDT object 2016-12-18 10:59:22 +01:00
Fabrice Laporte 8fc07b3ab3 Update README.rst
Typo tomorrrow => tomorrow
2016-12-18 10:39:43 +01:00
kennethreitz 59064a5c50 Merge pull request #5 from uranusjr/master
Fix typos in README and add pip install instruction
2016-12-18 00:58:43 -08:00
Tzu-ping Chung 7ae84f3266 Add pip install instruction 2016-12-18 16:04:23 +08:00
Tzu-ping Chung cc668974b6 Fix typos 2016-12-18 16:03:35 +08:00
kennethreitz 6a4ddff215 Update README.rst 2016-12-18 02:48:45 -05:00
kennethreitz a0ab4fc3fb Update README.rst 2016-12-18 02:48:29 -05:00
kennethreitz c80ecad67b Update README.rst 2016-12-18 02:48:12 -05:00
kennethreitz 97842c01b3 Update README.rst 2016-12-18 02:47:57 -05:00
7 changed files with 200 additions and 16 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
+32 -5
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
@@ -8,6 +18,9 @@ simple things **much** easier, while admitting that time is an illusion
Datetimes should be interacted with via an API written for humans.
Maya is mostly built around the headaches and use-cases around parsing datetime data from websites.
☤ Basic Usage of Maya
---------------------
@@ -30,7 +43,7 @@ Behold, datetimes for humans!
>>> tomorrow.iso8601()
'2016-12-16T15:11:30.263350Z'
>>> tomorrrow.rfc2822()
>>> tomorrow.rfc2822()
'Fri, 16 Dec 2016 20:11:30 -0000'
>>> tomorrow.datetime()
@@ -52,8 +65,6 @@ Behold, datetimes for humans!
>>> rand_day.timezone
UTC
☤ Why is this useful?
---------------------
@@ -61,9 +72,20 @@ Behold, datetimes for humans!
- 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`).
- Datetimes can very easily be generated, with our without tzinfo attached.
- 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 carrys a towel.
- Maya never panics, and always carries a towel.
☤ What about Delorean, Arrow, & Pendulum?
-----------------------------------------
Arrow, for example, is a fantastic library, but isn't what I wanted in a datetime library. In many ways, it's better than Maya for certain things. In some ways, in my opinion, it's not.
I simply desire a sane API for datetimes that made sense to me for all the things I'd ever want to do—especially when dealing with timezone algebra. Arrow doesn't do all of the things I need (but it does a lot more!). Maya does do exactly what I need.
I think these projects complement each-other, personally. Maya is great for parsing websites. For example- Arrow supports floors and ceilings and spans of dates, which Maya does not at all.
☤ Installing Maya
-----------------
@@ -73,3 +95,8 @@ Installation is easy, with pip::
$ pip install maya
✨🍰✨
☤ Like it?
----------
`Say Thanks <https://saythanks.io/to/kennethreitz>`_!
Regular → Executable
+10 -5
View File
@@ -34,7 +34,7 @@ class MayaDT(object):
def __format__(self, *args, **kwargs):
"""Return's the datetime's format"""
return self.datetime(*args, **kwargs)
return format(self.datetime(), *args, **kwargs)
# Timezone Crap
# -------------
@@ -104,12 +104,16 @@ class MayaDT(object):
dt = self.datetime().astimezone(pytz.timezone(to_timezone))
else:
dt = Datetime.utcfromtimestamp(self._epoch)
dt.replace(tzinfo=self._tz)
# Strip the timezone info if requested to do so.
if naive:
return dt.replace(tzinfo=None)
else:
if dt.tzinfo is None:
dt = dt.replace(tzinfo=self._tz)
return dt.replace(tzinfo=self._tz)
return dt
def iso8601(self):
"""Returns an ISO 8601 representation of the MayaDT."""
@@ -196,13 +200,14 @@ def when(string, timezone='UTC'):
return MayaDT.from_datetime(dt)
def parse(string):
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.
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)
return MayaDT.from_datetime(dt)
dt = dateutil.parser.parse(string, dayfirst=day_first)
return MayaDT.from_datetime(dt)
+1
View File
@@ -1,3 +1,4 @@
-e .
dateparser==0.5.0
humanize==0.5.1
iso8601==0.1.11
Regular → Executable
+18 -4
View File
@@ -3,9 +3,21 @@
import os
import sys
import codecs
from setuptools import setup
try:
# Python 3
from os import dirname
except ImportError:
# Python 2
from os.path import dirname
here = os.path.abspath(dirname(__file__))
def read(*parts):
return codecs.open(os.path.join(here, *parts), 'r').read()
if sys.argv[-1] == "publish":
os.system("python setup.py sdist bdist_wheel upload")
@@ -16,18 +28,20 @@ required = [
'pytz',
'dateparser',
'iso8601',
'python-dateutil'
'python-dateutil',
'ruamel.yaml',
'tzlocal'
]
setup(
name='maya',
version='0.1.0',
version='0.1.4',
description='Datetimes for Humans.',
long_description=open('README.rst').read(),
long_description= '\n' + read('README.rst'),
author='Kenneth Reitz',
author_email='me@kennethreitz.com',
url='https://github.com/kennethreitz/maya',
my_modules=['maya'],
py_modules=['maya'],
install_requires=required,
license='MIT',
classifiers=(
Regular → Executable
+37 -2
View File
@@ -1,3 +1,6 @@
import pytest
from datetime import datetime
import maya
@@ -43,10 +46,27 @@ def test_dt_tz_naive():
def test_random_date():
d = maya.when('11-17-11')
d = maya.when('11-17-11 08:09:10')
assert d.year == 2011
assert d.month == 11
assert d.day == 17
assert d.hour == 8
assert d.minute == 9
assert d.second == 10
assert d.microsecond == 0
def test_print_date(capsys):
d = maya.when('11-17-11')
print(d)
out, err = capsys.readouterr()
assert out == '<MayaDT epoch=1321488000.0>\n'
def test_invalid_date():
with pytest.raises(ValueError):
maya.when('another day')
def test_slang_date():
@@ -58,4 +78,19 @@ def test_slang_time():
d = maya.when('one hour ago')
assert d.slang_time() == 'an hour ago'
# rand_day = maya.when('2011-02-07', timezone='US/Eastern')
def test_parse():
d = maya.parse('February 21, 1994')
assert format(d) == '1994-02-21 00:00:00+00:00'
d = maya.parse('01/05/2016')
assert format(d) == '2016-01-05 00:00:00+00:00'
d = maya.parse('01/05/2016', day_first=True)
assert format(d) == '2016-05-01 00:00:00+00:00'
def test_datetime_to_timezone():
dt = maya.when('2016-01-01').datetime(to_timezone='US/Eastern')
assert dt.tzinfo.zone == 'US/Eastern'