Version 2.8.2 (2021-07-08)
==========================
Data updates
------------
- Updated tzdata version to 2021a.
Bugfixes
--------
- Fixed a bug in the parser where non-``ValueError`` exceptions would be raised
during exception handling; this would happen, for example, if an
``IllegalMonthError`` was raised in ``dateutil`` code.
- Fixed the custom ``repr`` for ``dateutil.parser.ParserError``, which was not
defined due to an indentation error.
- Fixed a bug that caused ``b'`` prefixes to appear in parse_isodate exception
messages.
- Make ``isoparse`` raise when trying to parse times with inconsistent use of
`:` separator.
- Fixed ``tz.gettz()`` not returning local time when passed an empty string.
Documentation changes
---------------------
- Rearranged parser documentation into "Functions", "Classes" and "Warnings and
Exceptions" categories.
- Updated ``parser.parse`` documentation to reflect the switch from
``ValueError`` to ``ParserError``.
- Fixed methods in the ``rrule`` module not being displayed in the docs.
- Changed some relative links in the exercise documentation to refer to the
document locations in the input tree, rather than the generated HTML files in
the HTML output tree (which presumably will not exist in non-HTML output
formats).
Misc
----
- Moved ``test_imports.py``, ``test_internals.py`` and ``test_utils.py`` to
pytest.
- Added project_urls for documentation and source.
- Simplified handling of bytes and bytearray in ``_parser._timelex``.
- Changed the tests against the upstream tz database to always generate fat
binaries, since until GH-590 and GH-1059 are resolved, "slim" zic binaries
will cause problems in many zones, causing the tests to fail. This also
updates ``zoneinfo.rebuild`` to always generate fat binaries.
- Moved sdist and wheel generation to use `python-build`.
Version 0.18.0
==============
Note: Version 0.17 has some alpha releases but ultimately was never finalised.
0.18 actually continues where 0.16 left off.
- Support for Python 3.5 and 3.6 has been dropped. This release mostly focuses
on keeping vdirsyncer compatible with newer environments.
- click 8 and click-threading 0.5.0 are now required.
- For those using ``pipsi``, we now recommend using ``pipx``, it's successor.
- Python 3.9 is now supported.
- Our Debian/Ubuntu build scripts have been updated. New versions should be
pushed to those repositories soon.
(pkgsrc chagnes)
- Add TEST_DEPENDS+=
(upstream changes)
# hms 1.1.0
## Breaking changes
- `"hms"` objects no longer have a common type with `character` and `numeric`. Combining such values previously threw a warning, now throws an error (#94).
- `vec_cast()` and `as_hms()` throw error instead of a warning if input can't be parsed (#68).
## Features
- New `unique.hms()` method (#98, @joethorley).
- `as_hms()` is a generic again (#81).
## Internal
- Avoid `LazyData` in `DESCRIPTION`.
- Bump required versions of ellipsis and vctrs to avoid warning during package load.
- Using lifecycle package (#94).
# hms 1.0.0
## Life cycle
- hms is now marked as "stable".
## Breaking changes
- `"hms"` objects no longer have a common type with `character` and `numeric`. Combining such values previously threw a warning, now throws an error (#94).
- `vec_cast()` and `as_hms()` now throw error instead of a warning if input can't be parsed (#68).
## Features
- `as_hms()` is a generic again (#81).
- `round_hms()` and `trunc_hms()` gain `digits` argument (#78, @hglanz).
## Bug fixes
- `as_hms()` and `vec_cast()` now correctly treat objects of class `"difftime"` with `integer` mode (#84).
## Internal
- Using lifecycle package (#94).
- hms has been re-licensed as MIT (#86).
# hms 0.5.3
- Use `vec_default_ptype2()`, remove `vec_ptype2.hms.unspecified()` (#80, @romainfrancois).
- `vec_ptype2.hms.default()` forwards to `vec_default_ptype2()` for compatibility with vctrs 0.2.1.
- Remove `as.data.frame.hms()`, handeld by vctrs.
# hms 0.5.2.9000
- Internal changes only.
# hms 0.5.2
- Work around parsing error that occurs on DST changeover dates (https://bugs.r-project.org/bugzilla/show_bug.cgi?id=16764).
# hms 0.5.1
- Lossy casts from `character` vectors to `hms` now also trigger a warning if the cast succeeds in the first element of the vector but fails for other elements.
Remove Exporter::Lite from DEPENDS
Upstream changes:
Changes for version 0.16 - 2021-05-19
Switched to plain Exporter, instead of Exporter::Lite. Thanks to Graham Knop for PR.
Upstream changes:
1.54 2020-12-04
- This release contains a lot of small documentation revisions, both to
formatting and content.
1.53 2020-11-08
- Added a $dt->rfc3339 method. Based on discussion in GH #109 by worthmine.
Add LICENSE
Upstream changes:
0.08 2020-12-18
- (Update) Add 'strict' option to require timezone in time components (PR
#3 from @timgimyee).
- (Update) Updated Makefile.PL with new metadata.
Upstream changes:
1.79 2021-05-02
* Fix too-strict type checking for time zones. This module now uses the same
check as DateTime itself, which allows for things that don't subclass
DateTime::TimeZone as long as they provide the same API. Reported by
E. Choroba. GH #30.
Upstream changes:
0.0701 2021-05-22
- Fix versioning, reindex
0.07 2021-05-21
- if microseconds are set on provided DateTime object to time_format,
use them. Fixes RT #136549
version 1.5.0 (release tag v1.5.0.rel)
======================================
* clean-up deprecated calendar specific subclasses.
* added string formatting support to `cftime.datetime` objects
(via `cftime.datetime.__format__`).
* add support for astronomical year numbering (including year zero) for
real-world calendars using 'has_year_zero' cftime.datetime kwarg.
Default is False for 'real-world' calendars ('julian', 'gregorian'/'standard',
'proleptic_gregorian'). Ignored for idealized calendars like '360_day
(they always have year zero).
* add "change_calendar" cftime.datetime method to switch to another
'real-world' calendar. Enable comparison of cftime.datetime instances
with different 'real-world' calendars (using the new change_calendar method)
* remove legacy `utime` class, and legacy `JulianDayFromDate` and
`DateFromJulianDay` functions (replaced by `cftime.datetime.toordinal`
and `cftime.datetime.fromordinal`).
* Change ValueError to TypeError in __sub__
aniso8601 9.0.1
===============
Added
-----
* Development requirements handled by :code:`extras_require` (install with :code:`pip install -e .[dev]`)
* Pre-commit hooks, managed with `pre-commit <https://pre-commit.com/>`_ (install with :code:`pre-commit install`)
* Add :code:`readthedocs.yaml` to make configuration explicit
Changed
-------
* Code formatted with `Black <https://black.readthedocs.io/en/stable/index.html>`_
* Imports sorted with `isort <https://pycqa.github.io/isort/>`_
* Following `Keep a Changelog <https://keepachangelog.com/en/1.0.0/>`_ for this and future CHANGELOG entries
* Removed python-dateutil from :code:`BuildRequires` in specfile as they are no longer required since calendar level duration building was split to a separate project (6.0.0)
* Heading level of top of CHANGELOG
Fixed
-----
* Parsing prescribed durations with only hour and second time components (see `PR 14 <https://bitbucket.org/nielsenb/aniso8601/pull-requests/14>`_)
* Parsing prescribed durations with only year and day components
aniso8601 9.0.0
===============
Changes
-------
* Add support for concise interval format (see `27 <https://bitbucket.org/nielsenb/aniso8601/issues/27/support-for-short-syntax-for-intervals>`_)
* Add explicit bounds of [000, 366] to day of year component :code:`_parse_ordinal_date`, this adds the same limits to dates of the format YYYYDDD or YYYY-DDD when using :code:`parse_date`
* Add :code:`range_check_date`, :code:`range_check_time`, :code:`range_check_duration`, :code:`range_check_repeating_interval`, and :code:`range_check_timezone` range checking class methods to :code:`BaseTimeBuilder` there are no datetime or non-repeating interval check function as they are made of already checked parts
* :code:`PythonTimeBuilder` now calls the appropriate range check functions using the :code:`range_check_date`, :code:`range_check_time`, :code:`range_check_duration`, :code:`range_check_repeating_interval`, and :code:`range_check_timezone` methods defined in :code:`aniso8601.builders`
* Add :code:`range_check_duration` to :code:`PythonTimeBuilder` which calls :code:`BaseTimeBuilder.range_check_duration` and performs additional checks against maximum timedelta size
* Add :code:`range_check_interval` to :code:`PythonTimeBuilder` which handles building concise dates and performs additional checks against maximum timedelta size
* Add :code:`get_datetime_resolution` which behaves like :code:`get_time_resolution` but accepts a ISO 8601 date time as an argument, return value is a :code:`TimeResolution`
* Add :code:`exceptions.RangeCheckError` as a parent type of all failures in the range check methods, it descends from :code:`ValueError`
* Add :code:`get_duration_resolution` which behaves like other resolution helpers, return value is a :code:`DurationResolution`
* Add :code:`get_interval_resolution` which behaves like other resolution helpers, return value is a :code:`IntervalResolution`
* Negative durations now fail at the parse step and simply raise :code:`ISOFormatError`, calling a :code:`PythonTimeBuilder.build_duration` directly with a negative duration component will yield an :code:`ISOFormatError` in the range check
* Raise :code:`DayOutOfBoundsError` if calendar day exceeds number of days in calendar month
* Raise :code:`DayOutOfBoundsError` if ordinal day exceeds number of days in calendar year (366 now raises :code:`DayOutOfBoundsError` in non-leap year)
* Raise :code:`ISOFormatError` when date or time string contains extra whitespace
* Raise :code:`ISOFormatError` on multiple fraction separators (comma, full-stop) in a time string
* Raise :code:`ISOFormatError` when duration contains multiple duration designators ("P"), or time designators ("T")
* :code:`PythonTimeBuilder.build_duration` raises :code:`YearOutOfBoundsError`, :code:`MonthOutOfBoundsError`, :code:`WeekOutOfBoundsError`, :code:`HoursOutOfBoundsError`, :code:`MinutesOutOfBoundsError`, or :code:`SecondsOutOfBoundsError` when a given duration component would result in a :code:`timedelta` that would exceed the maximum size
* Raise :code:`ISOFormatError` if number of delimiters is not exactly 1 in :code:`parse_interval`
* Raise :code:`ISOFormatError` when either part of an interval string before of after the delimiter is empty
* Raise :code:`YearOutOfBoundsError` in :code:`PythonTimeBuilder.build_interval` if an interval with a duration would exceed the maximum or minimum years for Python date objects
* Simplify :code:`parse_date`, :code:`build_date` will now be called with explicit :code:`None` arguments instead of date components not in the parsed string excluded from the call
* Change :code:`get_date_resolution` to call :code:`parse_date` and return the resolution based on the smallest parsed component
* Simplify :code:`parse_time`, :code:`build_time` will now be called with explicit :code:`None` arguments instead of date components not in the parsed string excluded from the call
* Change :code:`get_time_resolution` to call :code:`parse_time` and return the resolution based on the smallest parsed component
* :code:`TupleBuilder` now builds :code:`DateTuple`, :code:`TimeTuple`, :code:`DatetimeTuple`, :code:`DurationTuple`, :code:`IntervalTuple`, :code:`RepeatingIntervalTuple` and :code:`TimezoneTuple` namedtuples
* Simplify :code:`parse_duration`, :code:`build_duration` will now be called with explicit :code:`None` arguments when components of a prescribed duration are not present in the ISO 8601 duration string instead of being excluded from the call
* Remove unused :code:`decimalfraction.find_separator`
* Remove unused :code:`PythonTimeBuilder._split_to_microseconds`
* Removed :code:`NegativeDurationError`
Deprecation
-----------
* **Update on Python 2 support**: Python 2 support was slated to be removed in 7.0.0 but was not, it will remain until a test fails on Python 2 but not Python 3
* Using Setuptools to run tests (:code:`python setup.py tests`) will be removed in the next major or minor version (either 9.1.0, 10.0.0)
version 1.4.1 (release tag v1.4.1.rel)
======================================
* Restore use of calendar-specific sub-classes in `cftime.num2date`,
`cftime.datetime.__add__`, and `cftime.datetime.__sub__`. The use of them
will be removed in a later release.
* add 'fromordinal' static method to create a cftime.datetime instance
from a julian day ordinal and calendar (inverse of 'toordinal').
version 1.4.0 (release tag v1.4.0.rel)
======================================
* `cftime.date2num` will now always return an array of integers, if the units
and times allow. Previously this would only be true if the units were
'microseconds'. In other circumstances, as before, `cftime.date2num`
will return an array of floats.
* Rewrite of julian day/calendar functions (_IntJulianDayToCalendar and
_IntJulianDayFromCalendar) to remove GPL'ed code. cftime license
changed to MIT (to be consistent with netcdf4-python).
* Added datetime.toordinal() (returns julian day, kwarg 'fractional'
can be used to include fractional day).
* cftime.datetime no longer uses calendar-specific sub-classes.
version 1.3.1 (release tag v1.3.1rel)
=====================================
* fix for issue 211 bug in masked array handling in date2num)
* switch from travis/appveyor to github actions for CI/CD.
* switch to cython language_level=3 (no more support for python 2).
* add __init__.py to test dir so pytest coverage works again. Add Coveralls
step to github actions workflow to upload coverage data to coveralls.io
* move package under 'src' directory so cftime can be imported
from install dir
version 1.3.0 (release tag v1.3.0rel)
=====================================
* zero pad years in strtime
* have cftime.datetime constuctor create 'calendar-aware' instances (default is
'standard' calendar, if calendar='' or None the instance is not calendar aware and some
methods, like dayofwk, dayofyr, __add__ and __sub__, will not work).
The calendar specific sub-classes are now deprecated, but remain for now
as stubs that just instantiate the base class and override __repr__.
* update regex in _cpdef _parse_date so reference years with more than four
digits can be handled.
* Change default calendar in cftime.date2num from 'standard' to None
(calendar associated with first input datetime object is used).
* add `cftime.datetime.tzinfo=None` for compatibility with python datetime
.
version 1.2.1 (release tag v1.2.1rel)
=====================================
* num2date uses 'proleptic_gregorian' scheme when basedate is post-Gregorian but date is pre-Gregorian
.
* fix 1.2.0 regression (date2num no longer works with numpy scalar array inputs).
* Fix for issue 187 (have date2num round to the nearest second when within 1
microsecond).
* Fix for issue 189 (leap years calculated incorrectly for negative years in
proleptic_gregorian calendar).
version 1.2.0 (release tag v1.2.0rel)
=====================================
* Return the default values of dayofwk and dayofyr when calendar
is ''.
* fix treatment of masked arrays in num2date and date2num.
Also make sure masked arrays are output from num2date/date2num if
masked arrays are input.
* Where possible, use timedelta arithmetic to decode times exactly within
num2date.
* Make taking the difference between two cftime datetimes to produce a
timedelta exact to the microsecond; depending on the units encoding,
this enables date2num to be exact as well.
* utime.date2num/utime.num2date now just call module level functions.
JulianDayFromDate/DateFromJulianDay no longer used internally.
Version 3.0.10 is a patch release.
This release is binary and source compatible with version 3.0.0.
Note that the libical-glib library is considered unstable; therefore not binary compatible with previous releases
ReleaseNotes:
Fix building -DSTATIC_ONLY=True with Ninja
Fix generating wrong recurrence rules (#478)
Fix a bug computing transitions in tzfiles
Fix reading TZif files to use TZ string in the footer as the last (non-terminating) transitions
Fix reading TZif files to use more RRULEs and/or RDATEs whevever possible
Built-in timezones updated to tzdata2021a
This builds with current glib2.
Major changes in 40.0:
* Updated translations
Major changes in 40.rc:
* Updated translations
* Minor cleanups
Major changes in 40.beta:
* Updated translations
* Use HdyViewSwitcher in the main window
* Fix the color of new calendars
Major changes in 40.alpha:
* Updated translations
* Depend on libhandy-1
* Port to the newer libgweather api
* Improve the event editor
Update DEPENDS
Upstream changes:
1.78 2020-12-15
* Fix tests for new failure caused by locale data changes in DateTime::Locale
1.29. Reported by cthulhu8zombie. GH #28.
* Added a warning about using locale-specific patterns. Some of these patterns
can change quite a bit as the locale data is updated, so using them for
parsing does not produce stable results across time. This is what caused the
test failures that this release fixes.