This package contains two modules pytwis
and pytwis_clt
where
pytwis
is a Twitter-toy-clone backend using Redis;pytwis_clt
is a command-line tool which uses pytwis
to
interact with the Redis database of the Twitter-toy clone.To install this package,
$ pip install pytwis
Note that
pytwis
¶This module implements the backend for a simplified Twitter clone based on Redis. We follow the Redis tutorial (https://redis.io/topics/twitter-clone) to design the data layout of the Redis database.
It supports the following features:
TODOs:
Below is a sample usage of this module. You can find a more detailed
example in the module pytwis_clt
.
import pytwis
# Connect to the Redis server by creating a Pytwis instance.
twis = pytwis.Pytwis()
# You may specify the hostname, the port, the database index, and the password of the Redis server as keyword arguments.
twis = pytwis.Pytwis(hostname='127.0.0.1', port=6379, db=0, password='password')
# For all the following operations, if succeeded is False, check result['error'] for the error string.
# Register a new user.
succeeded, result = twis.register('username', 'password')
# Log into the user. If succeeded is True, result['auth'] will contain the authentication secret.
succeeded, result = twis.login('username', 'password')
if succeeded:
auth_secret = result['auth']
# Post a tweet.
succeeded, result = twis.post_tweet(auth_secret, 'A tweet')
# Get the general timeline. Note that we are passing an empty authentication secret and '-1' as the second
# input parameter to get all the tweets in the general timeline.
# If succeeded is True, result['tweets'] will contain a list of tweets.
succeeded, result = twis.get_timeline('', -1)
# Get the user timeline. Note that the second input parameter 100 specifies the maximum number of tweets
# that will be included in the general timeline.
succeeded, result = twis.get_timeline(auth_secret, 100)
# Get the tweets posted by a user. Note that this user may be different from the currently logged-in user.
# If succeeded is True, result['tweets'] will contain a list of tweets.
succeeded, result = twis.get_user_tweets(auth_secret, 'username', -1)
# Follow a user.
succeeded, result = twis.follow(auth_secret, 'followee_username')
# Unfollow a user.
succeeded, result = twis.unfollow(auth_secret, 'followee_username')
# Get the follower list. If succeeded is True, result['follower_list'] will contain the follower list.
succeeded, result = twis.get_followers(auth_secret)
# Get the following list. If succeeded is True, result['following_list'] will contain the following list.
succeeded, result = twis.get_followings(auth_secret)
# Change the user password. If succeeded is True, result['auth'] will contain the new authentication secret.
succeeded, result = twis.change_password(auth_secret, 'password', 'new_password')
# Get the user profile. If succeeded is True, result['username'] will contain the username, result['password']
# will contain the password, and result['auth'] will contain the authentication secret.
succeeded, result = twis.get_user_profile(auth_secret)
# Log out of the user.
succeeded, result = twis.logout(auth_secret)
pytwis_clt
¶After you install the package, you will be able to launch pytwis_clt
as a console command. To get the help information,
$ pytwis_clt -h
$ pytwis_clt --help
$ ./pytwis_clt.py
/tmp/redis.sock
with password zzzzzz.¶Make sure that the unixsocket parameter is defined in your redis.conf file. It’s commented out by default.
$ ./pytwis_clt.py -s /tmp/redis.sock -a zzzzzz
$ ./pytwis_clt.py -h xxx.xxx.xxx.xxx -p yyyy -a zzzzzz
After successfully connecting to the twitter clone, you can try the
following commands in pytwis_clt
.
register
¶Register a new user xxxxxx
with password yyyyyy
.
127.0.0.1:6379> register xxxxxx yyyyyy
changepwd
¶Change the password. Assume that the old password is yyyyyy
and the
new password is zzzzzz
.
127.0.0.1:6379> changepwd yyyyyy zzzzzz zzzzzz
timeline
¶Get the general/user timeline. It will return the user timeline if a user is logged in and will return the general timeline otherwise. Also, it will return all the tweets in the timeline if max-tweet-count is not specified.
127.0.0.1:6379> timeline [max-tweet-count]
tweetsby
¶Get the tweets posted by a user. It will return the tweets posted by the current logged-in user if no username is specified. Also, it will return all the tweets posted by the user if max-tweet-count is not specified.
127.0.0.1:6379> tweetsby [username] [max-tweet-count]
exit
or quit
¶Exit the console program.
127.0.0.1:6379> exit
127.0.0.1:6379> quit
Note that some of the above commands have to be executed after a successful log-in.
We use pylint
to enforce the Python Style Guide PEP8.
$ pylint pytwis
$ pylint tests
We have fixed all the convention violations, warnings, and errors in the
packages pytwis
and tests
. We will address the refactor
recommendations made by pylint
later (see issue #8).
Since this unit test requires a running local Redis server, it is in fact a small integration test. To run the test,
$ make test
README.rst is generated from README.md via pandoc
.
$ pandoc --from=markdown --to=rst --output=README.rst README.md