Note
End-of-life for xoutil 2.0
xoutil 2.0.7 will be the last release in the xoutil 2.0.x series that adds new functionality. Any future release in this series will be bug-fix only.
Since the pair-wise releases of 1.9.x and 2.0.x some new functionality has been added to some version of 1.9.x that is not present in some releases of the 2.0.x series.
This created some dose of unease for users wanting a new feature in 1.9.3 in a package where Python 2/3 was not a true concern; they were forced to require 'xoutil>=1.9.3,!=2.0.0,!=2.0.1,!=2.0.2' to avoid the package manager to select a version without the needed feature.
This end-of-life notice puts an end to this issue.
Note
End-of-life for xoutil 1.9
xoutil 1.9.7 will be the last release of xoutil that adds functionality. Future releases will be strictly bug-fix only.
Warning
Due to lack of time, we have decided to release this version without proper releases of 1.7.0 and 1.6.11.
- Introduces
xoutil.compat.iteritems_
,xoutil.compat.iterkeys_
andxoutil.compat.itervalues_
. execution context <xoutil.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
- Adds function
xoutil.fs.rmdirs
that removes empty dirs. - Adds functions
xoutil.string.safe_join
,xoutil.string.safe_encode
,xoutil.string.safe_decode
, andxoutil.string.safe_strip
; and the classxoutil.string.SafeFormatter
. - Adds function
xoutil.cpystack.iter_frames
.
- 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.
- Improves deprecation warnings by pointing to the real calling filename
- Removes all internal use of simple_memoize since it's deprecated. We now use
~xoutil.functools.lru_cache
.
- Created the whole documentation Sphinx directory.
- Removed xoutil.future since it was not properly tested.
- Removed xoutil.annotate, since it's not portable across Python's VMs.
- Introduced module
xoutil.collections
- Deprecated modules
xoutil.default_dict
,xoutil.opendict
in favor ofxoutil.collections
. - Backported
xoutil.functools.lru_cache
from Python 3.2. - Deprecated module
xoutil.memoize
in favor ofxoutil.functools.lru_cache
.
- Introduces a new module :py`xoutil.proxy`:mod:.
- Starts working on the sphinx documentation so that we move to 1.1 release we a decent documentation.
- Introduces xoutil.iterators.slides and xoutil.aop.basic.contextualized
- 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
- Removes bugs that were not checked (tested) in the previous release.
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.
- 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.
- Introduces decorators: xoutil.decorators.instantiate and xoutil.aop.complementor
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
- Includes a new module
xoutil.annotate
that provides a way to place Python annotations in forward-compatible way.