=====================
nti.externalization
=====================
.. image:: https://img.shields.io/pypi/v/nti.externalization.svg
:target: https://pypi.python.org/pypi/nti.externalization/
:alt: Latest release
.. image:: https://img.shields.io/pypi/pyversions/nti.externalization.svg
:target: https://pypi.org/project/nti.externalization/
:alt: Supported Python versions
.. image:: https://github.com/NextThought/nti.externalization/workflows/tests/badge.svg
:target: https://github.com/NextThought/nti.externalization/actions?query=workflow%3Atests
.. image:: https://coveralls.io/repos/github/NextThought/nti.externalization/badge.svg?branch=master
:target: https://coveralls.io/github/NextThought/nti.externalization?branch=master
.. image:: https://readthedocs.org/projects/ntiexternalization/badge/?version=latest
:target: https://ntiexternalization.readthedocs.io/en/latest/
:alt: Documentation Status
A flexible, schema-driven system for converting Python objects to and
from external formats such as JSON and YAML. This works well in a
zope.component environment such as Pyramid.
Documentation is hosted at https://ntiexternalization.readthedocs.io/
=========
Changes
=========
2.4.0 (2024-11-11)
==================
- Drop support for anything older than Python 3.10.
- Use native namespace packages.
- Start publishing manylinux binary wheels.
- Remove some legacy code for Python 2 support to enable compiling
with Cython 3.1.
2.3.0 (2021-08-02)
==================
- Add a new base class, ``StandardInternalObjectExternalizer``. See
`PR 120
<https://github.com/NextThought/nti.externalization/pull/120>`_ and
`issue 117 <https://github.com/NextThought/nti.externalization/issues/117>`_.
- Rename ``IExternalMappingDecorator`` to
``IExternalStandardDictionaryDecorator`` to emphasize that it is
only used if you (directly or through a super class) call
``to_standard_external_dictionary``. A compatibility alias remains.
See `PR 120
<https://github.com/NextThought/nti.externalization/pull/120>`_ and
`issue 118
<https://github.com/NextThought/nti.externalization/issues/118>`_.
- Docs-deprecated aliases in ``nti.externalization.interfaces`` now also
emit deprecation warnings at runtime.
- Other documentation improvements. Sphinx can now run all the
doctests (on Python 3); many doctests are still run an Python 2.
2.2.0 (2021-04-14)
==================
- Add support for Python 3.9.
- Depend on BTrees 4.8 and above. This simplifies externalization
checks. See `issue 111 <https://github.com/NextThought/nti.externalization/issues/111>`_.
2.1.0 (2020-08-03)
==================
- Add support for "externalization policies." These are instances of
``ExternalizationPolicy`` that can be used to tweak certain
low-level details of externalization without replacing
externalization objects wholesale. They are intended to have a very
low performance impact.
The only supported detail that can be changed right now is whether
the standard created and last modified fields are externalized as
Unix timestamps (the default) or as ISO 8601 strings.
See https://github.com/NextThought/nti.externalization/issues/109
2.0.0 (2020-07-02)
==================
- Change ``ILocatedExternalMapping``: Previously it extended the
legacy ``zope.interface.common.mapping.IFullMapping``. Now it
extends the modern ``zope.interface.common.collections.IMapping``.
Note that this does not require mutability unlike the older
interface. (The ``LocatedExternalDict`` class provided by this
package is fully mutable and implements ``IMutableMapping``. It also
continues to implement ``IFullMapping``, but use of that interface
is discouraged.)
- Change ``ILocatedExternalSequence``: Previously it extended the
legacy ``zope.interface.common.sequence.ISequence``. Now it extends
the modern ``zope.interface.common.collections.ISequence``.
Note that this does not require mutability unlike the older
interface. (The ``LocatedExternalList`` class provided by this
package is fully mutable and implements ``IMutableSequence``.)
- Fix the interface resolution order for ``LocatedExternalList``.
Previously, with zope.interface 5, it began implementing both
``IMutableSequence`` (the new interface from
``zope.interface.common.collections``) as well as the older
interface ``ISequence`` (from ``zope.interface.common.sequence``);
the two have inconsistent resolution orders. Now, it only implements
``IMutableSequence`` and a subset of the legacy interfaces that do
not conflict. See `issue 105
<https://github.com/NextThought/nti.externalization/issues/105>`_.
1.1.3 (2020-06-25)
==================
- Correctly fire ``IObjectWillUpdateFromExternalEvent`` events before
updating an object.
1.1.2 (2020-04-07)
==================
- Adapt to a change in zope.container 4.4.0 that exposed unsafe
assumptions that ``providedBy(obj)`` would return the exact same
object with the exact same state on a subsequent call. This was
always a bug in the case of concurrency (e.g., if a different thread
called ``directlyProvides`` on the same object, or adjusted the
``__bases__`` of some interface in the IRO); the zope.container
changes made it possible without concurrency. See
https://github.com/zopefoundation/zope.container/issues/38 and
https://github.com/NextThought/nti.externalization/issues/104.
1.1.1 (2020-03-27)
==================
- Fix a faulty assertion error. See `issue 102
<https://github.com/NextThought/nti.externalization/issues/102>`_.
1.1.0 (2020-03-27)
==================
- Make instances of ``fractions.Fraction`` externalize as a string
such as ``"1/3"``. When received by a schema field that can parse
this format, such as ``zope.schema.Rational`` (or higher on the
numeric tower), this means fractions can be round-tripped.
- Support externalizing ``decimal.Decimal`` objects in the YAML
representation.
1.0.0 (2020-03-19)
==================
- Add compatibility with, and require, zope.interface 5.0.
- Document which tagged values are inherited and which are not.
- Stop inheriting ``_ext_is_marker_interface``.
1.0.0a14 (2019-11-13)
=====================
- Build with Cython 0.29.14 using '3str' as the language level.
- Add support for Python 3.8.
- Update PyYAML to 5.1 and change the default output style slightly.
- Fix tests with Persistent 4.4.3 and above.
- Support zope.interface 4.7, which lets tagged values on interfaces
be inherited, when using ``<registerAutoPackageIO>`` on a module
that had multiple objects implementing a derived interface. See `issue 97
<https://github.com/NextThought/nti.externalization/issues/97>`_.
1.0.0a13 (2018-09-20)
=====================
- Support ``IFromBytes`` fields introduced by zope.schema 4.8.0. See
`issue 92
<https://github.com/NextThought/nti.externalization/issues/92>`_.
- Make ``validate_field_value`` (and by extension
``InterfaceObjectIO.update_from_external_object``) call
``fromObject`` defined by any fields for non-byte and non-text data.
Previously, only if the field raised a ``WrongContainedTypeError``
would ``fromObject`` be called.
1.0.0a12 (2018-09-11)
=====================
- Add support for zope.schema 4.7.0 and nti.schema 1.5.0. Drop support
for older versions, which includes dropping support for
``dm.zope.schema.Object`` fields.
1.0.0a11 (2018-08-29)
=====================
- The ``@WithRepr`` decorator takes into account the updated default
repr of Persistent objects with persistent 4.4 and doesn't hide it.
- Subclasses of ``ExternalizableInstanceDict`` that have non-str
(unicode on Python 2, bytes on Python 3) keys in their ``__dict__``
do not throw ``TypeError`` when externalizing. Instead, the non-str
values are converted to strs (using ASCII encoding) and the
``_p_changed`` attribute, if any, is set.
1.0.0a10 (2018-08-21)
=====================
- The ``registry`` argument to most functions is deprecated and
ignored. Instead of making calls to ``registry.queryAdapter``, we
now invoke the interface directly. For example,
``IInternalObjectExternalizer(containedObject)``. This lets
individual objects have a say if they already provide the interface
without going through the legacy code paths (it also calls
``__conform__`` on the object if needed).
1.0.0a9 (2018-08-20)
====================
- Allow subclasses of ``InterfaceObjectIO`` to have non-frozenset
values for ``_ext_primitive_out_ivars_``. This issues a warning and
in the future will be a TypeError.
1.0.0a8 (2018-08-16)
====================
- Better support for internalizing anonymous value objects discovered
in a ``Dict`` value. Now, they won't raise a
``ComponentLookupError`` when ``require_updater`` is True, and they
will be given a ``MimeType`` based on the schema (if they don't have one).
1.0.0a7 (2018-07-31)
====================
- Avoid a ``TypeError`` from ``validate_named_field_value`` when
external objects have unicode keys.
- ``LocatedExternalDict`` objects accept more constructor arguments
and allow arbitrary attributes.
1.0.0a6 (2018-07-31)
====================
- ``InterfaceObjectIO`` only returns an anonymous factory for ``IDict``
fields when it wants objects for the value.
- ``StandardExternalFields`` and ``StandardInternalFields`` are
deprecated aliases in ``nti.externalization.externalization``.
- ``update_from_external_object`` properly handles the case where
``INamedExternalizedObjectFactoryFinder`` and
``IInternalObjectUpdater`` are registered with different levels of
specificity, and the finder also implements
``IInternalObjectUpdater``. Before, the finder would, perhaps
incorrectly, be used as the updater.
1.0.0a5 (2018-07-30)
====================
- Objects inheriting from ``InterfaceObjectIO`` and registered with
the component registry (in ZCML) for ``IInternalObjectIO`` can still
be found and used as ``INamedExternalizedObjectFactoryFinder``, an
interface implemented by ``InterfaceObjectIO`` through
``IInternalObjectIOFinder``. A warning will be issued to update the
registration (which generally means removing the ``provides`` line
in ZCML).
- ``ExternalizableInstanceDict`` no longer inherits from
``AbstractDynamicIO``, it just implements the same interface (with
the exception of many of the ``_ext`` methods). This class is deprecated.
- Formally document the ``notify_modified`` member of
``nti.externalization.internalization``. ``notifyModified`` is a
deprecated alias.
1.0.0a4 (2018-07-30)
====================
- Make ``InterfaceObjectIO._ext_self`` readable from Python, even
though that is not documented (and may change again in the future).
Document the intended API, ``_ext_replacement()``. See `issue 73
<https://github.com/NextThought/nti.externalization/issues/73>`_.
- Make ``AbstractDynamicObjectIO._ext_getattr`` handle a default
value, and add ``_ext_replacement_getattr`` for when it will only
be called once. See `issue 73
<https://github.com/NextThought/nti.externalization/issues/73>`_.
1.0.0a3 (2018-07-28)
====================
- The ``@NoPickle`` decorator also works with ``Persistent``
subclasses (and may or may not work with multiple-inheritance
subclasses of ``Persistent``, depending on the MRO,
but that's always been the case for regular objects). A
``Persistent`` subclass being decorated with ``@NoPickle`` doesn't
make much sense, so a ``RuntimeWarning`` is issued. A warning is
also issued if the class directly implements one of the pickle
protocol methods.
- Updating objects that use ``createFieldProperties`` or otherwise
have ``FieldProperty`` objects in their type is at least 10% faster
thanks to avoiding double-validation due to a small monkey-patch on
``FieldProperty``. See `issue 67
<https://github.com/NextThought/nti.externalization/issues/67>`_.
- Proxies around objects that implement ``toExternalObject`` are
allowed again; the proxied object's ``toExternalObject`` will be called.
- The signature for ``updateFromExternalObject()`` has been tightened.
It should be ``(self, external_object, context, **kwargs)``, where
``**kwargs`` is optional, as is context. ``**kwargs`` currently
contains nothing useful. Uses of ``dataserver=None`` in the
signature will generate a warning. This may be tightened further in
the future. See `issue 30
<https://github.com/NextThought/nti.externalization/issues/30>`_.
- ``__ext_ignore_updateFromExternalObject__`` is officially
deprecated and generates a warning.
- ``update_from_external_object`` caches certain information about the
types of the updater objects, making it 8-25% faster.
- ``update_from_external_object`` mutates sequences contained in a
dict in-place instead of overwriting with a new list.
- ``update_from_external_object`` mutates sequences at the top level
instead of returning a new list.
- Add support for finding factories for incoming data which do not
specify a MIME type or class field based on the key they are
assigned to. This aids in consuming data produced by foreign systems
or using ``Dict`` schema fields that require modelled
values. See `issue 51
<https://github.com/NextThought/nti.externalization/issues/51>`_ and
`PR 68
<https://github.com/NextThought/nti.externalization/pull/68>`_.
- Schemas that use ``InterfaceObjectIO`` (including through the ZCML
directive ``registerAutoPackageIO``) can use ``Dict`` fields more
easily on internalization (externalization has always worked): They
automatically internalize their values by treating the ``Dict`` as
anonymous external data.
- Strings can automatically be adapted into ``ITimeDelta`` objects.
1.0.0a2 (2018-07-05)
====================
- The low levels of externalization no longer catch and hide
POSKeyError. This indicates a problem with the database. See
https://github.com/NextThought/nti.externalization/issues/60
- Remove support for ``object_hook`` in
``update_from_external_object``. See
https://github.com/NextThought/nti.externalization/issues/29.
- A number of deprecated aliases for moved functions have been
removed.
- On CPython, some of the modules are compiled as extension modules
using Cython for a 10-30% increase in speed. Set the ``PURE_PYTHON``
environment variable to disable this at runtime.
- The unused, undocumented method
``stripSyntheticKeysFromExternalDictionary`` was removed from
instances of ``ExternalizableDictionaryMixin``. Use the import instead.
- Unused keyword arguments for ``to_standard_external_dictionary``
and ``to_minimal_standard_external_dictionary`` now produce a warning.
In the future, extra keyword arguments will be an error.
- ``notifyModified`` no longer accepts the ``eventFactory`` argument.
- The ``notify_modified`` alias for ``notifyModified`` has been removed.
- Decorating external mappings and external objects handled
``decorate_callback`` differently. This argument is only used when
``decorate`` is false. This argument is also confusing and should be
considered deprecated.
- ``choose_field`` no longer has the undocumented conversion behaviour for the
CREATOR external field name.
1.0.0a1 (2017-09-29)
====================
- First PyPI release.
- Add support for Python 3.
- Drop support for externalizing to plists. See
https://github.com/NextThought/nti.externalization/issues/21
- Reach 100% test coverage and ensure we remain there through CI.
- Introduce ``nti.externalization.extension_points`` to hold hook
functions. Move the Pyramid integration there (and deprecate that).
Also move the NTIID support there (but the old name works too).
See https://github.com/NextThought/nti.externalization/issues/27
- Deprecate
``nti.externalization.internalization.register_legacy_search_module``.
See https://github.com/NextThought/nti.externalization/issues/35
- Stop ``ext:registerAutoPackageIO`` from registering the legacy
class-name based factories by default. If you need class-name based
factories, there are two options. The first is to explicitly
register ``IClassObjectFactory`` objects in ZCML (we could add a
scanning directive to make that more convenient for large numbers of
classes), and the second is to set ``register_legacy_search_module``
to a true value in the ZCML directive for
``ext:registerAutoPackageIO``. Note that we expect the behaviour of
this attribute to change in the near future.
See https://github.com/NextThought/nti.externalization/issues/33
- Make ``ext:registerAutoPackageIO`` perform legacy class
registrations when the configuration context executes, not when the
directive runs. This means that conflicts in legacy class names will be
detected at configuration time. It also means that legacy class names can
be registered locally with ``z3c.baseregistry`` (previously they
were always registered in the global site manager).
See https://github.com/NextThought/nti.externalization/issues/28
- Drop dependency on ``zope.preference`` and ``zope.annotation``. They
were not used by this package, although our ``configure.zcml`` did
include them. If you use ``zope.preference`` or ``zope.annotation``,
please include them in your own ZCML file.
- Drop hard dependency on Acquisition. It is still used if available
and is used in test mode.
- Add public implementations of ``IMimeObjectFactory`` and
``IClassObjectFactory`` in ``nti.externalization.factory``.
- Drop dependency on ``nti.zodb`` and its
``PersistentPropertyHolder``. The datastructures in
``nti.externalization.persistence`` no longer extend that class; if
you have further subclasses that add
``nti.zodb.peristentproperty.PropertyHoldingPersistent`` properties,
you'll need to be sure to mixin this class now.
See https://github.com/NextThought/nti.externalization/issues/43
- Add the ``<ext:classObjectFactory>`` directive for registering
``Class`` based factories. (Note: MIME factories are preferred.)
- Callers of ``to_standard_external_dictionary`` (which includes
AutoPackageScopedInterfaceIO) will now automatically get a
``MimeType`` value if one can be found. Previously only callers of
``to_minimal_standard_external_dictionary`` would.
Raw data
{
"_id": null,
"home_page": "https://github.com/OpenNTI/nti.externalization",
"name": "nti.externalization",
"maintainer": null,
"docs_url": null,
"requires_python": ">=3.10",
"maintainer_email": null,
"keywords": "externalization",
"author": "Jason Madden",
"author_email": "jason@nextthought.com",
"download_url": "https://files.pythonhosted.org/packages/10/94/24075e10f5a90724bd51dd419b2af002edc0c484e84fe66f7136ff27c7e0/nti_externalization-2.4.0.tar.gz",
"platform": null,
"description": "=====================\n nti.externalization\n=====================\n\n.. image:: https://img.shields.io/pypi/v/nti.externalization.svg\n :target: https://pypi.python.org/pypi/nti.externalization/\n :alt: Latest release\n\n.. image:: https://img.shields.io/pypi/pyversions/nti.externalization.svg\n :target: https://pypi.org/project/nti.externalization/\n :alt: Supported Python versions\n\n.. image:: https://github.com/NextThought/nti.externalization/workflows/tests/badge.svg\n :target: https://github.com/NextThought/nti.externalization/actions?query=workflow%3Atests\n\n.. image:: https://coveralls.io/repos/github/NextThought/nti.externalization/badge.svg?branch=master\n :target: https://coveralls.io/github/NextThought/nti.externalization?branch=master\n\n.. image:: https://readthedocs.org/projects/ntiexternalization/badge/?version=latest\n :target: https://ntiexternalization.readthedocs.io/en/latest/\n :alt: Documentation Status\n\nA flexible, schema-driven system for converting Python objects to and\nfrom external formats such as JSON and YAML. This works well in a\nzope.component environment such as Pyramid.\n\nDocumentation is hosted at https://ntiexternalization.readthedocs.io/\n\n\n=========\n Changes\n=========\n\n\n2.4.0 (2024-11-11)\n==================\n\n- Drop support for anything older than Python 3.10.\n- Use native namespace packages.\n- Start publishing manylinux binary wheels.\n- Remove some legacy code for Python 2 support to enable compiling\n with Cython 3.1.\n\n\n2.3.0 (2021-08-02)\n==================\n\n- Add a new base class, ``StandardInternalObjectExternalizer``. See\n `PR 120\n <https://github.com/NextThought/nti.externalization/pull/120>`_ and\n `issue 117 <https://github.com/NextThought/nti.externalization/issues/117>`_.\n- Rename ``IExternalMappingDecorator`` to\n ``IExternalStandardDictionaryDecorator`` to emphasize that it is\n only used if you (directly or through a super class) call\n ``to_standard_external_dictionary``. A compatibility alias remains.\n See `PR 120\n <https://github.com/NextThought/nti.externalization/pull/120>`_ and\n `issue 118\n <https://github.com/NextThought/nti.externalization/issues/118>`_.\n- Docs-deprecated aliases in ``nti.externalization.interfaces`` now also\n emit deprecation warnings at runtime.\n- Other documentation improvements. Sphinx can now run all the\n doctests (on Python 3); many doctests are still run an Python 2.\n\n2.2.0 (2021-04-14)\n==================\n\n- Add support for Python 3.9.\n\n- Depend on BTrees 4.8 and above. This simplifies externalization\n checks. See `issue 111 <https://github.com/NextThought/nti.externalization/issues/111>`_.\n\n2.1.0 (2020-08-03)\n==================\n\n- Add support for \"externalization policies.\" These are instances of\n ``ExternalizationPolicy`` that can be used to tweak certain\n low-level details of externalization without replacing\n externalization objects wholesale. They are intended to have a very\n low performance impact.\n\n The only supported detail that can be changed right now is whether\n the standard created and last modified fields are externalized as\n Unix timestamps (the default) or as ISO 8601 strings.\n\n See https://github.com/NextThought/nti.externalization/issues/109\n\n\n2.0.0 (2020-07-02)\n==================\n\n- Change ``ILocatedExternalMapping``: Previously it extended the\n legacy ``zope.interface.common.mapping.IFullMapping``. Now it\n extends the modern ``zope.interface.common.collections.IMapping``.\n Note that this does not require mutability unlike the older\n interface. (The ``LocatedExternalDict`` class provided by this\n package is fully mutable and implements ``IMutableMapping``. It also\n continues to implement ``IFullMapping``, but use of that interface\n is discouraged.)\n\n- Change ``ILocatedExternalSequence``: Previously it extended the\n legacy ``zope.interface.common.sequence.ISequence``. Now it extends\n the modern ``zope.interface.common.collections.ISequence``.\n Note that this does not require mutability unlike the older\n interface. (The ``LocatedExternalList`` class provided by this\n package is fully mutable and implements ``IMutableSequence``.)\n\n- Fix the interface resolution order for ``LocatedExternalList``.\n Previously, with zope.interface 5, it began implementing both\n ``IMutableSequence`` (the new interface from\n ``zope.interface.common.collections``) as well as the older\n interface ``ISequence`` (from ``zope.interface.common.sequence``);\n the two have inconsistent resolution orders. Now, it only implements\n ``IMutableSequence`` and a subset of the legacy interfaces that do\n not conflict. See `issue 105\n <https://github.com/NextThought/nti.externalization/issues/105>`_.\n\n\n1.1.3 (2020-06-25)\n==================\n\n- Correctly fire ``IObjectWillUpdateFromExternalEvent`` events before\n updating an object.\n\n\n1.1.2 (2020-04-07)\n==================\n\n- Adapt to a change in zope.container 4.4.0 that exposed unsafe\n assumptions that ``providedBy(obj)`` would return the exact same\n object with the exact same state on a subsequent call. This was\n always a bug in the case of concurrency (e.g., if a different thread\n called ``directlyProvides`` on the same object, or adjusted the\n ``__bases__`` of some interface in the IRO); the zope.container\n changes made it possible without concurrency. See\n https://github.com/zopefoundation/zope.container/issues/38 and\n https://github.com/NextThought/nti.externalization/issues/104.\n\n\n1.1.1 (2020-03-27)\n==================\n\n- Fix a faulty assertion error. See `issue 102\n <https://github.com/NextThought/nti.externalization/issues/102>`_.\n\n\n1.1.0 (2020-03-27)\n==================\n\n- Make instances of ``fractions.Fraction`` externalize as a string\n such as ``\"1/3\"``. When received by a schema field that can parse\n this format, such as ``zope.schema.Rational`` (or higher on the\n numeric tower), this means fractions can be round-tripped.\n- Support externalizing ``decimal.Decimal`` objects in the YAML\n representation.\n\n\n1.0.0 (2020-03-19)\n==================\n\n- Add compatibility with, and require, zope.interface 5.0.\n\n- Document which tagged values are inherited and which are not.\n\n- Stop inheriting ``_ext_is_marker_interface``.\n\n\n1.0.0a14 (2019-11-13)\n=====================\n\n- Build with Cython 0.29.14 using '3str' as the language level.\n\n- Add support for Python 3.8.\n\n- Update PyYAML to 5.1 and change the default output style slightly.\n\n- Fix tests with Persistent 4.4.3 and above.\n\n- Support zope.interface 4.7, which lets tagged values on interfaces\n be inherited, when using ``<registerAutoPackageIO>`` on a module\n that had multiple objects implementing a derived interface. See `issue 97\n <https://github.com/NextThought/nti.externalization/issues/97>`_.\n\n1.0.0a13 (2018-09-20)\n=====================\n\n- Support ``IFromBytes`` fields introduced by zope.schema 4.8.0. See\n `issue 92\n <https://github.com/NextThought/nti.externalization/issues/92>`_.\n\n- Make ``validate_field_value`` (and by extension\n ``InterfaceObjectIO.update_from_external_object``) call\n ``fromObject`` defined by any fields for non-byte and non-text data.\n Previously, only if the field raised a ``WrongContainedTypeError``\n would ``fromObject`` be called.\n\n1.0.0a12 (2018-09-11)\n=====================\n\n- Add support for zope.schema 4.7.0 and nti.schema 1.5.0. Drop support\n for older versions, which includes dropping support for\n ``dm.zope.schema.Object`` fields.\n\n\n1.0.0a11 (2018-08-29)\n=====================\n\n- The ``@WithRepr`` decorator takes into account the updated default\n repr of Persistent objects with persistent 4.4 and doesn't hide it.\n\n- Subclasses of ``ExternalizableInstanceDict`` that have non-str\n (unicode on Python 2, bytes on Python 3) keys in their ``__dict__``\n do not throw ``TypeError`` when externalizing. Instead, the non-str\n values are converted to strs (using ASCII encoding) and the\n ``_p_changed`` attribute, if any, is set.\n\n1.0.0a10 (2018-08-21)\n=====================\n\n- The ``registry`` argument to most functions is deprecated and\n ignored. Instead of making calls to ``registry.queryAdapter``, we\n now invoke the interface directly. For example,\n ``IInternalObjectExternalizer(containedObject)``. This lets\n individual objects have a say if they already provide the interface\n without going through the legacy code paths (it also calls\n ``__conform__`` on the object if needed).\n\n\n1.0.0a9 (2018-08-20)\n====================\n\n- Allow subclasses of ``InterfaceObjectIO`` to have non-frozenset\n values for ``_ext_primitive_out_ivars_``. This issues a warning and\n in the future will be a TypeError.\n\n\n1.0.0a8 (2018-08-16)\n====================\n\n- Better support for internalizing anonymous value objects discovered\n in a ``Dict`` value. Now, they won't raise a\n ``ComponentLookupError`` when ``require_updater`` is True, and they\n will be given a ``MimeType`` based on the schema (if they don't have one).\n\n\n1.0.0a7 (2018-07-31)\n====================\n\n- Avoid a ``TypeError`` from ``validate_named_field_value`` when\n external objects have unicode keys.\n\n- ``LocatedExternalDict`` objects accept more constructor arguments\n and allow arbitrary attributes.\n\n1.0.0a6 (2018-07-31)\n====================\n\n- ``InterfaceObjectIO`` only returns an anonymous factory for ``IDict``\n fields when it wants objects for the value.\n\n- ``StandardExternalFields`` and ``StandardInternalFields`` are\n deprecated aliases in ``nti.externalization.externalization``.\n\n- ``update_from_external_object`` properly handles the case where\n ``INamedExternalizedObjectFactoryFinder`` and\n ``IInternalObjectUpdater`` are registered with different levels of\n specificity, and the finder also implements\n ``IInternalObjectUpdater``. Before, the finder would, perhaps\n incorrectly, be used as the updater.\n\n1.0.0a5 (2018-07-30)\n====================\n\n- Objects inheriting from ``InterfaceObjectIO`` and registered with\n the component registry (in ZCML) for ``IInternalObjectIO`` can still\n be found and used as ``INamedExternalizedObjectFactoryFinder``, an\n interface implemented by ``InterfaceObjectIO`` through\n ``IInternalObjectIOFinder``. A warning will be issued to update the\n registration (which generally means removing the ``provides`` line\n in ZCML).\n\n- ``ExternalizableInstanceDict`` no longer inherits from\n ``AbstractDynamicIO``, it just implements the same interface (with\n the exception of many of the ``_ext`` methods). This class is deprecated.\n\n- Formally document the ``notify_modified`` member of\n ``nti.externalization.internalization``. ``notifyModified`` is a\n deprecated alias.\n\n1.0.0a4 (2018-07-30)\n====================\n\n- Make ``InterfaceObjectIO._ext_self`` readable from Python, even\n though that is not documented (and may change again in the future).\n Document the intended API, ``_ext_replacement()``. See `issue 73\n <https://github.com/NextThought/nti.externalization/issues/73>`_.\n\n- Make ``AbstractDynamicObjectIO._ext_getattr`` handle a default\n value, and add ``_ext_replacement_getattr`` for when it will only\n be called once. See `issue 73\n <https://github.com/NextThought/nti.externalization/issues/73>`_.\n\n1.0.0a3 (2018-07-28)\n====================\n\n- The ``@NoPickle`` decorator also works with ``Persistent``\n subclasses (and may or may not work with multiple-inheritance\n subclasses of ``Persistent``, depending on the MRO,\n but that's always been the case for regular objects). A\n ``Persistent`` subclass being decorated with ``@NoPickle`` doesn't\n make much sense, so a ``RuntimeWarning`` is issued. A warning is\n also issued if the class directly implements one of the pickle\n protocol methods.\n\n- Updating objects that use ``createFieldProperties`` or otherwise\n have ``FieldProperty`` objects in their type is at least 10% faster\n thanks to avoiding double-validation due to a small monkey-patch on\n ``FieldProperty``. See `issue 67\n <https://github.com/NextThought/nti.externalization/issues/67>`_.\n\n- Proxies around objects that implement ``toExternalObject`` are\n allowed again; the proxied object's ``toExternalObject`` will be called.\n\n- The signature for ``updateFromExternalObject()`` has been tightened.\n It should be ``(self, external_object, context, **kwargs)``, where\n ``**kwargs`` is optional, as is context. ``**kwargs`` currently\n contains nothing useful. Uses of ``dataserver=None`` in the\n signature will generate a warning. This may be tightened further in\n the future. See `issue 30\n <https://github.com/NextThought/nti.externalization/issues/30>`_.\n\n- ``__ext_ignore_updateFromExternalObject__`` is officially\n deprecated and generates a warning.\n\n- ``update_from_external_object`` caches certain information about the\n types of the updater objects, making it 8-25% faster.\n\n- ``update_from_external_object`` mutates sequences contained in a\n dict in-place instead of overwriting with a new list.\n\n- ``update_from_external_object`` mutates sequences at the top level\n instead of returning a new list.\n\n- Add support for finding factories for incoming data which do not\n specify a MIME type or class field based on the key they are\n assigned to. This aids in consuming data produced by foreign systems\n or using ``Dict`` schema fields that require modelled\n values. See `issue 51\n <https://github.com/NextThought/nti.externalization/issues/51>`_ and\n `PR 68\n <https://github.com/NextThought/nti.externalization/pull/68>`_.\n\n- Schemas that use ``InterfaceObjectIO`` (including through the ZCML\n directive ``registerAutoPackageIO``) can use ``Dict`` fields more\n easily on internalization (externalization has always worked): They\n automatically internalize their values by treating the ``Dict`` as\n anonymous external data.\n\n- Strings can automatically be adapted into ``ITimeDelta`` objects.\n\n\n1.0.0a2 (2018-07-05)\n====================\n\n- The low levels of externalization no longer catch and hide\n POSKeyError. This indicates a problem with the database. See\n https://github.com/NextThought/nti.externalization/issues/60\n\n- Remove support for ``object_hook`` in\n ``update_from_external_object``. See\n https://github.com/NextThought/nti.externalization/issues/29.\n\n- A number of deprecated aliases for moved functions have been\n removed.\n\n- On CPython, some of the modules are compiled as extension modules\n using Cython for a 10-30% increase in speed. Set the ``PURE_PYTHON``\n environment variable to disable this at runtime.\n\n- The unused, undocumented method\n ``stripSyntheticKeysFromExternalDictionary`` was removed from\n instances of ``ExternalizableDictionaryMixin``. Use the import instead.\n\n- Unused keyword arguments for ``to_standard_external_dictionary``\n and ``to_minimal_standard_external_dictionary`` now produce a warning.\n In the future, extra keyword arguments will be an error.\n\n- ``notifyModified`` no longer accepts the ``eventFactory`` argument.\n\n- The ``notify_modified`` alias for ``notifyModified`` has been removed.\n\n- Decorating external mappings and external objects handled\n ``decorate_callback`` differently. This argument is only used when\n ``decorate`` is false. This argument is also confusing and should be\n considered deprecated.\n\n- ``choose_field`` no longer has the undocumented conversion behaviour for the\n CREATOR external field name.\n\n1.0.0a1 (2017-09-29)\n====================\n\n- First PyPI release.\n- Add support for Python 3.\n- Drop support for externalizing to plists. See\n https://github.com/NextThought/nti.externalization/issues/21\n- Reach 100% test coverage and ensure we remain there through CI.\n- Introduce ``nti.externalization.extension_points`` to hold hook\n functions. Move the Pyramid integration there (and deprecate that).\n Also move the NTIID support there (but the old name works too).\n See https://github.com/NextThought/nti.externalization/issues/27\n- Deprecate\n ``nti.externalization.internalization.register_legacy_search_module``.\n See https://github.com/NextThought/nti.externalization/issues/35\n- Stop ``ext:registerAutoPackageIO`` from registering the legacy\n class-name based factories by default. If you need class-name based\n factories, there are two options. The first is to explicitly\n register ``IClassObjectFactory`` objects in ZCML (we could add a\n scanning directive to make that more convenient for large numbers of\n classes), and the second is to set ``register_legacy_search_module``\n to a true value in the ZCML directive for\n ``ext:registerAutoPackageIO``. Note that we expect the behaviour of\n this attribute to change in the near future.\n See https://github.com/NextThought/nti.externalization/issues/33\n- Make ``ext:registerAutoPackageIO`` perform legacy class\n registrations when the configuration context executes, not when the\n directive runs. This means that conflicts in legacy class names will be\n detected at configuration time. It also means that legacy class names can\n be registered locally with ``z3c.baseregistry`` (previously they\n were always registered in the global site manager).\n See https://github.com/NextThought/nti.externalization/issues/28\n- Drop dependency on ``zope.preference`` and ``zope.annotation``. They\n were not used by this package, although our ``configure.zcml`` did\n include them. If you use ``zope.preference`` or ``zope.annotation``,\n please include them in your own ZCML file.\n- Drop hard dependency on Acquisition. It is still used if available\n and is used in test mode.\n- Add public implementations of ``IMimeObjectFactory`` and\n ``IClassObjectFactory`` in ``nti.externalization.factory``.\n- Drop dependency on ``nti.zodb`` and its\n ``PersistentPropertyHolder``. The datastructures in\n ``nti.externalization.persistence`` no longer extend that class; if\n you have further subclasses that add\n ``nti.zodb.peristentproperty.PropertyHoldingPersistent`` properties,\n you'll need to be sure to mixin this class now.\n See https://github.com/NextThought/nti.externalization/issues/43\n- Add the ``<ext:classObjectFactory>`` directive for registering\n ``Class`` based factories. (Note: MIME factories are preferred.)\n- Callers of ``to_standard_external_dictionary`` (which includes\n AutoPackageScopedInterfaceIO) will now automatically get a\n ``MimeType`` value if one can be found. Previously only callers of\n ``to_minimal_standard_external_dictionary`` would.\n",
"bugtrack_url": null,
"license": "Apache",
"summary": "NTI Externalization",
"version": "2.4.0",
"project_urls": {
"Homepage": "https://github.com/OpenNTI/nti.externalization"
},
"split_keywords": [
"externalization"
],
"urls": [
{
"comment_text": "",
"digests": {
"blake2b_256": "aca66448712619e11766a8eb51f3e5b0bd8dcc37185e0bcf4ef3f3be6f1c74fd",
"md5": "9dbf4e886470b3e3e74a8c4cd7d551f0",
"sha256": "e3bde76084919aa6b01c53b5e0b6a5218ad2f7bb0fb2a2e7bd73a98c223fd6d3"
},
"downloads": -1,
"filename": "nti.externalization-2.4.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_28_x86_64.whl",
"has_sig": false,
"md5_digest": "9dbf4e886470b3e3e74a8c4cd7d551f0",
"packagetype": "bdist_wheel",
"python_version": "cp310",
"requires_python": ">=3.10",
"size": 4358500,
"upload_time": "2024-11-11T19:20:19",
"upload_time_iso_8601": "2024-11-11T19:20:19.095096Z",
"url": "https://files.pythonhosted.org/packages/ac/a6/6448712619e11766a8eb51f3e5b0bd8dcc37185e0bcf4ef3f3be6f1c74fd/nti.externalization-2.4.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_28_x86_64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "645269a3b1ffb09d8edd8e60b940a3c6e5af31809195a032b98e148f7603c25a",
"md5": "d82d42983f7b19bf918b32cd89860c47",
"sha256": "92d0f7206af37c7ddeddff4979a244703d5ca92fd469b774cf8985289a9c3b31"
},
"downloads": -1,
"filename": "nti.externalization-2.4.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl",
"has_sig": false,
"md5_digest": "d82d42983f7b19bf918b32cd89860c47",
"packagetype": "bdist_wheel",
"python_version": "cp310",
"requires_python": ">=3.10",
"size": 4306321,
"upload_time": "2024-11-11T19:20:02",
"upload_time_iso_8601": "2024-11-11T19:20:02.276079Z",
"url": "https://files.pythonhosted.org/packages/64/52/69a3b1ffb09d8edd8e60b940a3c6e5af31809195a032b98e148f7603c25a/nti.externalization-2.4.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "5102a882cc6ee15c8647497f303b88e2ca20170f8e68d9511293638f78b372b4",
"md5": "dafa98ebae9c49790b40ecf9816c62c3",
"sha256": "8cb42b00726d57d91f727908b9257caf7fbe104e1f2a223f42165d1066e735c2"
},
"downloads": -1,
"filename": "nti.externalization-2.4.0-cp310-cp310-musllinux_1_1_x86_64.whl",
"has_sig": false,
"md5_digest": "dafa98ebae9c49790b40ecf9816c62c3",
"packagetype": "bdist_wheel",
"python_version": "cp310",
"requires_python": ">=3.10",
"size": 4429328,
"upload_time": "2024-11-11T19:20:48",
"upload_time_iso_8601": "2024-11-11T19:20:48.513079Z",
"url": "https://files.pythonhosted.org/packages/51/02/a882cc6ee15c8647497f303b88e2ca20170f8e68d9511293638f78b372b4/nti.externalization-2.4.0-cp310-cp310-musllinux_1_1_x86_64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "125b4fa9976d273ee2fd2722f67cb80caa2a474363cdccb91fee01eb7b6feefc",
"md5": "7a4f081ec2d7def91fd827d83000b84c",
"sha256": "6789bc56e10ae70596f1275e9d52cbc6a233f52577cdcaeb9265183190aeace0"
},
"downloads": -1,
"filename": "nti.externalization-2.4.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_28_x86_64.whl",
"has_sig": false,
"md5_digest": "7a4f081ec2d7def91fd827d83000b84c",
"packagetype": "bdist_wheel",
"python_version": "cp311",
"requires_python": ">=3.10",
"size": 4648052,
"upload_time": "2024-11-11T19:20:21",
"upload_time_iso_8601": "2024-11-11T19:20:21.651962Z",
"url": "https://files.pythonhosted.org/packages/12/5b/4fa9976d273ee2fd2722f67cb80caa2a474363cdccb91fee01eb7b6feefc/nti.externalization-2.4.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_28_x86_64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "9f9e19174bcffa57bcc52c8b0cef36c58b046532c750938156156ac15ac0babf",
"md5": "c546dd784c03df7e81066e7388885647",
"sha256": "723297e5934af71f97392fd62e32e5a800107f1fd2a8b534c4b24190233ce18a"
},
"downloads": -1,
"filename": "nti.externalization-2.4.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl",
"has_sig": false,
"md5_digest": "c546dd784c03df7e81066e7388885647",
"packagetype": "bdist_wheel",
"python_version": "cp311",
"requires_python": ">=3.10",
"size": 4627580,
"upload_time": "2024-11-11T19:20:03",
"upload_time_iso_8601": "2024-11-11T19:20:03.650973Z",
"url": "https://files.pythonhosted.org/packages/9f/9e/19174bcffa57bcc52c8b0cef36c58b046532c750938156156ac15ac0babf/nti.externalization-2.4.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "3bcc23c4fc9a463970d5ed3c289d4bf2ceb5a1004f7234a3862fb82abb3b07b9",
"md5": "105b3aeded153a352259daa33e772e59",
"sha256": "3427cf718352cc3cced5fe9e9795c2e20b548dba4dae565af6104bd47730e4e4"
},
"downloads": -1,
"filename": "nti.externalization-2.4.0-cp311-cp311-musllinux_1_1_x86_64.whl",
"has_sig": false,
"md5_digest": "105b3aeded153a352259daa33e772e59",
"packagetype": "bdist_wheel",
"python_version": "cp311",
"requires_python": ">=3.10",
"size": 4651787,
"upload_time": "2024-11-11T19:20:50",
"upload_time_iso_8601": "2024-11-11T19:20:50.153481Z",
"url": "https://files.pythonhosted.org/packages/3b/cc/23c4fc9a463970d5ed3c289d4bf2ceb5a1004f7234a3862fb82abb3b07b9/nti.externalization-2.4.0-cp311-cp311-musllinux_1_1_x86_64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "8eb5c9a01f9e716ac770bdb9814fb54e7e6ab2b8a1c6c1de1a3715f88688cfaf",
"md5": "7cc8015a8fc472c2cbc4b3e3d5fa5cba",
"sha256": "bd1ae5212ba2ef7858212d5a37f8e741ec49fd34340b296472af7ea38947286b"
},
"downloads": -1,
"filename": "nti.externalization-2.4.0-cp312-cp312-macosx_14_0_arm64.whl",
"has_sig": false,
"md5_digest": "7cc8015a8fc472c2cbc4b3e3d5fa5cba",
"packagetype": "bdist_wheel",
"python_version": "cp312",
"requires_python": ">=3.10",
"size": 1810288,
"upload_time": "2024-11-11T19:11:46",
"upload_time_iso_8601": "2024-11-11T19:11:46.691464Z",
"url": "https://files.pythonhosted.org/packages/8e/b5/c9a01f9e716ac770bdb9814fb54e7e6ab2b8a1c6c1de1a3715f88688cfaf/nti.externalization-2.4.0-cp312-cp312-macosx_14_0_arm64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "32882c661bb538b98fc43656a4a95763a6b1dc14e6d2e72a7165ecdc894c83f4",
"md5": "854810616ac193811b26d35975ca3c83",
"sha256": "5bbba7824e7ad2fba2b219fa37c676ea0e5c7792ad66eaf5573ff03b3db4af52"
},
"downloads": -1,
"filename": "nti.externalization-2.4.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_28_x86_64.whl",
"has_sig": false,
"md5_digest": "854810616ac193811b26d35975ca3c83",
"packagetype": "bdist_wheel",
"python_version": "cp312",
"requires_python": ">=3.10",
"size": 4789296,
"upload_time": "2024-11-11T19:20:23",
"upload_time_iso_8601": "2024-11-11T19:20:23.407427Z",
"url": "https://files.pythonhosted.org/packages/32/88/2c661bb538b98fc43656a4a95763a6b1dc14e6d2e72a7165ecdc894c83f4/nti.externalization-2.4.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_28_x86_64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "01bd43f4a75610700d456be84715b94acde9dc2e24291e89a4ed7b0301dea5fd",
"md5": "f8c8cc79658e16fb43dcede32db02477",
"sha256": "9bf605341312f0258a15af1be340de73bc9406aa231d0483844715a217cd2262"
},
"downloads": -1,
"filename": "nti.externalization-2.4.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl",
"has_sig": false,
"md5_digest": "f8c8cc79658e16fb43dcede32db02477",
"packagetype": "bdist_wheel",
"python_version": "cp312",
"requires_python": ">=3.10",
"size": 4746014,
"upload_time": "2024-11-11T19:20:05",
"upload_time_iso_8601": "2024-11-11T19:20:05.757639Z",
"url": "https://files.pythonhosted.org/packages/01/bd/43f4a75610700d456be84715b94acde9dc2e24291e89a4ed7b0301dea5fd/nti.externalization-2.4.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "93caefac5226c19c0cb0161db958575e7e7001bb65ba1964a697a272acae3c53",
"md5": "a245951bb92bf8ecdc4356071fd83fcb",
"sha256": "97e6cc77c020f3873ba747cb18a531af38aaa7437643a4a00447b2001d95ec03"
},
"downloads": -1,
"filename": "nti.externalization-2.4.0-cp312-cp312-musllinux_1_1_x86_64.whl",
"has_sig": false,
"md5_digest": "a245951bb92bf8ecdc4356071fd83fcb",
"packagetype": "bdist_wheel",
"python_version": "cp312",
"requires_python": ">=3.10",
"size": 4767541,
"upload_time": "2024-11-11T19:20:52",
"upload_time_iso_8601": "2024-11-11T19:20:52.337341Z",
"url": "https://files.pythonhosted.org/packages/93/ca/efac5226c19c0cb0161db958575e7e7001bb65ba1964a697a272acae3c53/nti.externalization-2.4.0-cp312-cp312-musllinux_1_1_x86_64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "3cec9bd94fcd26a734a6a62ddb94231c278f9009793ce1e7ed8d7934f8ee5b8e",
"md5": "1af8fba5b59c1a6c795571bdee1da4e9",
"sha256": "effa7053131e7927b05e339a3bb7b350b89e6a3ca0f9515b4fc7788363cd4380"
},
"downloads": -1,
"filename": "nti.externalization-2.4.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_28_x86_64.whl",
"has_sig": false,
"md5_digest": "1af8fba5b59c1a6c795571bdee1da4e9",
"packagetype": "bdist_wheel",
"python_version": "cp313",
"requires_python": ">=3.10",
"size": 4668888,
"upload_time": "2024-11-11T19:20:25",
"upload_time_iso_8601": "2024-11-11T19:20:25.934958Z",
"url": "https://files.pythonhosted.org/packages/3c/ec/9bd94fcd26a734a6a62ddb94231c278f9009793ce1e7ed8d7934f8ee5b8e/nti.externalization-2.4.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_28_x86_64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "0c0add35429e9e9ab58f8e0a8a9ef754d805b22d96f9d43a9e347bd59521609e",
"md5": "51992c3b11dcbf74704c92e609f1b130",
"sha256": "bbc9d77b21e6a43219d49e20fa4308d554bd86aea254609bb466f001197c00c4"
},
"downloads": -1,
"filename": "nti.externalization-2.4.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl",
"has_sig": false,
"md5_digest": "51992c3b11dcbf74704c92e609f1b130",
"packagetype": "bdist_wheel",
"python_version": "cp313",
"requires_python": ">=3.10",
"size": 4631463,
"upload_time": "2024-11-11T19:20:07",
"upload_time_iso_8601": "2024-11-11T19:20:07.940883Z",
"url": "https://files.pythonhosted.org/packages/0c/0a/dd35429e9e9ab58f8e0a8a9ef754d805b22d96f9d43a9e347bd59521609e/nti.externalization-2.4.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "5149f6d2c864075080f10fdce096869cecf8ca5a746aa035c404c83273bb8e5b",
"md5": "f73a8c283e2521f6a70cc203b1b6be39",
"sha256": "b20f415084f39e4a0f7afe5577415e51954e33409067d59a83b1de73da1776f0"
},
"downloads": -1,
"filename": "nti.externalization-2.4.0-cp313-cp313-musllinux_1_1_x86_64.whl",
"has_sig": false,
"md5_digest": "f73a8c283e2521f6a70cc203b1b6be39",
"packagetype": "bdist_wheel",
"python_version": "cp313",
"requires_python": ">=3.10",
"size": 4642660,
"upload_time": "2024-11-11T19:20:53",
"upload_time_iso_8601": "2024-11-11T19:20:53.975894Z",
"url": "https://files.pythonhosted.org/packages/51/49/f6d2c864075080f10fdce096869cecf8ca5a746aa035c404c83273bb8e5b/nti.externalization-2.4.0-cp313-cp313-musllinux_1_1_x86_64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "109424075e10f5a90724bd51dd419b2af002edc0c484e84fe66f7136ff27c7e0",
"md5": "be1ddfe13cfd9aebfc14c29fb999ff7d",
"sha256": "158b22cfa4fe1600c65c48110d9fff417596e4b20b9b384901d15ede45e53dde"
},
"downloads": -1,
"filename": "nti_externalization-2.4.0.tar.gz",
"has_sig": false,
"md5_digest": "be1ddfe13cfd9aebfc14c29fb999ff7d",
"packagetype": "sdist",
"python_version": "source",
"requires_python": ">=3.10",
"size": 1274164,
"upload_time": "2024-11-11T19:11:50",
"upload_time_iso_8601": "2024-11-11T19:11:50.539034Z",
"url": "https://files.pythonhosted.org/packages/10/94/24075e10f5a90724bd51dd419b2af002edc0c484e84fe66f7136ff27c7e0/nti_externalization-2.4.0.tar.gz",
"yanked": false,
"yanked_reason": null
}
],
"upload_time": "2024-11-11 19:11:50",
"github": true,
"gitlab": false,
"bitbucket": false,
"codeberg": false,
"github_user": "OpenNTI",
"github_project": "nti.externalization",
"travis_ci": false,
"coveralls": true,
"github_actions": true,
"requirements": [
{
"name": "cython",
"specs": [
[
">=",
"0.29"
]
]
}
],
"tox": true,
"lcname": "nti.externalization"
}