mirror of https://github.com/OpenKMIP/PyKMIP.git
I'm not *entirely* sure what's going on here, but it seems that when we do something like obj = OpaqueObject(...) Session = sessionmaker(...) session = Session() ... session.add(obj) session.commit() the primary key (and maybe some foreign relations?) aren't automatically populated on `obj` following the commit, and will attempt to lazy-load on next reference. Since expire_on_commit defaults to True, the session attached to `obj` (which is no longer the `session` in locals!) is closed out when we later do session = Session() get_obj = session.query(OpaqueObject).filter( ManagedObject.unique_identifier == obj.unique_identifier).one() leading to a DetachedInstanceError. There seem to be a few different ways we can fix this: * Set expire_on_commit=False so the old session is still useful for the lazy-loading. * Re-use the same session instead of creating a new one. * Explicitly refresh added objects post-commit. Generally prefer the first one; there's some prior art to follow in services/server/test_engine.py. Curiously, that same file runs into trouble despite already setting expire_on_commit=False -- so do the explicit refresh, on the assumption that there was a reason we went to the trouble of creating a fresh session. Closes #649 |
||
---|---|---|
.github/workflows | ||
.travis | ||
bin | ||
docs | ||
examples | ||
kmip | ||
.gitignore | ||
.travis.yml | ||
CHANGELOG.rst | ||
LICENSE.txt | ||
MANIFEST.in | ||
README.rst | ||
doc-requirements.txt | ||
pytest.ini | ||
requirements.txt | ||
setup.py | ||
test-requirements.txt | ||
tox.ini |
README.rst
------ PyKMIP ------ |pypi-version| |travis-status| |codecov-status| |python-versions| PyKMIP is a Python implementation of the Key Management Interoperability Protocol (KMIP), an `OASIS`_ communication standard for the management of objects stored and maintained by key management systems. KMIP defines how key management operations and operation data should be encoded and communicated between client and server applications. Supported operations include the full `CRUD`_ key management lifecycle, including operations for managing object metadata and for conducting cryptographic operations. Supported object types include: * symmetric/asymmetric encryption keys * passwords/passphrases * certificates * opaque data blobs, and more For more information on KMIP, check out the `OASIS KMIP Technical Committee`_ and the `OASIS KMIP Documentation`_. For more information on PyKMIP, check out the project `Documentation`_. Installation ------------ You can install PyKMIP via ``pip``: .. code-block:: console $ pip install pykmip See `Installation`_ for more information. Community --------- The PyKMIP community has various forums and resources you can use: * `Source code`_ * `Issue tracker`_ * IRC: ``#pykmip`` on ``irc.freenode.net`` * Twitter: ``@pykmip`` .. _`CRUD`: https://en.wikipedia.org/wiki/Create,_read,_update_and_delete .. _`OASIS`: https://www.oasis-open.org .. _`OASIS KMIP Technical Committee`: https://www.oasis-open.org/committees/tc_home.php?wg_abbrev=kmip .. _`OASIS KMIP Documentation`: https://docs.oasis-open.org/kmip/spec/ .. _`Documentation`: https://pykmip.readthedocs.io/en/latest/index.html .. _`Installation`: https://pykmip.readthedocs.io/en/latest/installation.html .. _`Source code`: https://github.com/openkmip/pykmip .. _`Issue tracker`: https://github.com/openkmip/pykmip/issues .. |pypi-version| image:: https://img.shields.io/pypi/v/pykmip.svg :target: https://pypi.python.org/pypi/pykmip :alt: Latest Version .. |travis-status| image:: https://travis-ci.org/OpenKMIP/PyKMIP.svg?branch=master :target: https://travis-ci.org/OpenKMIP/PyKMIP .. |codecov-status| image:: https://codecov.io/github/OpenKMIP/PyKMIP/coverage.svg?branch=master :target: https://codecov.io/github/OpenKMIP/PyKMIP?branch=master .. |python-versions| image:: https://img.shields.io/pypi/pyversions/PyKMIP.svg :target: https://github.com/OpenKMIP/PyKMIP