directory-api-client


Namedirectory-api-client JSON
Version 26.4.7 PyPI version JSON
download
home_pagehttps://github.com/uktrade/directory-api-client
SummaryPython client for Directory API.
upload_time2024-02-23 09:03:21
maintainer
docs_urlNone
authorDepartment for International Trade
requires_python
licenseMIT
keywords
VCS
bugtrack_url
requirements No requirements were recorded.
Travis-CI No Travis.
coveralls test coverage
            # directory-api-client

[![code-climate-image]][code-climate]
[![circle-ci-image]][circle-ci]
[![codecov-image]][codecov]
[![pypi-image]][pypi]
[![semver-image]][semver]

**Great API client.**

---

## Installation

    $ pip install directory-api-client

The api client expects the following settings:

| Setting                              | Notes                                                       |
| ------------------------------------ | ----------------------------------------------------------- |
| DIRECTORY_API_CLIENT_BASE_URL        |                                                             |
| DIRECTORY_API_CLIENT_API_KEY         | Unique to client. Retrieved during the on-boarding process. |
| DIRECTORY_API_CLIENT_SENDER_ID       | Unique to client. Retrieved during the on-boarding process. |
| DIRECTORY_API_CLIENT_DEFAULT_TIMEOUT |                                                             |

The following [directory client core settings](https://github.com/uktrade/directory-client-core) also apply to directory cms client:

| Setting                                            | Notes                                                 |
| -------------------------------------------------- | ----------------------------------------------------- |
| DIRECTORY_CLIENT_CORE_CACHE_EXPIRE_SECONDS         | Duration to store the retrieved content in the cache. |  |
| DIRECTORY_CLIENT_CORE_CACHE_LOG_THROTTLING_SECONDS | Duration to throttle log events for a given url for.  |

And the caching expects the following key in CACHES setting: `api_fallback`

Once that is done the API client can be used:

```py
from directory_api_client.client import api_client
```

## Development

```shell
$ git clone https://github.com/uktrade/directory-api-client
$ cd directory-api-client
$ [create virtual environment and activate]
$ make test_requirements
```

Use `make checks` to validate the codebase with `black` and `isort`, in dry-run mode
Use `make autoformat` to run `black` and `isort` in file-updating mode

## Fallback cache

Where feasible the response is cached to the client's fallback cache. This allows retrieval later if API returns non successful response or times out.

When enabling the fallback cache on a handler make sure that the request's querystring or url path are unique per user, otherwise the User B's details could be leaked User A.

For example, `api_client.company.profile_retrieve` looks up the company for the authenticated user. The authentication header is not used when generating the cache key for the response. This means for that endpoint the querystring and url are the same for all users, so the cache key would therefore also be the same for all users. This means if API was down then all users would see the company details for the last user to successfully retrieve their company.

## Publish to PyPI

The package should be published to PyPI on merge to master. If you need to do it locally then get the credentials from rattic and add the environment variables to your host machine:

| Setting                 |
| ----------------------- |
| DIRECTORY_PYPI_USERNAME |
| DIRECTORY_PYPI_PASSWORD |

Then run the following command:

    $ make publish

[code-climate-image]: https://codeclimate.com/github/uktrade/directory-api-client/badges/issue_count.svg
[code-climate]: https://codeclimate.com/github/uktrade/directory-api-client
[circle-ci-image]: https://circleci.com/gh/uktrade/directory-api-client/tree/master.svg?style=svg
[circle-ci]: https://circleci.com/gh/uktrade/directory-api-client/tree/master
[codecov-image]: https://codecov.io/gh/uktrade/directory-api-client/branch/master/graph/badge.svg
[codecov]: https://codecov.io/gh/uktrade/directory-api-client
[pypi-image]: https://badge.fury.io/py/directory-api-client.svg
[pypi]: https://badge.fury.io/py/directory-api-client
[semver-image]: https://img.shields.io/badge/Versioning%20strategy-SemVer-5FBB1C.svg
[semver]: https://semver.org



            

Raw data

            {
    "_id": null,
    "home_page": "https://github.com/uktrade/directory-api-client",
    "name": "directory-api-client",
    "maintainer": "",
    "docs_url": null,
    "requires_python": "",
    "maintainer_email": "",
    "keywords": "",
    "author": "Department for International Trade",
    "author_email": "",
    "download_url": "",
    "platform": null,
    "description": "# directory-api-client\n\n[![code-climate-image]][code-climate]\n[![circle-ci-image]][circle-ci]\n[![codecov-image]][codecov]\n[![pypi-image]][pypi]\n[![semver-image]][semver]\n\n**Great API client.**\n\n---\n\n## Installation\n\n    $ pip install directory-api-client\n\nThe api client expects the following settings:\n\n| Setting                              | Notes                                                       |\n| ------------------------------------ | ----------------------------------------------------------- |\n| DIRECTORY_API_CLIENT_BASE_URL        |                                                             |\n| DIRECTORY_API_CLIENT_API_KEY         | Unique to client. Retrieved during the on-boarding process. |\n| DIRECTORY_API_CLIENT_SENDER_ID       | Unique to client. Retrieved during the on-boarding process. |\n| DIRECTORY_API_CLIENT_DEFAULT_TIMEOUT |                                                             |\n\nThe following [directory client core settings](https://github.com/uktrade/directory-client-core) also apply to directory cms client:\n\n| Setting                                            | Notes                                                 |\n| -------------------------------------------------- | ----------------------------------------------------- |\n| DIRECTORY_CLIENT_CORE_CACHE_EXPIRE_SECONDS         | Duration to store the retrieved content in the cache. |  |\n| DIRECTORY_CLIENT_CORE_CACHE_LOG_THROTTLING_SECONDS | Duration to throttle log events for a given url for.  |\n\nAnd the caching expects the following key in CACHES setting: `api_fallback`\n\nOnce that is done the API client can be used:\n\n```py\nfrom directory_api_client.client import api_client\n```\n\n## Development\n\n```shell\n$ git clone https://github.com/uktrade/directory-api-client\n$ cd directory-api-client\n$ [create virtual environment and activate]\n$ make test_requirements\n```\n\nUse `make checks` to validate the codebase with `black` and `isort`, in dry-run mode\nUse `make autoformat` to run `black` and `isort` in file-updating mode\n\n## Fallback cache\n\nWhere feasible the response is cached to the client's fallback cache. This allows retrieval later if API returns non successful response or times out.\n\nWhen enabling the fallback cache on a handler make sure that the request's querystring or url path are unique per user, otherwise the User B's details could be leaked User A.\n\nFor example, `api_client.company.profile_retrieve` looks up the company for the authenticated user. The authentication header is not used when generating the cache key for the response. This means for that endpoint the querystring and url are the same for all users, so the cache key would therefore also be the same for all users. This means if API was down then all users would see the company details for the last user to successfully retrieve their company.\n\n## Publish to PyPI\n\nThe package should be published to PyPI on merge to master. If you need to do it locally then get the credentials from rattic and add the environment variables to your host machine:\n\n| Setting                 |\n| ----------------------- |\n| DIRECTORY_PYPI_USERNAME |\n| DIRECTORY_PYPI_PASSWORD |\n\nThen run the following command:\n\n    $ make publish\n\n[code-climate-image]: https://codeclimate.com/github/uktrade/directory-api-client/badges/issue_count.svg\n[code-climate]: https://codeclimate.com/github/uktrade/directory-api-client\n[circle-ci-image]: https://circleci.com/gh/uktrade/directory-api-client/tree/master.svg?style=svg\n[circle-ci]: https://circleci.com/gh/uktrade/directory-api-client/tree/master\n[codecov-image]: https://codecov.io/gh/uktrade/directory-api-client/branch/master/graph/badge.svg\n[codecov]: https://codecov.io/gh/uktrade/directory-api-client\n[pypi-image]: https://badge.fury.io/py/directory-api-client.svg\n[pypi]: https://badge.fury.io/py/directory-api-client\n[semver-image]: https://img.shields.io/badge/Versioning%20strategy-SemVer-5FBB1C.svg\n[semver]: https://semver.org\n\n\n",
    "bugtrack_url": null,
    "license": "MIT",
    "summary": "Python client for Directory API.",
    "version": "26.4.7",
    "project_urls": {
        "Homepage": "https://github.com/uktrade/directory-api-client"
    },
    "split_keywords": [],
    "urls": [
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "67b165f50296b5e7e8fe334c8bbea8a10fee363875a841aeab3366a32cf70c76",
                "md5": "4762dd93115ad86e52cef5ca9202b37d",
                "sha256": "cde1b666c80d64d10740d385574382a0d85679b2dedea2c10060fb54c3e23af4"
            },
            "downloads": -1,
            "filename": "directory_api_client-26.4.7-py3-none-any.whl",
            "has_sig": false,
            "md5_digest": "4762dd93115ad86e52cef5ca9202b37d",
            "packagetype": "bdist_wheel",
            "python_version": "py3",
            "requires_python": null,
            "size": 12465,
            "upload_time": "2024-02-23T09:03:21",
            "upload_time_iso_8601": "2024-02-23T09:03:21.682551Z",
            "url": "https://files.pythonhosted.org/packages/67/b1/65f50296b5e7e8fe334c8bbea8a10fee363875a841aeab3366a32cf70c76/directory_api_client-26.4.7-py3-none-any.whl",
            "yanked": false,
            "yanked_reason": null
        }
    ],
    "upload_time": "2024-02-23 09:03:21",
    "github": true,
    "gitlab": false,
    "bitbucket": false,
    "codeberg": false,
    "github_user": "uktrade",
    "github_project": "directory-api-client",
    "travis_ci": false,
    "coveralls": true,
    "github_actions": false,
    "circle": true,
    "lcname": "directory-api-client"
}
        
Elapsed time: 0.20375s