{
"info": {
"author": "DevOps Division, University Information Services, University of Cambridge",
"author_email": "devops@uis.cam.ac.uk",
"bugtrack_url": null,
"classifiers": [
"Development Status :: 5 - Production/Stable",
"Environment :: Web Environment",
"Framework :: Django",
"Intended Audience :: Developers",
"License :: OSI Approved :: MIT License",
"Operating System :: OS Independent",
"Programming Language :: Python"
],
"description": "# Introduction\n\ndjango-ucamlookup is a library which provides useful methods and templates to integrate your \n[Django](https://www.djangoproject.com/) application with the University of Cambridge University \n[Lookup service](https://www.lookup.cam.ac.uk/). \n\n## Configuration\n\nThe following parameters are optional configurations that you can use in your django settings.\n\n* ``UCAMLOOKUP_HOST``. Optional. Default: ``\"www.lookup.cam.ac.uk\"``. Specifies the hostname used for the \nIbisClientConnection. This is the connection object that will be used to make all API calls related to lookup.\n* ``UCAMLOOKUP_PORT``. Optional. Default: ``443``. Specifies the port used for the \nIbisClientConnection. This is the connection object that will be used to make all API calls related to lookup.\n* ``UCAMLOOKUP_URL_BASE``. Optional. Default: ``\"\"``. Specifies the URL base used for the \nIbisClientConnection. This is the connection object that will be used to make all API calls related to lookup.\n* ``UCAMLOOKUP_CHECK_CERTS``. Optional. Default: ``True``. Indicates if the client should check if the server side\ncertificates are valid.\n* ``UCAMLOOKUP_USERNAME``. Optional. Default: ``None``. Specifies the username used for the \nIbisClientConnection. This is the connection object that will be used to make all API calls related to lookup. We \nrecommend the use of Lookup groups for authentication instead of an individual Raven account.\n* ``UCAMLOOKUP_PASSWORD``. Optional. Default: ``None``. Specifies the password used for the \nIbisClientConnection. This is the connection object that will be used to make all API calls related to lookup. We \nrecommend the use of Lookup groups passwords for authentication instead of an individual Raven account password.\n\n## Use\n\nInstall django-ucamlookup using pip:\n\n```bash\npip install django-ucamlookup\n```\n\nAdd django-ucamlookup to your installed applications in your project configuration settings.py:\n\n```python\n INSTALLED_APPS=(\n ...\n 'ucamlookup', \n ...\n ),\n```\n\nand the urls entries in the urls.py file:\n\n```python\n urlpatterns = patterns(\n ...\n # lookup/ibis urls\n url(r'^ucamlookup/', include('ucamlookup.urls')),\n ...\n )\n```\n\n## Warning\n\nLookup contains personal data of University of Cambridge members. Make sure that you are only showing this data to \nusers with rights to see this data.\n\n## Networking\n\nIf no optional settings are specified, django-ucamlookup will use ``anonymous`` as username and no password when \nsetting up an IbisClientConnection and executing Lookup APIs. This type of anonymous conneciton is only available\ninside the Cambridge University Network (CUDN). If your application is deployed outside the CUDN you should use the \noptional authentication with ``UCAMLOOKUP_USERNAME`` and ``UCAMLOOKUP_PASSWORD``.\n\nWe do not recommend the use of individual Raven accounts and instead to set up a Lookup group. Users can generate a \npassword for the group and use the group short name as a username for authentication.\n\n\n## Lookup User\n\ndjango-ucamlookup modifies a User object each time is going to be saved, either new or update, and assigns to its \n*last_name* property the visible name from lookup for that user. The username is used to search for this user in lookup.\n\n## Lookup Group\n\ndjango-ucamlookup includes a new model called LookupGroup that it is used to cache lookup models. It is used to store\nthe lookup group id and its name, and therefore used to reduce the number of call to the lookup service. It can also be\nused to create relation with other models. For example, let's say we have a model called Secret and we only want to let\naccess to it to users inside a certain group or groups. We will create a ManyToMany relation from Secrets to \nLookupGroup.\n\nThe name of the group is retrieve from the lookup service each time the group is saved (new or updated). The name is\nstored in the *name* property of the class and the id of the lookup group is stored in *lookup_id*.\n\nIt is important to say that this model is not used to cache relations between lookup users and lookup groups. These \nrelations are always queried to the live lookup service. The model is only used to let the developer make relations\nbetween models that include lookup groups and cache the name of the group.\n\n## Template macros\n\nTwo macros are available to be used in a template: `ucamlookup_users`, and `ucamlookup_groups`.\nThese macros have javascript functions that will tranform an html `select` tag into an interactive\nselection control which will interact with the lookup service and will let the user use autocomplete\nand search for lookup users and groups.\n\nTo include a selection control that can search and add a single or list of users, use the\n`ucamlookup_users` macro. You should pass the html `select` `id` as a parameter to the macro.\nIf you want the control to add more than one user you should set the `multiple` parameter.\n\n```html\n \n\n {% include 'ucamlookup_users.html' with input_tag_id=\"authors_id\" multiple=true placeholder='Select an author' %}\n```\n\nAs seen in the example you can set the placeholder text with `placeholder` parameter.\n\nIf you want to show existing `User` records in the input tag you should use the `option` tag in\nthe template as in the following example:\n\n```html\n \n\n {% include 'ucamlookup_users.html' with input_tag_id=\"authors_id\" multiple=true %}\n```\n\nYou will also have to include the following macro in the html `header` of your template to load\nthe js and css files associated. These macros require jquery if you want to include your own \njquery library or you are already using it in your template use the parameter `jquery` to specify\nit.\n\n```html\n {% include 'ucamlookup_headers.html' with jquery=True %}\n```\n\nYour `select` tag will be transform into a selection control that allows the user to search for\nusers with either using their username or complete name. When the form is submitted, a list of\ncrsids will be sent with the request as with any normal `select` tag.\n\nIf you need to customise the style of the control, you can use the `ucamlookup-user-container`\nclass for the container part and the `ucamlookup-user-dropdown` class for the dropdown parrt of\nthe control.\n\nThe same approach will also work for lookup groups, as in the following example:\n\n```html\n \n \n {% include 'ucamlookup_groups.html' with input_tag_id=\"groups_id\" multiple=\"true\" %}\n```\n\n## Admin interface\n\nThe admin interface is tunned to add managing options for the LookupGroup model. The **add** option will show the same\najax-lookup-integrated-input as the template macros described above.\n\nIt also changes the add form for the user and it also shows an interactive ajax lookup-integrated input form when the\nadmin wants to add a new user to the app.\n\nThese input forms allow to search for name and crsid in the case of a new user and for name in the case of a lookup \ngroup.\n\n\n## Available functions\n\nThe module also provides some useful functions to use in your app that do all the calls to the lookup service needed.\n\n`get_group_ids_of_a_user_in_lookup(user)`: Returns the list of group ids of a user\n\n`user_in_groups(user, lookup_groups)`: Check in the lookup webservice if the user is member of any of the groups in the \nLookupGroup list passed by parameter. Returns True if the user is in any of the groups or False otherwise\n\n`get_institutions(user=None)`: Returns the list of institutions using the lookup ucam service. The institutions of \nthe user passed by parameters will be shown first in the list returned\n\n`validate_crsid_list(crsids)`: It receives a list of crsids (from the `select` tag from the\ntemplate macros described previously) and returns a list of `User` objects corresponding to the\ncrsids passed.\n\n`get_or_create_user_by_crsid(crsid)`: Returns the `User` object corresponding to the `crsid` \npassed. If it does not exists in the database, it is created.\n\n`validate_groupid_list(groupids)`: It receives a list of groupids (from the `select` tag from the\ntemplate macros described previously) and returns a list of `LookupGroup` objects corresponding to\nthe crsids passed.\n\n`get_or_create_group_by_groupid(groupid)`: Returns the `LookupGroup` object corresponding to the\n`groupid` passed. If it does not exists in the database, it is created.\n\n`get_institution_name_by_id(institution_id, all_institutions=None)`: Returns the name of an institution by the id \npassed. If all_institutions is passed (the result from get_institutions) then the search is done locally using this \nlist instead of a lookup call.\n\nThe last two methods can be used to add institutions to a model and show the name instead of the code in the admin \ninterface \n\n```python\nclass MyModelAdmin(ModelAdmin):\n all_institutions = get_institutions()\n \n model = MyModel\n list_display = ('institution', )\n list_filter = ('institution_id', )\n\n def institution(self, obj):\n return get_institution_name_by_id(obj.institution_id, self.all_institutions)\n \n institution.admin_order_field = 'institution_id'\n```\n\n# Developing\n\n## Run tests\n\nTox is configured to run on a container with a matrix execution of different versions of python and django combined.\nIt will also show the coverage and any possible PEP8 violations.\n\n```shell\n$ docker-compose up\n```",
"description_content_type": "text/markdown",
"docs_url": null,
"download_url": "",
"downloads": {
"last_day": -1,
"last_month": -1,
"last_week": -1
},
"home_page": "https://gitlab.developers.cam.ac.uk/uis/devops/django/ucamlookup",
"keywords": "",
"license": "MIT",
"maintainer": "",
"maintainer_email": "",
"name": "django-ucamlookup",
"package_url": "https://pypi.org/project/django-ucamlookup/",
"platform": "",
"project_url": "https://pypi.org/project/django-ucamlookup/",
"project_urls": {
"Homepage": "https://gitlab.developers.cam.ac.uk/uis/devops/django/ucamlookup"
},
"release_url": "https://pypi.org/project/django-ucamlookup/3.0.3/",
"requires_dist": null,
"requires_python": "",
"summary": "A Django module for the University of Cambridge Lookup service",
"version": "3.0.3"
},
"last_serial": 5261618,
"releases": {
"1.0": [
{
"comment_text": "",
"digests": {
"md5": "7c22a83011c5937cabb5c7aa69a01213",
"sha256": "b1427cecca685e66cfa4948f21613cea8914cdcaff00ca74158b12277ce97a9a"
},
"downloads": -1,
"filename": "django-ucamlookup-1.0.tar.gz",
"has_sig": false,
"md5_digest": "7c22a83011c5937cabb5c7aa69a01213",
"packagetype": "sdist",
"python_version": "source",
"requires_python": null,
"size": 162319,
"upload_time": "2014-09-09T16:03:08",
"url": "https://files.pythonhosted.org/packages/ce/6b/ccdc9f7e0a9590504ff156974cac8b49fc41a1ea170709b34b6f3dcba244/django-ucamlookup-1.0.tar.gz"
}
],
"1.1": [
{
"comment_text": "",
"digests": {
"md5": "85d25a510792bf83be2ec0cbb3ebeb5b",
"sha256": "bb24e9ec4dfd585de5638b50ccbfc071eb836a56768d1c76736c5f1f2c769999"
},
"downloads": -1,
"filename": "django-ucamlookup-1.1.tar.gz",
"has_sig": false,
"md5_digest": "85d25a510792bf83be2ec0cbb3ebeb5b",
"packagetype": "sdist",
"python_version": "source",
"requires_python": null,
"size": 163893,
"upload_time": "2014-09-19T13:00:02",
"url": "https://files.pythonhosted.org/packages/5c/c2/765f81f3bf6bc50397bac8eafd353fa93785e1df7ccf1306fe687070548c/django-ucamlookup-1.1.tar.gz"
}
],
"1.2": [
{
"comment_text": "",
"digests": {
"md5": "00f8a330b8bb099a8ecc8e055fd0fb7b",
"sha256": "c3e44682d5130f752ffd547df069352fc34c21464ddabcd65da974c21ec4ff97"
},
"downloads": -1,
"filename": "django-ucamlookup.tar.gz",
"has_sig": false,
"md5_digest": "00f8a330b8bb099a8ecc8e055fd0fb7b",
"packagetype": "sdist",
"python_version": "source",
"requires_python": null,
"size": 166314,
"upload_time": "2015-05-01T09:10:29",
"url": "https://files.pythonhosted.org/packages/6b/db/b8e92a7c700dd208e39202f7f2cf0099a386074b46d7c107afe155a068a1/django-ucamlookup.tar.gz"
}
],
"1.2.1": [
{
"comment_text": "",
"digests": {
"md5": "c9779d65420eeec26e85e502c2528f79",
"sha256": "1af5d346ae2dadd1c9306cdff0ac9df91d6f904b6820d3a2a0e1557c2469480a"
},
"downloads": -1,
"filename": "django-ucamlookup-1.2.1.tar.gz",
"has_sig": false,
"md5_digest": "c9779d65420eeec26e85e502c2528f79",
"packagetype": "sdist",
"python_version": "source",
"requires_python": null,
"size": 159727,
"upload_time": "2015-05-13T15:39:04",
"url": "https://files.pythonhosted.org/packages/bd/fe/621df36a4023ee409761ddcae2b727d5d03267d96b7aa8d27d63193dc203/django-ucamlookup-1.2.1.tar.gz"
}
],
"1.5": [
{
"comment_text": "",
"digests": {
"md5": "7c7c926a020312c4b5ea93be9a731b99",
"sha256": "97b489c1298e69e14df0f317626172299a3fac30c7a5afe611e21a8946788943"
},
"downloads": -1,
"filename": "django-ucamlookup-1.5-.tar.gz",
"has_sig": false,
"md5_digest": "7c7c926a020312c4b5ea93be9a731b99",
"packagetype": "sdist",
"python_version": "source",
"requires_python": null,
"size": 138211,
"upload_time": "2015-10-09T09:03:04",
"url": "https://files.pythonhosted.org/packages/86/d3/2ba001b820e2ec61110f081d92e69580c7d7c6c7351e4fce1e40e894cf0f/django-ucamlookup-1.5-.tar.gz"
}
],
"1.6": [
{
"comment_text": "",
"digests": {
"md5": "3ca6c6df5fcf410cad63bb1924c11c64",
"sha256": "9dc16cae7dcac8b5dd33b806a6d3b550081c55b25d8e8f698c1afe8f8f09cfde"
},
"downloads": -1,
"filename": "django-ucamlookup-1.6.tar.gz",
"has_sig": false,
"md5_digest": "3ca6c6df5fcf410cad63bb1924c11c64",
"packagetype": "sdist",
"python_version": "source",
"requires_python": null,
"size": 173225,
"upload_time": "2015-10-09T09:53:57",
"url": "https://files.pythonhosted.org/packages/8f/c8/2bbfda3f8d36d57e621e2aaca59ac378de449158aef972674eeb97cf2971/django-ucamlookup-1.6.tar.gz"
}
],
"1.6.1": [
{
"comment_text": "",
"digests": {
"md5": "dc415a66905565e1805b885bae782892",
"sha256": "105a4b5789967b555ff6e376de30106dc00bbf1845a5db54093b4df29580e7e1"
},
"downloads": -1,
"filename": "django-ucamlookup-1.6.1.tar.gz",
"has_sig": false,
"md5_digest": "dc415a66905565e1805b885bae782892",
"packagetype": "sdist",
"python_version": "source",
"requires_python": null,
"size": 173311,
"upload_time": "2015-10-09T11:02:01",
"url": "https://files.pythonhosted.org/packages/58/7b/b34348f2eef62e57eec8fe35e76dd09a659daf4df2752a4f9219678fc252/django-ucamlookup-1.6.1.tar.gz"
}
],
"1.7": [
{
"comment_text": "",
"digests": {
"md5": "63094dc37d958623a808d993241522e4",
"sha256": "9bc89f5dcb8148a793e74e17527299faba944e4207ebd8bc30a5d911c712adbf"
},
"downloads": -1,
"filename": "django-ucamlookup-1.7.tar.gz",
"has_sig": false,
"md5_digest": "63094dc37d958623a808d993241522e4",
"packagetype": "sdist",
"python_version": "source",
"requires_python": null,
"size": 174773,
"upload_time": "2016-06-06T13:59:33",
"url": "https://files.pythonhosted.org/packages/30/d2/798210d2fce3aa4ec1e7960f084a62739a1dbb6e7bedb47f4476820e7c4a/django-ucamlookup-1.7.tar.gz"
}
],
"1.7.1": [
{
"comment_text": "",
"digests": {
"md5": "a07dfc423211667bd4a2b24663a73d5b",
"sha256": "f2b6cba65f5eb18afe002e92609b362fb335cdc2c7ebac338e57d97e16e0240a"
},
"downloads": -1,
"filename": "django-ucamlookup-1.7.1.tar.gz",
"has_sig": false,
"md5_digest": "a07dfc423211667bd4a2b24663a73d5b",
"packagetype": "sdist",
"python_version": "source",
"requires_python": null,
"size": 174834,
"upload_time": "2016-06-13T10:39:37",
"url": "https://files.pythonhosted.org/packages/9f/c7/61fc732f444c16e79ac8cd4c324b254213fc6ce4ce60094b0af183e2692c/django-ucamlookup-1.7.1.tar.gz"
}
],
"1.8": [
{
"comment_text": "",
"digests": {
"md5": "ca886683a0ea74cd7e70edac8ad4e819",
"sha256": "78c4219c98951123da22cda7edf338de5450b0f682ef060e2280c7120aa01c8a"
},
"downloads": -1,
"filename": "django-ucamlookup-1.8.tar.gz",
"has_sig": false,
"md5_digest": "ca886683a0ea74cd7e70edac8ad4e819",
"packagetype": "sdist",
"python_version": "source",
"requires_python": null,
"size": 209454,
"upload_time": "2016-08-23T16:54:33",
"url": "https://files.pythonhosted.org/packages/e8/80/a5f4848bd8b09252f54581ac257b349dc86b4a101f3a2e34f32598509199/django-ucamlookup-1.8.tar.gz"
}
],
"1.9": [
{
"comment_text": "",
"digests": {
"md5": "d05740b0f41ea053583fa6972b15712b",
"sha256": "35f10a37b2d8a0a2f8626858b12936d53a71175ce1b1971056fec3e0ab219729"
},
"downloads": -1,
"filename": "django-ucamlookup-1.9.tar.gz",
"has_sig": false,
"md5_digest": "d05740b0f41ea053583fa6972b15712b",
"packagetype": "sdist",
"python_version": "source",
"requires_python": null,
"size": 209454,
"upload_time": "2016-09-22T14:29:28",
"url": "https://files.pythonhosted.org/packages/62/7f/a5098a26f672794f989a51ddedf1390a68c9d2b7d674d0bc1d6678ded618/django-ucamlookup-1.9.tar.gz"
}
],
"1.9.1": [
{
"comment_text": "",
"digests": {
"md5": "d79a784c6c2da0eddf9b8493f82b6b49",
"sha256": "a79f81c9574c65ce488e561a9f7f2093da46d2d87cb9c93b3e28800883c15182"
},
"downloads": -1,
"filename": "django-ucamlookup-1.9.1.tar.gz",
"has_sig": false,
"md5_digest": "d79a784c6c2da0eddf9b8493f82b6b49",
"packagetype": "sdist",
"python_version": "source",
"requires_python": null,
"size": 210004,
"upload_time": "2017-01-16T09:55:31",
"url": "https://files.pythonhosted.org/packages/e5/e1/721029a5cefcad7f69c78a13b60fa5d2d0f96680c64e1d5a3d63ff4e413d/django-ucamlookup-1.9.1.tar.gz"
}
],
"1.9.2": [
{
"comment_text": "",
"digests": {
"md5": "df9a2b8bdf08a65830df2274dbff7809",
"sha256": "4c0c4214fe0dfd55b77d6619645fd05caf2e2da7e2a51e66fbb727afed7bb7f1"
},
"downloads": -1,
"filename": "django-ucamlookup-1.9.2.tar.gz",
"has_sig": false,
"md5_digest": "df9a2b8bdf08a65830df2274dbff7809",
"packagetype": "sdist",
"python_version": "source",
"requires_python": null,
"size": 210086,
"upload_time": "2017-01-19T10:05:29",
"url": "https://files.pythonhosted.org/packages/63/83/c7464c7aca014d57781274d8ea98977d020d7be1d4c3fe702c46253923d7/django-ucamlookup-1.9.2.tar.gz"
}
],
"1.9.3": [
{
"comment_text": "",
"digests": {
"md5": "b7c367f342b34b4d6df02590788343e2",
"sha256": "b7b0469c77da06230207dd7983e5b106d25b1ee666455238904a9f939177e3ea"
},
"downloads": -1,
"filename": "django-ucamlookup-1.9.3.tar.gz",
"has_sig": false,
"md5_digest": "b7c367f342b34b4d6df02590788343e2",
"packagetype": "sdist",
"python_version": "source",
"requires_python": null,
"size": 210172,
"upload_time": "2017-04-19T13:38:44",
"url": "https://files.pythonhosted.org/packages/04/69/74fedc2a6aede0eb99a63e442feb1b3c7d2b2dd7bde6e26d5c5025d6e445/django-ucamlookup-1.9.3.tar.gz"
}
],
"1.9.4": [
{
"comment_text": "",
"digests": {
"md5": "fadf650341376e6d69006f870e381ae8",
"sha256": "7796ce348d866a4353ef23f2798ca4d689cb34e04e49afd685dc1707f4716762"
},
"downloads": -1,
"filename": "django-ucamlookup-1.9.4.tar.gz",
"has_sig": false,
"md5_digest": "fadf650341376e6d69006f870e381ae8",
"packagetype": "sdist",
"python_version": "source",
"requires_python": null,
"size": 210185,
"upload_time": "2017-04-20T08:33:20",
"url": "https://files.pythonhosted.org/packages/c0/d8/8c75d593638f2b4f87423af058782d4e2a82a7e2f2567a89ad1738fea352/django-ucamlookup-1.9.4.tar.gz"
}
],
"1.9.5": [
{
"comment_text": "",
"digests": {
"md5": "5a5ffd894273d5b67cf47fd2f4abbe6a",
"sha256": "72e19283fa323f5c37fd084b74da076e78d475ce39212f1ee50bfce73a57e42c"
},
"downloads": -1,
"filename": "django-ucamlookup-1.9.5.tar.gz",
"has_sig": false,
"md5_digest": "5a5ffd894273d5b67cf47fd2f4abbe6a",
"packagetype": "sdist",
"python_version": "source",
"requires_python": null,
"size": 142727,
"upload_time": "2018-12-19T10:54:25",
"url": "https://files.pythonhosted.org/packages/15/2f/8373382a8be697f35c8b0f6d1f9127c8cd4a25e5f31e82e730778eb0e497/django-ucamlookup-1.9.5.tar.gz"
}
],
"2.0.0": [
{
"comment_text": "",
"digests": {
"md5": "587fdebaa3b62fdcf24661f29cc6c817",
"sha256": "a4161878a0b0b3545c550f3a5bc9843adbcb75357d32cdae37329b357da9b0d0"
},
"downloads": -1,
"filename": "django_ucamlookup-2.0.0-py3-none-any.whl",
"has_sig": false,
"md5_digest": "587fdebaa3b62fdcf24661f29cc6c817",
"packagetype": "bdist_wheel",
"python_version": "py3",
"requires_python": null,
"size": 172342,
"upload_time": "2019-03-13T17:29:30",
"url": "https://files.pythonhosted.org/packages/90/69/47c095895f744ac1aaf15948570f2c03dd310ae35b7706b2dd2900a2b621/django_ucamlookup-2.0.0-py3-none-any.whl"
},
{
"comment_text": "",
"digests": {
"md5": "49763045736a36a1b10f4d0a60fcd0bc",
"sha256": "ee3817abe1c70367549f8e37e72b3a62e7d4699d19a8ca096ca85b8611bfaa97"
},
"downloads": -1,
"filename": "django-ucamlookup-2.0.0.tar.gz",
"has_sig": false,
"md5_digest": "49763045736a36a1b10f4d0a60fcd0bc",
"packagetype": "sdist",
"python_version": "source",
"requires_python": null,
"size": 145564,
"upload_time": "2019-03-13T17:29:32",
"url": "https://files.pythonhosted.org/packages/ea/19/9f463e48188838d8cae3b4dcb763dbc4b3e28f5aadf864bd9ee524390977/django-ucamlookup-2.0.0.tar.gz"
}
],
"3.0.0": [
{
"comment_text": "",
"digests": {
"md5": "b1da0d0fa6ad3688d61ec31e521a9dea",
"sha256": "4b28cf9acaa04c9ab5a619a5f69c96a65aa4c13b3f152385e16f63cd8673619b"
},
"downloads": -1,
"filename": "django_ucamlookup-3.0.0-py3-none-any.whl",
"has_sig": false,
"md5_digest": "b1da0d0fa6ad3688d61ec31e521a9dea",
"packagetype": "bdist_wheel",
"python_version": "py3",
"requires_python": null,
"size": 102185,
"upload_time": "2019-04-25T12:38:19",
"url": "https://files.pythonhosted.org/packages/8f/94/349f975fdf7ff5653e704d1154977352f01ffd2a2b049e5b3079e13d8820/django_ucamlookup-3.0.0-py3-none-any.whl"
},
{
"comment_text": "",
"digests": {
"md5": "d1f157dd63a6ed04e77e50031fac76e7",
"sha256": "3b94247168669fc7b1560b9f229bf1b71aeedc9a6ff89959279b47bca6581070"
},
"downloads": -1,
"filename": "django-ucamlookup-3.0.0.tar.gz",
"has_sig": false,
"md5_digest": "d1f157dd63a6ed04e77e50031fac76e7",
"packagetype": "sdist",
"python_version": "source",
"requires_python": null,
"size": 97494,
"upload_time": "2019-04-25T12:38:21",
"url": "https://files.pythonhosted.org/packages/97/43/3fea23ae573c34f629a680e59b999dbcc90e9c02a366b33522c73d426ef5/django-ucamlookup-3.0.0.tar.gz"
}
],
"3.0.3": [
{
"comment_text": "",
"digests": {
"md5": "e08853d57d11d2b218cdcf97893062fb",
"sha256": "e7332dbfc6be2ab139f99c01dbd45fc94797d315bb06ef4ce17112561a3ddb97"
},
"downloads": -1,
"filename": "django-ucamlookup-3.0.3.tar.gz",
"has_sig": false,
"md5_digest": "e08853d57d11d2b218cdcf97893062fb",
"packagetype": "sdist",
"python_version": "source",
"requires_python": null,
"size": 95580,
"upload_time": "2019-05-13T10:41:09",
"url": "https://files.pythonhosted.org/packages/c0/fa/bf95e236140df994dd939f4e72a27dd5af295fc7eadd953ebb7bc5567a92/django-ucamlookup-3.0.3.tar.gz"
}
]
},
"urls": [
{
"comment_text": "",
"digests": {
"md5": "e08853d57d11d2b218cdcf97893062fb",
"sha256": "e7332dbfc6be2ab139f99c01dbd45fc94797d315bb06ef4ce17112561a3ddb97"
},
"downloads": -1,
"filename": "django-ucamlookup-3.0.3.tar.gz",
"has_sig": false,
"md5_digest": "e08853d57d11d2b218cdcf97893062fb",
"packagetype": "sdist",
"python_version": "source",
"requires_python": null,
"size": 95580,
"upload_time": "2019-05-13T10:41:09",
"url": "https://files.pythonhosted.org/packages/c0/fa/bf95e236140df994dd939f4e72a27dd5af295fc7eadd953ebb7bc5567a92/django-ucamlookup-3.0.3.tar.gz"
}
]
}