1 |
swtstore (Sweet Store) |
2 |
====================== |
3 |
|
4 |
---- |
5 |
|
6 |
|
7 |
Introduction |
8 |
------------ |
9 |
|
10 |
This is the sweet store application. |
11 |
The store for the decentralized, semantic, social web tweets a.k.a SWeeTs! |
12 |
|
13 |
This README is about installing, configuring and running/deploying this |
14 |
application. If you want to know more about SWeeTs, please go to |
15 |
[wiki.janastu.org/Sweet_Web](http://janastu.org/technoscience/index.php/Sweet_Web) and |
16 |
[trac.pantoto.org/sweet-web](http://trac.pantoto.org/sweet-web). |
17 |
|
18 |
This application acts as the repository store for all the SWeeTs that are |
19 |
generated from the clients registered with the sweet store. It provides |
20 |
query APIs to query the SWeeTs. |
21 |
|
22 |
It also provides user management to manage the users of the swtstore. |
23 |
|
24 |
All the APIs of the swtstore are accessed by using an access token which is |
25 |
generated by the swtstore when an user authorizes a third-party application |
26 |
through OAuth. |
27 |
|
28 |
Sweet store provides the following APIs: |
29 |
|
30 |
- [GET] /api/sweets/<id>: Get a specific SWeeT by its id. |
31 |
|
32 |
- [GET] /api/sweets/q?who=<username>&what=<contextname>&where=<URL> : |
33 |
This API is for querying sweet based on the who, what and where |
34 |
parameters. |
35 |
This API does not support querying based on parameters mentioned in how, |
36 |
but will be supported in future. Right now, the client can get sweets |
37 |
based on the above mentioned three parameters, and as the 'how' part is |
38 |
a JSON, it is trivial to do further filtering based on parameters of |
39 |
'how' by the client. |
40 |
|
41 |
- [POST] /api/sweets : Post a SWeeT to this swtstore with the data in the |
42 |
body of the request. The data or payload is a list of sweets. Even if you |
43 |
are sending one sweet, make sure that the sweet is in a list. |
44 |
|
45 |
- [GET] /api/users/me : Get a JSON details of the current user logged in. |
46 |
|
47 |
|
48 |
Any third-party client side application can communicate with the swtstore |
49 |
using these APIs, provided they have a valid access token. |
50 |
|
51 |
|
52 |
Pre-requisites |
53 |
-------------- |
54 |
|
55 |
The swtstore application is written in Python and uses a relational database. |
56 |
|
57 |
Hence, the dependencies of this application are: |
58 |
|
59 |
* Python 2.7. See [here](https://www.python.org/about/gettingstarted/) |
60 |
for more details on installing Python. |
61 |
|
62 |
* any relational database supported by SQLAlchemy. Most common RDBMS |
63 |
supported by SQLAlchemy are MySQL, Postgresql. |
64 |
|
65 |
For more information on supported databases see |
66 |
[here](http://docs.sqlalchemy.org/en/rel_0_9/dialects/index.html). |
67 |
|
68 |
_Installing and setting up a database like MySQL or Postgresql is out of scope |
69 |
of this document. Please search the Internet to get help about installing and |
70 |
setting up a RDBMS._ |
71 |
|
72 |
* Also, make sure you have [pip](https://pip.pypa.io/en/latest/) installed, as |
73 |
swtstore depends of few external python packages. |
74 |
See [here](https://pip.pypa.io/en/latest/) to get more details. |
75 |
|
76 |
**NOTE: Make sure you have the pre-requisites installed before following the |
77 |
installation steps.** |
78 |
|
79 |
|
80 |
Installing |
81 |
---------- |
82 |
|
83 |
* Clone the repository from <https://git.pantoto.org/sweet-web/sweet-web-engine> |
84 |
|
85 |
> `` $ git clone --recursive https://git.pantoto.org/sweet-web/sweet-web-engine.git `` |
86 |
|
87 |
If you have already cloned the repo, and then reading this README, you have |
88 |
to get the submodules. Run this from the top-level of this repo: |
89 |
|
90 |
> `` $ git submodule init `` |
91 |
|
92 |
> `` $ git submodule update `` |
93 |
|
94 |
|
95 |
* It is recommended to do the installation inside a python virtual |
96 |
environment. |
97 |
For deploying on a server, it depends on how you have setup your server |
98 |
environment. |
99 |
If you think, you know what you are doing and don't need the virtual |
100 |
environment, you can skip to the next step. |
101 |
|
102 |
Initialize a python virtual environment using `virtualenv` in the same directory |
103 |
where you cloned the repository in the above step. Now, activate the |
104 |
environment |
105 |
|
106 |
> ``$ source <path/to/your/current-virtual-env>/bin/activate `` |
107 |
|
108 |
See [http://www.virtualenv.org/en/latest/virtualenv.html](http://www.virtualenv.org/en/latest/virtualenv.html) for more details about `virtualenv`. |
109 |
|
110 |
* Run the setup.py script to install `` python setup.py install `` |
111 |
|
112 |
|
113 |
You're done with the installation step. |
114 |
|
115 |
Now you need to configure swtstore to run it correctly. |
116 |
|
117 |
|
118 |
Configure swtstore |
119 |
------------------ |
120 |
|
121 |
* Make sure you have configured the user management module with correct values. |
122 |
|
123 |
* Copy the contents of ``sample_config.py`` inside the ``swtstore`` directory |
124 |
into ``config.py`` inside ``swtstore`` directory itself. |
125 |
|
126 |
Assuming you are using a \*-nix based system, and you are in the root directory |
127 |
of the codebase, |
128 |
|
129 |
> `` $ cp swtstore/sample_config.py swtstore/config.py`` |
130 |
|
131 |
* Install the required driver for using database mentioned in the |
132 |
SQLALCHEMY_DATABASE_URI. Install pyscopg2 if you have chosen postgresql as |
133 |
the database to use. |
134 |
|
135 |
> `` $ pip install psycopg2 `` |
136 |
|
137 |
Install oursql if you have chosen mysql as the database to use. |
138 |
|
139 |
> `` $ pip install oursql`` |
140 |
|
141 |
You would also have to install dependecies, for using mysql: |
142 |
- python-dev |
143 |
- libmysqlclient-dev |
144 |
Install these dependencies from the package manager of your distribution. |
145 |
|
146 |
* Edit the config.py file, and change the values accordingly. |
147 |
|
148 |
* Now, you have to setup the database for the swtstore application. But |
149 |
fortunately, the creation of database and tables have also been scripted, so |
150 |
all you need to do is run the ``dbsetup.py`` script. |
151 |
|
152 |
> `` $ python dbsetup.py `` |
153 |
|
154 |
**NOTE:** Please remember that all these configuration step is necessary and is |
155 |
required whether you are running the application locally or deploying it on a |
156 |
server. |
157 |
|
158 |
|
159 |
|
160 |
Running the server locally |
161 |
-------------------------- |
162 |
|
163 |
Run the runserver.py script to run the server locally, |
164 |
|
165 |
> `` $ python runserver.py `` |
166 |
|
167 |
This runs the application locally, on port 5001. So you can direct your browser |
168 |
to http://localhost:5001 |
169 |
|
170 |
|
171 |
|
172 |
Deploying the application |
173 |
------------------------- |
174 |
|
175 |
SwtStore is deployed as a WSGI application server. |
176 |
|
177 |
The wsgi script to deploy the application is provided (its called |
178 |
`swtstore.wsgi`). |
179 |
Point your webserver like Apache, or Nginx to point to the `swtstore.wsgi` |
180 |
script. |
181 |
|
182 |
See Apache WSGI configuration here: |
183 |
[http://modwsgi.readthedocs.org/en/latest/configuration-directives/WSGIScriptAlias.html](http://modwsgi.readthedocs.org/en/latest/configuration-directives/WSGIScriptAlias.html) |
184 |
|
185 |
See Nginx WSGI configuration here: |
186 |
[http://uwsgi-docs.readthedocs.org/en/latest/WSGIquickstart.html](http://uwsgi-docs.readthedocs.org/en/latest/WSGIquickstart.html) |
187 |
|
188 |
|
189 |
Help / Feedback |
190 |
--------------- |
191 |
|
192 |
If you need any help, or have any questions, comments or feedback, you can contact at |
193 |
rayanon or arvind or bhanu at servelots.com |
194 |
|
195 |
You can also join channel #servelots on freenode network, using your favourite |
196 |
IRC client. We usually hang out at #servelots. |
197 |
|
198 |
|
199 |
License |
200 |
------- |
201 |
|
202 |
BSD Licensed. |
203 |
|
204 |
See LICENSE for more details. |
205 |
|
206 |
|
207 |
Known Issues |
208 |
------------ |
209 |
|
210 |
* Infinite loop in Persona sign-in flow. When the backend API /users/login fail |
211 |
to connect to the Mozilla Persona APIs (connection timed out etc.) - the |
212 |
/users/login returns a 500, and then the Persona Javascript SDK calls the |
213 |
logout API /users/logout and then it calls the login API again; as a result |
214 |
the entire sign-in flow falls in a infinite loop. |
215 |
|
216 |
* Automatic log out from Persona. Persona forces a user to login, again, when he |
217 |
opens SWeeT store while being logged into Persona, through a different |
218 |
site. Persona requires the user, every time, to explicilty say that he is |
219 |
agreeing to share the email adress with a site that is using Persona API. |