Changelog¶
1.8 series¶
2018-02-24. Release 1.8.8¶
- Fix bug #28:
xoutil.future.inspect.getattr_static()
failed with Python’s 2 old classes.
2018-01-06. Release 1.8.7¶
- Add parameter ‘encoding’ to
slugify()
andforce_ascii()
. This solves bug #25. - Stop using
locale.getpreferredencoding()
inforce_encoding()
. Also related to bug #25.
2018-01-02. Release 1.8.6¶
- Fix bug #24:
TimeSpan
should always return adatetime.date
for its start_date and end_date attribute. Even if initialized withdatetime.datetime
2017-12-22. Release 1.8.5¶
- Deprecate module
xoutil.logger
. - Remove deprecated function
xoutil.iterators.fake_dict_iteritems
. - Add
xoutil.objects.temp_attributes()
. - Add functions
fst()
andsnd()
.
2017-12-15. Release 1.8.4¶
- Add module
xoutil.future.csv
. - Add module
xoutil.future.mimetypes
. - Add module
xoutil.eight.urllib
. - The module
xoutil.iterators
is now officially namedxoutil.future.itertools
. The aliasxoutil.iterators
remains as a deprecated alias. - Add
xoutil.future.itertools.merge()
. - Add
xoutil.future.types._get_mro_attr()
function. - Deprecate in
xoutil.future.types
module:mro_dict
class; and the functionsmro_get_value_list
,mro_get_full_mapping
,is_iterable
,is_collection
,is_mapping
,is_string_like
,is_scalar
,is_module
,are_instances
, andno_instances
.
2017-11-28. Release 1.8.3¶
- Fix bug #20:
xoutil.future.calendar
may fail at import time. - Add
xoutil.params.pop_keyword_values()
. - Add
xoutil.future.collections.codedict
. Deprecate modulexoutil.formatter
.
2017-11-22. Release 1.8.2¶
- Add displacement operations
left shift (<<)
andright shift (>>)
forTimeSpan
. - Add
xoutil.objects.smart_getter()
andxoutil.objects.save_attributes()
. - Document experimental module
xoutil.tasking
. - Add extra (and experimental) module
xoutil.testing
.
2017-11-17. Release 1.8.1¶
- Remove deprecated
xoutil.objects.get_and_del_first_of()
,xoutil.objects.smart_getattr()
, andxoutil.objects.get_and_del_attr()
. - Remove deprecated arguments from
xoutil.objects.xdir()
andxoutil.objects.fdir()
. - Fix bug #17:
xoutil.fp.tools.compose
is not wrappable. - Move
xoutil.decorator.memoized_property
toxoutil.objects.memoized_property
module. Deprecate the first. - Deprecate
xoutil.decorator.memoized_instancemethod
. - Deprecate
xoutil.decorator.reset_memoized()
. Usereset()
. - Fix bug (unregistered):
xoutil.objects.traverse()
ignores its getter.
2017-11-03. Release 1.8.0¶
Remove deprecated
xoutil.objects.metaclass
, usexoutil.eight.meta.metaclass()
instead.Several modules are migrated to
xoutil.future
:Note
All modules remain importable from its future-less version, however, deprecated.
Add function
xoutil.deprecation.import_deprecated()
,inject_deprecated()
can be deprecated now.Add function
xoutil.deprecation.deprecate_linked()
to deprecate full modules imported from a linked version. The main example are all sub-modules ofxoutil.future
.Add function
xoutil.deprecation.deprecate_module()
to deprecate full modules when imported.The module
xoutil.string
suffered a major reorganization. See details in String Ambiguity in Python.Create
__crop__
protocol for small string representations, seexoutil.clipping.crop()
for more information.Because
clipping
module is still experimental, definitive names of operator and main function must be validated before it could be considered definitive. Proposals are: “crop”, “small”, “short”, “compact”, “abbr”.Remove
xoutil.connote
that was introduced provisionally in 1.7.1.Module
xoutil.params
was introduced provisionally in 1.7.1, but now has been fully recovered.- Add function
issue_9137()
– Helper to fix issue 9137 (self ambiguity). - Add function
check_count()
– Checker for positional arguments actual count against constrains. - Add function
check_default()
– Default value getter when passed as a last excess positional argument. - Add function
single()
– Return true only when a unique argument is given. - Add function
keywords_only()
– Decorator to make a function to accepts its keywords arguments as keywords-only. - Add function
pop_keyword_arg()
– Tool to get a value from keyword arguments using several possible names. - Add class
ParamManager
– Parameter manager in a “smart” way. - Add class
ParamScheme
– Parameter scheme definition for a manager. - Add class
ParamSchemeRow
– Parameter scheme complement. - Remove
xoutil.params.ParamConformer
.
- Add function
Module
xoutil.values
was recovered adding several new features (old namexoutil.cl
was deprecated).Add experimental module
xoutil.fp
for Functional Programming stuffs.Add experimental module
xoutil.tasking
.Add
xoutil.symbols
. It replacesxoutil.logical
that was introduced in 1.7.0, but never documented.Remove deprecated module
xoutil.data
. Addxoutil.objects.adapt_exception()
.Remove deprecated
xoutil.dim.meta.Signature.isunit()
.
1.7 series¶
2017-10-31. Release 1.7.12¶
xoutil.datetime.EmptyTimeSpan
is now pickable.
2017-09-21. 1.7.10¶
2017-09-20. 1.7.9¶
- Deprecate
xoutil.dim.meta.Signature.isunit()
. - Rename
xoutil.dim.meta.QuantityType
toxoutil.dim.meta.Dimension
. - Fix bug in
xoutil.datetime.TimeSpan
.start_date
andend_date
now return an instance of Python’sdatetime.date
instead of a sub-class.
2017-09-19. 1.7.8¶
- Added module
xoutil.dim
– Facilities to work with concrete numbers.
2017-09-07. 1.7.7¶
- Fixed bug in
xoutil.datetime.date
that prevented to usestrftime()
in subclasses. - Fixed bug in
xoutil.datetime.TimeSpan.valid()
.
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¶
- Added
xoutil.datetime.TimeSpan
. - Added the module
xoutil.infinity
. - Added the keyword argument on_error to
xoutil.bound.until_errors()
.
2017-04-06. Release 1.7.4¶
- Added the argument key to
xoutil.iterators.delete_duplicates()
. - Added the function
xoutil.iterators.iter_delete_duplicates()
.
2017-02-23. Release 1.7.3¶
- Add
xoutil.iterators.ungroup()
. - Add
xoutil.future.datetime.get_next_month()
.
2017-02-07. Release 1.7.2¶
- Add
xoutil.bound.until()
andxoutil.bound.until_errors()
. - Fix issue that made
xoutil.uuid
unusable. Introduced in version 1.7.1, commit 58eb359. - Remove support for Python 3.1 and Python 3.2.
2015-12-17. Release 1.7.1¶
- Add
xoutil.collections.PascalSet
andxoutil.collections.BitPascalSet
. - Add
xoutil.functools.lwraps()
. - Add
xoutil.objects.multi_getter()
,xoutil.objects.get_branch_subclasses()
,xoutil.objects.fix_method_documentation()
. - Add
xoutil.string.safe_str()
- Remove long deprecated modules:
xoutil.aop
andxoutil.proxy
. - Deprecate
xoutil.html
entirely. - The following modules are included on a provisional basis. Backwards
incompatible changes (up to and including removal of the module) may occur
if deemed necessary by the core developers:
xoutil.connote
.xoutil.params
.
Fixes in 1.7.1.post1:
Fix issue with both
xoutil.string.safe_decode()
andxoutil.string.safe_encode()
.Previously, the parameter encoding could contain an invalid encoding name and the function could fail.
Fixes in 1.7.1.post2:
Fix
xoutil.string.cut_suffix()
. The following invariant was being violated:>>> cut_suffix(v, '') == v # for any value of 'v'
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:
- The defaults
xoutil.objects.smart_copy()
has being made keyword only. - Deprecates the
pop()
semantics, they shadow thedict.pop()
. A newpop_level()
is provided to explicitly pop a stack level. The same is done for thepop()
method. - Deprecates function
xoutil.iterators.fake_dict_iteritems
. - Deprecates
xoutil.objects.metaclass
in favor forxoutil.eight.meta.metaclass()
.
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 fromxoutil.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¶
- Fix
repr()
andstr()
issues withxoutil.cli.Command
instances.
2015-04-03. Release 1.6.9¶
- The defaults argument in
xoutil.objects.smart_copy()
is now keyword-only. xoutil.context
is now greenlet-safe without depending of gevent.
2015-01-26. Release 1.6.8¶
- Added
xoutil.records.date_reader()
. - Added a forward-compatible
xoutil.inspect.getfullargspec
. - Now
contexts
will support gevent-locals if available. See the note in the module documentation. - Minor fixes.
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 indatetime_reader()
.
2014-11-26. Release 1.6.6¶
- Improved the
xoutil.string.normalize_slug()
by providing both valid and invalid chars. - Added the
xoutil.string.normalize_ascii()
.
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¶
- Fix bug in
xoutil.fs.concatfiles()
: There were leaked opened files.
2014-08-05. Release 1.6.3¶
- Added the pre-release version of
xoutil.bound
module.
2014-08-04. Release 1.6.2¶
Fix encoding issues in
xoutil.string.cut_prefix()
andxoutil.string.cut_suffix()
.Previously this code failed:
>>> from xoutil.string import cut_prefix >>> cut_prefix(u'-\xe1', '-') Traceback ... ... UnicodeEncodeError: 'ascii' ...
Now both functions force its second argument to be of the same type of the first. See
xoutil.string.safe_decode()
andxoutil.string.safe_encode()
.
2014-07-18. Release 1.6.1¶
- Added the yield parameter in
xoutil.fs.ensure_filename()
. - Added the base parameter in
xoutil.modules.moduleproperty()
. - Added the function
xoutil.fs.concatfiles()
.
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¶
- Warn about a future backwards incompatible change in the behavior of
xoutil.names.nameof()
.
2014-05-13. Release 1.5.5¶
UserList are now collections in the sense of
xoutil.types.is_collection()
.Python 3.4 added to the list of tested Python environments. Notice this does not makes any warrants about identical behavior of things that were previously backported from Python 3.3.
For instance, the
xoutil.collections.ChainMap
has been already backported from Python 3.4, so it will have the same signature and behavior across all supported Python versions.But other new things in Python 3.4 are not yet backported to xoutil.
Now
xoutil.objects.metaclass()
supports the__prepare__
classmethod of metaclasses. This is fully supported in Python 3.0+ and partially mocked in Python 2.7.Backported
xoutil.types.MappingProxyType
from Python 3.3.Backported
xoutil.types.SimpleNamespace
from Python 3.4.Backported
xoutil.types.DynamicClassAttribute
from Python 3.4Added function
xoutil.iterators.delete_duplicates()
.Added parameter ignore_underscore to
xoutil.string.normalize_slug()
.Added module
xoutil.crypto
with a function for generating passwords.Fixed several bug in
xoutil.functools.compose()
.Makes
xoutil.fs.path.rtrim()
have a default value for the amount of step to traverse.
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 modulexoutil.compat
is now deprecated and will removed in the future.There are some things that
xoutil.compat
has thatxoutil.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 thesys.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¶
Now xoutil supports Python 2.7, and 3.1+. Python 3.0 was not tested.
Added a strict parameter to
xoutil.objects.smart_getter()
.New function
xoutil.objects.get_traverser()
.The function
xoutil.cli.app.main()
prefers its default parameter instead of the application’s default command.Allow the
xoutil.cli.Command
to define acommand_cli_name
to change the name of the command. Seexoutil.cli.tools.command_name()
.
2014-03-03. Release 1.5.2¶
Deprecated function
xoutil.objects.get_and_del_key()
. Use thedict.pop()
directly.To have consistent naming, renamed
get_and_del_attr()
andget_and_del_first_of()
topopattr()
andpop_first_of()
. Old names are left as deprecated aliases.Now
xoutil.functools.update_wrapper()
,xoutil.functools.wraps()
andxoutil.functools.lru_cache()
are Python 3.3 backports (or aliases).New module
xoutil.textwrap
.
2014-02-14. Release 1.5.1¶
- Added functions
xoutil.objects.dict_merge()
,xoutil.types.are_instances()
andxoutil.types.no_instances()
. - Deprecated function
xoutil.objects.smart_getattr()
. Usexoutil.objects.get_first_of()
instead.
2014-01-24. Release 1.5.0¶
- Lots of removals. Practically all deprecated since 1.4.0 (or before). Let’s
list a few but not all:
- Both
xoutil.Unset
andxoutil.Ignored
are no longer re-exported inxoutil.types
. - Removes module
xoutil.decorator.compat
, since it only contained the deprecated decoratorxoutil.decorator.compat.metaclass()
in favor ofxoutil.objects.metaclass()
. - Removes
nameof
andfull_nameof
fromxoutil.objects
in favor ofxoutil.names.nameof()
. - Removes
pow_
alias ofxoutil.functools.power()
. - Removes the deprecated
xoutil.decorator.decorator
function. Usexoutil.decorator.meta.decorator()
instead. - Now
get_module_path()
is documented and in modulexoutil.modules
.
- Both
- Also we have documented a few more functions, including
xoutil.fs.path.rtrim()
. - All modules below
xoutil.aop
are in risk and are being deprecated.
1.4 series¶
Adds
xoutil.datetime.daterange()
.The fill argument in function
xoutil.iterators.slides()
now defaults to None. This is consistent with the intended usage ofUnset
and with the semantics of bothxoutil.iterators.continuously_slides()
andxoutil.iterators.first_n()
.Unset, as a default value for parameters, is meant to signify the absence of an argument and thus only would be valid if an absent argument had some kind of effect different from passing the argument.
Changes
xoutil.modules.customize()
API to separate options from custom attributes.Includes a random parameter to
xoutil.uuid.uuid()
.
- Deprecations and introductions:
- Importing
xoutil.Unset
andxoutil.Ignored
fromxoutil.types
now issues a warning. - New style for declaring portable metaclasses in
xoutil.objects.metaclass()
, soxoutil.decorator.compat.metaclass()
is now deprecated. - Adds the module
xoutil.pprint
and functionxoutil.pprint.ppformat()
. - Adds the first version of package
xoutil.cli
. - Adds the filter parameter to functions
xoutil.objects.xdir()
andxoutil.objects.fdir()
and deprecates attr_filter and value_filter. - Adds functions
xoutil.objects.attrclass()
,xoutil.objects.fulldir()
. - Adds function
xoutil.iterators.continuously_slides()
. - Adds package
xoutil.threading
. - Adds package
xoutil.html
module and begins the port ofxoutil.html.parser
from Python 3.3 to xoutil, so that a common implementation for both Python 2.7 and Python 3.3 is available.
- Importing
- Bug fixes:
- Fixes some errors with
classical
AOP weaving of functions in modules that wherecustomized
. - Fixes bugs with
xoutil.modules
: makesxoutil.modules.modulemethod()
to customize the module, and improves performance.
- Fixes some errors with
2013-04-26. Release 1.4.0¶
- Refactors
xoutil.types
as explained intypes-140-refactor
. - Changes involving
xoutil.collections
:- Moves SmartDict and SortedSmartDict from
xoutil.data
toxoutil.collections
. They are still accessible fromxoutil.data
. - Also there is now a
xoutil.collections.SmartDictMixin
that implements the update behind all smart dicts in xoutil. xoutil.collections.StackedDict
in now a SmartDict and thus gains zero-level initialization data.
- Moves SmartDict and SortedSmartDict from
- Removals of deprecated, poorly tested, or incomplete features:
- Removes deprecated
xoutil.decorators
. Usexoutil.decorator
. - Removed
xoutil.iterators.first()
, andxoutil.iterators.get_first()
. - Removed
xoutil.string.names()
,xoutil.string.normalize_to_str()
andxoutil.string.normalize_str_collection()
.
- Removes deprecated
- Newly deprecated functions:
- Deprecates
xoutil.iterators.obtain()
. - Deprecates
xoutil.iterators.smart_dict()
and xoutil.data.smart_copy in favor ofxoutil.objects.smart_copy()
.
- Deprecates
- New features:
- Introduces
xoutil.iterators.first_non_null()
. - Adds
xoutil.objects.copy_class()
and updatesxoutil.decorator.compat.metaclass()
to use it.
- Introduces
- Fixes a bug with
xoutil.deprecation.deprecated()
when used with classes: It changed the hierarchy and provoked infinite recursion in methods that use super.
1.3 series¶
Removes deprecated module
xoutil.mdeco
.xoutil.context.Context
now inherit from the newly created stacked dict classxoutil.collections.StackedDict
. Whenever you enter a context a new level of the stacked dict ispushed
, when you leave the context a level is <xoutil.collections.StackedDict.pop>`:meth:.This also removes the data attribute execution context used to have, and, therefore, this is an incompatible change.
Introduces
xoutil.collections.OpenDictMixin
andxoutil.collections.StackedDict
.Fixes a bug in
xoutil.decorator.compat.metaclass()
: Slots were not properly handed.Fixes a bug with the simple
xoutil.collections.opendict
that allowed to shadow methods (even __getitem__) thus making the dict unusable.
1.2 series¶
2013-04-03. Release 1.2.3¶
- Bug fixes in
xoutil.proxy
andxoutil.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):
xoutil.context
.xoutil.aop.basic
.xoutil.deprecation
.xoutil.proxy
.
- Rescued
xoutil.annotate
and is going to be supported from now on. - Introduced module
xoutil.subprocess
and functionxoutil.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()
, andxoutil.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 createdxoutil.string.force_str()
which is Python 3 friendly.Backwards incompatible changes in
xoutil.objects
API. For instance, replaces getattr parameter with getter inxoutil.objects.xdir()
and co.Extracts decorator-making facilities from
xoutil.decorators
intoxoutil.mdeco
.Fixes in
xoutil.aop.extended
. Added parameters inxoutil.aop.classical.weave()
.Introduces
xoutil.iterators.first_n()
and deprecatesxoutil.iterators.first()
andxoutil.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
andxoutil.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_()
andxoutil.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¶
- 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()
.
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¶
- 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()
.
1.0 series¶
2012-06-15. Release 1.0.30¶
- 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.
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.