All notable changes to this project will be documented in this file.
The format is based on Keep a Changelog, and this project adheres to Semantic Versioning.
- Enable changelog updates for semantic release
(
cec6ada)
- Modernized packaging and developer workflow around
pyproject.toml,uv,pytest,ruff, andmypy - Updated CI and release automation to use the new build and verification flow
- Replaced the legacy single-file
unittestsuite with apytesttest layout while preserving the existing behavior coverage - Updated the Docker image to a current Python base image and removed the old
requirements.txtandsetup.pyinstall path
- Support remains Python
3.10+ - During the modernization pass, the floor was briefly evaluated at
3.11+, but it was set to3.10+instead because the library and tooling still work cleanly there and it keeps a broader install base without adding meaningful maintenance overhead - Previous published support before this change was Python
3.8+; this update intentionally drops3.8and3.9to align the project with a more current 2026 baseline while keeping3.10available zoneinfois now used in tests instead ofpytz, but this does not require raising the runtime floor beyond Python3.10
Please use 3.0.3 going forward! 3.0.2 has a breaking bug.
- Fix: issue where version wasnt getting populated
- Fix: move version out of
VERSION.txtand intodatemath/_version.pydirectly - Fix: typos in CHANGELOG. Thank you @s00hyun!
- Feat: Complete typing with strict type-checking #43 Thank you @Avasam!
- Feat: Added
__version__to verify the version of the module. - Feat: Added Dockerfile and relevant verify.py to help with local development and testing
- Chore: bumped modules in requirements.txt
- Fix: removed legacy-tests.py since we no longer support python2.x
- Fix: removed requirements-2.txt from manifest due to deprecation of python2 support
- Fix: renamed requirements-3.txt to requirements.txt to support python3 going forward
- also modifed to
release.yamlandtests.yamlworkflows to support this
- also modifed to
- Fix: long_description should now show up in pypi #33
- Fix: move more pypi configurations to setup.cfg and out of setup.py
- Fix: Race condition in timezone tests: #36
- Fix: Updated arrow version: #32
- Fix: mypy type hint checking in tests: #31
- Fix: SyntaxWarning: invalid escape sequence in
re.match(): #39 - Fix: Licence Classifier: #34
- Fix: Bump certifi to latest: #38
- Feat: Typehint support: #31
- Feat: Renamed CHANGELOG.md to keepachangelog.org format
- todo: Fix pypi: #33
- python 2.7 support. Python 3.8+ will only be supported going forward
- fix: Issue #28
datemath()object now returns the expecteddatetimeobject instead of anArrowobject- added tests to catch invalid object types of helpers
- skipped due to name conflict on pypi, all changes in this are from
1.5.3
- FIX: Issue #25 - Fixed an issue where if you provided an invalid timestamp, i.e.
datemath('2')you would not get an DateMathException back. Also bumped dependencies.
- FIX: Issue #21 - Fixed an issue where if timezone offset was in a datetime string (ISO8601), the timezone of the returned datemath object would be UTC and not the timezone as specified in the datetime string.
- FIX: Issue #15 - Fixed issue with parser finding invalid timeunits and throwing correct errors
- Feat: Issue #16 - Added support for parser to accecpt a epoch/unix timestamp but throw an error on epoch milli's since arrow can't support that.
- Issue #12 - missing VERSION.txt. Added MANIFEST.in for sdist build
- PR #13 - Fix
BaseExceptiontoExceptioninheritence, thank you for your contribution @yury-primer!
** PLEASE DO NOT USE THIS VERSION, use 1.5.0+ instead. This may not compile on your system due to a missing VERSION.txt which was fixed in 1.5.0+ **
- [FIX] Issue #9 && Issue #8 - Fixing deprecated arrow
replace()function withshift(). - [FIX] Arrow upgrade to
0.15.2to fix the above mentioned issues - [FIX] Modifed
tests.pyto account for the timestamp change (tz is now+0000, instead of-0000) - [FIX] replaced
ts = ts.replace(tzinfo=tz.gettz(timezone))withts = ts.replace(tzinfo=timezone)indatemath.helpers.parseTime()to fix Issue #7
- [NEW] Breakout of python2 and python3 requirements
- [NEW] Breakout of python2 and python3 specific CICD pipelines
- [NEW] Derecated the following python version (although they may still work, they are no longer supported) -
2.4,2.6,3.4,3.5
** dont use this version **
- skipped due to name conflict on pypi, all changes are in
1.4.9
- [FIX] Fixed timezone for date strings: Issue #6
- [NEW] Added roundDown functionality. Allows user to specify the default rounding for expressions such as
/d. - example - assuming the time is currently 2016-01-01 12:00:00, we should get the following
>>> # now = 2016-01-01 14:00:00+00:00
>>> dm('now+/d', roundDown=False)
<Arrow [2016-01-01T23:59:00+00:00]>
>>> dm('now/d')
<Arrow [2016-01-01T00:00:00+00:00]>
- [FIX] Fixed bug with expression logic and rounding: #2
[NEW] Floats are now supported for days, hours, and seconds units. Example now-2.5d, now-3.2h. Any other unit other than days, hours, or seconds that is a float will be converted to an int and floored due to the datetime() module not being able to handle them.