A Python implementation of the KMIP specification.
Go to file
Tim Burke c0c9803956 Fix tests to pass with SQLAlchemy>=1.4.0
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
2021-09-23 13:43:04 -04:00
.github/workflows Create codeql-analysis.yml 2021-03-31 13:15:47 -04:00
.travis Rename the 'default' policy section to 'preset' 2018-05-17 13:55:50 -04:00
bin Provision CA extension in CA cert 2019-02-27 08:53:46 -05:00
docs Update the PyKMIP documentation in preparation for v0.10 2020-02-24 15:02:03 -05:00
examples Rename the 'default' policy section to 'preset' 2018-05-17 13:55:50 -04:00
kmip Fix tests to pass with SQLAlchemy>=1.4.0 2021-09-23 13:43:04 -04:00
.gitignore Update and clean up .gitignore 2018-02-14 15:55:27 -05:00
.travis.yml Pin PyYAML to <=5.2 2020-02-24 14:36:53 -05:00
CHANGELOG.rst PyKMIP - Release 0.10.0 2020-02-25 11:05:27 -05:00
LICENSE.txt Update the project license, removing an unneeded appendix 2018-02-12 13:49:11 -05:00
MANIFEST.in Adding server key and cert files to installation 2014-12-10 18:43:56 -05:00
README.rst Update README to align with new project documentation 2017-12-07 10:52:38 -05:00
doc-requirements.txt Update the documentation to cover auth and access control changes 2018-06-05 09:57:06 -04:00
pytest.ini Updating integration tests to ignore software server 2015-08-20 09:13:20 -04:00
requirements.txt Require enum-compat instead of enum34 2019-08-28 13:31:34 -04:00
setup.py Require enum-compat instead of enum34 2019-08-28 13:31:34 -04:00
test-requirements.txt Pin PyYAML to <=5.2 2020-02-24 14:36:53 -05:00
tox.ini Remove basepython for non-default tox environments 2019-09-13 16:06:01 -04:00

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