{ "info": { "author": "Erwin S. Andreasen", "author_email": "beacon-api@decipherinc.com", "bugtrack_url": null, "classifiers": [], "description": "This packages permits easier access to FocusVision's Decipher tools REST API.\n\nIf you are a Decipher user, you can use the API to read and write your survey data, provision users, create surveys\nand many other tasks.\n\nIf you are not a FocusVision client, visit https://www.focusvision.com/products/decipher/ to learn more about our services.\n\nDocumentation\n-------------\n\nFor an introduction to using the API, see this Knowledge Base article: https://decipher.zendesk.com/hc/en-us/articles/360010277813\n\nFor current API reference documentation, see https://v2.decipherinc.com/s/local/beacon.html.\n\nQuick Examples\n--------------\n\nInstall the package::\n\n sudo pip install decipher\n\nYou have three options to authenticate against the API:\n\nUsing an **API Key**: visit the Research Hub, and from the User Links menu (click on your picture in the upper right\ncorner), select API Keys. Here you can provision a new API key for yourself or another user created just for API usage.\n\nAPI keys last until revoked or rekeyed. This is the preferrable method if you are using the API for automation.\n\nIf you only expect to use the API from the command line, you do not have to create an API key but can login to the\nsystem just as if you had logged into the user interface (thus it will expire after anywhere between 15 minutes to 24\nhours depending on your company's security settings). Here's an example session::\n\n $ beacon login\n\n If you are using the Beacon API for automation, you should generate and enter\n an API key. If you only need temporary access, to e.g. upload/download files\n you can enter your username/password below\n\n How do you want to authenticate?\n 1. Enter the 64-character API key (valid until deactivated)\n 2. Enter your username/password (temporary)\n 3. Enter a long code (visible on the API key page)\n q. Quit\n Select 1, 2, 3 or q: x\n\nIf you select option 1::\n\n Enter your API key\n See https://decipher.zendesk.com/hc/en-us/articles/360010277813\n\n API KEY: **p84443bmg06skt6ceawpq4xa9qxyx8jucuxk0fz5mxuwp1v4**\n\n Enter your host, or press Enter for the default v2.decipherinc.com\n Host: **yourprivatehost.decipherinc.com**\n\n Testing your new settings...\n Looks good. Settings were saved to the file /home/youruser/.config/decipher\n\nIf you select option 2::\n\n Enter your full username (email address)\n Username: ***you@company.com***\n\n Enter your password\n Password: **password, not shown**\n\n Enter your host, or press Enter for the default v2.decipherinc.com\n Host: **yourprivatehost.decipherinc.com**\n\n Testing your new settings...\n Acquired a temporary session key. It will be expire after 1439 minutes of idle time.\n Looks good. Settings were saved to the file /home/youruser/.config/decipher\n\nIf you select option 3::\n\n Visit https://v2.decipherinc.com/apps/api/keys (or private server equivalent)\n Select 'generate temporary key' then paste it below\n\n Temporary Key: **NDJiZD.....**\n\n Testing your new settings...\n Looks good. Settings were saved to the file /home/youruser/.config/decipher\n\n\nThe \"login\" action saves your API information in the file ~/.config/decipher.\n\nFrom the command line you can now run the \"beacon\" script which lets you quickly run an API call::\n\n beacon -t get rh/users select=id,email,fullname,last_login_from sort=-last_login_when limit=10\n\nThe above illustrates:\n * An API call with method GET\n * Targetting the \"users\" resource, which will be at /api/v1/rh/users\n * Using the \"projection\" feature to select only 4 fields (id, email, full name and IP of last login)\n * Using the \"sorting\" feature to order the response by descending time of last login\n * Using the \"pagination\" feature to limit output to 10 first entries\n * Using the -t option to output the data as a formattet text table, rather than JSON.\n\nIf you replace the -t option with -p you will see the Python code needed for that same call:\n\n.. code-block:: python\n\n from decipher.beacon import api\n users = api.get(\"rh/users\", select=\"id,email,fullname,last_login_from\",\n sort=\"-last_login_when\", limit=10)\n for user in users:\n print \"User #{id} <{email}> logged in last from {last_login_from}\".format(user)\n\n\nAuthentication\n--------------\n\nYou need an API key to use the API if you are not using a temporary, time limited login. You can supply this key\nin 3 ways when connecting remotely:\n\nBy specifying it in the ~/.config/decipher file which has this format:\n\n.. code-block:: ini\n\n [main]\n apikey=p84443bmg06skt6ceawpq4xa9qxyx8jucuxk0fz5mxuwp1v4\n host=v2.decipherinc.com\n\nThe \"main\" section is default, but you can select any other by using `beacon -sothersection` or\nsetting `api.section = \"section\"` before calling any API functions.\n\nBy setting an environment variable::\n\n export BEACON_API=1234567890abcdef1234567890abcdef\n export BEACON_HOST=v2.decipherinc.com\n\nBe aware that environment variables on most UNIX systems are visible to other programs running on the same machine.\n\nBy explicitly initializing the API with login information:\n\n.. code-block:: python\n\n from decipher.beacon import api\n api.login(\"1234567890abcdef1234567890abcdef\", \"v2.decipherinc.com\")\n\n\nAPI Versioning\n--------------\n\nCurrent API uses version 1. This package will only ever do version 1 calls. To opt-in to a newer version of the API,\nrun (prior to doing any calls):\n\n.. code-block:: python\n\n from decipher.beacon import api\n api.version = 2\n\n\nWe do not expect to increase the API to version 2 any time soon unless new functionality cannot be added without using\nparameters with default values.\n\nType hints\n----------\n\nThe data returned from the API is serialized as JSON. However the API also provides a \"type hint\" for the real object\ntype. This is transmitted in the `x-typehint` header which is a JSON dictionary mapping field name to type.\n\nUnless you disable it by using `api.typehint = False`, the API will turn some of the returned objects into \"enriched\"\nobjects, and convert some types. For example, the `rh/apikeys` API returns an object containing a field named created_on which\nis an ISO8601 / RFC3329 string. The typehint header tells the API client that \"created_on\" is a \"datetime\" and the API turns\nthis serialized datetime into an actual datetime object.\n\nThe enriched object contain methods that correspond to what you can do to this type of resource in the API as well\nas easier access to build another API call to the resource for methods not wrapped by this current library version.\n\nCommand line options\n--------------------\n\nThe command line script has the following options::\n\n beacon [options] [arg=value...]\n Verb is one of:\n get -- list resources\n post -- create new resource\n put -- update existing resource\n delete -- delete or retire existing resource\n\n login -- interactively define an API key and host\n rekey -- rekey your current secret key and update the config file\n\n Extra arguments are decoded as JSON objects/arrays if they start with { or [ or are null\n\n Options:\n -v verbose (show headers sent & received))\n -t display output as an aligned text table\n -x display output as IBM JSON XML\n -p display Python code required to make the call\n -s
use a different section in the /home/youruser/.config/decipher file than 'main'\n -V use a different API version\n\nFor example, to create a new API key for user bob@company.com, restricted only to the 8.8.8.8 IP address run::\n\n beacon post rh/apikeys user=bob@company.com 'restrictions={\"networks\":[\"8.8.8.8\"]}'\n\nNOTE: Because of the way the shell manages quoting, you should surround parameters which are to be sent as objects with\nsingle quotes.\n\nData can be read from files rather than supplied on the command line. Use param=@filename to read the entire contents\nof the file \"filename\". You can convert a tab-delimited file to a an array of JSON object using the syntax:\n@filename@json. For example, if \"data.txt\" contains some data you want to upload into a survey, you can do::\n\n beacon post surveys/your-survey/data/edit key=source data=@data.txt@json\n\nWhich will send along the contents of the tab-delimited data.txt but convert it into an array of JSON objects first.\n\n\nMeta-API\n--------\n\nAPIs like the `distribute/email http://v2.decipherinc.com/s/local/beacon.html#distribution-email` let you take output of\none API call and feed it into another API. Using distribute/email you can e.g. generate one or more data files and\nfeed the result into distribute/email which will send the results via email as an attachment.\n\nThe beacon script provides a shortcut to compose this from the command line, using the -m option. Calling beacon -m will,\nrather than performing the call, output the target and arguments in the object form consumed by meta-APIs like distribute/email.\n\nExample composition with shell script::\n\n DATAMAP=$(beacon -m get surveys/demo/report/tables/datamap format=html)\n beacon post distribute/email sources=${DATAMAP}, recipients=joe@example.com, subject=\"Your daily datamap\"\n\nHere, the beacon -m option is used to put the string::\n\n {\"api\": \"/api/v1/surveys/demo/report/tables/datamap\", \"method\": \"GET\", \"args\": {\"format\": \"html\"}}\n\ninto the $DATAMAP shell variable, which is then passed into a call to distribute/email.\n\nNote there are some convenience features to create arrays used above: if a SIMPLE command line argument contains or\nends with a comma, then it's assumed to be a comma-separated list of strings. This works for something like \"3,4,5\" or\n\"user@decipherinc.com,\".\n\nIf it starts with {} (like the content of the DATAMAP variable) and ends with a comma it's also wrapped in an array. Here\nwe only look for comma at the end of the argument -- if we looked anywhere, splitting would likely destroy the JSON object.\n\n\nThe corresponding Python code would be::\n\n from decipher.beacon import api\n\n datamap = api.get('surveys/demo/report/tables/datamap', format='html', meta=True)\n print api.post('distribute/email', sources=[datamap],\n recipients=[\"joe@example.com\"], subject=\"Your daily datamap\")\n\n\nNote the meta=True argument to the normal api.get call, which will not perform the call but return the meta-dictionary.\n\nUsing on a Beacon installation\n------------------------------\nYou can use this script when logged into a Beacon instance, in which case authentication happens locally and\nautomatically. While in a survey directory, use \"beacon ./datamap format=html\" -- the ./ will be replaced with\nsurveys/your/survey/path/ automatically.", "description_content_type": "", "docs_url": null, "download_url": "", "downloads": { "last_day": -1, "last_month": -1, "last_week": -1 }, "home_page": "https://www.focusvision.com/products/decipher/", "keywords": "", "license": "BSD", "maintainer": "", "maintainer_email": "", "name": "decipher", "package_url": "https://pypi.org/project/decipher/", "platform": "", "project_url": "https://pypi.org/project/decipher/", "project_urls": { "Homepage": "https://www.focusvision.com/products/decipher/" }, "release_url": "https://pypi.org/project/decipher/29.0.2/", "requires_dist": null, "requires_python": "", "summary": "Package for easier access to FocusVision's Decipher REST API", "version": "29.0.2" }, "last_serial": 5474073, "releases": { "0.5.0": [ { "comment_text": "", "digests": { "md5": "863efbf8cdbc0e8a42f540abb9f74d0b", "sha256": "7c0975f97167b350c6b3c19de049b06ba280dde730c0ba99fad0cddd07cefbe2" }, "downloads": -1, "filename": "decipher-0.5.0.tar.gz", "has_sig": true, "md5_digest": "863efbf8cdbc0e8a42f540abb9f74d0b", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 6253, "upload_time": "2019-07-01T22:08:10", "url": "https://files.pythonhosted.org/packages/c8/b8/598b7a1554112d53d6fd4d238e9efddeba5ab56219af4aad1f713a81fcb4/decipher-0.5.0.tar.gz" } ], "0.5.1": [ { "comment_text": "", "digests": { "md5": "4bac055d4409a46443cdbd4d0ddd3f0f", "sha256": "13c18f90b86b39c5cd3362b91c594822c2e399f563fc99f1cc56512f1d7ec847" }, "downloads": -1, "filename": "decipher-0.5.1.tar.gz", "has_sig": true, "md5_digest": "4bac055d4409a46443cdbd4d0ddd3f0f", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 7796, "upload_time": "2014-09-29T23:24:32", "url": "https://files.pythonhosted.org/packages/cc/68/bd06c1a750f8b8df273149ce0bf65551609fb4374b4d862570bb41aae088/decipher-0.5.1.tar.gz" } ], "0.5.2": [ { "comment_text": "", "digests": { "md5": "49c2939b765e22a8e825a99da53ef3d1", "sha256": "f31c914457db6866bb536d98056d6670798b74381342282718663fcf186b448c" }, "downloads": -1, "filename": "decipher-0.5.2.tar.gz", "has_sig": true, "md5_digest": "49c2939b765e22a8e825a99da53ef3d1", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 8162, "upload_time": "2014-10-09T10:38:28", "url": "https://files.pythonhosted.org/packages/d9/66/c7bde23d97644fe883974fc3db707523e35597f259011645b6207fd78a75/decipher-0.5.2.tar.gz" } ], "0.5.3": [ { "comment_text": "", "digests": { "md5": "2a8111a9018f9adf730bd1f2d2a2ae60", "sha256": "11ac6c47195b336294b3ca38dfd1031ce29c9d7d1561feca48888ec19739f30a" }, "downloads": -1, "filename": "decipher-0.5.3.tar.gz", "has_sig": true, "md5_digest": "2a8111a9018f9adf730bd1f2d2a2ae60", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 8829, "upload_time": "2014-10-09T14:10:56", "url": "https://files.pythonhosted.org/packages/4f/a3/5cff0066d0ddebb7863526e7108f375b9ce115fe9aafeced1437a4ac68d0/decipher-0.5.3.tar.gz" } ], "0.5.4": [ { "comment_text": "", "digests": { "md5": "18e3d43ffbd8c8d151b72668ceaf4c99", "sha256": "84310c347872b1742ae0750b512f2f1310e3164c4b726f5fbfd0205bb6140c47" }, "downloads": -1, "filename": "decipher-0.5.4.tar.gz", "has_sig": true, "md5_digest": "18e3d43ffbd8c8d151b72668ceaf4c99", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 8820, "upload_time": "2014-10-10T18:00:32", "url": "https://files.pythonhosted.org/packages/41/1e/939af2b59d8962a07ae8eec9bcdf9b5fa3a76c3c01225b01bbec11304771/decipher-0.5.4.tar.gz" } ], "0.5.5": [ { "comment_text": "", "digests": { "md5": "d287c19e8ea79b5531ed911a5a7764b0", "sha256": "1de9a1b96002b9846da10fee3ccca302f0f210d710b608feb1a47a12bea0b49e" }, "downloads": -1, "filename": "decipher-0.5.5.tar.gz", "has_sig": true, "md5_digest": "d287c19e8ea79b5531ed911a5a7764b0", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 8820, "upload_time": "2014-10-10T18:01:54", "url": "https://files.pythonhosted.org/packages/0e/56/03c73360880356316f7655ac9ea46bd12308ee5beb3d05f044f134b2f37f/decipher-0.5.5.tar.gz" } ], "25.90.0": [ { "comment_text": "", "digests": { "md5": "d7b63be37bfde57c37ddb07590fa7b7c", "sha256": "fd45683ceb5f547faacfaf856b574cd5973060fb4dd6ac520be9484bbb3d3a4a" }, "downloads": -1, "filename": "decipher-25.90.0.tar.gz", "has_sig": true, "md5_digest": "d7b63be37bfde57c37ddb07590fa7b7c", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 10324, "upload_time": "2014-10-13T14:51:51", "url": "https://files.pythonhosted.org/packages/f8/79/3de6d2b0882ca4f94b40aa16292448e45f0fe8b2fc29201838d05e18f525/decipher-25.90.0.tar.gz" } ], "25.90.1": [ { "comment_text": "", "digests": { "md5": "4b0ef4fa93319a50e411e3f8ea9d6a60", "sha256": "73ccea5378c6f60211ff32ed6ac496307ec9ff7e554d023e95f708328aebca4b" }, "downloads": -1, "filename": "decipher-25.90.1.tar.gz", "has_sig": true, "md5_digest": "4b0ef4fa93319a50e411e3f8ea9d6a60", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 10340, "upload_time": "2014-10-13T17:36:15", "url": "https://files.pythonhosted.org/packages/cb/1c/49dbe5ca22d1edb9edb8823f3080ce8d54d54a790eab14b1b94243e60a9b/decipher-25.90.1.tar.gz" } ], "25.90.2": [ { "comment_text": "", "digests": { "md5": "f0e27e46e89b9a98f486f7bf4736663b", "sha256": "63dd36f66700dde1a70d8016f857b5b50cef5606f4f0b5fcc6d7de9b215ba5ee" }, "downloads": -1, "filename": "decipher-25.90.2.tar.gz", "has_sig": true, "md5_digest": "f0e27e46e89b9a98f486f7bf4736663b", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 10345, "upload_time": "2014-10-15T22:42:08", "url": "https://files.pythonhosted.org/packages/46/20/22d844c74509c7c8084e0a1bbddb789ba429f9c9d7dee3ce18b7a153df82/decipher-25.90.2.tar.gz" } ], "25.90.3": [ { "comment_text": "", "digests": { "md5": "804bac200eca4db0de49eb77b7191bd0", "sha256": "235a21a9131c3b456d83746783f2c8ba892a3b2309c59f19d41f10843caff5b4" }, "downloads": -1, "filename": "decipher-25.90.3.tar.gz", "has_sig": true, "md5_digest": "804bac200eca4db0de49eb77b7191bd0", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 10411, "upload_time": "2014-10-20T12:36:06", "url": "https://files.pythonhosted.org/packages/4c/2b/62d6f3a94a7cb449fa6e7491d5522dd5b6fb41a2e8d701a67b162bb5bb67/decipher-25.90.3.tar.gz" } ], "25.90.4": [ { "comment_text": "", "digests": { "md5": "40b56bc0f6f420dd4640b8e3d8bbcfe4", "sha256": "9822fcb4aa27203e58fd97777106ed22a2e3ed2cee498ef1e757ff5882f87a43" }, "downloads": -1, "filename": "decipher-25.90.4.tar.gz", "has_sig": true, "md5_digest": "40b56bc0f6f420dd4640b8e3d8bbcfe4", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 10420, "upload_time": "2014-10-20T12:41:42", "url": "https://files.pythonhosted.org/packages/64/ed/c033c5aa736bceaf9e06eea08c3286798aea4b0814a1ead166a4698757a4/decipher-25.90.4.tar.gz" } ], "25.90.5": [ { "comment_text": "", "digests": { "md5": "e29a940fb7c0cbec9b8a398b951f434d", "sha256": "fe96fe78252266e7fadf74f6a5080163dacc9bdf666a9e6efeda377ad752be36" }, "downloads": -1, "filename": "decipher-25.90.5.tar.gz", "has_sig": true, "md5_digest": "e29a940fb7c0cbec9b8a398b951f434d", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 11687, "upload_time": "2014-11-01T10:11:02", "url": "https://files.pythonhosted.org/packages/0b/99/2e419e2b3c752ecc5795d52039fcbc7925a567a8841074c581cb9006e4a6/decipher-25.90.5.tar.gz" } ], "25.90.7": [ { "comment_text": "", "digests": { "md5": "3b1b04949c016e23f655cacb5c8f2012", "sha256": "9b3804b4a51bdd187a7a39cc7175949907a6d658a16e344490dfadbe16c0d8d8" }, "downloads": -1, "filename": "decipher-25.90.7.tar.gz", "has_sig": true, "md5_digest": "3b1b04949c016e23f655cacb5c8f2012", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 11900, "upload_time": "2014-11-10T23:16:36", "url": "https://files.pythonhosted.org/packages/13/a2/5b42ce32f675b9228e12941eb94e6ac373e9d3805e1c7bb65f6b2e69509b/decipher-25.90.7.tar.gz" } ], "26.00.0": [ { "comment_text": "", "digests": { "md5": "e3e291c7df18355400dd42f5d7e530f1", "sha256": "44af0b0cce867fb7c038272dc1ba7afe48fcab63306d65337655a755bf99757b" }, "downloads": -1, "filename": "decipher-26.00.0.tar.gz", "has_sig": true, "md5_digest": "e3e291c7df18355400dd42f5d7e530f1", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 11935, "upload_time": "2014-11-13T09:25:37", "url": "https://files.pythonhosted.org/packages/09/5e/d67e0d9ac43ab258ac2ee41b0f0f21ecd04e24db72674e97d2d9a30d5f69/decipher-26.00.0.tar.gz" } ], "26.00.1": [ { "comment_text": "", "digests": { "md5": "dfe127a0f49736e2bddbe1dda0b3f361", "sha256": "1f62b8a2d4b58466044d1c51361e363d8bb3a4fec5e75433703eb3b22374fe57" }, "downloads": -1, "filename": "decipher-26.00.1.tar.gz", "has_sig": true, "md5_digest": "dfe127a0f49736e2bddbe1dda0b3f361", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 12112, "upload_time": "2014-11-13T19:46:23", "url": "https://files.pythonhosted.org/packages/72/b8/33d98538b01e9217c7262f7774ca51985887ce64f80b35d4fe0b20baee6e/decipher-26.00.1.tar.gz" } ], "26.00.2": [ { "comment_text": "", "digests": { "md5": "29b2539c40676f6be41ae70fe454ea69", "sha256": "a1efa267f7fa98dbf17cbdeaf9144efca1ef861d64f248cbe4bf60b3f5105801" }, "downloads": -1, "filename": "decipher-26.00.2.tar.gz", "has_sig": true, "md5_digest": "29b2539c40676f6be41ae70fe454ea69", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 12111, "upload_time": "2014-11-13T19:48:59", "url": "https://files.pythonhosted.org/packages/29/56/7520572d384a630a5732541d11c1187f99b926f1ceb8b337d6209d09ce1e/decipher-26.00.2.tar.gz" } ], "26.00.3": [ { "comment_text": "", "digests": { "md5": "d7f9879878d6a4cc9a2651a973199879", "sha256": "165db2844a33d357f7f82873d49acad0c43e58c6d6ae9a39035f1a56969974e3" }, "downloads": -1, "filename": "decipher-26.00.3.tar.gz", "has_sig": true, "md5_digest": "d7f9879878d6a4cc9a2651a973199879", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 12113, "upload_time": "2014-11-13T22:21:07", "url": "https://files.pythonhosted.org/packages/92/ba/f0926de87891300ebd9538c4818ac15ed15fc0db0fbb51559dc396b9ad97/decipher-26.00.3.tar.gz" } ], "26.00.4": [ { "comment_text": "", "digests": { "md5": "dcf17c32ec9bbb020b26a4bbc6673591", "sha256": "aa6293fd133b205ddfb6feabde1c7a7079c419c7061b4bc111b8b893db3abac4" }, "downloads": -1, "filename": "decipher-26.00.4.tar.gz", "has_sig": true, "md5_digest": "dcf17c32ec9bbb020b26a4bbc6673591", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 12220, "upload_time": "2014-11-14T00:24:57", "url": "https://files.pythonhosted.org/packages/17/f1/3f1ad95bb43815bccfc6332a239b7566f6edca52d3570f499c19319fef17/decipher-26.00.4.tar.gz" } ], "28.0.5": [ { "comment_text": "", "digests": { "md5": "6f23f3cca8c94b736525e58b17add9af", "sha256": "84f11ee28948b00a12d2e5ba2f0b075bb48d6d47020bba77e5eaf8b3114652c3" }, "downloads": -1, "filename": "decipher-28.0.5.tar.gz", "has_sig": true, "md5_digest": "6f23f3cca8c94b736525e58b17add9af", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 13085, "upload_time": "2015-03-27T12:23:07", "url": "https://files.pythonhosted.org/packages/1d/19/ccbcb28136ab3e62dcaa44702b1cda42821ae59e44cb317ae7940c5e87f1/decipher-28.0.5.tar.gz" } ], "28.0.6": [ { "comment_text": "", "digests": { "md5": "7ea41c2a16a5f1263fa7ee88036cdc8e", "sha256": "54ba92fc3498c275dabe54fd2461e6789db9c628c76f43bfb6a90eceab01de1d" }, "downloads": -1, "filename": "decipher-28.0.6.tar.gz", "has_sig": true, "md5_digest": "7ea41c2a16a5f1263fa7ee88036cdc8e", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 13092, "upload_time": "2015-04-22T18:24:13", "url": "https://files.pythonhosted.org/packages/7f/64/6782770c95b6631d8675317b71d91b209f988fcb984522aa4fdb61ff5c78/decipher-28.0.6.tar.gz" } ], "28.0.7": [ { "comment_text": "", "digests": { "md5": "d48da5f79433ede2eb6c3b8f38422679", "sha256": "e54a2408340665371c5972951b6975ce25718b0b248ec2aee626849c1af3023b" }, "downloads": -1, "filename": "decipher-28.0.7.tar.gz", "has_sig": true, "md5_digest": "d48da5f79433ede2eb6c3b8f38422679", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 13063, "upload_time": "2015-05-07T12:58:07", "url": "https://files.pythonhosted.org/packages/17/08/7a38ec44933c7279e0dfac4d91b47a3087e8769e7615be3a5778975d18b0/decipher-28.0.7.tar.gz" } ], "28.0.8": [ { "comment_text": "", "digests": { "md5": "3934999fcb7e7462334c37bec7c859d8", "sha256": "bd1c21340927e5404d582c249793ea53b55e8a3dc99c89140dde7a871494c549" }, "downloads": -1, "filename": "decipher-28.0.8.tar.gz", "has_sig": true, "md5_digest": "3934999fcb7e7462334c37bec7c859d8", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 13111, "upload_time": "2015-04-22T19:28:02", "url": "https://files.pythonhosted.org/packages/fe/f5/6a9d7b5484106f60a6b92b0deb7acc9d6b6158f35eda84fc9f6e8338e847/decipher-28.0.8.tar.gz" } ], "28.0.9": [ { "comment_text": "", "digests": { "md5": "956ae6f5320038c2754465880a989c8d", "sha256": "3cf0f9f48443c2244455785c8aff31fa71faabd65796fece4ff3e045942366fd" }, "downloads": -1, "filename": "decipher-28.0.9.tar.gz", "has_sig": true, "md5_digest": "956ae6f5320038c2754465880a989c8d", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 13030, "upload_time": "2015-05-07T13:00:47", "url": "https://files.pythonhosted.org/packages/0e/98/eb6b34974c0c9ee8ee7f95e0250d16bd58be3852769451def9987bc32c2e/decipher-28.0.9.tar.gz" } ], "28.00.1": [ { "comment_text": "", "digests": { "md5": "f28010b4ed0d8f47ee887ed9edf13646", "sha256": "87b1f68a9828e2baa41110bbd4fd173de74cbb77c3fdf583a27981ada0c945f9" }, "downloads": -1, "filename": "decipher-28.00.1.tar.gz", "has_sig": true, "md5_digest": "f28010b4ed0d8f47ee887ed9edf13646", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 12650, "upload_time": "2015-01-22T14:51:00", "url": "https://files.pythonhosted.org/packages/4a/55/78975a9748f6a3eb925f7b48e686910c98178d8cd3637c690f520c549a28/decipher-28.00.1.tar.gz" } ], "28.00.2": [ { "comment_text": "", "digests": { "md5": "e6403a006a8c9a80c1dfb3cc728336d2", "sha256": "0b5c2204faed204637b56ed9cb9b5a152d357b39da6f922c2200a3b506964dc2" }, "downloads": -1, "filename": "decipher-28.00.2.tar.gz", "has_sig": true, "md5_digest": "e6403a006a8c9a80c1dfb3cc728336d2", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 12690, "upload_time": "2015-01-22T22:27:49", "url": "https://files.pythonhosted.org/packages/57/53/e147cfbf3e12df258085be08b08c2b5e42db35d01d7d60ec4ef5627ae36d/decipher-28.00.2.tar.gz" } ], "28.00.3": [ { "comment_text": "", "digests": { "md5": "22c0ced33d8d00ae67f6889d4da1b1ff", "sha256": "8737c2e8986fb775be6e187a46b46df15b0e8435011f72ca0cf9b754ce04737e" }, "downloads": -1, "filename": "decipher-28.00.3.tar.gz", "has_sig": true, "md5_digest": "22c0ced33d8d00ae67f6889d4da1b1ff", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 12700, "upload_time": "2015-03-16T15:38:46", "url": "https://files.pythonhosted.org/packages/20/25/9cd9a1477e082d7d8f2032ecba10cd9e8826a236eccc38d9c0f9cad9afc0/decipher-28.00.3.tar.gz" } ], "28.00.4": [ { "comment_text": "", "digests": { "md5": "cdd5c091ef9a327ca0f84a9c8190954a", "sha256": "731dd81d73dd4975cfdd4f5c61c893186dcfead3cbe48ad5e5859c728aab08a3" }, "downloads": -1, "filename": "decipher-28.00.4.tar.gz", "has_sig": true, "md5_digest": "cdd5c091ef9a327ca0f84a9c8190954a", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 13093, "upload_time": "2015-03-16T21:49:19", "url": "https://files.pythonhosted.org/packages/e0/71/d7665bea903c2aae454d00208bed4c6d4b0fa77a94fa30d58c6be8f623ce/decipher-28.00.4.tar.gz" } ], "28.1.0": [ { "comment_text": "", "digests": { "md5": "4cc99a9ef11d867daa0c34a683d27c56", "sha256": "3cb878ffe7de1657c46570d04a7d10d9b83b317c917851f60524741628dd885a" }, "downloads": -1, "filename": "decipher-28.1.0.tar.gz", "has_sig": true, "md5_digest": "4cc99a9ef11d867daa0c34a683d27c56", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 13581, "upload_time": "2015-06-10T09:14:33", "url": "https://files.pythonhosted.org/packages/29/1e/84e5a0b3c90840c90dcb41c3e7352ab08b8c99c6df407c6a78143243d6bc/decipher-28.1.0.tar.gz" } ], "28.1.1": [ { "comment_text": "", "digests": { "md5": "6898866eff365fcfe792ea6ecdf1392d", "sha256": "af16c14fce911cfb464b5becc0d44f185ccb1c6ac6e012aedb2e904a7f9765e3" }, "downloads": -1, "filename": "decipher-28.1.1.tar.gz", "has_sig": true, "md5_digest": "6898866eff365fcfe792ea6ecdf1392d", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 13675, "upload_time": "2015-06-10T22:23:51", "url": "https://files.pythonhosted.org/packages/8d/54/767770dfc4bf3291c17df2a6cb4b862a654bdae27f62c780474378771756/decipher-28.1.1.tar.gz" } ], "29.0.0": [ { "comment_text": "", "digests": { "md5": "01bdaa7b099e8197be9384d97b5f4321", "sha256": "ff28506f3a7b0927ded7e96c7c07b7b245efadc4518b87e0c635fe8383e73ad4" }, "downloads": -1, "filename": "decipher-29.0.0.tar.gz", "has_sig": true, "md5_digest": "01bdaa7b099e8197be9384d97b5f4321", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 16578, "upload_time": "2015-08-31T13:14:53", "url": "https://files.pythonhosted.org/packages/75/aa/d7bd4e3318c7b9803e40b004b0b352739692acce8259c10f5a6553c97276/decipher-29.0.0.tar.gz" } ], "29.0.1": [ { "comment_text": "", "digests": { "md5": "8880f07f628e2076963519ca977e730a", "sha256": "759bac1936ade7cc0c1146f803da2eff95e58f6bcadaefe45bc28449ac587cc3" }, "downloads": -1, "filename": "decipher-29.0.1.tar.gz", "has_sig": true, "md5_digest": "8880f07f628e2076963519ca977e730a", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 16514, "upload_time": "2017-04-04T22:16:25", "url": "https://files.pythonhosted.org/packages/0d/b8/152da8184a1be5f3e89890834bef9e97058f3b6776f70114cb560ff41d88/decipher-29.0.1.tar.gz" } ], "29.0.2": [ { "comment_text": "", "digests": { "md5": "b1a3bec7c05d91350d0ea857149dc31a", "sha256": "c2929af487ea30f8eab495372428cd6befa30a1e04c682cf91904282ba55bc23" }, "downloads": -1, "filename": "decipher-29.0.2.tar.gz", "has_sig": false, "md5_digest": "b1a3bec7c05d91350d0ea857149dc31a", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 16252, "upload_time": "2019-07-01T22:08:36", "url": "https://files.pythonhosted.org/packages/4a/7a/a8aad78d8864e36a8ecee58d6afbbe12eb92918a88f6bc655a8efa5c0b35/decipher-29.0.2.tar.gz" } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "b1a3bec7c05d91350d0ea857149dc31a", "sha256": "c2929af487ea30f8eab495372428cd6befa30a1e04c682cf91904282ba55bc23" }, "downloads": -1, "filename": "decipher-29.0.2.tar.gz", "has_sig": false, "md5_digest": "b1a3bec7c05d91350d0ea857149dc31a", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 16252, "upload_time": "2019-07-01T22:08:36", "url": "https://files.pythonhosted.org/packages/4a/7a/a8aad78d8864e36a8ecee58d6afbbe12eb92918a88f6bc655a8efa5c0b35/decipher-29.0.2.tar.gz" } ] }