{ "info": { "author": "Department for International Trade", "author_email": "", "bugtrack_url": null, "classifiers": [ "Development Status :: 5 - Production/Stable", "Environment :: Web Environment", "Framework :: Django", "Framework :: Django :: 1.11", "Framework :: Django :: 2.0", "Framework :: Django :: 2.1", "Framework :: Django :: 2.2", "Intended Audience :: Developers", "License :: OSI Approved :: MIT License", "Natural Language :: English", "Operating System :: OS Independent", "Programming Language :: Python :: 3.6", "Programming Language :: Python :: Implementation :: PyPy", "Topic :: Software Development :: Libraries :: Python Modules" ], "description": "# directory-client-core\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**Directory Client Core.**\n\nCommon code for the Directory API clients.\n---\n\n## Requirements\n\n## Installation\n\n```shell\npip install directory-client-core\n```\n\n## Usage\n\n```python\nfrom directory_client_core.base import AbstractAPIClient\n\n\nclass MyAPIClient(AbstractAPIClient):\n\n version = 1 # passed as a header in all requests\n\n def get_something(self):\n return self.get(...)\n\n def create_sometime(self):\n return self.post(...)\n\n\nclient = MyAPIClient(\n base_url='https://example.com/',\n api_key='test',\n sender_id='test-sender-id',\n timeout=2,\n)\n\nresponse = client.get_something()\n```\n\n### Caching\n\nThe decorator `directory_client_core.helpers.fallback` can be used to cache the responses from the remote server, allowing the cached content to be later used if the remote server does not return the up to date live content (maybe it times out, maybe the server is down). This decorator also saves etag response headers to later expose them in requests and respect 304 (Not modified) response and serve already cached contents.\n\n```\n# settings.py\nDIRECTORY_CLIENT_CORE_CACHE_EXPIRE_SECONDS = 60 * 60 * 24 * 30 # 30 days\n\n# client.py\n\nfrom django.core.cache import caches\n\nfrom directory_client_core import helpers\nfrom directory_client_core.base import AbstractAPIClient\n\n\nclass APIClient(AbstractAPIClient):\n version = 1\n\n @helpers.fallback(cache=caches['fallback'])\n def get(self, *args, **kwargs):\n return super().get(*args, **kwargs)\n\n def retrieve(self):\n return self.get(url='/some/path/')\n```\n\nThe `fallback` creates log entries when cache events occur. To reduce noise `DIRECTORY_CLIENT_CORE_CACHE_LOG_THROTTLING_SECONDS` can be set in settings. This will result in a log event being created only once every period of time. By default this means seeing \"cache hit for url x\" (for a given url) is shown once every 24 hours.\n\n## Development\n\n $ git clone https://github.com/uktrade/directory-client-core\n $ cd directory-client-core\n $ make test_requirements\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\n\nThen run the following command:\n\n make publish\n\n\n[code-climate-image]: https://codeclimate.com/github/uktrade/directory-client-core/badges/issue_count.svg\n[code-climate]: https://codeclimate.com/github/uktrade/directory-client-core\n\n[circle-ci-image]: https://circleci.com/gh/uktrade/directory-client-core/tree/master.svg?style=svg\n[circle-ci]: https://circleci.com/gh/uktrade/directory-client-core/tree/master\n\n[codecov-image]: https://codecov.io/gh/uktrade/directory-client-core/branch/master/graph/badge.svg\n[codecov]: https://codecov.io/gh/uktrade/directory-client-core\n\n[pypi-image]: https://badge.fury.io/py/directory-client-core.svg\n[pypi]: https://badge.fury.io/py/directory-client-core\n\n[semver-image]: https://img.shields.io/badge/Versioning%20strategy-SemVer-5FBB1C.svg\n[semver]: https://semver.org\n\n\n", "description_content_type": "text/markdown", "docs_url": null, "download_url": "", "downloads": { "last_day": -1, "last_month": -1, "last_week": -1 }, "home_page": "https://github.com/uktrade/directory-client-core", "keywords": "", "license": "MIT", "maintainer": "", "maintainer_email": "", "name": "directory-client-core", "package_url": "https://pypi.org/project/directory-client-core/", "platform": "", "project_url": "https://pypi.org/project/directory-client-core/", "project_urls": { "Homepage": "https://github.com/uktrade/directory-client-core" }, "release_url": "https://pypi.org/project/directory-client-core/6.1.0/", "requires_dist": [ "requests (<3.0.0,>=2.21.0)", "monotonic (<3.0,>=1.2)", "sigauth (<5.0.0,>=4.0.1)", "django (<3.0a1,>=1.11.22)", "w3lib (>=1.19.0<2.0.0)", "codecov (==2.0.9) ; extra == 'test'", "flake8 (==3.0.4) ; extra == 'test'", "freezegun (==0.3.8) ; extra == 'test'", "pytest-capturelog (==0.7) ; extra == 'test'", "pytest-cov (==2.3.1) ; extra == 'test'", "pytest-django (==3.0.0) ; extra == 'test'", "pytest-sugar (==0.8.0) ; extra == 'test'", "pytest (==3.0.2) ; extra == 'test'", "requests-mock (==1.1.0) ; extra == 'test'", "setuptools (<39.0.0,>=38.6.0) ; extra == 'test'", "twine (<2.0.0,>=1.11.0) ; extra == 'test'", "wheel (<1.0.0,>=0.31.0) ; extra == 'test'" ], "requires_python": "", "summary": "Python common code for Directory API clients.", "version": "6.1.0" }, "last_serial": 5550551, "releases": { "0.0.1": [ { "comment_text": "", "digests": { "md5": "9e879f15b76a48856f9f1d42b7a583c3", "sha256": "4273211c13f838288733c6687db5f0b056c1d397668da9db8a36e98688e83f9f" }, "downloads": -1, "filename": "directory_client_core-0.0.1-py3-none-any.whl", "has_sig": false, "md5_digest": "9e879f15b76a48856f9f1d42b7a583c3", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 6160, "upload_time": "2018-03-05T10:53:37", "url": "https://files.pythonhosted.org/packages/40/c1/dd7b9302f5a5d19fb4eafd195d000da94edc2cc02afa0d9b2e04d4c62a27/directory_client_core-0.0.1-py3-none-any.whl" } ], "0.1.0": [ { "comment_text": "", "digests": { "md5": "bdfc9bdef573411572f1709d8ce5c159", "sha256": "281afa3bcf4cd1258351e69c8d64bc04328152602d66f1027131f371b6b8e733" }, "downloads": -1, "filename": "directory_client_core-0.1.0-py3-none-any.whl", "has_sig": false, "md5_digest": "bdfc9bdef573411572f1709d8ce5c159", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 6125, "upload_time": "2018-03-05T11:30:37", "url": "https://files.pythonhosted.org/packages/3d/ed/fe2b37e7635c81e78862f04423100bbd17259c4c7a58391513974229867d/directory_client_core-0.1.0-py3-none-any.whl" } ], "0.2.0": [ { "comment_text": "", "digests": { "md5": "2e696c38c647dcd0a7e58fc78dbebe17", "sha256": "3f5944356c1fd89e78ce71c450a319f72dda4d0b2c4cc9b8c0b631e9ca2f21e2" }, "downloads": -1, "filename": "directory_client_core-0.2.0-py3-none-any.whl", "has_sig": false, "md5_digest": "2e696c38c647dcd0a7e58fc78dbebe17", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 5877, "upload_time": "2018-03-06T19:06:43", "url": "https://files.pythonhosted.org/packages/84/0d/27df2dca955945502fa994a03e3fc66a1f7f9077960483af7f85bc3e78e9/directory_client_core-0.2.0-py3-none-any.whl" } ], "0.2.1": [ { "comment_text": "", "digests": { "md5": "9d56149afa4e34e6c58ed9e3f64ad47e", "sha256": "fe32783f3c6a796346d5fb28a2adb58cbbd5174a94a66e76386ed4d88489bee1" }, "downloads": -1, "filename": "directory_client_core-0.2.1-py3-none-any.whl", "has_sig": false, "md5_digest": "9d56149afa4e34e6c58ed9e3f64ad47e", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 6055, "upload_time": "2018-03-15T15:15:14", "url": "https://files.pythonhosted.org/packages/be/c8/5898a17fd608efa1052cd572f4538856d9ead6c4164b6265ed7f506b9f19/directory_client_core-0.2.1-py3-none-any.whl" } ], "0.2.2": [ { "comment_text": "", "digests": { "md5": "b408edff701238bbccc88f04a7f460cd", "sha256": "0941afffc87fb8c24e13e2ae787176143a2a4a55df5e3e1de326e568ea9120cf" }, "downloads": -1, "filename": "directory_client_core-0.2.2-py3-none-any.whl", "has_sig": false, "md5_digest": "b408edff701238bbccc88f04a7f460cd", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 6082, "upload_time": "2018-07-18T11:37:45", "url": "https://files.pythonhosted.org/packages/e7/60/1a7c94b8ec5eed07ea74cc51e0e3fe4f242b0d67093d759921d72b3625e1/directory_client_core-0.2.2-py3-none-any.whl" } ], "0.3.0": [ { "comment_text": "", "digests": { "md5": "77467ece3b2623a86b301de0226e37e9", "sha256": "fadce64ac2b62742f0641e05580822b87357be3178a556e549ddb9d33028f7ef" }, "downloads": -1, "filename": "directory_client_core-0.3.0-py3-none-any.whl", "has_sig": false, "md5_digest": "77467ece3b2623a86b301de0226e37e9", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 6079, "upload_time": "2018-07-20T13:34:45", "url": "https://files.pythonhosted.org/packages/6b/b0/9110db66befed7bac1dafb115f02981c4aa376067c64d2cfca1bb303b444/directory_client_core-0.3.0-py3-none-any.whl" } ], "0.3.1": [ { "comment_text": "", "digests": { "md5": "ba88605104f6d89260941c198e9241a4", "sha256": "70190ff0081bdc6772de6fc8aadbf88c8be736c7af58e4de355ebfec1ca777b6" }, "downloads": -1, "filename": "directory_client_core-0.3.1-py3-none-any.whl", "has_sig": false, "md5_digest": "ba88605104f6d89260941c198e9241a4", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 6083, "upload_time": "2018-07-20T13:57:00", "url": "https://files.pythonhosted.org/packages/54/43/cfa15b8c98e3cfa57acdba58a8a3db3f8bd54d8ad67c7aba2ea807c47d40/directory_client_core-0.3.1-py3-none-any.whl" } ], "4.0.1": [ { "comment_text": "", "digests": { "md5": "831bdaa1008b06f6d330103c7ac89c11", "sha256": "f76304a21de9eda432bb10eec491e6e1b7e55c75caea1a2805b2a456b4792b2d" }, "downloads": -1, "filename": "directory_client_core-4.0.1-py3-none-any.whl", "has_sig": false, "md5_digest": "831bdaa1008b06f6d330103c7ac89c11", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 6029, "upload_time": "2018-07-31T15:14:00", "url": "https://files.pythonhosted.org/packages/a2/00/16c715142b8a06f063bff6786c50dc2e3854feddb462df0fd0f3dd0d2f62/directory_client_core-4.0.1-py3-none-any.whl" } ], "4.0.2": [ { "comment_text": "", "digests": { "md5": "0f65eb2f2db221305012722064a832b4", "sha256": "88f019c8f1ca46a8f08013a88646d3e38902f9791a61d571144f1e983f4449e8" }, "downloads": -1, "filename": "directory_client_core-4.0.2-py3-none-any.whl", "has_sig": false, "md5_digest": "0f65eb2f2db221305012722064a832b4", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 6097, "upload_time": "2018-08-06T11:10:46", "url": "https://files.pythonhosted.org/packages/ee/73/dbf299edebb3ba9a006e3cc648811b7e2c8fdc03a1d18b2fb159e8063a49/directory_client_core-4.0.2-py3-none-any.whl" } ], "4.2.0": [ { "comment_text": "", "digests": { "md5": "90d43760d2b9731d45b85322c43ad01a", "sha256": "80ae8300ef3de664d76f99e115935b60e097ec9ef4452e48d0ac8c588b366fe8" }, "downloads": -1, "filename": "directory_client_core-4.2.0-py3-none-any.whl", "has_sig": false, "md5_digest": "90d43760d2b9731d45b85322c43ad01a", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 5555, "upload_time": "2018-11-07T16:17:38", "url": "https://files.pythonhosted.org/packages/bb/13/51fcf04885e015bfff2198c6fc1f6ccdbb2ebbf373c12bcd71b759cde5b6/directory_client_core-4.2.0-py3-none-any.whl" } ], "4.3.0": [ { "comment_text": "", "digests": { "md5": "043c5a044f3afbf1bd4ed3aba407bbdc", "sha256": "1e1d30544827b53cee6b451b93be0a93ce63ffcfb2d4f987b2c0d5f370d7b9cc" }, "downloads": -1, "filename": "directory_client_core-4.3.0-py3-none-any.whl", "has_sig": false, "md5_digest": "043c5a044f3afbf1bd4ed3aba407bbdc", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 7402, "upload_time": "2018-11-09T17:05:25", "url": "https://files.pythonhosted.org/packages/d2/c8/7d7482a00ab82815164e0cb2a5196b9b3c1091af4874dca4f33aaff6afb3/directory_client_core-4.3.0-py3-none-any.whl" } ], "4.3.1": [ { "comment_text": "", "digests": { "md5": "cb922f149ac89ace4e862e89b9dd00f9", "sha256": "e63513cfddbe628f15a2e96c3124643ded62a83b045b38bb419113baba31d8d9" }, "downloads": -1, "filename": "directory_client_core-4.3.1-py3-none-any.whl", "has_sig": false, "md5_digest": "cb922f149ac89ace4e862e89b9dd00f9", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 7400, "upload_time": "2019-01-10T13:17:03", "url": "https://files.pythonhosted.org/packages/cb/17/e60bee1fbdcf4bdc9ccdf1865069c82827b4eafc07815e0751c14f74f7da/directory_client_core-4.3.1-py3-none-any.whl" } ], "4.4.0": [ { "comment_text": "", "digests": { "md5": "66d1aaca291e961c226d45f7fb426bb6", "sha256": "512291c951e46213e66bf66ac973696477e0b3d32b0cdf290e70953e466e402d" }, "downloads": -1, "filename": "directory_client_core-4.4.0-py3-none-any.whl", "has_sig": false, "md5_digest": "66d1aaca291e961c226d45f7fb426bb6", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 7544, "upload_time": "2019-01-23T11:47:41", "url": "https://files.pythonhosted.org/packages/45/b5/0d66e6296ae2b9c64771a6fd7ff39bf413cf01cf598a4b707443cd5b5d11/directory_client_core-4.4.0-py3-none-any.whl" } ], "5.0.0": [ { "comment_text": "", "digests": { "md5": "5d9c1b96ef46dbf2c403e5b0e4687602", "sha256": "3531e22fb09c2a3f3c3dc540d8f9a89200b67d84d28a95bea3a2c4699ad80a4f" }, "downloads": -1, "filename": "directory_client_core-5.0.0-py3-none-any.whl", "has_sig": false, "md5_digest": "5d9c1b96ef46dbf2c403e5b0e4687602", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 8161, "upload_time": "2019-04-23T09:00:09", "url": "https://files.pythonhosted.org/packages/ea/2b/80f726c9020fe17b6d3e6df0011d2cf01d16a7a34b135517c3856552ab84/directory_client_core-5.0.0-py3-none-any.whl" } ], "5.1.0": [ { "comment_text": "", "digests": { "md5": "0f92b97fcdb562b6579bc3a96554a636", "sha256": "f2fc7afcfa285eb8040279a8a7cd3284b09cd6cd310a3ff4dd76b55e8ab0d862" }, "downloads": -1, "filename": "directory_client_core-5.1.0-py3-none-any.whl", "has_sig": false, "md5_digest": "0f92b97fcdb562b6579bc3a96554a636", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 8147, "upload_time": "2019-05-29T07:25:32", "url": "https://files.pythonhosted.org/packages/61/55/f9351e5121c159d36db6fc59d17afcdfde3d13aca342b889459202bc2331/directory_client_core-5.1.0-py3-none-any.whl" } ], "5.1.1": [ { "comment_text": "", "digests": { "md5": "d626b5a3f8f51de44966544c906e016d", "sha256": "d1e2347f09deb58b6b77fef50cc78925351191f666625b44edad019ef3a2cc5b" }, "downloads": -1, "filename": "directory_client_core-5.1.1-py3-none-any.whl", "has_sig": false, "md5_digest": "d626b5a3f8f51de44966544c906e016d", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 8145, "upload_time": "2019-07-04T14:44:31", "url": "https://files.pythonhosted.org/packages/b1/72/3911835f79149e1771333314e478299a1e593fb63ae1bc1c96ae005563cf/directory_client_core-5.1.1-py3-none-any.whl" } ], "6.0.0": [ { "comment_text": "", "digests": { "md5": "de408e51c5c1c83cba0285db8fa75e47", "sha256": "4f7d056cc3faf9f87062f53c281ed9af3903797a798febe931d7566c0cb7705a" }, "downloads": -1, "filename": "directory_client_core-6.0.0-py3-none-any.whl", "has_sig": false, "md5_digest": "de408e51c5c1c83cba0285db8fa75e47", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 8144, "upload_time": "2019-07-15T13:29:55", "url": "https://files.pythonhosted.org/packages/3d/2e/c18544a8541a41261fe2d0c315a3b1df6d423a70f4ba43743f6c0eb8973d/directory_client_core-6.0.0-py3-none-any.whl" } ], "6.0.1": [ { "comment_text": "", "digests": { "md5": "eabba7eb532574f206e51f06b4d00122", "sha256": "7d90f0ad41f8396014699fc5dacf2cb66feb8fe6fe42f5d8ef07e0bdc6ad21f8" }, "downloads": -1, "filename": "directory_client_core-6.0.1-py3-none-any.whl", "has_sig": false, "md5_digest": "eabba7eb532574f206e51f06b4d00122", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 8141, "upload_time": "2019-07-15T14:11:56", "url": "https://files.pythonhosted.org/packages/2d/63/f969a0f94f7e82352e423b2ff47d83a063aa2c38536ec01068c3716a6439/directory_client_core-6.0.1-py3-none-any.whl" } ], "6.1.0": [ { "comment_text": "", "digests": { "md5": "206f16a40038a2ee7b3e11f52f7f25b2", "sha256": "18dc2b3a599b9f614ff075a4821b8e94513c0acf6b3237e9cab84a544751c623" }, "downloads": -1, "filename": "directory_client_core-6.1.0-py3-none-any.whl", "has_sig": false, "md5_digest": "206f16a40038a2ee7b3e11f52f7f25b2", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 8160, "upload_time": "2019-07-18T11:17:08", "url": "https://files.pythonhosted.org/packages/87/80/3e9a6ba0c1ccaa78bd843f5f2412ab415b47a9c1a248931094be1f2e77ff/directory_client_core-6.1.0-py3-none-any.whl" } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "206f16a40038a2ee7b3e11f52f7f25b2", "sha256": "18dc2b3a599b9f614ff075a4821b8e94513c0acf6b3237e9cab84a544751c623" }, "downloads": -1, "filename": "directory_client_core-6.1.0-py3-none-any.whl", "has_sig": false, "md5_digest": "206f16a40038a2ee7b3e11f52f7f25b2", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 8160, "upload_time": "2019-07-18T11:17:08", "url": "https://files.pythonhosted.org/packages/87/80/3e9a6ba0c1ccaa78bd843f5f2412ab415b47a9c1a248931094be1f2e77ff/directory_client_core-6.1.0-py3-none-any.whl" } ] }