udm-rest-client


Nameudm-rest-client JSON
Version 1.2.3 PyPI version JSON
download
home_pagehttps://github.com/univention/python-udm-rest-api-client
SummaryPython library to interact with the Univention UDM REST API. Implements the simple Python UDM API.
upload_time2024-01-18 13:08:44
maintainer
docs_urlNone
authorDaniel Troeder
requires_python>=3.6
licenseGNU Affero General Public License v3
keywords univention ucs udm rest
VCS
bugtrack_url
requirements aiohttp async-property click docker requests
Travis-CI
coveralls test coverage No coveralls.
            ======================
Python UDM REST Client
======================

|python| |license| |code style| |codecov| |docspassing| |travisci| |gh Code Linting| |gh Integration tests|

Python library to interact with the Univention `UDM REST API`_, implements the interface of the `Python UDM API`_.

* Free software: GNU Affero General Public License version 3
* Documentation: https://udm-rest-client.readthedocs.io


Features
--------

* Asynchronous
* Automatic handling of HTTP(S) sessions
* Type annotations
* 100% test coverage (unittests + integration tests)
* Python 3.6, 3.7, 3.8, 3.9, 3.10, 3.11


Usage
-----

The ``UDM`` context manager opens and closes a HTTP session::

    >>> import asyncio
    >>> from udm_rest_client.udm import UDM
    >>>
    >>> async def get_obj(mod_name, dn):
    ...     async with UDM(
    ...         "USERNAME",
    ...         "PASSWORD",
    ...         "https://FQDN.OF.UCS/univention/udm",
    ...         ssl_ca_cert="ucs-root-ca.crt"
    ...     ) as udm:
    ...         mod = udm.get(mod_name)
    ...         return await mod.get(dn)
    ...
    >>> # Python 3.6:
    >>> loop = asyncio.get_event_loop()
    >>> obj = loop.run_until_complete(get_obj("users/user", "uid=foo,cn=users,BASE-DN"))
    >>>
    >>> # Python 3.7+:
    >>> obj = asyncio.run(get_obj("users/user", "uid=foo,cn=users,BASE-DN"))
    >>>
    >>> print(obj)
    UdmObject('users/user', 'uid=foo,cn=users,BASE-DN')
    >>> print(obj.props.username)
    foo

There are more examples in the `docs`_ *usage* section.

If the SSL CA certificate is not available ``verify_ssl=False`` can be used in place of ``ssl_ca_cert=...``. Obviously that is not safe! The CA of any UCS server can always be downloaded from ``http://FQDN.OF.UCS/ucs-root-ca.crt``.


Installation
------------

1. Install *Python UDM REST Client* via pip from `PyPI`_::

    $ pip install udm-rest-client

2. Install the OpenAPI client library used by the udm-rest-client. It is created by software from the `OpenAPI Generator`_ project. You need to either have a local Java installation (Java 8+) or run the projects Docker container. The process is scripted::

    $ update_openapi_client --generator docker ucs.master.fqdn.or.ip  # use Docker
    $ update_openapi_client --generator java ucs.master.fqdn.or.ip  # use Java

Use ``--insecure`` to ignore SSL verification errors. See ``--help`` for more options.

Use ``--username`` and ``--password`` to provide credentials if access to your openapi.json is protected. This is the
default in newer versions of UCS and thus credentials are needed.

**Important**:
Whenever a new UDM module is installed in the domain, it is necessary to rerun ``update_openapi_client``.
The new UDM module will otherwise not be available in the *Python UDM REST Client*.
Very few apps (like UCS\@school and Open-Xchange) install new UDM modules.
New extended attributes do *not* require to rebuild the OpenAPI client library.

Tests
-----

There are some isolated unittests, but most tests run against a real UDM REST API. Either an existing UCS installation can be used, or a LXD container started.

Run tests with the current Python interpreter::

    $ make test

Using `tox`_ the tests can be executed with all supported Python versions::

    $ make test-all

Using the UCS LXD container is automated in the ``Makefile``. It has commands to download and start the LXD image (1 GB) and running the tests::

    $ make create-lxd-test-server-config
    $ make test

Initializing LXD is however left up to the developer (see https://linuxcontainers.org/lxd/). Using storage backend ``lvm``, ``btrfs`` or ``zfs`` is recommended for repeated use. To run the tests only once, the storage backend ``dir`` is the easiest to use. It is very slow though, as it requires unpacking the image every time the container is started.

The ``Makefile`` also needs ``yq`` to be installed: https://github.com/mikefarah/yq

It is also possible to use an existing UCS server for the tests. Export ``UCS_HOST`` (the servers IP/FQDN), ``UCS_USERDN`` (the DN of an administrator account, usually ``uid=Administrator,cn=users,dc=...``) and ``UCS_PASSWORD`` (the accounts password), before starting the tests::

    $ export UCS_HOST="my.server.local"
    $ export UCS_USERDN="uid=Administrator,cn=users,dc=domain,dc=local"
    $ export UCS_PASSWORD="s3cr3t"
    $ make test

Much more comfortable (especially for repeated use) is creating a file ``test_server.yaml`` in the ``tests`` directory, which will automatically be used by the tests::

    $ cp test_server_example.yaml test/test_server.yaml
    $ $EDITOR test_server.yaml

Don't forget to update the OpenAPI client library before running the test against a new server::

    $ update_openapi_client --generator <docker|java> --username Administrator --password s3cr3t $UCS_HOST

Run ``update_openapi_client --help`` to see further options.

To get the IP address of the running UCS LXD container execute::

    $ . lxd.sh ; lxd_container_ip

Logging
-------

Standard logging is used for tracking the libraries activity.
To capture the log messages for this project, subscribe to a logger named ``udm_rest_client``.

The *UDM REST API* on the UCS server logs into the file ``/var/log/univention/directory-manager-rest.log``.

Repo permissions
----------------
* GitHub: @dansan, @SamuelYaron, @brodersen4univention, @twenzel, @botner
* GitLab: UCS developers
* PyPI: @dansan, @SamuelYaron, @brodersen4univention, @twenzel, @botner
* PyPI: @dansan, @SamuelYaron, @brodersen4univention, @twenzel, @botner

Releases
--------

.. note::

   These instructions require a `PyPI`_ account with permissions for the ``udm-rest-client`` package.


* Verify the `daily tests <https://jenkins2022.knut.univention.de/job/UCSschool-5.0/job/UDM-REST-API-client-daily/>`_.
* Increment the version:
  * ``udm_rest_client/__init__.py``
  * ``setup.py``
* Update ``HISTORY.rst`` with changelog notes.
* Push the package to test PyPi:

  .. code:: bash

     make release-test

* Verify that the test version works before continuing with the next step.
* Push the package to production PyPi:

  .. code:: bash

     make release

Credits
-------

This package was created with Cookiecutter_ and the `audreyr/cookiecutter-pypackage`_ project template.

.. _Cookiecutter: https://github.com/audreyr/cookiecutter
.. _`audreyr/cookiecutter-pypackage`: https://github.com/audreyr/cookiecutter-pypackage
.. _`tox`: http://tox.readthedocs.org/
.. _`UDM REST API`: https://docs.software-univention.de/developer-reference-4.4.html#udm:rest_api
.. _`Python UDM API`: https://github.com/univention/univention-corporate-server/blob/4.4-8/management/univention-directory-manager-modules/modules/univention/udm/__init__.py
.. _`OpenAPI Generator`: https://github.com/OpenAPITools/openapi-generator
.. _`docs`: https://udm-rest-client.readthedocs.io
.. _`PyPI`: https://pypi.org/project/udm-rest-client/
.. |license| image:: https://img.shields.io/badge/License-AGPL%20v3-orange.svg
    :alt: GNU AGPL V3 license
    :target: https://www.gnu.org/licenses/agpl-3.0
.. |python| image:: https://img.shields.io/badge/python-3.6+-blue.svg
    :alt: Python 3.6+
    :target: https://www.python.org/
.. |code style| image:: https://img.shields.io/badge/code%20style-black-000000.svg
    :alt: Code style: black
    :target: https://github.com/psf/black
.. |codecov| image:: https://codecov.io/gh/univention/python-udm-rest-api-client/branch/master/graph/badge.svg
    :alt: Code coverage
    :target: https://codecov.io/gh/univention/python-udm-rest-api-client
.. |docspassing| image:: https://readthedocs.org/projects/udm-rest-client/badge/?version=latest
    :alt: Documentation Status
    :target: https://udm-rest-client.readthedocs.io/en/latest/?badge=latest
.. |travisci| image:: https://travis-ci.com/univention/python-udm-rest-api-client.svg?branch=master
    :target: https://app.travis-ci.com/github/univention/python-udm-rest-api-client
.. |gh Code Linting| image:: https://github.com/univention/python-udm-rest-api-client/workflows/Code%20Linting/badge.svg
    :target: https://github.com/univention/python-udm-rest-api-client/actions?query=workflow%3A%22Code+Linting%22
.. |gh Integration tests| image:: https://github.com/univention/python-udm-rest-api-client/workflows/Integration%20tests/badge.svg
    :target: https://github.com/univention/python-udm-rest-api-client/actions?query=workflow%3A%22Integration+tests%22


=======
History
=======

1.2.3 (2024-01-16)
-------------------

* The client now handles HTTP status responses from the UDM REST API based on generic range (e.g. 2xx-3xx) instead of specific codes.

1.2.2 (2023-06-05)
-------------------

* Fix ``update_openapi_client`` crashing with newer versions of the Python Docker client and ``requests`` (Issue #10).
* Testing fixes (Issues #5 and #9)

1.2.1 (2023-02-15)
-------------------

* Update OpenAPI client library generator (openapitools/openapi-generator-cli) to version ``5.4.0`` to support Python 3.11..

1.1.1 (2023-01-16)
-------------------

* Move operations succeed, when a language header is set.

1.1.0 (2022-11-29)
-------------------

* Adjust objectType return value of ``users/self`` to latest UCS erratum.

1.0.13 (2022-11-09)
-------------------

* Fix error handling in base_http.py.

1.0.12 (2022-11-02)
-------------------

* Add the possibility to send an Accept-Language header with each request.

1.0.11 (2022-10-19)
-------------------

* Handle UDM REST API doing immediate moves (without redirects) for objects without subordinates.

1.0.10 (2022-10-13)
-------------------

* Pass trough UDM REST API error in ``CreateError`` and ``ModifyError`` exceptions.

1.0.9 (2022-09-15)
------------------

* Format the correlation ID as a hex value.

1.0.8 (2022-09-11)
------------------

* Send a correlation ID with each request.
* Raise version of generated client library ``openapi-client-udm`` to ``1.0.1``.

1.0.7 (2022-01-18)
------------------

* Lower required version of ``click`` library, for compatibility with ``typer<0.4.0``.

1.0.6 (2022-01-05)
------------------

* UCS 5.0 container for testing is now run using LXD.
* Fix deprecated use of ``ruamel.yaml`` in tests.

1.0.5 (2021-12-09)
------------------

* Add process wide cache for the LDAP base of each host.

1.0.4 (2021-11-15)
------------------

* Update `aiohttp <https://github.com/aio-libs/aiohttp>`_ to (at least) Version ``3.8.1``, which fixes `aiohttp not honoring "no_proxy" <https://github.com/aio-libs/aiohttp/issues/4431>`_.
* Update development and testing dependencies.

1.0.3 (2021-03-25)
------------------

* Fix handling of values that are lists of dicts (e.g. ``dnsEntryZoneAlias`` of computer objects).

1.0.2 (2021-03-25)
------------------

* Fix not sending policy modifications to server.

1.0.1 (2021-02-10)
------------------

* The script to create/update the OpenAPI client ``update_openapi_client`` has been updated to use the OpenAPI Generator version ``5.0.0``.
* The ``update_openapi_client`` script now verifies the checksum of the downloaded JAR file.

1.0.0 (2021-02-03)
------------------

* **Breaking API CHANGE**: The ``options`` attribute of UDM objects is now a dictionary. It mirrors the UDM REST APIs ``options`` attribute value. Before it was a list, which did not allow to disable default options (Bug #50974).

0.4.0 (2020-04-06)
------------------

* Add the possibility to provide credentials in the update_openapi_client script to download the schema file.

0.3.1 (2020-03-19)
------------------

* Update download URL of openapi-generator jar.

0.3.0 (2020-03-18)
------------------

* allow setting properties that only exist after enabling an option (`Bug #50972 <http://forge.univention.org/bugzilla/show_bug.cgi?id=50972>`_)

0.2.1 (2019-12-14)
------------------

* fix not detecting changes in mutable property values

0.2.0 (2019-12-10)
------------------

* ``Mapping`` and ``Iterable`` interfaces were added to the object properties class. Adds item access (``obj.props["key"]``), ``obj.props.get("key")``, ``len(obj.props)``, ``key in obj.props``, ``obj.props.keys()``, ``obj.props.values()``, ``obj.props.items()``
* documentation improvements
* HTTP basic passwords are no longer logged
* map ``options`` and ``policies`` back to original values (were being rewritten to pep8 conform keys by the OpenAPI client)

0.1.1 (2019-11-25)
------------------

* allow specifying existing JAR for open api client build
* various small fixes to handle RTD and Travis-CI

0.1.0 (2019-11-22)
------------------

* First release.



            

Raw data

            {
    "_id": null,
    "home_page": "https://github.com/univention/python-udm-rest-api-client",
    "name": "udm-rest-client",
    "maintainer": "",
    "docs_url": null,
    "requires_python": ">=3.6",
    "maintainer_email": "",
    "keywords": "Univention UCS UDM REST",
    "author": "Daniel Troeder",
    "author_email": "troeder@univention.de",
    "download_url": "https://files.pythonhosted.org/packages/f5/ba/2b9850d4cd0c67da34b053873e1e9730bcc46663a811bf1fef56f035aa91/udm-rest-client-1.2.3.tar.gz",
    "platform": null,
    "description": "======================\nPython UDM REST Client\n======================\n\n|python| |license| |code style| |codecov| |docspassing| |travisci| |gh Code Linting| |gh Integration tests|\n\nPython library to interact with the Univention `UDM REST API`_, implements the interface of the `Python UDM API`_.\n\n* Free software: GNU Affero General Public License version 3\n* Documentation: https://udm-rest-client.readthedocs.io\n\n\nFeatures\n--------\n\n* Asynchronous\n* Automatic handling of HTTP(S) sessions\n* Type annotations\n* 100% test coverage (unittests + integration tests)\n* Python 3.6, 3.7, 3.8, 3.9, 3.10, 3.11\n\n\nUsage\n-----\n\nThe ``UDM`` context manager opens and closes a HTTP session::\n\n    >>> import asyncio\n    >>> from udm_rest_client.udm import UDM\n    >>>\n    >>> async def get_obj(mod_name, dn):\n    ...     async with UDM(\n    ...         \"USERNAME\",\n    ...         \"PASSWORD\",\n    ...         \"https://FQDN.OF.UCS/univention/udm\",\n    ...         ssl_ca_cert=\"ucs-root-ca.crt\"\n    ...     ) as udm:\n    ...         mod = udm.get(mod_name)\n    ...         return await mod.get(dn)\n    ...\n    >>> # Python 3.6:\n    >>> loop = asyncio.get_event_loop()\n    >>> obj = loop.run_until_complete(get_obj(\"users/user\", \"uid=foo,cn=users,BASE-DN\"))\n    >>>\n    >>> # Python 3.7+:\n    >>> obj = asyncio.run(get_obj(\"users/user\", \"uid=foo,cn=users,BASE-DN\"))\n    >>>\n    >>> print(obj)\n    UdmObject('users/user', 'uid=foo,cn=users,BASE-DN')\n    >>> print(obj.props.username)\n    foo\n\nThere are more examples in the `docs`_ *usage* section.\n\nIf the SSL CA certificate is not available ``verify_ssl=False`` can be used in place of ``ssl_ca_cert=...``. Obviously that is not safe! The CA of any UCS server can always be downloaded from ``http://FQDN.OF.UCS/ucs-root-ca.crt``.\n\n\nInstallation\n------------\n\n1. Install *Python UDM REST Client* via pip from `PyPI`_::\n\n    $ pip install udm-rest-client\n\n2. Install the OpenAPI client library used by the udm-rest-client. It is created by software from the `OpenAPI Generator`_ project. You need to either have a local Java installation (Java 8+) or run the projects Docker container. The process is scripted::\n\n    $ update_openapi_client --generator docker ucs.master.fqdn.or.ip  # use Docker\n    $ update_openapi_client --generator java ucs.master.fqdn.or.ip  # use Java\n\nUse ``--insecure`` to ignore SSL verification errors. See ``--help`` for more options.\n\nUse ``--username`` and ``--password`` to provide credentials if access to your openapi.json is protected. This is the\ndefault in newer versions of UCS and thus credentials are needed.\n\n**Important**:\nWhenever a new UDM module is installed in the domain, it is necessary to rerun ``update_openapi_client``.\nThe new UDM module will otherwise not be available in the *Python UDM REST Client*.\nVery few apps (like UCS\\@school and Open-Xchange) install new UDM modules.\nNew extended attributes do *not* require to rebuild the OpenAPI client library.\n\nTests\n-----\n\nThere are some isolated unittests, but most tests run against a real UDM REST API. Either an existing UCS installation can be used, or a LXD container started.\n\nRun tests with the current Python interpreter::\n\n    $ make test\n\nUsing `tox`_ the tests can be executed with all supported Python versions::\n\n    $ make test-all\n\nUsing the UCS LXD container is automated in the ``Makefile``. It has commands to download and start the LXD image (1 GB) and running the tests::\n\n    $ make create-lxd-test-server-config\n    $ make test\n\nInitializing LXD is however left up to the developer (see https://linuxcontainers.org/lxd/). Using storage backend ``lvm``, ``btrfs`` or ``zfs`` is recommended for repeated use. To run the tests only once, the storage backend ``dir`` is the easiest to use. It is very slow though, as it requires unpacking the image every time the container is started.\n\nThe ``Makefile`` also needs ``yq`` to be installed: https://github.com/mikefarah/yq\n\nIt is also possible to use an existing UCS server for the tests. Export ``UCS_HOST`` (the servers IP/FQDN), ``UCS_USERDN`` (the DN of an administrator account, usually ``uid=Administrator,cn=users,dc=...``) and ``UCS_PASSWORD`` (the accounts password), before starting the tests::\n\n    $ export UCS_HOST=\"my.server.local\"\n    $ export UCS_USERDN=\"uid=Administrator,cn=users,dc=domain,dc=local\"\n    $ export UCS_PASSWORD=\"s3cr3t\"\n    $ make test\n\nMuch more comfortable (especially for repeated use) is creating a file ``test_server.yaml`` in the ``tests`` directory, which will automatically be used by the tests::\n\n    $ cp test_server_example.yaml test/test_server.yaml\n    $ $EDITOR test_server.yaml\n\nDon't forget to update the OpenAPI client library before running the test against a new server::\n\n    $ update_openapi_client --generator <docker|java> --username Administrator --password s3cr3t $UCS_HOST\n\nRun ``update_openapi_client --help`` to see further options.\n\nTo get the IP address of the running UCS LXD container execute::\n\n    $ . lxd.sh ; lxd_container_ip\n\nLogging\n-------\n\nStandard logging is used for tracking the libraries activity.\nTo capture the log messages for this project, subscribe to a logger named ``udm_rest_client``.\n\nThe *UDM REST API* on the UCS server logs into the file ``/var/log/univention/directory-manager-rest.log``.\n\nRepo permissions\n----------------\n* GitHub: @dansan, @SamuelYaron, @brodersen4univention, @twenzel, @botner\n* GitLab: UCS developers\n* PyPI: @dansan, @SamuelYaron, @brodersen4univention, @twenzel, @botner\n* PyPI: @dansan, @SamuelYaron, @brodersen4univention, @twenzel, @botner\n\nReleases\n--------\n\n.. note::\n\n   These instructions require a `PyPI`_ account with permissions for the ``udm-rest-client`` package.\n\n\n* Verify the `daily tests <https://jenkins2022.knut.univention.de/job/UCSschool-5.0/job/UDM-REST-API-client-daily/>`_.\n* Increment the version:\n  * ``udm_rest_client/__init__.py``\n  * ``setup.py``\n* Update ``HISTORY.rst`` with changelog notes.\n* Push the package to test PyPi:\n\n  .. code:: bash\n\n     make release-test\n\n* Verify that the test version works before continuing with the next step.\n* Push the package to production PyPi:\n\n  .. code:: bash\n\n     make release\n\nCredits\n-------\n\nThis package was created with Cookiecutter_ and the `audreyr/cookiecutter-pypackage`_ project template.\n\n.. _Cookiecutter: https://github.com/audreyr/cookiecutter\n.. _`audreyr/cookiecutter-pypackage`: https://github.com/audreyr/cookiecutter-pypackage\n.. _`tox`: http://tox.readthedocs.org/\n.. _`UDM REST API`: https://docs.software-univention.de/developer-reference-4.4.html#udm:rest_api\n.. _`Python UDM API`: https://github.com/univention/univention-corporate-server/blob/4.4-8/management/univention-directory-manager-modules/modules/univention/udm/__init__.py\n.. _`OpenAPI Generator`: https://github.com/OpenAPITools/openapi-generator\n.. _`docs`: https://udm-rest-client.readthedocs.io\n.. _`PyPI`: https://pypi.org/project/udm-rest-client/\n.. |license| image:: https://img.shields.io/badge/License-AGPL%20v3-orange.svg\n    :alt: GNU AGPL V3 license\n    :target: https://www.gnu.org/licenses/agpl-3.0\n.. |python| image:: https://img.shields.io/badge/python-3.6+-blue.svg\n    :alt: Python 3.6+\n    :target: https://www.python.org/\n.. |code style| image:: https://img.shields.io/badge/code%20style-black-000000.svg\n    :alt: Code style: black\n    :target: https://github.com/psf/black\n.. |codecov| image:: https://codecov.io/gh/univention/python-udm-rest-api-client/branch/master/graph/badge.svg\n    :alt: Code coverage\n    :target: https://codecov.io/gh/univention/python-udm-rest-api-client\n.. |docspassing| image:: https://readthedocs.org/projects/udm-rest-client/badge/?version=latest\n    :alt: Documentation Status\n    :target: https://udm-rest-client.readthedocs.io/en/latest/?badge=latest\n.. |travisci| image:: https://travis-ci.com/univention/python-udm-rest-api-client.svg?branch=master\n    :target: https://app.travis-ci.com/github/univention/python-udm-rest-api-client\n.. |gh Code Linting| image:: https://github.com/univention/python-udm-rest-api-client/workflows/Code%20Linting/badge.svg\n    :target: https://github.com/univention/python-udm-rest-api-client/actions?query=workflow%3A%22Code+Linting%22\n.. |gh Integration tests| image:: https://github.com/univention/python-udm-rest-api-client/workflows/Integration%20tests/badge.svg\n    :target: https://github.com/univention/python-udm-rest-api-client/actions?query=workflow%3A%22Integration+tests%22\n\n\n=======\nHistory\n=======\n\n1.2.3 (2024-01-16)\n-------------------\n\n* The client now handles HTTP status responses from the UDM REST API based on generic range (e.g. 2xx-3xx) instead of specific codes.\n\n1.2.2 (2023-06-05)\n-------------------\n\n* Fix ``update_openapi_client`` crashing with newer versions of the Python Docker client and ``requests`` (Issue #10).\n* Testing fixes (Issues #5 and #9)\n\n1.2.1 (2023-02-15)\n-------------------\n\n* Update OpenAPI client library generator (openapitools/openapi-generator-cli) to version ``5.4.0`` to support Python 3.11..\n\n1.1.1 (2023-01-16)\n-------------------\n\n* Move operations succeed, when a language header is set.\n\n1.1.0 (2022-11-29)\n-------------------\n\n* Adjust objectType return value of ``users/self`` to latest UCS erratum.\n\n1.0.13 (2022-11-09)\n-------------------\n\n* Fix error handling in base_http.py.\n\n1.0.12 (2022-11-02)\n-------------------\n\n* Add the possibility to send an Accept-Language header with each request.\n\n1.0.11 (2022-10-19)\n-------------------\n\n* Handle UDM REST API doing immediate moves (without redirects) for objects without subordinates.\n\n1.0.10 (2022-10-13)\n-------------------\n\n* Pass trough UDM REST API error in ``CreateError`` and ``ModifyError`` exceptions.\n\n1.0.9 (2022-09-15)\n------------------\n\n* Format the correlation ID as a hex value.\n\n1.0.8 (2022-09-11)\n------------------\n\n* Send a correlation ID with each request.\n* Raise version of generated client library ``openapi-client-udm`` to ``1.0.1``.\n\n1.0.7 (2022-01-18)\n------------------\n\n* Lower required version of ``click`` library, for compatibility with ``typer<0.4.0``.\n\n1.0.6 (2022-01-05)\n------------------\n\n* UCS 5.0 container for testing is now run using LXD.\n* Fix deprecated use of ``ruamel.yaml`` in tests.\n\n1.0.5 (2021-12-09)\n------------------\n\n* Add process wide cache for the LDAP base of each host.\n\n1.0.4 (2021-11-15)\n------------------\n\n* Update `aiohttp <https://github.com/aio-libs/aiohttp>`_ to (at least) Version ``3.8.1``, which fixes `aiohttp not honoring \"no_proxy\" <https://github.com/aio-libs/aiohttp/issues/4431>`_.\n* Update development and testing dependencies.\n\n1.0.3 (2021-03-25)\n------------------\n\n* Fix handling of values that are lists of dicts (e.g. ``dnsEntryZoneAlias`` of computer objects).\n\n1.0.2 (2021-03-25)\n------------------\n\n* Fix not sending policy modifications to server.\n\n1.0.1 (2021-02-10)\n------------------\n\n* The script to create/update the OpenAPI client ``update_openapi_client`` has been updated to use the OpenAPI Generator version ``5.0.0``.\n* The ``update_openapi_client`` script now verifies the checksum of the downloaded JAR file.\n\n1.0.0 (2021-02-03)\n------------------\n\n* **Breaking API CHANGE**: The ``options`` attribute of UDM objects is now a dictionary. It mirrors the UDM REST APIs ``options`` attribute value. Before it was a list, which did not allow to disable default options (Bug #50974).\n\n0.4.0 (2020-04-06)\n------------------\n\n* Add the possibility to provide credentials in the update_openapi_client script to download the schema file.\n\n0.3.1 (2020-03-19)\n------------------\n\n* Update download URL of openapi-generator jar.\n\n0.3.0 (2020-03-18)\n------------------\n\n* allow setting properties that only exist after enabling an option (`Bug #50972 <http://forge.univention.org/bugzilla/show_bug.cgi?id=50972>`_)\n\n0.2.1 (2019-12-14)\n------------------\n\n* fix not detecting changes in mutable property values\n\n0.2.0 (2019-12-10)\n------------------\n\n* ``Mapping`` and ``Iterable`` interfaces were added to the object properties class. Adds item access (``obj.props[\"key\"]``), ``obj.props.get(\"key\")``, ``len(obj.props)``, ``key in obj.props``, ``obj.props.keys()``, ``obj.props.values()``, ``obj.props.items()``\n* documentation improvements\n* HTTP basic passwords are no longer logged\n* map ``options`` and ``policies`` back to original values (were being rewritten to pep8 conform keys by the OpenAPI client)\n\n0.1.1 (2019-11-25)\n------------------\n\n* allow specifying existing JAR for open api client build\n* various small fixes to handle RTD and Travis-CI\n\n0.1.0 (2019-11-22)\n------------------\n\n* First release.\n\n\n",
    "bugtrack_url": null,
    "license": "GNU Affero General Public License v3",
    "summary": "Python library to interact with the Univention UDM REST API. Implements the simple Python UDM API.",
    "version": "1.2.3",
    "project_urls": {
        "Homepage": "https://github.com/univention/python-udm-rest-api-client"
    },
    "split_keywords": [
        "univention",
        "ucs",
        "udm",
        "rest"
    ],
    "urls": [
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "3ce0839564a5a730624dd7e93f9776474eaf7c423100955793c3ba70203ef928",
                "md5": "73ffbc6a2c9564dc53c23d43f991b2ab",
                "sha256": "ee29e94e3ba5fba63a694e33d119b1af7450afcdce3a44301d4cd5ddfa1f980b"
            },
            "downloads": -1,
            "filename": "udm_rest_client-1.2.3-py2.py3-none-any.whl",
            "has_sig": false,
            "md5_digest": "73ffbc6a2c9564dc53c23d43f991b2ab",
            "packagetype": "bdist_wheel",
            "python_version": "py2.py3",
            "requires_python": ">=3.6",
            "size": 33717,
            "upload_time": "2024-01-18T13:08:42",
            "upload_time_iso_8601": "2024-01-18T13:08:42.312884Z",
            "url": "https://files.pythonhosted.org/packages/3c/e0/839564a5a730624dd7e93f9776474eaf7c423100955793c3ba70203ef928/udm_rest_client-1.2.3-py2.py3-none-any.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "f5ba2b9850d4cd0c67da34b053873e1e9730bcc46663a811bf1fef56f035aa91",
                "md5": "dea16392a76435dd33611dae910c0837",
                "sha256": "80724cafa3498d23849124f27f965bc56f10f1dd09b8c2e61e89670c40931a5e"
            },
            "downloads": -1,
            "filename": "udm-rest-client-1.2.3.tar.gz",
            "has_sig": false,
            "md5_digest": "dea16392a76435dd33611dae910c0837",
            "packagetype": "sdist",
            "python_version": "source",
            "requires_python": ">=3.6",
            "size": 57888,
            "upload_time": "2024-01-18T13:08:44",
            "upload_time_iso_8601": "2024-01-18T13:08:44.630611Z",
            "url": "https://files.pythonhosted.org/packages/f5/ba/2b9850d4cd0c67da34b053873e1e9730bcc46663a811bf1fef56f035aa91/udm-rest-client-1.2.3.tar.gz",
            "yanked": false,
            "yanked_reason": null
        }
    ],
    "upload_time": "2024-01-18 13:08:44",
    "github": true,
    "gitlab": false,
    "bitbucket": false,
    "codeberg": false,
    "github_user": "univention",
    "github_project": "python-udm-rest-api-client",
    "travis_ci": true,
    "coveralls": false,
    "github_actions": false,
    "requirements": [
        {
            "name": "aiohttp",
            "specs": [
                [
                    "<",
                    "4"
                ],
                [
                    ">=",
                    "3.8.1"
                ]
            ]
        },
        {
            "name": "async-property",
            "specs": [
                [
                    ">=",
                    "0.2.1"
                ],
                [
                    "<",
                    "0.3"
                ]
            ]
        },
        {
            "name": "click",
            "specs": [
                [
                    ">=",
                    "7"
                ],
                [
                    "<",
                    "9"
                ]
            ]
        },
        {
            "name": "docker",
            "specs": [
                [
                    "<",
                    "7"
                ],
                [
                    ">=",
                    "6.1.1"
                ]
            ]
        },
        {
            "name": "requests",
            "specs": [
                [
                    "<",
                    "3"
                ],
                [
                    ">=",
                    "2.26"
                ]
            ]
        }
    ],
    "tox": true,
    "lcname": "udm-rest-client"
}
        
Elapsed time: 0.17605s