{ "info": { "author": "Artjom L\u00f6bsack", "author_email": "ceigh@pm.me", "bugtrack_url": null, "classifiers": [ "Development Status :: 4 - Beta", "Framework :: Django", "Framework :: Flask", "Intended Audience :: Developers", "License :: OSI Approved :: Apache Software License", "Operating System :: OS Independent", "Programming Language :: Python :: 3.5", "Programming Language :: Python :: 3.6", "Programming Language :: Python :: 3.7", "Programming Language :: Python :: 3.8", "Topic :: Software Development :: Libraries :: Python Modules" ], "description": "# Browser fingerprint authenticate\nThis package allows you to obtain and use a user browser fingerprint for your web application as an authenticator.\n\n# In action\nIf you want to test this method by yourself, check our [demo site](https://bfa.pythonanywhere.com).\n\n# Content\n- [Install](#install)\n- [Usage](#usage)\n - [Django](#django)\n - [Flask](#flask)\n- [Salt](#also)\n- [Dependences](#using)\n- [Python versions](#supported-python)\n- [License](#license)\n\n# Install\nYou can install package by:\n\n`pip install bfa`\n\n# Usage\nAt the moment, django and flask support is provided, in the future it is planned to add other frameworks.\n\n## Django\nAdd `'bfa'` to your list of `INSTALLED_APPS` in _settings.py_:\n```python\nINSTALLED_APPS = [\n ...\n 'bfa'\n]\n```\n\n- You can get user fingerprint by:\n\n `bfa.fingerprint.get(request)`\n\n- In template paste inside `
`:\n\n `{% load bfa %}{% fingerprint_input %}`\n\n**For example:**\n\n_login.html_\n```html\n...\n\n...\n```\n\n_views.py_\n```python\nimport bfa\nfrom django.http import HttpResponse\nfrom django.shortcuts import render\n\n...\n\n\ndef login(request):\n if request.method == 'POST':\n # Getting a username\n username = request.POST.get('username')\n\n # Getting a fingerprint\n try:\n fp = bfa.fingerprint.get(request)\n except (ConnectionError, ValueError):\n return HttpResponse(\"Can't get fingerprint\")\n\n # Here is the part where you process the \n # username and fingerprint, according to the database\n ...\n\n return HttpResponse(\"You're logged in\")\n\n return render(request, 'login.html')\n\n\n...\n```\n\n# Flask\nAdd bfa context processor to your _app.py_:\n```python\n...\nimport bfa\nfrom flask import Flask\n\napp = Flask(__name__)\n\n\n@app.context_processor\n# Don't change name of this function\ndef bfa_flask():\n return bfa.templatetags.bfa.fingerprint_input()\n\n\n...\n```\n\n- You can get user fingerprint by:\n\n `bfa.fingerprint.get(request)`\n\n- In template paste inside ``:\n\n `{{ fingerprint_input }}`\n\n**For example:**\n\n_login.html_\n```html\n...\n\n...\n```\n\n_app.py_\n```python\nimport bfa\nfrom flask import Flask, request\n\napp = Flask(__name__)\n\n...\n\n\n@app.route('/login/', methods=['POST', 'GET'])\ndef login():\n if request.method == 'POST':\n # Getting a username\n username = request.form['username']\n\n # Getting a fingerprint\n try:\n fp = bfa.fingerprint.get(request)\n except (ConnectionError, ValueError):\n return \"Can't get fingerprint\"\n\n # Here is the part where you process the \n # username and fingerprint, according to the database\n ...\n\n return \"You're logged in\"\n\n else:\n return \"Login page\"\n\n\n...\n```\n\n# Also\nYou can salt fingerprints by:\n\n`bfa.fingerprint.get(request, use_salt=True)`\n\n**For example:**\n\n_views.py_\n```python\nimport bfa\nfrom django.http import HttpResponse\nfrom django.shortcuts import render\n\n...\n\n\ndef login(request):\n if request.method == 'POST':\n # Getting a username\n username = request.POST.get('username')\n\n # Getting a fingerprint\n try:\n fp_data = bfa.fingerprint.get(request, use_salt=True)\n except (ConnectionError, ValueError):\n return HttpResponse(\"Can't get fingerprint\")\n\n fp = fp_data['fp']\n salt = fp_data['salt']\n\n # Here is the part where you process the \n # username, fingerprint and salt, according to the database\n ...\n\n return HttpResponse(\"You're logged in\")\n\n return render(request, 'login.html')\n\n\n...\n```\n\n# Using\nThis project uses:\n- [Django](https://github.com/django/django \"Python\")\n- [Werkzeug](https://github.com/pallets/werkzeug \"Python\")\n- [FingerprintJS2](https://github.com/Valve/fingerprintjs2 \"JS\")\n- [JS-SHA3](https://github.com/emn178/js-sha3 \"JS\")\n\n# Supported python\nBFA working on python >=3.5 only.\n\n# License\nThis project is under Apache 2.0 license.\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://gitlab.com/bfa/bfa_python", "keywords": "browser fingerprint authentication flask django", "license": "Apache 2.0", "maintainer": "", "maintainer_email": "", "name": "bfa", "package_url": "https://pypi.org/project/bfa/", "platform": "", "project_url": "https://pypi.org/project/bfa/", "project_urls": { "BFA demo site": "https://bfa.pythonanywhere.com", "BFA project": "https://gitlab.com/bfa", "Homepage": "https://gitlab.com/bfa/bfa_python" }, "release_url": "https://pypi.org/project/bfa/1.2.1/", "requires_dist": [ "django (>=1.6)", "werkzeug" ], "requires_python": ">=3.5, <4", "summary": "Using user's browser fingerprint for authentication in your web application.", "version": "1.2.1" }, "last_serial": 4746059, "releases": { "0.1.7": [ { "comment_text": "", "digests": { "md5": "277a53f0bb73585528d97913b3072a08", "sha256": "833a7cee70178c48060e6a46f3abf765402449660789ca97285d3efaa3d995fc" }, "downloads": -1, "filename": "bfa-0.1.7-py3-none-any.whl", "has_sig": false, "md5_digest": "277a53f0bb73585528d97913b3072a08", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3.6, <4", "size": 6899, "upload_time": "2018-12-02T20:53:13", "url": "https://files.pythonhosted.org/packages/c9/74/304fe84c98bb8d86f8a225978d3afcf908473c7ff0d418ee8e0dc5480ecd/bfa-0.1.7-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "65d42a7a45b6d8f36b033560c5bb252c", "sha256": "1dd56ba06165f33951a8f1814ec32dbacfa7f1c32e7a172221d8ea60978b2ef9" }, "downloads": -1, "filename": "bfa-0.1.7.tar.gz", "has_sig": false, "md5_digest": "65d42a7a45b6d8f36b033560c5bb252c", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.6, <4", "size": 2008, "upload_time": "2018-12-02T20:53:15", "url": "https://files.pythonhosted.org/packages/19/61/cd57e948892211c4475fa1e7e5fb4f3a4fbef05aad5495bd7425e94a0d0f/bfa-0.1.7.tar.gz" } ], "0.1.8": [ { "comment_text": "", "digests": { "md5": "c1fa6ff920787c00e0bbf4dbfce5cfbe", "sha256": "9a208c62e83d9f4d7d609b684494101f2d7e79c21f2ecc79069214aab94957f2" }, "downloads": -1, "filename": "bfa-0.1.8-py3-none-any.whl", "has_sig": false, "md5_digest": "c1fa6ff920787c00e0bbf4dbfce5cfbe", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 7069, "upload_time": "2018-12-02T21:53:27", "url": "https://files.pythonhosted.org/packages/f3/b9/46a7f8ebf16a4d614118651086f4021af344702789f09572e16d46ddbc96/bfa-0.1.8-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "cf7cdd8b7d17c5161e6a9f49d10902ed", "sha256": "acdfbfa0fdbd406d05464a6fd283d5ce9d8f97ddcf780392b39566b3ab1e4644" }, "downloads": -1, "filename": "bfa-0.1.8.tar.gz", "has_sig": false, "md5_digest": "cf7cdd8b7d17c5161e6a9f49d10902ed", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 2270, "upload_time": "2018-12-02T21:53:29", "url": "https://files.pythonhosted.org/packages/6a/89/239e1c55a1b7ff72da29833a004c4d663fd2f909e2e5c217c8dbcf6eaec3/bfa-0.1.8.tar.gz" } ], "0.1.9": [ { "comment_text": "", "digests": { "md5": "70b74719acb82b408127a5b51ee837a2", "sha256": "c8a09284afbc3dca6e3e1ba2ce7985cf715a43608478e35267210d94ae19d2f0" }, "downloads": -1, "filename": "bfa-0.1.9-py3-none-any.whl", "has_sig": false, "md5_digest": "70b74719acb82b408127a5b51ee837a2", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 7528, "upload_time": "2018-12-03T16:19:02", "url": "https://files.pythonhosted.org/packages/f9/82/951c4cb23be91b6a47a378334bd1b7523eac804e5f6a93087460704585a6/bfa-0.1.9-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "8212c326253677870afc1e0618a46a1e", "sha256": "de936278fb95d6a93365c04b68d7a385cb51fd6c47b883a8c5c6cc1b836cef77" }, "downloads": -1, "filename": "bfa-0.1.9.tar.gz", "has_sig": false, "md5_digest": "8212c326253677870afc1e0618a46a1e", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 2522, "upload_time": "2018-12-03T16:19:04", "url": "https://files.pythonhosted.org/packages/9a/41/dd6705e13533e680ff76a60c504002ec2c949fc1861ecad57bb70d68d50d/bfa-0.1.9.tar.gz" } ], "0.2": [ { "comment_text": "", "digests": { "md5": "84e3338fdf912bf4e0743496006d53c1", "sha256": "ffa2cf070b01c4aa6a5b9cb1a2b4c8ec494c6501080a22067cef50817638c131" }, "downloads": -1, "filename": "bfa-0.2-py3-none-any.whl", "has_sig": false, "md5_digest": "84e3338fdf912bf4e0743496006d53c1", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 7405, "upload_time": "2018-12-05T19:07:06", "url": "https://files.pythonhosted.org/packages/6b/23/e6b6e6afb3e5c84b94f8466c860744a07f81a9ff55391a45d73df2ea544f/bfa-0.2-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "e4f5f997aeb093c5bcfc83bfc18866a4", "sha256": "13aab4ed48f194c690d32ab31006d41938514a1ff8b3625309b20a72136d3f33" }, "downloads": -1, "filename": "bfa-0.2.tar.gz", "has_sig": false, "md5_digest": "e4f5f997aeb093c5bcfc83bfc18866a4", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 2622, "upload_time": "2018-12-05T19:07:07", "url": "https://files.pythonhosted.org/packages/fb/75/0128be314b5ccd13b5afed272dcfa58f0d7f603b1420c11d2c5cee37851a/bfa-0.2.tar.gz" } ], "0.2.2": [ { "comment_text": "", "digests": { "md5": "9e91184d1d7a73d407075bb4be57542a", "sha256": "a68996f91a155fe123264b53480cc7ad953887e981a6b2685e9e66540771818f" }, "downloads": -1, "filename": "bfa-0.2.2-py3-none-any.whl", "has_sig": false, "md5_digest": "9e91184d1d7a73d407075bb4be57542a", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3, <4", "size": 7459, "upload_time": "2018-12-05T19:42:11", "url": "https://files.pythonhosted.org/packages/94/d7/0af01c3962962afed2523bc81de3b62bed65055296a8432d88c359d3b5f1/bfa-0.2.2-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "95c5f550d28bb60f2d61f5ba1242f2b6", "sha256": "50cfb47263f592103551b80e4d05d12630783edfe9fd03d0f9f49edd093871bc" }, "downloads": -1, "filename": "bfa-0.2.2.tar.gz", "has_sig": false, "md5_digest": "95c5f550d28bb60f2d61f5ba1242f2b6", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3, <4", "size": 2698, "upload_time": "2018-12-05T19:42:12", "url": "https://files.pythonhosted.org/packages/28/45/b628058f4aa75c00c4510019f00ceb9b342e141f79f535769a69c0080607/bfa-0.2.2.tar.gz" } ], "0.2.3": [ { "comment_text": "", "digests": { "md5": "a07e9aaba704e16b830b3043f533f930", "sha256": "4fb7f22d43ab5d34bb92cfa080c1868dafbb2e5368b7d0f89da2761ed1475150" }, "downloads": -1, "filename": "bfa-0.2.3-py3-none-any.whl", "has_sig": false, "md5_digest": "a07e9aaba704e16b830b3043f533f930", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=2.6, <4", "size": 7519, "upload_time": "2018-12-06T19:48:37", "url": "https://files.pythonhosted.org/packages/17/cd/cb15bae1d2bba5e08a7ab68dc5485cebea618cb33a354554f2e0923799b3/bfa-0.2.3-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "7d192f38d2a5e999bc8939831a2bd4f6", "sha256": "0cc8120ee1689a459954d51dd71ee94e604049cc0516145345e066621820cf07" }, "downloads": -1, "filename": "bfa-0.2.3.tar.gz", "has_sig": false, "md5_digest": "7d192f38d2a5e999bc8939831a2bd4f6", "packagetype": "sdist", "python_version": "source", "requires_python": ">=2.6, <4", "size": 2747, "upload_time": "2018-12-06T19:48:38", "url": "https://files.pythonhosted.org/packages/27/22/e8e2358795a577bbdfb2439e073f6dc09a0f3b3ab4018f9c133f10e5b38e/bfa-0.2.3.tar.gz" } ], "0.3": [ { "comment_text": "", "digests": { "md5": "3227661729045861df9c2a0b15bcd83c", "sha256": "07db84276daf36532455f299850370ef53a5f4127113565ec77731592c3b9757" }, "downloads": -1, "filename": "bfa-0.3-py3-none-any.whl", "has_sig": false, "md5_digest": "3227661729045861df9c2a0b15bcd83c", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=2.6, <4", "size": 7874, "upload_time": "2018-12-09T17:34:59", "url": "https://files.pythonhosted.org/packages/2f/37/dfbadea7e66d0ab1dcb054170a60bf1fa7f756808318a8fc61617e7068be/bfa-0.3-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "27d5797943cfb0b4aa5efadbc65b7fc3", "sha256": "99759f06ccbdf20fb8d9684a3368a6efb26e9c4d17f5df31f625b092d335056e" }, "downloads": -1, "filename": "bfa-0.3.tar.gz", "has_sig": false, "md5_digest": "27d5797943cfb0b4aa5efadbc65b7fc3", "packagetype": "sdist", "python_version": "source", "requires_python": ">=2.6, <4", "size": 3662, "upload_time": "2018-12-09T17:35:00", "url": "https://files.pythonhosted.org/packages/3e/83/93ac73674e7060e96694617b89b619cfbe7843dadf6bd26bafe68d10f0d6/bfa-0.3.tar.gz" } ], "1.0": [ { "comment_text": "", "digests": { "md5": "9463600f3bcf4a6f859f9dee04e07ce5", "sha256": "00d5500c1829c36e663d1c9789bb9c3d5d7a9786612e26d4429ad5a8be47fe9d" }, "downloads": -1, "filename": "bfa-1.0-py3-none-any.whl", "has_sig": false, "md5_digest": "9463600f3bcf4a6f859f9dee04e07ce5", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">3, <4", "size": 9673, "upload_time": "2019-01-23T13:40:28", "url": "https://files.pythonhosted.org/packages/20/f5/b5cde426caabb8ba4a7d625b2a359462f3ccbfab1f709c9206891bb0cfe7/bfa-1.0-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "13789075a5285b26f59532de0727461f", "sha256": "2b05111b0ae25c665e8e6974af69687c26385afdcffc6f000c4136446b559ddb" }, "downloads": -1, "filename": "bfa-1.0.tar.gz", "has_sig": false, "md5_digest": "13789075a5285b26f59532de0727461f", "packagetype": "sdist", "python_version": "source", "requires_python": ">3, <4", "size": 4439, "upload_time": "2019-01-23T13:40:29", "url": "https://files.pythonhosted.org/packages/19/1d/7dd12fa8c8027215bd37f0747ca2b88a21a63786a53cc7943be7d502e98b/bfa-1.0.tar.gz" } ], "1.0.1": [ { "comment_text": "", "digests": { "md5": "2712d013b814dd040c271075e660d072", "sha256": "d384a63de43194064d1ebfb1cd6e2d612197b4da685d9f402d4130323843241b" }, "downloads": -1, "filename": "bfa-1.0.1-py3-none-any.whl", "has_sig": false, "md5_digest": "2712d013b814dd040c271075e660d072", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">3, <4", "size": 7360, "upload_time": "2019-01-23T13:59:09", "url": "https://files.pythonhosted.org/packages/47/8e/2529abedc48dbfd46fa59b78cee42988d19bd549333a90138db214e2706d/bfa-1.0.1-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "db349c5a0dbd0904eee41e5997d36556", "sha256": "7538b44b95c399f579b748e8f03bc3a3805d5b82452ba320af2ffa8ab21dd4e6" }, "downloads": -1, "filename": "bfa-1.0.1.tar.gz", "has_sig": false, "md5_digest": "db349c5a0dbd0904eee41e5997d36556", "packagetype": "sdist", "python_version": "source", "requires_python": ">3, <4", "size": 4216, "upload_time": "2019-01-23T13:59:10", "url": "https://files.pythonhosted.org/packages/4b/9f/f570bb7c1f2abf396fc9de6d74bf8683382ab94461454af776ed9c30fe2a/bfa-1.0.1.tar.gz" } ], "1.0.2": [ { "comment_text": "", "digests": { "md5": "5fd0f21be3eeaa368bd9946e9160d2e4", "sha256": "17b7ef6c3a3fda7699b35b4b57c870fa0645b13e473511788aa51c34972d43a7" }, "downloads": -1, "filename": "bfa-1.0.2-py3-none-any.whl", "has_sig": false, "md5_digest": "5fd0f21be3eeaa368bd9946e9160d2e4", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">3, <4", "size": 9705, "upload_time": "2019-01-23T14:08:03", "url": "https://files.pythonhosted.org/packages/fa/9b/55dc3e8288aaa5f5de78e11d8fb2c3639738d59b654d97f33eff4de96cc7/bfa-1.0.2-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "38b79fcc31c9b620556e2b6541193966", "sha256": "c17b3b4dae95e01ed4bd4521024405bddc29b176e5f458139a8d08c8f99e92df" }, "downloads": -1, "filename": "bfa-1.0.2.tar.gz", "has_sig": false, "md5_digest": "38b79fcc31c9b620556e2b6541193966", "packagetype": "sdist", "python_version": "source", "requires_python": ">3, <4", "size": 4446, "upload_time": "2019-01-23T14:08:04", "url": "https://files.pythonhosted.org/packages/13/73/80e14eb36644e883258994301aec1cfe4b0ee310d0741bf2198395ab2f0b/bfa-1.0.2.tar.gz" } ], "1.1": [ { "comment_text": "", "digests": { "md5": "dc8fb88b43edd8e223f038085da0dad4", "sha256": "2c39e81557149ea1c438cf87e978c7c2053f433b1ee3d30036d29b0a4983b5a8" }, "downloads": -1, "filename": "bfa-1.1-py3-none-any.whl", "has_sig": false, "md5_digest": "dc8fb88b43edd8e223f038085da0dad4", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">3, <4", "size": 9667, "upload_time": "2019-01-24T11:37:56", "url": "https://files.pythonhosted.org/packages/fb/76/cb211ddd1436b35afbe5fef3abed7a67f8bc01ea07b95970ccafff3ea94d/bfa-1.1-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "da6bc055560a31374a8d017ebf38021d", "sha256": "57580cdb29f07091b37181b66172d0ee3e6a6dfbd23f14d6be2960b373a45ff2" }, "downloads": -1, "filename": "bfa-1.1.tar.gz", "has_sig": false, "md5_digest": "da6bc055560a31374a8d017ebf38021d", "packagetype": "sdist", "python_version": "source", "requires_python": ">3, <4", "size": 4416, "upload_time": "2019-01-24T11:37:57", "url": "https://files.pythonhosted.org/packages/40/6b/496b4c0fa547ea01859f9c8cc98e6e031b839a15a293a1893464437e7fb6/bfa-1.1.tar.gz" } ], "1.2": [ { "comment_text": "", "digests": { "md5": "178f1d2c74f4c26ff403498a74a6dae8", "sha256": "ca7b0ba1569b7a8b131a6a5a01b67db98322cc09836c53150d6b944aabf792b7" }, "downloads": -1, "filename": "bfa-1.2-py3-none-any.whl", "has_sig": false, "md5_digest": "178f1d2c74f4c26ff403498a74a6dae8", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3.5, <4", "size": 10637, "upload_time": "2019-01-26T12:26:57", "url": "https://files.pythonhosted.org/packages/b0/0b/d597018e24910737eff5cc6a68934cf9d3a41365e9eff08a90b06e5c44b7/bfa-1.2-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "f141bf4e7d1dc8ef74204c1578f5387a", "sha256": "f62ef0b3416f3c20c11a100505946bb8db1e85e3dc20b21b00908d2b1bc057c1" }, "downloads": -1, "filename": "bfa-1.2.tar.gz", "has_sig": false, "md5_digest": "f141bf4e7d1dc8ef74204c1578f5387a", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.5, <4", "size": 5258, "upload_time": "2019-01-26T12:26:59", "url": "https://files.pythonhosted.org/packages/d5/4f/69c76081c08d32d1e8e796b6881e600d85d0fe8d43f4a460d913e52aa440/bfa-1.2.tar.gz" } ], "1.2.1": [ { "comment_text": "", "digests": { "md5": "c20dcc13eeb34be8663a59b0100858b2", "sha256": "41000acfdbde688f0b94ba47bc0cc5ef9ccb34b949eb9630c155fd28c0bb2a87" }, "downloads": -1, "filename": "bfa-1.2.1-py3-none-any.whl", "has_sig": false, "md5_digest": "c20dcc13eeb34be8663a59b0100858b2", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3.5, <4", "size": 10719, "upload_time": "2019-01-27T13:10:40", "url": "https://files.pythonhosted.org/packages/04/b2/c291dc3ade1d570d05b25deaf2e0e5426f5ca36e8ba1b43ba31ca27be75e/bfa-1.2.1-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "634bddf5e2fd4b78716460e50faddec7", "sha256": "c0a204c6e3aec99ad9621962461e2ba174235025e89ba48adbe9599857fea85c" }, "downloads": -1, "filename": "bfa-1.2.1.tar.gz", "has_sig": false, "md5_digest": "634bddf5e2fd4b78716460e50faddec7", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.5, <4", "size": 5305, "upload_time": "2019-01-27T13:10:41", "url": "https://files.pythonhosted.org/packages/38/bf/e3a41541ca515f8308f6b93f0ab2bc0d0edc42ab0916c83bf46aa8f44d0d/bfa-1.2.1.tar.gz" } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "c20dcc13eeb34be8663a59b0100858b2", "sha256": "41000acfdbde688f0b94ba47bc0cc5ef9ccb34b949eb9630c155fd28c0bb2a87" }, "downloads": -1, "filename": "bfa-1.2.1-py3-none-any.whl", "has_sig": false, "md5_digest": "c20dcc13eeb34be8663a59b0100858b2", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3.5, <4", "size": 10719, "upload_time": "2019-01-27T13:10:40", "url": "https://files.pythonhosted.org/packages/04/b2/c291dc3ade1d570d05b25deaf2e0e5426f5ca36e8ba1b43ba31ca27be75e/bfa-1.2.1-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "634bddf5e2fd4b78716460e50faddec7", "sha256": "c0a204c6e3aec99ad9621962461e2ba174235025e89ba48adbe9599857fea85c" }, "downloads": -1, "filename": "bfa-1.2.1.tar.gz", "has_sig": false, "md5_digest": "634bddf5e2fd4b78716460e50faddec7", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.5, <4", "size": 5305, "upload_time": "2019-01-27T13:10:41", "url": "https://files.pythonhosted.org/packages/38/bf/e3a41541ca515f8308f6b93f0ab2bc0d0edc42ab0916c83bf46aa8f44d0d/bfa-1.2.1.tar.gz" } ] }