Changelog¶
Version are structured like the following: <major>.<minor>.<bugfix>
. The
first 0.1 release does not properly adhere to this. Unless explicitly stated,
changes are made by Andreas Runfalk.
Version 2.0.0¶
Released on UNRELEASED
This release modernizes Spans and gets rid of legacy bits.
Drop Python 2.7 support
Drop Python 3.4 support (might still work but it’s unsupported)
Drop Python 3.5 support (might still work but it’s unsupported)
Drop Python 3.6 support (might still work but it’s unsupported)
Add Python 3.10 support (was working but is now actively tested)
Version 1.1.1¶
Released on 21st April, 2021
Normalize ranges to be empty when start and end is the same and either bound is exclusive (bug #18, lgharibashvili)
Version 1.1.0¶
Released on 2nd June, 2019
This release changes a lot of internal implementation details that should prevent methods from not handling unbounded ranges correctly in the future.
Added validation to ensure unbounded ranges are never inclusive
Changed
__repr__
for ranges to be more similar to proper Python syntax. The old representation looked like mismatched parentheses. For instancefloatrange((,10.0])
becomesfloatrange(upper=10.0, upper_inc=True)
Dropped Python 3.3 support since it’s been EOL for almost two years. It probably still works but it is no longer tested
Fixed pickling of empty range sets not working (bug #14)
Fixed
union()
not working properly with unbounded rangesFixed lowerly unbounded ranges improperly being lower inclusive
Fixed
startswith()
andendsbefore()
being not handling empty ranges
Version 1.0.2¶
Released on 22th February, 2019
Fixed
union()
whenupper_inc
is set toTrue
(bug #11, Michael Krahe)
Version 1.0.1¶
Released on 31st January, 2018
Fixed
PartialOrderingMixin
not using__slots__
(bug #10)
Version 1.0.0¶
Released on 8th June, 2017
Added
NotImplemented
for<<
and>>
operators when there is a type mismatchAdded
|
operator for unions ofRange
andNotImplemented
support forRangeSet
Added
&
operator for intersections ofRange
andNotImplemented
support forRangeSet
Added
-
operator for differences ofRange
andNotImplemented
support forRangeSet
Added
reversed()
iterator support forDiscreteRange
Fixed overlap with empty range incorrectly returns
True
(bug #7)Fixed issue with
contains()
for scalars on unbounded rangesFixed type check for
right_of()
Fixed type check for
contains()
Fixed type check for
union()
Fixed type check for
intersection()
Fixed type check for
difference()
Fixed infinite iterators not being supported for
DiscreteRange
Version 0.5.0¶
Released on 16th April, 2017
This release is a preparation for a stable 1.0 release.
Fixed comparison operators when working with empty or unbounded ranges. They would previously raise exceptions. Ranges are now partially ordered instead of totally ordered
Added more unit tests
Renamed classes to match PEP 8#class-names conventions. This does not apply to classes that works on built-in that does not follow PEP 8#class-names.
Refactored
left_of()
Refactored
overlap()
Refactored
union()
Version 0.4.0¶
Released on 20th March, 2017
This release is called 0.4.1 on PyPI because I messed up the upload.
Added new argument to
from_date()
for working with different kinds of date intervals. The argument accepts a period of either"day"
(default),"week"
(ISO week),"american_week"
(starts on sunday),"month"
,"quarter"
or"year"
.Added new methods to
daterange
for working with different kinds of date intervals:from_week()
,from_month()
,from_quarter()
andfrom_year()
.Added a new class
PeriodRange
for working with periods like weeks, months, quarters or years. It inherits all methods fromdaterange
and is aware of its own period type. It allows things like getting the previous or next week.Fixed some broken doctests
Moved unit tests to pytest
Removed Tox config
Minor documentation tweaks
Version 0.3.0¶
Released on 26th August, 2016
Added documentation for
__iter__()
Fixed intersection of multiple range sets not working correctly (bug #3)
Fixed iteration of
RangeSet
returning an empty range whenRangeSet
is empty (bug #4)
Warning
This change is backwards incompatible to code that expect range sets to always return at least one set when iterating.
Version 0.2.1¶
Released on 27th June, 2016
Fixed
RangeSet
not returningNotImplemented
when comparing to classes that are not sub classes ofRangeSet
, pull request #2 (Michael Krahe)Updated license in
setup.py
to follow recommendations by PyPA
Version 0.2.0¶
Released on 22nd December, 2015
Added
__len__()
to range sets (Michael Krahe)Added
contains()
to range sets (Michael Krahe)Added Sphinx style doc strings to all methods
Added proper Sphinx documentation
Added unit tests for uncovered parts, mostly error checking
Added wheel to PyPI along with source distribution
Fixed a potential bug where comparing ranges of different types would result in an infinite loop
Changed meta class implementation for range sets to allow more mixins for custom range sets
Version 0.1.4¶
Released on 15th May, 2015
Added
last
property toDiscreteRange
Added
from_date()
helper todaterange
Added more unit tests
Improved pickle implementation
Made type checking more strict for date ranges to prevent
datetime
from being allowed indaterange
Version 0.1.3¶
Released on 27th February, 2015
Added
offset()
to some range typesAdded
offset()
to some range set typesAdded sanity checks to range boundaries
Fixed incorrect
__slots__
usage, resulting in__slots__
not being used on most rangesFixed pickling of ranges and range sets
Simplified creation of new range sets, by the use of the meta class
MetaRangeSet
Version 0.1.2¶
Released on 13th June, 2014
Fix for inproper version detection on Ubuntu’s bundled Python interpreter
Version 0.1.1¶
Released on 12th June, 2014
Readme fixes
Syntax highlighting for PyPI page
Version 0.1.0¶
Released on 30th August, 2013
Initial release