ChangeLog

2.10.1 (unreleased)

Minor:

  • 112: Functions returning a new Version instance reuse the current class, helping with subclassing.

Bugfix:

  • 141: Ensure we return a new instance for Version.truncate("build").

2.10.0 (2022-05-26)

New:

  • 132: Ensure sorting a collection of versions is always stable, even with build metadata.

2.9.0 (2022-02-06)

New:

  • Add support for Django 3.1, 3.2, 4.0
  • Add support for Python 3.7 / 3.8 / 3.9 / 3.10

2.8.5 (2020-04-29)

Bugfix:

  • 98: Properly handle wildcards in SimpleSpec (e.g. ==1.2.*).

2.8.4 (2019-12-21)

Bugfix:

  • #89: Properly coerce versions with leading zeroes in components (e.g. 1.01.007)

2.8.3 (2019-11-21)

New:
  • Add Clause.prettyprint() for debugging

Bugfix:

  • #86: Fix handling of prerelease ranges within NpmSpec

2.8.2 (2019-09-06)

Bugfix:

  • #82: Restore computation of Spec.specs for single-term expressions (>=0.1.2)

2.8.1 (2019-08-29)

Bugfix:

  • Restored attribute Spec.specs, removed by mistake during the refactor.

2.8.0 (2019-08-29)

New:

  • Restore support for Python 2.

2.7.1 (2019-08-28)

Bugfix:

  • Fix parsing of npm-based caret expressions.

2.7.0 (2019-08-28)

This release brings a couple of significant changes:

  • Allow to define several range description syntaxes (SimpleSpec, NpmSpec, …)
  • Fix bugs and unexpected behaviours in the SimpleSpec implementation.

Backwards compatibility has been kept, but users should adjust their code for the new features:

  • Use SimpleSpec instead of Spec
  • Replace calls to Version('1.2', partial=True) with SimpleSpec('~1.2')
  • iter(some_spec) is deprecated.

New:

  • Allow creation of a Version directly from parsed components, as keyword arguments (Version(major=1, minor=2, patch=3))
  • Add Version.truncate() to build a truncated copy of a Version
  • Add NpmSpec(...), following strict NPM matching rules (https://github.com/npm/node-semver#ranges)
  • Add Spec.parse('xxx', syntax='<syntax>') for simpler multi-syntax support
  • Add Version().precedence_key, for use in sort(versions, key=lambda v: v.precedence_key) calls. The contents of this attribute is an implementation detail.

Bugfix:

  • Fix inconsistent behaviour regarding versions with a prerelease specification.

Deprecated:

  • Deprecate the Spec class (Removed in 3.1); use the SimpleSpec class instead
  • Deprecate the internal SpecItem class (Removed in 3.0).
  • Deprecate the partial=True form of Version; use SimpleSpec instead.

Removed:

  • Remove support for Python2 (End of life 4 months after this release)

Refactor:

  • Switch spec computation to a two-step process: convert the spec to a combination of simple comparisons with clear semantics, then use those.

2.6.0 (2016-09-25)

New:

  • #43: Add support for Django up to 1.10.

Removed:

  • Remove support for Django<1.7

Bugfix:

  • #35: Properly handle ^0.X.Y in a NPM-compatible way

2.5.0 (2016-02-12)

Bugfix:

#18: According to SemVer 2.0.0, build numbers aren’t ordered.

  • Remove specs of the Spec('<1.1.3+') form

  • Comparing Version('0.1.0') to Version('0.1.0+bcd') has new rules:

    >>> Version('0.1.0+1') == Version('0.1.0+bcd')
    False
    >>> Version('0.1.0+1') != Version('0.1.0+bcd')
    True
    >>> Version('0.1.0+1') < Version('0.1.0+bcd')
    False
    >>> Version('0.1.0+1') > Version('0.1.0+bcd')
    False
    >>> Version('0.1.0+1') <= Version('0.1.0+bcd')
    False
    >>> Version('0.1.0+1') >= Version('0.1.0+bcd')
    False
    >>> compare(Version('0.1.0+1'), Version('0.1.0+bcd'))
    NotImplemented
    
  • semantic_version.compare() returns NotImplemented when its parameters differ only by build metadata

  • Spec('<=1.3.0') now matches Version('1.3.0+abde24fe883')

  • #24: Fix handling of bumping pre-release versions, thanks to @minchinweb.

  • #30: Add support for NPM-style ^1.2.3 and ~2.3.4 specs, thanks to @skwashd

2.4.2 (2015-07-02)

Bugfix:

  • Fix tests for Django 1.7+, thanks to @mhrivnak.

2.4.1 (2015-04-01)

Bugfix:

  • Fix packaging metadata (advertise Python 3.4 support)

2.4.0 (2015-04-01)

New:

  • #16: Add an API for bumping versions, by @RickEyre.

2.3.1 (2014-09-24)

Bugfix:

  • #13: Fix handling of files encoding in setup.py.

2.3.0 (2014-03-16)

New:

  • Handle the full semver-2.0.0 specifications (instead of the 2.0.0-rc2 of previous releases)
  • #8: Allow '*' as a valid version spec

2.2.2 (2013-12-23)

Bugfix:

  • #5: Fix packaging (broken symlinks, old-style distutils, etc.)

2.2.1 (2013-10-29)

Bugfix:

  • #2: Properly expose validate() as a top-level module function.

2.2.0 (2013-03-22)

Bugfix:

  • #1: Allow partial versions without minor or patch level

New:

  • Add the Version.coerce class method to Version class for mapping arbitrary version strings to semver.
  • Add the validate() method to validate a version string against the SemVer rules.
  • Full Python3 support

2.1.2 (2012-05-22)

Bugfix:

2.1.1 (2012-05-22)

New:

  • Add introspection rules for south

2.1.0 (2012-05-22)

New:

  • Add semantic_version.Spec.filter() (filter a list of Version)
  • Add semantic_version.Spec.select() (select the highest Version from a list)
  • Update semantic_version.Version.__repr__()

2.0.0 (2012-05-22)

Backwards incompatible changes:

  • Removed “loose” specification support
  • Cleanup Spec to be more intuitive.
  • Merge Spec and SpecList into Spec.
  • Remove SpecListField

1.2.0 (2012-05-18)

New:

  • Allow split specifications when instantiating a SpecList:

    >>> SpecList('>=0.1.1', '!=0.1.3') == SpecList('>=0.1.1,!=0.1.3')
    True
    

1.1.0 (2012-05-18)

New:

  • Improved “loose” specification support (>~, <~, !~)
  • Introduced “not equal” specifications (!=, !~)
  • SpecList class combining many Spec
  • Add SpecListField to store a SpecList.

1.0.0 (2012-05-17)

First public release.

New: