Changelog

1.7 series

2017-10-31. Release 1.7.12

  • xoutil.datetime.EmptyTimeSpan is now pickable.

2017-10-05. 1.7.11

  • Fix bug #9: TimeSpans are not hashable.

2017-09-21. 1.7.10

2017-09-20. 1.7.9

2017-09-19. 1.7.8

  • Added module xoutil.dim – Facilities to work with concrete numbers.

2017-09-07. 1.7.7

2017-09-05. Release 1.7.6

  • Fix a bug in xoutil.datetime.TimeSpan for Python 2. Representing a time span might fail with a ‘Maximum Recursion Detected’ error.

2017-09-05. Release 1.7.5

2017-04-06. Release 1.7.4

2017-02-07. Release 1.7.2

2015-12-17. Release 1.7.1

Fixes in 1.7.1.post1:

Fixes in 1.7.1.post2:

Warning

Due to lack of time, we have decided to release this version without proper releases of 1.7.0 and 1.6.11.

Unreleased. Release 1.7.0

This release was mainly focused in providing a new starting point for several other changes. This release is being synchronized with the last release of the 1.6.11 to allow deprecation messages to be included properly.

The following is the list of changes:

1.6 series

Unreleased. Release 1.6.11

This is the last release of the 1.6 series. It’s being synchronized with release 1.7.0 to deprecate here what’s being changed there.

  • The defaults argument of xoutil.objects.smart_copy() is marked to be keyword-only in version 1.7.0.
  • Fixes a bug in xoutil.objects.smart_copy(). If defaults was None is was not being treated the same as being False, as documented. This bug was also fixed in version 1.7.0.
  • xoutil.objects.metaclass() will be moved to xoutil.eight.meta in version 1.7.0 and deprecated, it will be removed from xoutil.object in version 1.7.1.
  • This release will be the last to support Python 3.1, 3.2 and 3.3. Support will be kept for Python 2.7 and Python 3.4.

2015-04-15. Release 1.6.10

2015-04-03. Release 1.6.9

2015-01-26. Release 1.6.8

2014-12-17. Release 1.6.7

  • Added the strict argument to xoutil.records.datetime_reader().

  • You may now install xoutil[extra] so that not required but useful packages are installed when xoutil is installed.

    For now this only includes python-dateutil that allows the change in datetime_reader().

2014-11-26. Release 1.6.6

2014-10-13. Release 1.6.5

  • Added the module xoutil.records.

  • Deleted deprecated xoutil.compat.

  • Deprecate the xoutil.six. It will removed in 1.7.0 (probably next release).

    Now xoutil requires six 1.8.0.

2014-09-13. Release 1.6.4

2014-08-05. Release 1.6.3

2014-08-04. Release 1.6.2

2014-07-18. Release 1.6.1

2014-06-02. Release 1.6.0

  • Changes the signature of xoutil.names.nameof(), also the semantics of the full parameter is improved.

    This is the major change in this release. Actually, this release has being prepared in sync with the release 1.5.6 (just a few days ago) to have this change passed while still keeping our versions scheme.

1.5 series

2014-05-29. Release 1.5.6

2014-05-13. Release 1.5.5

2014-04-08. Release 1.5.4

  • Fix a bug in xoutil.objects.extract_attrs(). It was not raising exceptions when some attribute was not found and default was not provided.

    Also now the function supports paths like xoutil.objects.get_traverser().

  • xoutil contains now a copy of the excellent project six exported as xoutil.six (not documented here). Thus the compatibility module xoutil.compat is now deprecated and will removed in the future.

    There are some things that xoutil.compat has that xoutil.six does not. For instance, six does not include fine grained python version markers. So if your code depends not on Python 3 v Python 2 dichotomy but on features introduced in Python 3.2 you must use the sys.version_info directly.

    Notwithstanding that, xoutil will slowly backport several Python 3.3 standard library features to Python 2.7 so that they are consistently used in any Python up to 2.7 (but 3.0).

2014-04-01. Release 1.5.3

2014-03-03. Release 1.5.2

2014-01-24. Release 1.5.0

1.4 series

2013-04-26. Release 1.4.0

1.3 series

1.2 series

2013-04-03. Release 1.2.3

  • Bug fixes in xoutil.proxy and xoutil.aop.classical.

2013-03-25. Release 1.2.2

  • Adds xoutil.bases - Implementations of base 32 and base 64 (numeric) representations.

2013-02-14. Release 1.2.1

  • Loads of improvements for Python 3k compatibility: Several modules were fixed or adapted to work on both Python 2.7 and Python 3.2. They include (but we might have forgotten some):
  • Rescued xoutil.annotate and is going to be supported from now on.
  • Introduced module xoutil.subprocess and function xoutil.subprocess.call_and_check_output().
  • Introduced module xoutil.decorator.compat that enables constructions that are interoperable in Python 2 and Python 3.
  • Introduced xoutil.iterators.zip(), xoutil.iterators.izip(), xoutil.iterators.map(), and xoutil.iterators.imap().

2013-01-04. Release 1.2.0

This is the first of the 1.2.0 series. It’s been given a bump in the minor version number because we’ve removed some deprecated functions and/or modules.

  • Several enhancements to xoutil.string to make it work on Python 2.7 and Python 3.2.

    Deprecates xoutil.string.normalize_to_str() in favor of the newly created xoutil.string.force_str() which is Python 3 friendly.

  • Backwards incompatible changes in xoutil.objects API. For instance, replaces getattr parameter with getter in xoutil.objects.xdir() and co.

  • Extracts decorator-making facilities from xoutil.decorators into xoutil.mdeco.

  • Fixes in xoutil.aop.extended. Added parameters in xoutil.aop.classical.weave().

  • Introduces xoutil.iterators.first_n() and deprecates xoutil.iterators.first() and xoutil.iterators.get_first().

  • Removes the zope.interface awareness from xoutil.context since it contained a very hard to catch bug. Furthermore, this was included to help the implementation of xotl.ql, and it’s no longer used there.

    This breaks version control policy since it was not deprecated beforehand, but we feel it’s needed to avoid spreading this bug.

  • Removed long-standing deprecated modules xoutil.default_dict, xoutil.memoize and xoutil.opendict.

  • Fixes bug in xoutil.datetime.strfdelta(). It used to show things like ‘1h 62min’.

  • Introduces xoutil.compat.class_type that holds class types for Python 2 or Python 3.

1.1 series

2012-11-01. Release 1.1.4

  • Introduces xoutil.compat.iteritems_(), xoutil.compat.iterkeys_() and xoutil.compat.itervalues_().
  • execution context are now aware of zope.interface interfaces; so that you may ask for a context name implementing a given interface, instead of the name itself.
  • Improves xoutil.formatter documentation.
  • Several fixes to xoutil.aop.classical. It has sudden backwards incompatible changes.
  • before and after methods may use the *args, **kwargs idiom to get the passed arguments of the weaved method.
  • Several minor fixes: Invalid warning about Unset not in xoutil.types

2012-08-22. Release 1.1.3

2012-07-11. Release 1.1.2

  • Fixes all copyrights notices and chooses the PSF License for Python 3.2.3 as the license model for xoutil releases.
  • All releases from now on will be publicly available at github.

2012-07-06. Release 1.1.1

  • Improves deprecation warnings by pointing to the real calling filename
  • Removes all internal use of simple_memoize since it’s deprecated. We now use lru_cache().

2012-07-03. Release 1.1.0

1.0 series

2012-06-15. Release 1.0.30

  • Introduces a new module xoutil.proxy.
  • Starts working on the sphinx documentation so that we move to 1.1 release we a decent documentation.

2012-06-01. Release 1.0.29.

  • Introduces xoutil.iterators.slides and xoutil.aop.basic.contextualized

2012-05-28. Release 1.0.28.

  • Fixes normalize path and other details
  • Makes validate_attrs to work with mappings as well as objects
  • Improves complementors to use classes as a special case of sources
  • Simplifies importing of legacy modules
  • PEP8

2012-05-22. Release 1.0.27.

  • Removes bugs that were not checked (tested) in the previous release.

2012-05-21. Release 1.0.26.

  • Changes in AOP classic. Now you have to rename after, before and around methods to _after, _before and _around.

    It is expected that the signature of those methods change in the future.

  • Introducing a default argument for xoutil.objects.get_first_of().

  • Other minor additions in the code. Refactoring and the like.

2012-04-30. Release 1.0.25.

  • Extends the classical AOP approach to modules. Implements an extended version with hooks.
  • 1.0.25.1: Makes classical/extended AOP more reliable to TypeError’s in getattr. xoonko, may raise TypeError’s for TranslatableFields.

2012-04-27. Release 1.0.24.

  • Introduces a classical AOP implementation: xoutil.aop.classical.

2012-04-10. Release 1.0.23.

  • Introduces decorators: xoutil.decorators.instantiate and xoutil.aop.complementor

2012-04-05. Release 1.0.22

  • Allows annotation’s expressions to use defined local variables. Before this release the following code raised an error:

    >>> from xoutil.annotate import annotate
    >>> x1 = 1
    >>> @annotation('(a: x1)')
    ... def dummy():
    ...     pass
    Traceback (most recent call last):
       ...
    NameError: global name 'x1' is not defined
    
  • Fixes decorators to allow args-less decorators

2012-04-03. Release 1.0.21

  • Includes a new module xoutil.annotate that provides a way to place Python annotations in forward-compatible way.