{ "info": { "author": "Wei Ren", "author_email": "renwei2004@gmail.com", "bugtrack_url": null, "classifiers": [ "Development Status :: 4 - Beta", "Intended Audience :: Developers", "License :: OSI Approved :: Apache Software License", "Programming Language :: Python :: 3.6", "Topic :: Database :: Database Engines/Servers" ], "description": "pytwis\n======\n\n|Build Status|\n\nThis package contains two modules ``pytwis`` and ``pytwis_clt`` where\n\n- ``pytwis`` is a Twitter-toy-clone backend using Redis;\n- ``pytwis_clt`` is a command-line tool which uses ``pytwis`` to\n interact with the Redis database of the Twitter-toy clone.\n\nTo install this package,\n\n.. code:: bash\n\n $ pip install pytwis\n\nNote that\n\n- **This package requires Python 3.6 and later** since it depends on\n Python 3.6 built-in module\n `secrets `__.\n- There is a breaking change introduced in v0.4.0: the salted password\n hashes are stored in the Redis database instead of the plain-text\n passwords, so the Redis database created by the version before v0.4.0\n won\u2019t work with the version v0.4.0 and after unless a manual database\n migration is done.\n\nTable of Contents\n=================\n\n- `1. pytwis <#1-pytwis>`__\n\n - `1.1 Introduction <#11-introduction>`__\n - `1.2 Sample usage <#12-sample-usage>`__\n\n- `2. pytwis_clt <#2-pytwis_clt>`__\n\n - `2.1. Connect to Redis <#21-connect-to-redis>`__\n\n - `2.1.1. Connect to the local Redis server at the default port\n 6379 with no\n password. <#211-connect-to-the-local-redis-server-at-the-default-port-6379-with-no-password>`__\n - `2.1.2. Connect to the local Redis server via the socket file\n /tmp/redis.sock with password\n zzzzzz. <#212-connect-to-the-local-redis-server-via-the-socket-file-tmpredissock-with-password-zzzzzz>`__\n - `2.1.3 Connect to a remote Redis server with IP =\n xxx.xxx.xxx.xxx at port yyyy with password\n zzzzzz. <#213-connect-to-a-remote-redis-server-with-ip--xxxxxxxxxxxx-at-port-yyyy-with-password-zzzzzz>`__\n\n - `2.2. Available commands <#22-available-commands>`__\n\n - `2.2.1. register <#221-register>`__\n - `2.2.2. login <#222-login>`__\n - `2.2.3. logout <#223-logout>`__\n - `2.2.4. changepwd <#224-changepwd>`__\n - `2.2.5. userprofile <#225-userprofile>`__\n - `2.2.6. follow <#226-follow>`__\n - `2.2.7. unfollow <#227-unfollow>`__\n - `2.2.8. followers <#228-followers>`__\n - `2.2.9. followings <#229-followings>`__\n - `2.2.10. post <#2210-post>`__\n - `2.2.11. timeline <#2211-timeline>`__\n - `2.2.12. tweetsby <#2212-tweetsby>`__\n - `2.2.13. exit or quit <#2213-exit-or-quit>`__\n\n- `3. PEP8 <#3-pep8>`__\n- `4. Unit test <#4-unit-test>`__\n- `5. Documentation <#5-documentation>`__\n\n - `5.1. Sphinx <#51-sphinx>`__\n - `5.2. README.rst <#52-readmerst>`__\n\n.. _pytwis-1:\n\n1. ``pytwis``\n=============\n\n1.1 Introduction\n----------------\n\nThis module implements the backend for a simplified Twitter clone based\non Redis. We follow the Redis tutorial\n(https://redis.io/topics/twitter-clone) to design the data layout of the\nRedis database.\n\nIt supports the following features:\n\n- Register new users\n- Log in/out\n- Change user password\n- Get user profile\n- Post tweets\n- Follower/Following\n- General timeline for anonymous user\n- User timeline\n- Get tweets posted by one user\n\nTODOs:\n\n- Search users\n- Delete a user\n- Recover user password\n- #hashtags\n- @mentions\n- Retweets\n- Replies\n- Conversations\n- Edit/Delete tweets\n- And more\n\n1.2 Sample usage\n----------------\n\nBelow is a sample usage of this module. You can find a more detailed\nexample in the module ``pytwis_clt``.\n\n.. code:: python\n\n import pytwis\n\n # Connect to the Redis server by creating a Pytwis instance. \n twis = pytwis.Pytwis()\n\n # You may specify the hostname, the port, the database index, and the password of the Redis server as keyword arguments.\n twis = pytwis.Pytwis(hostname='127.0.0.1', port=6379, db=0, password='password')\n\n # For all the following operations, if succeeded is False, check result['error'] for the error string.\n\n # Register a new user.\n succeeded, result = twis.register('username', 'password')\n\n # Log into the user. If succeeded is True, result['auth'] will contain the authentication secret.\n succeeded, result = twis.login('username', 'password')\n if succeeded:\n auth_secret = result['auth']\n\n # Post a tweet. \n succeeded, result = twis.post_tweet(auth_secret, 'A tweet')\n\n # Get the general timeline. Note that we are passing an empty authentication secret and '-1' as the second \n # input parameter to get all the tweets in the general timeline. \n # If succeeded is True, result['tweets'] will contain a list of tweets.\n succeeded, result = twis.get_timeline('', -1)\n\n # Get the user timeline. Note that the second input parameter 100 specifies the maximum number of tweets \n # that will be included in the general timeline.\n succeeded, result = twis.get_timeline(auth_secret, 100)\n\n # Get the tweets posted by a user. Note that this user may be different from the currently logged-in user.\n # If succeeded is True, result['tweets'] will contain a list of tweets.\n succeeded, result = twis.get_user_tweets(auth_secret, 'username', -1)\n\n # Follow a user.\n succeeded, result = twis.follow(auth_secret, 'followee_username')\n\n # Unfollow a user.\n succeeded, result = twis.unfollow(auth_secret, 'followee_username')\n\n # Get the follower list. If succeeded is True, result['follower_list'] will contain the follower list.\n succeeded, result = twis.get_followers(auth_secret)\n\n # Get the following list. If succeeded is True, result['following_list'] will contain the following list.\n succeeded, result = twis.get_followings(auth_secret)\n\n # Change the user password. If succeeded is True, result['auth'] will contain the new authentication secret.\n succeeded, result = twis.change_password(auth_secret, 'password', 'new_password')\n\n # Get the user profile. If succeeded is True, result['username'] will contain the username, result['password'] \n # will contain the password, and result['auth'] will contain the authentication secret.\n succeeded, result = twis.get_user_profile(auth_secret)\n\n # Log out of the user.\n succeeded, result = twis.logout(auth_secret)\n\n2. ``pytwis_clt``\n=================\n\nAfter you install the package, you will be able to launch ``pytwis_clt``\nas a console command. To get the help information,\n\n.. code:: bash\n\n $ pytwis_clt -h\n $ pytwis_clt --help\n\n2.1. Connect to Redis\n---------------------\n\n2.1.1. Connect to the local Redis server at the default port 6379 with no password.\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n\n.. code:: bash\n\n $ ./pytwis_clt.py \n\n2.1.2. Connect to the local Redis server via the socket file ``/tmp/redis.sock`` with password zzzzzz.\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n\nMake sure that the unixsocket parameter is defined in your redis.conf\nfile. It\u2019s commented out by default.\n\n.. code:: bash\n\n $ ./pytwis_clt.py -s /tmp/redis.sock -a zzzzzz\n\n2.1.3 Connect to a remote Redis server with IP = xxx.xxx.xxx.xxx at port yyyy with password zzzzzz.\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n\n.. code:: bash\n\n $ ./pytwis_clt.py -h xxx.xxx.xxx.xxx -p yyyy -a zzzzzz\n\n2.2. Available commands\n-----------------------\n\nAfter successfully connecting to the twitter clone, you can try the\nfollowing commands in ``pytwis_clt``.\n\n2.2.1. ``register``\n~~~~~~~~~~~~~~~~~~~\n\nRegister a new user ``xxxxxx`` with password ``yyyyyy``.\n\n.. code:: bash\n\n 127.0.0.1:6379> register xxxxxx yyyyyy\n\n2.2.2. ``login``\n~~~~~~~~~~~~~~~~\n\nLog into a user ``xxxxxxx`` with password ``yyyyyy``.\n\n.. code:: bash\n\n 127.0.0.1:6379> login xxxxxx yyyyyy\n\n2.2.3. ``logout``\n~~~~~~~~~~~~~~~~~\n\nLog out of the current user.\n\n.. code:: bash\n\n 127.0.0.1:6379> logout\n\n2.2.4. ``changepwd``\n~~~~~~~~~~~~~~~~~~~~\n\nChange the password. Assume that the old password is ``yyyyyy`` and the\nnew password is ``zzzzzz``.\n\n.. code:: bash\n\n 127.0.0.1:6379> changepwd yyyyyy zzzzzz zzzzzz\n\n2.2.5. ``userprofile``\n~~~~~~~~~~~~~~~~~~~~~~\n\nGet the profile of the currently logged-in user.\n\n.. code:: bash\n\n 127.0.0.1:6379> userprofile\n\n2.2.6. ``follow``\n~~~~~~~~~~~~~~~~~\n\nFollow a user ``xxxxxx``.\n\n.. code:: bash\n\n 127.0.0.1:6379> follow xxxxxx\n\n2.2.7. ``unfollow``\n~~~~~~~~~~~~~~~~~~~\n\nUnfollow a user ``xxxxxx``.\n\n.. code:: bash\n\n 127.0.0.1:6379> unfollow xxxxxx\n\n2.2.8. ``followers``\n~~~~~~~~~~~~~~~~~~~~\n\nGet the follower list of the current user.\n\n.. code:: bash\n\n 127.0.0.1:6379> followers\n\n2.2.9. ``followings``\n~~~~~~~~~~~~~~~~~~~~~\n\nGet the following list of the current user.\n\n.. code:: bash\n\n 127.0.0.1:6379> followings\n\n2.2.10. ``post``\n~~~~~~~~~~~~~~~~\n\nPost a tweet.\n\n.. code:: bash\n\n 127.0.0.1:6379> post \n\n2.2.11. ``timeline``\n~~~~~~~~~~~~~~~~~~~~\n\nGet the general/user timeline. It will return the user timeline if a\nuser is logged in and will return the general timeline otherwise. Also,\nit will return all the tweets in the timeline if max-tweet-count is not\nspecified.\n\n.. code:: bash\n\n 127.0.0.1:6379> timeline [max-tweet-count]\n\n2.2.12. ``tweetsby``\n~~~~~~~~~~~~~~~~~~~~\n\nGet the tweets posted by a user. It will return the tweets posted by the\ncurrent logged-in user if no username is specified. Also, it will return\nall the tweets posted by the user if max-tweet-count is not specified.\n\n.. code:: bash\n\n 127.0.0.1:6379> tweetsby [username] [max-tweet-count]\n\n2.2.13. ``exit`` or ``quit``\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n\nExit the console program.\n\n.. code:: bash\n\n 127.0.0.1:6379> exit\n 127.0.0.1:6379> quit\n\nNote that some of the above commands have to be executed after a\nsuccessful log-in.\n\n- logout\n- changepassword\n- userprofile\n- follow\n- unfollow\n- followers\n- followings\n- post\n- tweetsby\n\n3. PEP8\n=======\n\nWe use ``pylint`` to enforce the Python Style Guide PEP8.\n\n.. code:: bash\n\n $ pylint pytwis\n $ pylint tests\n\nWe have fixed all the convention violations, warnings, and errors in the\npackages ``pytwis`` and ``tests``. We will address the refactor\nrecommendations made by ``pylint`` later (see issue #8).\n\n4. Unit test\n============\n\nSince this unit test requires a running local Redis server, it is in\nfact a small integration test. To run the test,\n\n.. code:: bash\n\n $ make test\n\n5. Documentation\n================\n\n5.1. ``Sphinx``\n---------------\n\nTo generate the ``Sphinx`` HTML documentation,\n\n.. code:: bash\n\n $ make docs\n\n5.2. README.rst\n---------------\n\nREADME.rst is generated from README.md via ``pandoc``.\n\n.. code:: bash\n\n $ pandoc --from=markdown --to=rst --output=README.rst README.md\n\n.. |Build Status| image:: https://travis-ci.org/renweizhukov/pytwis.svg?branch=master\n :target: https://travis-ci.org/renweizhukov/pytwis\n\n\n", "description_content_type": "", "docs_url": null, "download_url": "", "downloads": { "last_day": -1, "last_month": -1, "last_week": -1 }, "home_page": "https://renweizhukov.github.io/pytwis", "keywords": "redis twitter python3.6", "license": "", "maintainer": "", "maintainer_email": "", "name": "pytwis", "package_url": "https://pypi.org/project/pytwis/", "platform": "", "project_url": "https://pypi.org/project/pytwis/", "project_urls": { "Bug Reports": "https://github.com/renweizhukov/pytwis/issues", "Documentation": "https://renweizhukov.github.io/pytwis", "Homepage": "https://renweizhukov.github.io/pytwis", "Source": "https://github.com/renweizhukov/pytwis" }, "release_url": "https://pypi.org/project/pytwis/0.5.1/", "requires_dist": [ "parse", "redis", "setuptools", "Werkzeug", "coverage; extra == 'test'" ], "requires_python": ">=3.6", "summary": "A twitter-toy-clone backend using Python and Redis", "version": "0.5.1" }, "last_serial": 3946719, "releases": { "0.1.0": [ { "comment_text": "", "digests": { "md5": "04ee0b2ed577dcc3a32ec716bbe1dea0", "sha256": "d6484ebc904e7f72cbc3715f15e4d3d6d8459556b58d6eb19d8c058b2dd59dfd" }, "downloads": -1, "filename": "pytwis-0.1.0-py3.6.egg", "has_sig": false, "md5_digest": "04ee0b2ed577dcc3a32ec716bbe1dea0", "packagetype": "bdist_egg", "python_version": "3.6", "requires_python": ">=3.6", "size": 28145, "upload_time": "2018-03-14T23:50:52", "url": "https://files.pythonhosted.org/packages/e4/34/7cb4f18ec238fcbf5924ce1bed836bab7bd2a75017a36b52cf3a67d508e3/pytwis-0.1.0-py3.6.egg" }, { "comment_text": "", "digests": { "md5": "cd3d29be302867bb04c3788e8661bbbf", "sha256": "67cf09337ec7ebadd14992789fcf82f49362f2df3a7b260fb0f536c989701816" }, "downloads": -1, "filename": "pytwis-0.1.0-py3-none-any.whl", "has_sig": false, "md5_digest": "cd3d29be302867bb04c3788e8661bbbf", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3.6", "size": 14936, "upload_time": "2018-03-14T23:50:50", "url": "https://files.pythonhosted.org/packages/00/07/68619160992dc2ff20973a7847906745d4eaeb8b6ff637caf6cebabf12e5/pytwis-0.1.0-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "bc27d8bcc5fd68ed7983d5d892257d10", "sha256": "5b51139afa4970f0284ca397195c9f5c4c301cb89d0de615689546000ce4eec6" }, "downloads": -1, "filename": "pytwis-0.1.0.tar.gz", "has_sig": false, "md5_digest": "bc27d8bcc5fd68ed7983d5d892257d10", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.6", "size": 15984, "upload_time": "2018-03-14T23:50:53", "url": "https://files.pythonhosted.org/packages/56/35/58eaa5536e7deea342b67b11818d9f78aa43dfb20f2ca01d8a563c033ac7/pytwis-0.1.0.tar.gz" } ], "0.1.1": [ { "comment_text": "", "digests": { "md5": "fd1a99d98d830eab25e60d260d5eecf3", "sha256": "a7c7cf099ef272d53a782ebf7272270a0bf8ea21bb21ada64f9d111e7a5c5e2a" }, "downloads": -1, "filename": "pytwis-0.1.1-py3-none-any.whl", "has_sig": false, "md5_digest": "fd1a99d98d830eab25e60d260d5eecf3", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3.6", "size": 15122, "upload_time": "2018-03-15T01:16:58", "url": "https://files.pythonhosted.org/packages/70/e3/35e584910ee5723f7bbbcb3801da12e35b7434162314f61cf9e11624d14a/pytwis-0.1.1-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "80097ed6680eda512e02ec903afd147f", "sha256": "4ad7c1f57793ac084e0d34a97fc1d0f28cc4f8af01a3733b48f5ed27f00ad736" }, "downloads": -1, "filename": "pytwis-0.1.1.tar.gz", "has_sig": false, "md5_digest": "80097ed6680eda512e02ec903afd147f", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.6", "size": 16094, "upload_time": "2018-03-15T01:16:59", "url": "https://files.pythonhosted.org/packages/72/36/8e5272472c0d9e45c33fe45a069a59088a381352899dd9996bcbe768da49/pytwis-0.1.1.tar.gz" } ], "0.1.2": [ { "comment_text": "", "digests": { "md5": "fe8fda972eb4f109c336bd3ba1223149", "sha256": "0bf3298e4a8f4fdb3b89e76f27a06c977d025ea5d82d45c6ac7c06aa37378083" }, "downloads": -1, "filename": "pytwis-0.1.2-py3-none-any.whl", "has_sig": false, "md5_digest": "fe8fda972eb4f109c336bd3ba1223149", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3.6", "size": 15157, "upload_time": "2018-03-15T01:27:08", "url": "https://files.pythonhosted.org/packages/e6/0c/4919f1ab01ce697ac5ab67e7c11a17501eb9ef4d0800a675ec91a5a75c83/pytwis-0.1.2-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "cf60f503da77bbbb0633653f2856ad8c", "sha256": "aebf093b19fc94fffd465e7c846ed1812dad1c7ea9e4a5d3bdf8e2d73b6c00ac" }, "downloads": -1, "filename": "pytwis-0.1.2.tar.gz", "has_sig": false, "md5_digest": "cf60f503da77bbbb0633653f2856ad8c", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.6", "size": 16099, "upload_time": "2018-03-15T01:27:09", "url": "https://files.pythonhosted.org/packages/15/e1/fa9dc18258dd9972cfdcfb5e41d9c7b6faa2bd7af69ac20e36b644307329/pytwis-0.1.2.tar.gz" } ], "0.2.0": [ { "comment_text": "", "digests": { "md5": "c7d8df8491c8e5591ebfecedd1239bf1", "sha256": "56aebb725da351a9e1e5fefa12b398f4b78806ae1b7938dc31224e594c858048" }, "downloads": -1, "filename": "pytwis-0.2.0-py3-none-any.whl", "has_sig": false, "md5_digest": "c7d8df8491c8e5591ebfecedd1239bf1", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3.6", "size": 14993, "upload_time": "2018-03-16T07:28:02", "url": "https://files.pythonhosted.org/packages/c5/e8/c7f94b6292881084cd47603c258642fcd30fad1b28fae2e30574a4e93b7b/pytwis-0.2.0-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "9604ce5acddff4362354c3bd8bf3b1d4", "sha256": "d4dbc284f963aafd76484d38ceadd9410d7ea1436521f531c7938c52373c9b1b" }, "downloads": -1, "filename": "pytwis-0.2.0.tar.gz", "has_sig": false, "md5_digest": "9604ce5acddff4362354c3bd8bf3b1d4", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.6", "size": 16485, "upload_time": "2018-03-16T07:28:04", "url": "https://files.pythonhosted.org/packages/91/2d/e70c3cf398dc8a94eed5916f68ed69f4ec9fb07a933ea7958614015a3919/pytwis-0.2.0.tar.gz" } ], "0.3.0": [ { "comment_text": "", "digests": { "md5": "19bc04317d4d5f227758ebf3aa20973e", "sha256": "1932712c6796cdf7f9237284a886a3de4b82994f6cbce91aae50d3bd6eb2590c" }, "downloads": -1, "filename": "pytwis-0.3.0-py3-none-any.whl", "has_sig": false, "md5_digest": "19bc04317d4d5f227758ebf3aa20973e", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3.6", "size": 15327, "upload_time": "2018-03-21T09:05:48", "url": "https://files.pythonhosted.org/packages/f5/79/a51070f7ad4efac8e161395730c6ee4b7e17b21231b0761b38f57f0e364d/pytwis-0.3.0-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "89707fe6ad00f7f3c33f94384a143d2c", "sha256": "c4a026419bb48eabab1b7c152b2f79ad99a2e414f6eabf1d7f6ad307980f04a0" }, "downloads": -1, "filename": "pytwis-0.3.0.tar.gz", "has_sig": false, "md5_digest": "89707fe6ad00f7f3c33f94384a143d2c", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.6", "size": 16780, "upload_time": "2018-03-21T09:05:50", "url": "https://files.pythonhosted.org/packages/1f/6d/c46a538eeab9ea6944cbb4a040ddbe001fb488927410192a61bd35206312/pytwis-0.3.0.tar.gz" } ], "0.3.1": [ { "comment_text": "", "digests": { "md5": "f9877959683c9bf78510eb220e100662", "sha256": "12014b1adefc107022c6c90fec4d2634258ba7af4dbae841b6a47d78bedb42c6" }, "downloads": -1, "filename": "pytwis-0.3.1-py3-none-any.whl", "has_sig": false, "md5_digest": "f9877959683c9bf78510eb220e100662", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3.6", "size": 16231, "upload_time": "2018-03-22T07:49:14", "url": "https://files.pythonhosted.org/packages/06/01/f99fe7a60cce5706926b32385e605b33ca71a72a98009a6ff793d8d9dee8/pytwis-0.3.1-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "739a68106f36a9e8edeac09677c76391", "sha256": "8b1bcac5fa2efb73216248b4198d1c35b76264db46886083bc7286c9b6badef9" }, "downloads": -1, "filename": "pytwis-0.3.1.tar.gz", "has_sig": false, "md5_digest": "739a68106f36a9e8edeac09677c76391", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.6", "size": 17645, "upload_time": "2018-03-22T07:49:15", "url": "https://files.pythonhosted.org/packages/fc/8b/f34298828d0fb133236470ba91110e488792c78f86c5416a86c2bd9a70b7/pytwis-0.3.1.tar.gz" } ], "0.3.2": [ { "comment_text": "", "digests": { "md5": "e447ef1c12dffdde97e279833b1d7d0f", "sha256": "acfa09ff4b4b9d40693683b3c46f7c8a29d8f8d9ef53819f38a1a830d33569fc" }, "downloads": -1, "filename": "pytwis-0.3.2-py3-none-any.whl", "has_sig": false, "md5_digest": "e447ef1c12dffdde97e279833b1d7d0f", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3.6", "size": 17415, "upload_time": "2018-03-30T07:46:18", "url": "https://files.pythonhosted.org/packages/ee/e4/f5a9bd9342ac2626655b13f4a540516ceee3f8ff484194498fb4b9470d69/pytwis-0.3.2-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "7d31ffbe7d6b26c261c4c5187d2b5bb3", "sha256": "2a929dcfc8716d8e830eb41ba1ba617260ec16bcbca4cc1c68be63ae5223039b" }, "downloads": -1, "filename": "pytwis-0.3.2.tar.gz", "has_sig": false, "md5_digest": "7d31ffbe7d6b26c261c4c5187d2b5bb3", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.6", "size": 19116, "upload_time": "2018-03-30T07:46:19", "url": "https://files.pythonhosted.org/packages/69/47/57823be112abd4c897a3af6054ab87d4882559d1bbb0679a79095a1d613c/pytwis-0.3.2.tar.gz" } ], "0.3.3": [ { "comment_text": "", "digests": { "md5": "009a0dec1f851c5c7311350d717b7bbc", "sha256": "36944628d47831efd0d881294a6a2a6f0d8ec6299df09958af26864fac06369b" }, "downloads": -1, "filename": "pytwis-0.3.3-py3-none-any.whl", "has_sig": false, "md5_digest": "009a0dec1f851c5c7311350d717b7bbc", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3.6", "size": 17416, "upload_time": "2018-03-30T08:00:11", "url": "https://files.pythonhosted.org/packages/1d/7e/d403060f773c73852c6768dc779ecebb38a8d27193a4de93f7db343f524f/pytwis-0.3.3-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "3a826575e0ebe0b252c4741b36f4208b", "sha256": "92d90085f2732655a35900816318fd3798fb5e2a018dbda6a63d0fb4c297788e" }, "downloads": -1, "filename": "pytwis-0.3.3.tar.gz", "has_sig": false, "md5_digest": "3a826575e0ebe0b252c4741b36f4208b", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.6", "size": 19111, "upload_time": "2018-03-30T08:00:12", "url": "https://files.pythonhosted.org/packages/43/0a/cd48eeb19aac1ede55a59998ef54ba7a34b277e60e46d0e52fdd6028030f/pytwis-0.3.3.tar.gz" } ], "0.4.0": [ { "comment_text": "", "digests": { "md5": "cce03728a4fd4c82d18c20503fff4d0e", "sha256": "a7c3127f5cda15c26ec9bfaa79ec819fb7daf53775fc2c162e48fe03ea20878a" }, "downloads": -1, "filename": "pytwis-0.4.0-py3-none-any.whl", "has_sig": false, "md5_digest": "cce03728a4fd4c82d18c20503fff4d0e", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3.6", "size": 15162, "upload_time": "2018-04-06T19:06:29", "url": "https://files.pythonhosted.org/packages/60/42/2e8ff156bc91b76ceceb33b2714cfeb47b6893a62b96152bb5169d6e8e54/pytwis-0.4.0-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "b430b4e8a82d4c311d76aa448396c566", "sha256": "cfb5014f565cd2986118a2c1198291e4fa2a748661c4b04dc141d46c5bc07acf" }, "downloads": -1, "filename": "pytwis-0.4.0.tar.gz", "has_sig": false, "md5_digest": "b430b4e8a82d4c311d76aa448396c566", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.6", "size": 20360, "upload_time": "2018-04-06T19:06:30", "url": "https://files.pythonhosted.org/packages/60/a2/aa233b2fde29c089051f5565c5fba19ef3b65fd13fb49f2fca594c8e0a0e/pytwis-0.4.0.tar.gz" } ], "0.4.1": [ { "comment_text": "", "digests": { "md5": "d9dabbc59ecff17e67c3d0ebf0ba9780", "sha256": "771a57caa4acb29af93318c07368d762d89129e26f498cd32a0468d88da5cbaf" }, "downloads": -1, "filename": "pytwis-0.4.1-py3-none-any.whl", "has_sig": false, "md5_digest": "d9dabbc59ecff17e67c3d0ebf0ba9780", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3.6", "size": 15233, "upload_time": "2018-04-11T20:43:19", "url": "https://files.pythonhosted.org/packages/16/e2/0b75161b75a0573dd1ab6527f9217b1dfcbb9e1eb3534e63e5050bc61160/pytwis-0.4.1-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "fb9149e1103880c2bf252150057d2b64", "sha256": "64d9c0707027b24abf574cfc95a32b2fcd00465402736eec71b5ed550e3dcc16" }, "downloads": -1, "filename": "pytwis-0.4.1.tar.gz", "has_sig": false, "md5_digest": "fb9149e1103880c2bf252150057d2b64", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.6", "size": 20429, "upload_time": "2018-04-11T20:43:20", "url": "https://files.pythonhosted.org/packages/fc/fe/954daae65da29a91fd08f505da21e1603c19b737459662a3a82e502ecd6f/pytwis-0.4.1.tar.gz" } ], "0.4.2": [ { "comment_text": "", "digests": { "md5": "d074eb528ea11bf8aed8e5df1f765262", "sha256": "fbe22f699e8b0cb37a7f30c2a44bfb5ee8b3ff4177caee79648171f8b5635f51" }, "downloads": -1, "filename": "pytwis-0.4.2-py3-none-any.whl", "has_sig": false, "md5_digest": "d074eb528ea11bf8aed8e5df1f765262", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3.6", "size": 15233, "upload_time": "2018-04-11T21:18:52", "url": "https://files.pythonhosted.org/packages/e1/46/07d5e0d5a784599932a0ce84a60f5ce86d4585266432f7ef1c26f96dba27/pytwis-0.4.2-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "d006f397a955208a736bc928244cb46c", "sha256": "14697877201191862f6d8f26208e3638fcea3fdf87fa19ecc35d1a8846c60c11" }, "downloads": -1, "filename": "pytwis-0.4.2.tar.gz", "has_sig": false, "md5_digest": "d006f397a955208a736bc928244cb46c", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.6", "size": 20427, "upload_time": "2018-04-11T21:18:53", "url": "https://files.pythonhosted.org/packages/53/6c/9bc991426dc5820a74692143285187ac103576cda94bf8124b1e54e97c39/pytwis-0.4.2.tar.gz" } ], "0.5.0": [ { "comment_text": "", "digests": { "md5": "18a2bab5b5f8d55aedd3bbd86ab46b9c", "sha256": "2d9edc4634361b9f26653b1bbe5c8b806207f304134f67c9b3b8eaaf090167ab" }, "downloads": -1, "filename": "pytwis-0.5.0-py3-none-any.whl", "has_sig": false, "md5_digest": "18a2bab5b5f8d55aedd3bbd86ab46b9c", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3.6", "size": 16555, "upload_time": "2018-06-07T21:52:40", "url": "https://files.pythonhosted.org/packages/4b/52/953599659f711d8bf65bbb1a1f147da552fdc47e0c995d5bee358e8c051d/pytwis-0.5.0-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "de31b724da1f4894f7a163810b75dbec", "sha256": "2e5688a8f43cd792dbb51c90861305e9f9888381b6197988c09b88329013b7f3" }, "downloads": -1, "filename": "pytwis-0.5.0.tar.gz", "has_sig": false, "md5_digest": "de31b724da1f4894f7a163810b75dbec", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.6", "size": 21156, "upload_time": "2018-06-07T21:52:42", "url": "https://files.pythonhosted.org/packages/8f/5e/d921a800abbdea7193fc3b1bbc08317534ed730b99c9f3c2ad419f6eaf6d/pytwis-0.5.0.tar.gz" } ], "0.5.1": [ { "comment_text": "", "digests": { "md5": "273f10860188c4bd4d5a8aad0760036f", "sha256": "9de570ffc4f9de65dc4e573d6981a8bc7b94a9162a27d0c25f17eb3db97848a7" }, "downloads": -1, "filename": "pytwis-0.5.1-py3-none-any.whl", "has_sig": false, "md5_digest": "273f10860188c4bd4d5a8aad0760036f", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3.6", "size": 17113, "upload_time": "2018-06-10T07:37:34", "url": "https://files.pythonhosted.org/packages/d7/9a/ee18ab993d5a3ad48c808b9408e77ac0b279bf5a4abf851732ce3bd2e544/pytwis-0.5.1-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "6948c504ea277a6b82f36edd35e44af5", "sha256": "2461994d190c66e4ceab30db59a63e8b14a7bd8fc3104969a4b4e52817e398ba" }, "downloads": -1, "filename": "pytwis-0.5.1.tar.gz", "has_sig": false, "md5_digest": "6948c504ea277a6b82f36edd35e44af5", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.6", "size": 25219, "upload_time": "2018-06-10T07:37:35", "url": "https://files.pythonhosted.org/packages/4e/d5/f90cad82e0fe80d3ec21fd50de149eedb4496cb91184671258169a75e5ce/pytwis-0.5.1.tar.gz" } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "273f10860188c4bd4d5a8aad0760036f", "sha256": "9de570ffc4f9de65dc4e573d6981a8bc7b94a9162a27d0c25f17eb3db97848a7" }, "downloads": -1, "filename": "pytwis-0.5.1-py3-none-any.whl", "has_sig": false, "md5_digest": "273f10860188c4bd4d5a8aad0760036f", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3.6", "size": 17113, "upload_time": "2018-06-10T07:37:34", "url": "https://files.pythonhosted.org/packages/d7/9a/ee18ab993d5a3ad48c808b9408e77ac0b279bf5a4abf851732ce3bd2e544/pytwis-0.5.1-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "6948c504ea277a6b82f36edd35e44af5", "sha256": "2461994d190c66e4ceab30db59a63e8b14a7bd8fc3104969a4b4e52817e398ba" }, "downloads": -1, "filename": "pytwis-0.5.1.tar.gz", "has_sig": false, "md5_digest": "6948c504ea277a6b82f36edd35e44af5", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.6", "size": 25219, "upload_time": "2018-06-10T07:37:35", "url": "https://files.pythonhosted.org/packages/4e/d5/f90cad82e0fe80d3ec21fd50de149eedb4496cb91184671258169a75e5ce/pytwis-0.5.1.tar.gz" } ] }