{ "info": { "author": "Erik van Widenfelt", "author_email": "ew2789@gmail.com", "bugtrack_url": null, "classifiers": [ "Environment :: Web Environment", "Framework :: Django", "Intended Audience :: Developers", "Intended Audience :: Science/Research", "License :: OSI Approved :: GNU General Public License v3 (GPLv3)", "Operating System :: OS Independent", "Programming Language :: Python :: 3.7", "Topic :: Internet :: WWW/HTTP", "Topic :: Internet :: WWW/HTTP :: Dynamic Content" ], "description": "|pypi| |travis| |coverage|\n\n\nedc-device\n----------\n\n``edc-device`` provides device roles unique device IDs for hosts and clients where the hostname may not be reliable. Hosts can be group as servers, clients, node_servers and some of their functionality limited according to this role.\n\nA unique device ID is used to seed unique subject and sample identifiers. Uniqueness is evaluated during deployment.\n\nDevice information is set in and read from ``edc_device.apps.AppConfig``.\n\nYou should subclass into your projects ``apps.py`` like this, for example:\n\n.. code-block:: python\n\n from edc_device.apps import AppConfig as EdcDeviceAppConfigParent\n\n class EdcDeviceAppConfig(EdcDeviceAppConfigParent):\n device_id = '32'\n device_role = CLIENT\n device_permissions = DevicePermissions(\n plot_add, plot_change, ...)\n\nand then in your settings:\n\n.. code-block:: python\n\n INSTALLED_APPS = [\n ...\n my_app.apps.EdcDeviceAppConfig,\n myapp.apps.AppConfig',\n ]\n\nInclude in your ``urls.py``:\n\n.. code-block:: python\n\n urlpatterns = [\n ...\n path('edc_device/', include('edc_device.urls')),\n ...\n ]\n\nTo get to the Edc Device home page, reverse the url like this:\n\n.. code-block:: python\n\n reverse('edc_device:home_url')\n\n\nUsage\n=====\n\n\nA ``client`` might look like this:\n\n.. code-block:: python\n\n class EdcDeviceAppConfig(EdcDeviceAppConfigParent):\n device_id = '18'\n \tnode_server_id_list = [97, 98, 99]\n \tmiddleman_id_list = [95, 96]\n\n\t>>> from django.apps import apps as django_apps\n\t>>> app_config = django_apps.get_app_config('edc_device')\n\t>>> app_config.device_id\n\t'18'\n\t>>> app_config.is_client\n\tTrue\n >>> app_config.device_role\n 'Client'\n\nA node server server might look like this:\n\n.. code-block:: python\n\n class EdcDeviceAppConfig(EdcDeviceAppConfigParent):\n device_id = '98'\n node_server_id_list = [97, 98, 99]\n middleman_id_list = [95, 96]\n\n >>> from django.apps import apps as django_apps\n >>> app_config = django_apps.get_app_config('edc_device')\n >>> app_config.device_id\n '98'\n >>> app_config.is_node_server\n True\n >>> app_config.device_role\n 'NodeServer'\n\nA middleman server might look like this:\n\n.. code-block:: python\n\n class EdcDeviceAppConfig(EdcDeviceAppConfigParent):\n device_id = '95'\n node_server_id_list = [97, 98, 99]\n middleman_id_list = [95, 96]\n\n >>> from django.apps import apps as django_apps\n >>> app_config = django_apps.get_app_config('edc_device')\n >>> app_config.device_id\n '95'\n >>> app_config.is_middleman\n True\n >>> app_config.device_role\n 'Middleman'\n\nThe central server might look like this:\n\n.. code-block:: python\n\n class EdcDeviceAppConfig(EdcDeviceAppConfigParent):\n device_id = '99'\n node_server_id_list = [97, 98, 99]\n middleman_id_list = [95, 96]\n\n >>> from django.apps import apps as django_apps\n >>> app_config = django_apps.get_app_config('edc_device')\n >>> app_config.device_id\n '99'\n >>> app_config.is_middleman\n True\n >>> app_config.device_role\n 'CentralServer'\n\n\nSee also ``django-collect-offline``.\n\n\nDevice Permissions by Model\n===========================\n\nYou can use the device role, or the device ID, to limit ADD/CHANGE permissions on a model.\n\n``edc-device`` AppConfig maintains a collection of ``DeviceAddPermission`` and ``DeviceChangePermission`` instances that are inspected in the ``save`` method of a model using the ``DeviceModelMixin``.\n\nTo declare a ``DeviceAddPermission`` object:\n\n.. code-block:: python\n\n test_model_add = DeviceAddPermission(\n model='my_app.mymodel, device_roles=[NODE_SERVER, CENTRAL_SERVER])\n\nTo declare a ``DeviceChangePermission`` object:\n\n.. code-block:: python\n\n test_model_change = DeviceChangePermission(\n model='my_app.mymodel, device_roles=[CLIENT])\n\nThis means that if ``app_config.device_role`` is anything other than ``NODE_SERVER`` or ``CENTRAL_SERVER``, the save method will raise a ``DevicePermissionsAddError``.\n\nTo register the instances with ``edc_device.apps.AppConfig.device_permissions``:\n\n.. code-block:: python\n\n device_permissions = DevicePermissions(test_model_add, test_model_change)\n\nThis means that if ``app_config.device_role`` is anything other than ``CLIENT``, the save method will raise a ``DevicePermissionsChangeError``.\n\nOn boot up you should see:\n\n.. code-block:: python\n\n Loading Edc Device ...\n * device id is '10'.\n * device role is 'Client'.\n * device permissions exist for:\n - edc_device.testmodel ADD NodeServer,CentralServer\n - edc_device.testmodel CHANGE Client\n Done loading Edc Device.\n\nModels declared with the ``EdcDeviceModelMixin`` check the device permissions collection on save. Note the model mixin is already declared with ``BaseUuidModel``.\n\n.. code-block:: python\n\n from edc_model.models import BaseUuidModel\n\n class TestModel(BaseUuidModel):\n pass\n\n\nDeclaring device permissions directly on model ``Meta`` class:\n==============================================================\n\nYou can declare device permissions on ``Meta.device_permissions`` in the same way as above.\n\n.. code-block:: python\n\n [...]\n class Meta(DeviceModelMixin.Meta):\n device_permissions = DevicePermissions(...)\n\nBoth ``Meta`` and ``AppConfig`` device permissions will be called, where the ``Meta`` class object will be called first.\n\nDisable device permissions by model instance:\n=============================================\n\nYou can disable device permissions ``per model instance`` by setting ``check_device_permissions`` to ``False``\n\n\nCustomizing Device Permissions\n==============================\n\nThe ADD and CHANGE device permission objects by default inspect the model's ``id``. If ``obj.id`` is ``None``, it as an ADD model operation; If ``obj.id`` is not ``None``, it is a CHANGE model operation.\n\nYou can change this by overriding the ``model_operation`` method. The ``model_operation`` must return ``None`` or some value, such as ``self.label``.\n\nFor example:\n\n.. code-block:: python\n\n # default for DeviceAddPermission\n label = 'ADD'\n\n def model_operation(self, model_obj=None, **kwargs):\n if not model_obj.id:\n return self.label\n return None\n\n # overridden\n def model_operation(self, model_obj=None, **kwargs):\n \"\"\"Return ADD if both id and plot identifier are None.\n \"\"\"\n if not model_obj.id and not obj.plot_identifier:\n return self.label\n return None\n\n\n\n.. |pypi| image:: https://img.shields.io/pypi/v/edc-device.svg\n :target: https://pypi.python.org/pypi/edc-device\n\n.. |travis| image:: https://travis-ci.org/clinicedc/edc-device.svg?branch=develop\n :target: https://travis-ci.org/clinicedc/edc-device\n\n.. |coverage| image:: https://coveralls.io/repos/github/clinicedc/edc-device/badge.svg?branch=develop\n :target: https://coveralls.io/github/clinicedc/edc-device?branch=develop\n\n\n\n", "description_content_type": "", "docs_url": null, "download_url": "", "downloads": { "last_day": -1, "last_month": -1, "last_week": -1 }, "home_page": "https://github.com/clinicedc/edc-device", "keywords": "django contenttype", "license": "GPL license, see LICENSE", "maintainer": "", "maintainer_email": "", "name": "edc-device", "package_url": "https://pypi.org/project/edc-device/", "platform": "", "project_url": "https://pypi.org/project/edc-device/", "project_urls": { "Homepage": "https://github.com/clinicedc/edc-device" }, "release_url": "https://pypi.org/project/edc-device/0.2.23/", "requires_dist": [ "django-ipware", "django-audit-fields", "edc-navbar", "edc-dashboard" ], "requires_python": ">=3.7", "summary": "Get info on a data collection device for clinicedc/edc", "version": "0.2.23" }, "last_serial": 5464041, "releases": { "0.0.0a0": [ { "comment_text": "", "digests": { "md5": "a4e1f0f73c00bf3e8b3d378e4e66e4e6", "sha256": "ebabea5823821635af3cea9dbaf251504ab04a15e710e7bf8301b0698bfb998f" }, "downloads": -1, "filename": "edc_device-0.0.0a0-py3-none-any.whl", "has_sig": false, "md5_digest": "a4e1f0f73c00bf3e8b3d378e4e66e4e6", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 5849, "upload_time": "2015-05-21T08:19:09", "url": "https://files.pythonhosted.org/packages/85/60/7de6e044dffe7104e287dbeffbc66d490d37baac26c4321880159fa3d3d5/edc_device-0.0.0a0-py3-none-any.whl" } ], "0.1.0": [ { "comment_text": "", "digests": { "md5": "ae772b1fb4efd5cff20b352408fc14af", "sha256": "63222a2427101d6244949b1258be93ce2673cd03d26ce11bdb064c70c8f3b821" }, "downloads": -1, "filename": "edc_device-0.1.0-py3-none-any.whl", "has_sig": false, "md5_digest": "ae772b1fb4efd5cff20b352408fc14af", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 5691, "upload_time": "2015-05-21T13:30:20", "url": "https://files.pythonhosted.org/packages/97/d4/3f289b80c2b82e1747662dc9d8c2db66d2e0ff3742f1df3eec5f7aae75c1/edc_device-0.1.0-py3-none-any.whl" } ], "0.2.10": [ { "comment_text": "", "digests": { "md5": "7e5790af5da1b4391c9f9eb72c94830d", "sha256": "327545a1634f75d241ab2c6068f9ba6a9969509b47f15a613265a7a5d4b2e104" }, "downloads": -1, "filename": "edc-device-0.2.10.macosx-10.13-x86_64.tar.gz", "has_sig": false, "md5_digest": "7e5790af5da1b4391c9f9eb72c94830d", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 24718, "upload_time": "2018-11-15T03:52:22", "url": "https://files.pythonhosted.org/packages/e6/ed/d2cfde2a1cb2a1ecbaaf065193395ca03a657d25c009006ad1f021e76219/edc-device-0.2.10.macosx-10.13-x86_64.tar.gz" }, { "comment_text": "", "digests": { "md5": "33752a9c25c552de0ffd71da713698a1", "sha256": "61609f7ed60a087fb1a629f0b5adf401325720129ba0118e3792c7b3102adef6" }, "downloads": -1, "filename": "edc_device-0.2.10-py3-none-any.whl", "has_sig": false, "md5_digest": "33752a9c25c552de0ffd71da713698a1", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 16982, "upload_time": "2018-11-15T03:52:21", "url": "https://files.pythonhosted.org/packages/0e/74/966a9709eee4e85eec1529df92f3399707d083ace104d1c6ca08876f058f/edc_device-0.2.10-py3-none-any.whl" } ], "0.2.11": [ { "comment_text": "", "digests": { "md5": "1db3f03e14fc931cbee33b6ca6841f6c", "sha256": "9e6ffcddfe681253697eee4c5e29ee3905adab06413d617be6245616a088e8f7" }, "downloads": -1, "filename": "edc-device-0.2.11.macosx-10.13-x86_64.tar.gz", "has_sig": false, "md5_digest": "1db3f03e14fc931cbee33b6ca6841f6c", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 24753, "upload_time": "2018-12-27T03:16:44", "url": "https://files.pythonhosted.org/packages/81/2c/9edb669e8f595d1e06d59bc51f070310be66de2a7a46ed0b45a3c505a18c/edc-device-0.2.11.macosx-10.13-x86_64.tar.gz" }, { "comment_text": "", "digests": { "md5": "2dd3a91fde7f1ec0540b6fed79f042a9", "sha256": "3751ff1d6ee08b1003c112ea82bf44cff96bdd65c63ee8bd14f14d9c5bb52113" }, "downloads": -1, "filename": "edc_device-0.2.11-py3-none-any.whl", "has_sig": false, "md5_digest": "2dd3a91fde7f1ec0540b6fed79f042a9", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 16985, "upload_time": "2018-12-27T03:16:42", "url": "https://files.pythonhosted.org/packages/fc/ef/7ef59723a3f3d47b97a5dd5deff9fc8b7f0e7f41f33d4895802114a316a2/edc_device-0.2.11-py3-none-any.whl" } ], "0.2.12": [ { "comment_text": "", "digests": { "md5": "be531cff8551bf9f4b9b13854e5eb2ca", "sha256": "f21f38fe5d852b9a6c15cd4abb0db9149ff67c0232d66e684f9abb7dac33df6a" }, "downloads": -1, "filename": "edc-device-0.2.12.macosx-10.7-x86_64.tar.gz", "has_sig": false, "md5_digest": "be531cff8551bf9f4b9b13854e5eb2ca", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.7", "size": 24617, "upload_time": "2019-01-30T16:56:41", "url": "https://files.pythonhosted.org/packages/0a/2a/5e3d3409af90ed4d46ed94be9ada84dffd587bf248fb2f787626e364e67d/edc-device-0.2.12.macosx-10.7-x86_64.tar.gz" }, { "comment_text": "", "digests": { "md5": "1945f158ffdd83b23a10231eb096d0d8", "sha256": "5a95256646864df17ae84768612b86e13712ddd1ee4736452a4ea053ea4c0693" }, "downloads": -1, "filename": "edc_device-0.2.12-py3-none-any.whl", "has_sig": false, "md5_digest": "1945f158ffdd83b23a10231eb096d0d8", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3.7", "size": 24028, "upload_time": "2019-01-30T16:56:39", "url": "https://files.pythonhosted.org/packages/9d/89/c6d9975f7f1e3b11917dc022563efc4aabdd276c537134326775dcc3e383/edc_device-0.2.12-py3-none-any.whl" } ], "0.2.13": [ { "comment_text": "", "digests": { "md5": "5329f2d804c07adf4f7283c2e9b5b820", "sha256": "7c7b9dd7c2e27fabe8591b10b1def06d36626e7ce645e2dbee073777acdf8953" }, "downloads": -1, "filename": "edc_device-0.2.13-py3-none-any.whl", "has_sig": false, "md5_digest": "5329f2d804c07adf4f7283c2e9b5b820", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3.7", "size": 24026, "upload_time": "2019-02-27T14:35:28", "url": "https://files.pythonhosted.org/packages/e2/0a/0b96a72c0e47380587f4763c76d2ac8d8a801c6ff69677b150452910bf29/edc_device-0.2.13-py3-none-any.whl" } ], "0.2.14": [ { "comment_text": "", "digests": { "md5": "2d2005cf8919f5bdeecc72d62b2a89a1", "sha256": "b4bf483e61045b3099e7797871c0e2b63f73fc14e726a512769d2a3659309d0e" }, "downloads": -1, "filename": "edc_device-0.2.14-py3-none-any.whl", "has_sig": false, "md5_digest": "2d2005cf8919f5bdeecc72d62b2a89a1", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3.7", "size": 23882, "upload_time": "2019-03-06T04:21:01", "url": "https://files.pythonhosted.org/packages/b2/23/28dfc7dfa0de38153075c023adbd1292ff65a798471fe612daeae09f8e44/edc_device-0.2.14-py3-none-any.whl" } ], "0.2.15": [ { "comment_text": "", "digests": { "md5": "861b3950117208f396869cc3d603312f", "sha256": "f0a3500a61162bf5966285912c40c1f1ae57bedd6fc470ad451f91c210ef4e9b" }, "downloads": -1, "filename": "edc_device-0.2.15-py3-none-any.whl", "has_sig": false, "md5_digest": "861b3950117208f396869cc3d603312f", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3.7", "size": 23887, "upload_time": "2019-03-18T15:28:18", "url": "https://files.pythonhosted.org/packages/c4/fb/6ddea89ba2b5eff31adb5a86442a400317c443dcb25f5efd87efefa89d1e/edc_device-0.2.15-py3-none-any.whl" } ], "0.2.16": [ { "comment_text": "", "digests": { "md5": "c14ca26afc118599fdc04bbfb13834ee", "sha256": "8d128599f85d366cd5b2f66310ee9bdd0771126bc9148c91318b98034c98d451" }, "downloads": -1, "filename": "edc_device-0.2.16-py3-none-any.whl", "has_sig": false, "md5_digest": "c14ca26afc118599fdc04bbfb13834ee", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3.7", "size": 23878, "upload_time": "2019-04-04T20:06:25", "url": "https://files.pythonhosted.org/packages/ed/e7/82fe9ba57b2d7f0a095458d12be52c675f22ed47c3c97ee59e150caa3e68/edc_device-0.2.16-py3-none-any.whl" } ], "0.2.17": [ { "comment_text": "", "digests": { "md5": "e4247fa32ff0947f7d115d326e601d50", "sha256": "c09bee220d9184cf7a2c659fe63f47e60fafdb0eaec310320c6d5818370367e1" }, "downloads": -1, "filename": "edc_device-0.2.17-py3-none-any.whl", "has_sig": false, "md5_digest": "e4247fa32ff0947f7d115d326e601d50", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3.7", "size": 22191, "upload_time": "2019-04-08T00:54:38", "url": "https://files.pythonhosted.org/packages/fe/2a/5b2cd74832a56d6be1ec37d8b63fb590f558c2319523b11e1c7ab26b2d82/edc_device-0.2.17-py3-none-any.whl" } ], "0.2.18": [ { "comment_text": "", "digests": { "md5": "47e3b71de2da215b057a6d8b07b0340a", "sha256": "f14c1dc8f2c90171e3545e90558d01b27913ecbed8f3e374c842cc4eb0a5e718" }, "downloads": -1, "filename": "edc_device-0.2.18-py3-none-any.whl", "has_sig": false, "md5_digest": "47e3b71de2da215b057a6d8b07b0340a", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3.7", "size": 22150, "upload_time": "2019-04-10T04:55:10", "url": "https://files.pythonhosted.org/packages/a1/1e/d78dc151b3ebe98ae323fb83bbacec9aeaaf14693231aad9463df4a5e224/edc_device-0.2.18-py3-none-any.whl" } ], "0.2.21": [ { "comment_text": "", "digests": { "md5": "6e97b240a3d2d67fcd044f795b6a3f43", "sha256": "49b08e9496d1c7c9a9415db2376d174bea41d8e7d57b97abdeb480d6b5dc9cfe" }, "downloads": -1, "filename": "edc_device-0.2.21-py3-none-any.whl", "has_sig": false, "md5_digest": "6e97b240a3d2d67fcd044f795b6a3f43", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3.7", "size": 22175, "upload_time": "2019-06-25T00:06:18", "url": "https://files.pythonhosted.org/packages/ea/4d/7a4c16243f4da44c4007a0f27b2ec7cf4eec5f61fea02f7c1e6da7439d9b/edc_device-0.2.21-py3-none-any.whl" } ], "0.2.22": [ { "comment_text": "", "digests": { "md5": "8dca75ad1f4c3960e4e525e0269da968", "sha256": "a40dd3d2a26938218524f9c84a1ee8809a1fc36e1710e5e8be245ef82aacd318" }, "downloads": -1, "filename": "edc_device-0.2.22-py3-none-any.whl", "has_sig": false, "md5_digest": "8dca75ad1f4c3960e4e525e0269da968", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3.7", "size": 22174, "upload_time": "2019-06-25T00:11:12", "url": "https://files.pythonhosted.org/packages/11/77/275ae206b244e7cea2f8eb7f696b6cb8f273d349c0f3c93fc20740a1bd5b/edc_device-0.2.22-py3-none-any.whl" } ], "0.2.23": [ { "comment_text": "", "digests": { "md5": "857f19887decb9361f0b0fdebfc6eadb", "sha256": "ad5a4c57bd25989db2e5f9a1c70f7beadabc2370e6e1b9dd5ea6577557a01921" }, "downloads": -1, "filename": "edc_device-0.2.23-py3-none-any.whl", "has_sig": false, "md5_digest": "857f19887decb9361f0b0fdebfc6eadb", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3.7", "size": 22066, "upload_time": "2019-06-29T00:09:11", "url": "https://files.pythonhosted.org/packages/43/20/aea3c25ac308f829fbcda98d8426f1c6b9b8823fa901efacad861ade3aca/edc_device-0.2.23-py3-none-any.whl" } ], "0.2.6": [ { "comment_text": "", "digests": { "md5": "9a7d5ddd763b6c0ef7e9b92c05fc32cb", "sha256": "6381ff309e11eff92ebd8e3b1e1322366d54fa7d1b33a2fccc41cfb8555b0a4b" }, "downloads": -1, "filename": "edc-device-0.2.6.macosx-10.13-x86_64.tar.gz", "has_sig": false, "md5_digest": "9a7d5ddd763b6c0ef7e9b92c05fc32cb", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 24025, "upload_time": "2018-07-20T11:48:01", "url": "https://files.pythonhosted.org/packages/75/ed/083a9e36b06190e17b8a422ae6e5f6c4e409681e1f70803542fb1362d3a4/edc-device-0.2.6.macosx-10.13-x86_64.tar.gz" }, { "comment_text": "", "digests": { "md5": "588385cb413435afa6b39d0c2ba262bb", "sha256": "cd8045736f12ce2e9c4c33374dede6e20ffa7e0e0235f650fe54e75c7c92532d" }, "downloads": -1, "filename": "edc_device-0.2.6-py3-none-any.whl", "has_sig": false, "md5_digest": "588385cb413435afa6b39d0c2ba262bb", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 16672, "upload_time": "2018-07-20T11:47:59", "url": "https://files.pythonhosted.org/packages/f9/92/acae851a1d56400b0d0f8705ccbe4c82d7e27ea0766e2c5ba17571a15569/edc_device-0.2.6-py3-none-any.whl" } ], "0.2.7": [ { "comment_text": "", "digests": { "md5": "f902eb1300eddab0260368f83341beb5", "sha256": "36e04d40fb0400b5ed5745b98838c50344af6f2dd282c4771f024f5bf586d35f" }, "downloads": -1, "filename": "edc-device-0.2.7.macosx-10.13-x86_64.tar.gz", "has_sig": false, "md5_digest": "f902eb1300eddab0260368f83341beb5", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 24155, "upload_time": "2018-07-26T11:10:35", "url": "https://files.pythonhosted.org/packages/25/c4/132bc71b1c8919a3b3d1504f879a6383ff96d648c3ed5b81f4da0f34525e/edc-device-0.2.7.macosx-10.13-x86_64.tar.gz" }, { "comment_text": "", "digests": { "md5": "57d033a926ae31a46e97711e91c2de24", "sha256": "d2522a6b32ad4478ba887ad53e3bfc1c0b04f7a34ea1ffc0957daa09751e5565" }, "downloads": -1, "filename": "edc_device-0.2.7-py3-none-any.whl", "has_sig": false, "md5_digest": "57d033a926ae31a46e97711e91c2de24", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 16782, "upload_time": "2018-07-26T11:10:32", "url": "https://files.pythonhosted.org/packages/93/c6/65ee0cf74ab87a18db419e8bb98ef2ab7be83f46a58e00af6ef0b6c54d76/edc_device-0.2.7-py3-none-any.whl" } ], "0.2.8": [ { "comment_text": "", "digests": { "md5": "94fe7d513551f43f74f663c34b316da8", "sha256": "69957b7d61d1add1a9b5e9af69cce8caa5cd66e06f3a8c04677f08ab12e76b60" }, "downloads": -1, "filename": "edc-device-0.2.8.macosx-10.13-x86_64.tar.gz", "has_sig": false, "md5_digest": "94fe7d513551f43f74f663c34b316da8", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 23540, "upload_time": "2018-08-07T21:18:33", "url": "https://files.pythonhosted.org/packages/9a/da/3f1330d419fd3826655d96e9c16d9487434c5f9ebb284b614b9ab85209c5/edc-device-0.2.8.macosx-10.13-x86_64.tar.gz" }, { "comment_text": "", "digests": { "md5": "acf50cd2c4236fa60c1b0bbbffd7e7f7", "sha256": "441ede3630de2fce033c92f6d86120d2a5a6242ec194d4308151fc54a3c0fa3a" }, "downloads": -1, "filename": "edc_device-0.2.8-py3-none-any.whl", "has_sig": false, "md5_digest": "acf50cd2c4236fa60c1b0bbbffd7e7f7", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 16790, "upload_time": "2018-08-07T21:18:32", "url": "https://files.pythonhosted.org/packages/82/9b/905a255a0690c38878481e196ae302bb59f3ba71d0bfae40006f20455491/edc_device-0.2.8-py3-none-any.whl" } ], "0.2.9": [ { "comment_text": "", "digests": { "md5": "d043b0e549366683114735a0cc7a854f", "sha256": "903a482a4fd1d1a16e6912bb2d18651d4c9991fe4df00a57c28167c954bd8af7" }, "downloads": -1, "filename": "edc-device-0.2.9.macosx-10.13-x86_64.tar.gz", "has_sig": false, "md5_digest": "d043b0e549366683114735a0cc7a854f", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 24508, "upload_time": "2018-09-03T00:25:34", "url": "https://files.pythonhosted.org/packages/20/6c/fc1cbebcb63c9167977266b2727cbf76a59f968be73f7d40786358a38b3c/edc-device-0.2.9.macosx-10.13-x86_64.tar.gz" }, { "comment_text": "", "digests": { "md5": "af0e7498c31dc142b616f93881b9b016", "sha256": "35c810af1d2487e10df4ab18894110910189cb395eade7b5f6860913464de005" }, "downloads": -1, "filename": "edc_device-0.2.9-py3-none-any.whl", "has_sig": false, "md5_digest": "af0e7498c31dc142b616f93881b9b016", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 16947, "upload_time": "2018-09-03T00:25:32", "url": "https://files.pythonhosted.org/packages/3e/32/119319070eb16b7cafed55e3dbcf2012dbe8733a762fcb5b117ba04975ef/edc_device-0.2.9-py3-none-any.whl" } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "857f19887decb9361f0b0fdebfc6eadb", "sha256": "ad5a4c57bd25989db2e5f9a1c70f7beadabc2370e6e1b9dd5ea6577557a01921" }, "downloads": -1, "filename": "edc_device-0.2.23-py3-none-any.whl", "has_sig": false, "md5_digest": "857f19887decb9361f0b0fdebfc6eadb", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3.7", "size": 22066, "upload_time": "2019-06-29T00:09:11", "url": "https://files.pythonhosted.org/packages/43/20/aea3c25ac308f829fbcda98d8426f1c6b9b8823fa901efacad861ade3aca/edc_device-0.2.23-py3-none-any.whl" } ] }