{ "info": { "author": "Anomaly Software", "author_email": "support@anomaly.net.au", "bugtrack_url": null, "classifiers": [ "Development Status :: 5 - Production/Stable", "Environment :: Web Environment", "Intended Audience :: Developers", "License :: OSI Approved", "License :: OSI Approved :: Apache Software License", "Natural Language :: English", "Operating System :: OS Independent", "Programming Language :: Python :: 2", "Programming Language :: Python :: 2.7", "Programming Language :: Python :: 3", "Programming Language :: Python :: 3.4", "Programming Language :: Python :: 3.5", "Programming Language :: Python :: 3.6", "Programming Language :: Python :: Implementation :: CPython", "Programming Language :: Python :: Implementation :: PyPy", "Topic :: Internet :: WWW/HTTP", "Topic :: Internet :: WWW/HTTP :: Session", "Topic :: Software Development :: Libraries :: Application Frameworks", "Topic :: Software Development :: Libraries :: Python Modules" ], "description": "vishnu\n======\n\nSessions for python WSGI applications.\n\n.. image:: https://img.shields.io/pypi/dm/vishnu.svg\n :target: https://pypi.python.org/pypi/vishnu\n :alt: Downloads\n\n.. image:: https://badge.fury.io/py/vishnu.svg\n :target: https://pypi.python.org/pypi/vishnu\n :alt: Latest Version\n\n.. image:: https://travis-ci.org/anomaly/vishnu.svg?branch=master&maxAge=2592000\n :target: https://travis-ci.org/anomaly/vishnu/\n :alt: build status\n\nFeatures\n--------\n\n- Cookie based session for python WSGI applications\n- Configurable for the following cookie settings\n - Domain\n - Path\n - Secure\n - HttpOnly\n - Expires (timeout)\n- Support for multiple backends\n - `Google App Engine Memcache `__\n - `Google App Engine NDB `__\n - `Python Memcached `__\n - `PyMemcache `__\n - `Redis `__\n- HMAC signature to verify cookie has not been tampered with\n- Autosave option which saves anytime a session value is modified\n- Optional Encryption of cookie data using AES\n- Custom timeout per session\n\nInstallation\n------------\n\nVishnu is available on `PyPi `_ and we recommend installation via ``pip``.\n\n.. code:: bash\n\n pip install vishnu\n\nThe following extra installations also exist which include the desired backend library as a requirement.\n\n.. code:: bash\n\n pip install vishnu[pymemcache]\n pip install vishnu[python-memcached]\n pip install vishnu[redis]\n\nIf you are working with Google App Engine we recommend installation via `pip` as a `vendored package `__.\n\n.. code:: bash\n\n pip install -t lib vishnu\n\nEdit the ``appengine_config.py`` file and provide your library directory to the ``vendor.add()`` method.\n\n.. code:: python\n\n from google.appengine.ext import vendor\n\n vendor.add('lib')\n\n\nAlternatively download your `preferred tagged release `__ and all you should have to include is the ``vishnu`` folder.\n\nConfiguration\n-------------\n\nSession Config\n~~~~~~~~~~~~~~\n\nThe following parameters are available for session configuration.\n\n+-----------------+----------+--------------+---------+-------------------------------------------------------------------------------------------------------+\n| parameter | required | default | type | description |\n+=================+==========+==============+=========+=======================================================================================================+\n| ``secret`` | yes | ``None`` | string | Secret used for HMAC signature, must be at least 32 characters. |\n+-----------------+----------+--------------+---------+-------------------------------------------------------------------------------------------------------+\n| ``cookie_name`` | no | ``vishnu`` | string | Name to use for cookie. |\n+-----------------+----------+--------------+---------+-------------------------------------------------------------------------------------------------------+\n| ``encrypt_key`` | no | ``None`` | string | Key used to encrypt cookie data, if omitted then data will not be encrypted. |\n+-----------------+----------+--------------+---------+-------------------------------------------------------------------------------------------------------+\n| ``secure`` | no | ``True`` | bool | Only send this cookie over SSL |\n+-----------------+----------+--------------+---------+-------------------------------------------------------------------------------------------------------+\n| ``domain`` | no | N/A | string | The domain to set the cookie for, it omitted will use domain cookie was served from. |\n+-----------------+----------+--------------+---------+-------------------------------------------------------------------------------------------------------+\n| ``path`` | no | ``/`` | string | The path to set the cookie for, if omitted it will default to ``/`` |\n+-----------------+----------+--------------+---------+-------------------------------------------------------------------------------------------------------+\n| ``http_only`` | no | ``True`` | string | A http-only cookie cannot be accessed by client-side APIs, such as JavaScript | \n+-----------------+----------+--------------+---------+-------------------------------------------------------------------------------------------------------+\n| ``auto_save`` | no | ``False`` | bool | Automatically save the session when a value is set. |\n+-----------------+----------+--------------+---------+-------------------------------------------------------------------------------------------------------+\n| ``timeout`` | no | N/A | integer | How long until session/cookie expires, it omitted it will last for the length of the browser session. |\n+-----------------+----------+--------------+---------+-------------------------------------------------------------------------------------------------------+\n| ``backend`` | yes | N/A | backend | See backends_ configuration |\n+-----------------+----------+--------------+---------+-------------------------------------------------------------------------------------------------------+\n\nExample of a session configuration.\n\n.. code:: python\n\n from vishnu.session import Config\n from vishnu.backend import Redis\n\n config = Config(\n secret=\"your_secret\",\n backend=Redis()\n )\n\nWSGI Middleware\n~~~~~~~~~~~~~~~\n\nTo use vishnu you must add it as a middleware to your WSGI application.\n\n.. code:: python\n\n from vishnu.backend import Redis\n from vishnu.middleware import SessionMiddleware\n from vishnu.session import Config\n\n\n my_config = Config(\n secret=\"your_secret\",\n backend=Redis()\n )\n\n app = SessionMiddleware(app=wsgi_app, config=my_config)\n\nBackends\n~~~~~~~~\n\nGoogle App Engine (memcache)\n............................\n\n.. code:: python\n\n from vishnu.backend import GoogleAppEngineMemcache\n\n config = Config(\n secret=\"your_secret\",\n backend=GoogleAppEngineMemcache()\n )\n\nGoogle App Engine (NDB)\n.......................\n\n.. code:: python\n\n from vishnu.backend import GoogleAppEngineNDB\n\n config = Config(\n secret=\"your_secret\",\n backend=GoogleAppEngineNDB()\n )\n\nPyMemcache\n..........\n\n+-----------+----------+---------------+---------+\n| parameter | required | default | type |\n+===========+==========+===============+=========+\n| ``host`` | no | ``localhost`` | string |\n+-----------+----------+---------------+---------+\n| ``port`` | no | ``11211`` | integer |\n+-----------+----------+---------------+---------+\n\n.. code:: python\n\n from vishnu.backend import PyMemcache\n\n config = Config(\n secret=\"your_secret\",\n backend=PyMemcache(host=\"memcache.host\", port=11222)\n )\n\nPythonMemcached\n...............\n\n+-----------+----------+---------------+---------+\n| parameter | required | default | type |\n+===========+==========+===============+=========+\n| ``host`` | no | ``localhost`` | string |\n+-----------+----------+---------------+---------+\n| ``port`` | no | ``11211`` | integer |\n+-----------+----------+---------------+---------+\n\n.. code:: python\n\n from vishnu.backend import PythonMemcached\n\n config = Config(\n secret=\"your_secret\",\n backend=PythonMemcached()\n )\n\nRedis\n.....\n\n+-----------+----------+---------------+---------+\n| parameter | required | default | type |\n+===========+==========+===============+=========+\n| ``host`` | no | ``localhost`` | string |\n+-----------+----------+---------------+---------+\n| ``port`` | no | ``6379`` | integer |\n+-----------+----------+---------------+---------+\n| ``db`` | no | ``0`` | integer |\n+-----------+----------+---------------+---------+\n\n.. code:: python\n\n from vishnu.backend import Redis\n\n config = Config(\n secret=\"your_secret\",\n backend=Redis(host=\"redis.host\", port=6421, db=0)\n )\n\nSetting a Custom Timeout\n~~~~~~~~~~~~~~~~~~~~~~~~\n\nEach session uses the default timeout specified in your server config but if you want to have particular sessions differ to this you can do the following.\n\n.. code:: python\n\n session = vishnu.get_session()\n session.timeout = 3600\n session.save()\n\nThe timeout is in seconds. To set the timeout to expire at the end of this session you can use the ``vishnu.session.TIMEOUT_SESSION`` constant.\n\n.. code:: python\n\n session = vishnu.get_session()\n session.timeout = vishnu.session.TIMEOUT_SESSION\n session.save()\n\nCleaning up Expired Sessions (Google App Engine NDB backend only)\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n\nAdd the following to a cron handler.\n\n.. code:: python\n\n from vishnu.util import gae_ndb_delete_expired_sessions\n\n while not gae_ndb_delete_expired_sessions():\n pass\n\nYou can alter the period after expired sessions are deleted by passing a value in seconds as ``dormant_for``. You can also alter the amount of sessions to delete per call using the ``limit`` argument.\n\n.. code:: python\n\n from vishnu.util import gae_ndb_delete_expired_sessions\n\n while not gae_ndb_delete_expired_sessions(dormant_for=3600, limit=100):\n pass\n", "description_content_type": "", "docs_url": null, "download_url": "https://github.com/anomaly/vishnu/archive/3.1.1.tar.gz", "downloads": { "last_day": -1, "last_month": -1, "last_week": -1 }, "home_page": "https://github.com/anomaly/vishnu.git", "keywords": "", "license": "Apache 2.0", "maintainer": "", "maintainer_email": "", "name": "vishnu", "package_url": "https://pypi.org/project/vishnu/", "platform": "any", "project_url": "https://pypi.org/project/vishnu/", "project_urls": { "Download": "https://github.com/anomaly/vishnu/archive/3.1.1.tar.gz", "Homepage": "https://github.com/anomaly/vishnu.git" }, "release_url": "https://pypi.org/project/vishnu/3.1.1/", "requires_dist": null, "requires_python": "", "summary": "Sessions for the Google App Engine Python runtime", "version": "3.1.1" }, "last_serial": 4353840, "releases": { "1.0.2": [ { "comment_text": "", "digests": { "md5": "b41cbeb7a8c83863a3652341a1f483a2", "sha256": "d32a7868227efdb0597f69892e9a4073082f148b9e9673a489bba42385f6d4ea" }, "downloads": -1, "filename": "vishnu-1.0.2-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "b41cbeb7a8c83863a3652341a1f483a2", "packagetype": "bdist_wheel", "python_version": "2.7", "requires_python": null, "size": 9735, "upload_time": "2016-09-17T23:19:16", "url": "https://files.pythonhosted.org/packages/19/e3/46cc8ed939a4c977080485432cc1e0f29454fac5c6196cbf4da310e26148/vishnu-1.0.2-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "fcc3d9623a8221a6fe17818e619c253a", "sha256": "3d10890d79e83d27e2561842a8e3aa99e0b8428f965ef5b927b3306403cbdfa7" }, "downloads": -1, "filename": "vishnu-1.0.2.tar.gz", "has_sig": false, "md5_digest": "fcc3d9623a8221a6fe17818e619c253a", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 6766, "upload_time": "2016-09-17T23:19:12", "url": "https://files.pythonhosted.org/packages/69/eb/13b0b83af76314cc7872d24a964bec3004cc5d394d03e0db3ebc4639d3bf/vishnu-1.0.2.tar.gz" } ], "1.0.3": [ { "comment_text": "", "digests": { "md5": "bf34003b961b8c02287d5cb134fb70b0", "sha256": "3dd8c74f02743b18b9667122b3555422b7fdad8fb7dab46e2ae91348dc86da82" }, "downloads": -1, "filename": "vishnu-1.0.3-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "bf34003b961b8c02287d5cb134fb70b0", "packagetype": "bdist_wheel", "python_version": "2.7", "requires_python": null, "size": 10570, "upload_time": "2016-09-19T06:35:59", "url": "https://files.pythonhosted.org/packages/1c/d7/8f33ef1c1aa844ee1c6774ae36f72a012803e359cabc520816287321005d/vishnu-1.0.3-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "bf42c89806aa997ee2a31e6f52b57a0e", "sha256": "275314b8bbf7201ca06ea8c2ab5b784189b36b516aaef66e6887b93c821e8285" }, "downloads": -1, "filename": "vishnu-1.0.3.tar.gz", "has_sig": false, "md5_digest": "bf42c89806aa997ee2a31e6f52b57a0e", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 7865, "upload_time": "2016-09-19T06:35:55", "url": "https://files.pythonhosted.org/packages/bd/d7/251c19456c45521ada083c39c571c527210160433ce34eab006232f0eceb/vishnu-1.0.3.tar.gz" } ], "1.0.4": [ { "comment_text": "", "digests": { "md5": "8eabb2c866cd466409af472a3e39e770", "sha256": "25b362928d6c320775670b82c033486fadd487ba12629e3bed3f2234880d66ad" }, "downloads": -1, "filename": "vishnu-1.0.4-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "8eabb2c866cd466409af472a3e39e770", "packagetype": "bdist_wheel", "python_version": "2.7", "requires_python": null, "size": 10576, "upload_time": "2017-01-16T03:38:45", "url": "https://files.pythonhosted.org/packages/65/09/9463d864b98a2326613877e2427105eb380526eaf1436557929001769e88/vishnu-1.0.4-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "48c7f66e1f7427897122ddad2aa6b817", "sha256": "b85b089df3bc231511b19299af94f67a31377175f4d5c18019784ed46110c5c8" }, "downloads": -1, "filename": "vishnu-1.0.4.tar.gz", "has_sig": false, "md5_digest": "48c7f66e1f7427897122ddad2aa6b817", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 7867, "upload_time": "2017-01-16T03:38:43", "url": "https://files.pythonhosted.org/packages/ad/90/78ff90111c106503337f671c6512d5fce1303950169fce240662787f1064/vishnu-1.0.4.tar.gz" } ], "2.0.0": [ { "comment_text": "", "digests": { "md5": "1e19681ea8f77897446837e99f83c8d3", "sha256": "bf40e2a279f24574514b1a79fe4c016f82f295a3c43416813fdc2dde12a455bf" }, "downloads": -1, "filename": "vishnu-2.0.0-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "1e19681ea8f77897446837e99f83c8d3", "packagetype": "bdist_wheel", "python_version": "2.7", "requires_python": null, "size": 32364, "upload_time": "2017-05-17T05:35:28", "url": "https://files.pythonhosted.org/packages/9a/39/04a131ffbf9bc17338e0ccf94e96423b998d470099b5533cf3e7a9e4cd8e/vishnu-2.0.0-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "113b1e482dcade567174244b18933487", "sha256": "f9d882190d6be11ab279293e4cf655ffb07912576fe1a7450442abc91bdf27c0" }, "downloads": -1, "filename": "vishnu-2.0.0.tar.gz", "has_sig": false, "md5_digest": "113b1e482dcade567174244b18933487", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 17338, "upload_time": "2017-05-17T05:35:25", "url": "https://files.pythonhosted.org/packages/7e/39/3f8da0d73b77d7ca93911b3ea03568a4402e9fa3c41850ff6ed9b07172f6/vishnu-2.0.0.tar.gz" } ], "2.0.1": [ { "comment_text": "", "digests": { "md5": "9d86c1afe744b55ef649cf90af4b7cb6", "sha256": "6fb5e62a3d2b580a36972aaa3a42a7da87801ca0638d7c36fc9ae364c67aaa17" }, "downloads": -1, "filename": "vishnu-2.0.1-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "9d86c1afe744b55ef649cf90af4b7cb6", "packagetype": "bdist_wheel", "python_version": "2.7", "requires_python": null, "size": 32392, "upload_time": "2017-07-25T01:06:01", "url": "https://files.pythonhosted.org/packages/11/43/358118b53963fb702b88be94df2fbb3999a94743a56acb985c56b784ff19/vishnu-2.0.1-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "9a8e326a7acfe30d8a1dc512d7431b97", "sha256": "2a0fa1c411526d1a6eb3ad46ee931fe466177d26397116ca64aa41c7b3319c5c" }, "downloads": -1, "filename": "vishnu-2.0.1.tar.gz", "has_sig": false, "md5_digest": "9a8e326a7acfe30d8a1dc512d7431b97", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 17353, "upload_time": "2017-07-25T01:05:58", "url": "https://files.pythonhosted.org/packages/66/2c/6d153a95b6addfaf1fa7b4c60516bfef86be6c6b7b033c1aa0c9b3b594cd/vishnu-2.0.1.tar.gz" } ], "3.0.0": [ { "comment_text": "", "digests": { "md5": "6723c20452c40185eb7c1bb49197bd20", "sha256": "9adab9ff47e37b2c284e6a2aa8545cef69f2d4df324aaafedc26d7c080f417a0" }, "downloads": -1, "filename": "vishnu-3.0.0-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "6723c20452c40185eb7c1bb49197bd20", "packagetype": "bdist_wheel", "python_version": "2.7", "requires_python": null, "size": 36724, "upload_time": "2017-08-27T22:57:13", "url": "https://files.pythonhosted.org/packages/1c/05/a5a44adc61045d9938e73e73a3271639c010d3c9141b8beeb5559db86fea/vishnu-3.0.0-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "4afbe047720018c4644faf71a590059e", "sha256": "1b8945863023c0e429d6f006854c3bc6d0e95194c00ca87c1587d041e6e27bfd" }, "downloads": -1, "filename": "vishnu-3.0.0.tar.gz", "has_sig": false, "md5_digest": "4afbe047720018c4644faf71a590059e", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 18705, "upload_time": "2017-08-27T22:57:09", "url": "https://files.pythonhosted.org/packages/08/e7/d1e3447989dff6984b5bce6094796b6f76c2b36bc9776928fb7f9b8f8fc6/vishnu-3.0.0.tar.gz" } ], "3.0.1": [ { "comment_text": "", "digests": { "md5": "e1900920c28b618b2e8e1cfef4589293", "sha256": "313f258f047c8df36d7d710af8fefd86e41d3dd24dbaae7c9f32f1e23a31fa9b" }, "downloads": -1, "filename": "vishnu-3.0.1-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "e1900920c28b618b2e8e1cfef4589293", "packagetype": "bdist_wheel", "python_version": "2.7", "requires_python": null, "size": 36738, "upload_time": "2017-11-02T00:51:39", "url": "https://files.pythonhosted.org/packages/64/44/080cd5a64a2b29d0cfdafe856762cc42535faf2b9f2af030730d96442210/vishnu-3.0.1-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "6fa62965f20142cb114d6ebc52f54c4d", "sha256": "9e50894382890f8977eb9ea85b7dfbe80e7a86a65e475361d4a51bdc8384f450" }, "downloads": -1, "filename": "vishnu-3.0.1.tar.gz", "has_sig": false, "md5_digest": "6fa62965f20142cb114d6ebc52f54c4d", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 18741, "upload_time": "2017-11-02T00:51:36", "url": "https://files.pythonhosted.org/packages/87/9b/c4af3857ad4efd88b4d0d38f4425b50bf773cdb238d0ce6421c662d6519f/vishnu-3.0.1.tar.gz" } ], "3.0.2": [ { "comment_text": "", "digests": { "md5": "d94f8bcb2c6d169d4fcaafcbbb42a787", "sha256": "f8bc5ec5dd6b0b200920cb9af7d6d41fe4306311eed3e9ccdfc5432011530f58" }, "downloads": -1, "filename": "vishnu-3.0.2-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "d94f8bcb2c6d169d4fcaafcbbb42a787", "packagetype": "bdist_wheel", "python_version": "2.7", "requires_python": null, "size": 36749, "upload_time": "2017-11-02T03:59:43", "url": "https://files.pythonhosted.org/packages/b4/41/2a34cb7e3ef2457bd0b541c516918fcacd0c8eb7790fafe3912d2840f1b0/vishnu-3.0.2-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "96985ebac35eaf8ae7310dad50e7c52c", "sha256": "7023c04a646401d7012f8396b491bcaf898bb4708aa59c64ec5ccf539df0b745" }, "downloads": -1, "filename": "vishnu-3.0.2.tar.gz", "has_sig": false, "md5_digest": "96985ebac35eaf8ae7310dad50e7c52c", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 18752, "upload_time": "2017-11-02T03:59:37", "url": "https://files.pythonhosted.org/packages/3e/0e/494e8f15fb632e415f6a6ccf75af62caf7b3b06cf1cb47662a0648070525/vishnu-3.0.2.tar.gz" } ], "3.0.3": [ { "comment_text": "", "digests": { "md5": "45e99e7c164284d5e5a3e864b8b72f5a", "sha256": "a14a8b90abf1b8368fe07758ce0923435c96911e5afd7cad5d9944c8cc152da2" }, "downloads": -1, "filename": "vishnu-3.0.3-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "45e99e7c164284d5e5a3e864b8b72f5a", "packagetype": "bdist_wheel", "python_version": "2.7", "requires_python": null, "size": 36761, "upload_time": "2018-07-16T05:14:31", "url": "https://files.pythonhosted.org/packages/de/fb/5c94e50c17eb8464c7106534201cf2e00ceb13f6c64133086d6b0262e7b6/vishnu-3.0.3-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "5cbbb4dd37afa751cc8d7944eecc7be5", "sha256": "8bba9acb22756fd31ef37a856ac84e44582764dbdb4e745acd17d0cd1675072b" }, "downloads": -1, "filename": "vishnu-3.0.3.tar.gz", "has_sig": false, "md5_digest": "5cbbb4dd37afa751cc8d7944eecc7be5", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 19350, "upload_time": "2018-07-16T05:14:29", "url": "https://files.pythonhosted.org/packages/79/ce/be9e8d9e1ba72d3d3221af249d257738df48de6635b433684f01fcc601f9/vishnu-3.0.3.tar.gz" } ], "3.1.0": [ { "comment_text": "", "digests": { "md5": "66e316853d1a5c298865e85509b278ac", "sha256": "e1e1d83c9b382bfdcdcf0db1120b3950872fb8420bfe5e2fc8c3e1cceed030d0" }, "downloads": -1, "filename": "vishnu-3.1.0-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "66e316853d1a5c298865e85509b278ac", "packagetype": "bdist_wheel", "python_version": "2.7", "requires_python": null, "size": 42664, "upload_time": "2018-10-08T03:30:48", "url": "https://files.pythonhosted.org/packages/c3/74/6305d1a074a0498000f7479704f6487860b3a0564f0896bb7d0297ea6d21/vishnu-3.1.0-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "fb5ece68eefd6a55ced964468aa85e22", "sha256": "2e4a475fb6ddc6c0d4e87fa28121b99de62bfe413cc9447c62921ae8b870a741" }, "downloads": -1, "filename": "vishnu-3.1.0.tar.gz", "has_sig": false, "md5_digest": "fb5ece68eefd6a55ced964468aa85e22", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 20837, "upload_time": "2018-10-08T03:30:45", "url": "https://files.pythonhosted.org/packages/b7/a1/83fb31204140882d1aa278327ad3906f155a1728b92c501873f65546a49f/vishnu-3.1.0.tar.gz" } ], "3.1.1": [ { "comment_text": "", "digests": { "md5": "e8e1340c6db5061d7fe54b2276b0cbad", "sha256": "f9f32dc959da900c0381cae327be9253f2ff396fa918cb6d86d3e6a96999b893" }, "downloads": -1, "filename": "vishnu-3.1.1-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "e8e1340c6db5061d7fe54b2276b0cbad", "packagetype": "bdist_wheel", "python_version": "2.7", "requires_python": null, "size": 42917, "upload_time": "2018-10-08T23:30:07", "url": "https://files.pythonhosted.org/packages/2f/c8/24ad499f201ca075d5017e27e9921eaa16306e4d95cbde6f7f686edba9d3/vishnu-3.1.1-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "b42a9c29e90169f9362cd13281a501d6", "sha256": "787f3d415e246f1c3eef7d65f51066ea730944f1bc31c158405d40ec4bb4a751" }, "downloads": -1, "filename": "vishnu-3.1.1.tar.gz", "has_sig": false, "md5_digest": "b42a9c29e90169f9362cd13281a501d6", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 21190, "upload_time": "2018-10-08T23:30:05", "url": "https://files.pythonhosted.org/packages/38/f5/d683412982d02655d4c7d6207cb1d0a691a340c3473e8ec195d803db897b/vishnu-3.1.1.tar.gz" } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "e8e1340c6db5061d7fe54b2276b0cbad", "sha256": "f9f32dc959da900c0381cae327be9253f2ff396fa918cb6d86d3e6a96999b893" }, "downloads": -1, "filename": "vishnu-3.1.1-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "e8e1340c6db5061d7fe54b2276b0cbad", "packagetype": "bdist_wheel", "python_version": "2.7", "requires_python": null, "size": 42917, "upload_time": "2018-10-08T23:30:07", "url": "https://files.pythonhosted.org/packages/2f/c8/24ad499f201ca075d5017e27e9921eaa16306e4d95cbde6f7f686edba9d3/vishnu-3.1.1-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "b42a9c29e90169f9362cd13281a501d6", "sha256": "787f3d415e246f1c3eef7d65f51066ea730944f1bc31c158405d40ec4bb4a751" }, "downloads": -1, "filename": "vishnu-3.1.1.tar.gz", "has_sig": false, "md5_digest": "b42a9c29e90169f9362cd13281a501d6", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 21190, "upload_time": "2018-10-08T23:30:05", "url": "https://files.pythonhosted.org/packages/38/f5/d683412982d02655d4c7d6207cb1d0a691a340c3473e8ec195d803db897b/vishnu-3.1.1.tar.gz" } ] }