Wiki

Version 50 (Etienne Pallier, 03/18/2016 11:06 am)

1 1 Etienne Pallier
h1. Technical Documentation for the PYROS project (FGFT-CC)
2 1 Etienne Pallier
3 1 Etienne Pallier
4 1 Etienne Pallier
HOWTO Format Redmine Wiki : http://www.redmine.org/projects/redmine/wiki/FrRedmineWikiFormatting
5 1 Etienne Pallier
6 1 Etienne Pallier
{{>toc}}
7 1 Etienne Pallier
8 1 Etienne Pallier
9 1 Etienne Pallier
10 3 Etienne Pallier
---
11 1 Etienne Pallier
12 17 Etienne Pallier
h2. %{margin-left:0px; font-weight:bold; font-size:25px;  display:block; color:red;}I - INSTALLATION%
13 2 Etienne Pallier
14 49 Etienne Pallier
h3. Install MySql
15 2 Etienne Pallier
16 49 Etienne Pallier
 * Linux Ubuntu
17 49 Etienne Pallier
<pre>
18 49 Etienne Pallier
TODO:
19 49 Etienne Pallier
$ sudo apt-get install mysql
20 49 Etienne Pallier
...
21 49 Etienne Pallier
</pre>
22 49 Etienne Pallier
23 49 Etienne Pallier
 * Linux CentOS
24 49 Etienne Pallier
<pre>
25 49 Etienne Pallier
TODO:
26 49 Etienne Pallier
$ sudo yum install mysql
27 49 Etienne Pallier
...
28 49 Etienne Pallier
</pre>
29 49 Etienne Pallier
30 49 Etienne Pallier
 * Mac OS X
31 49 Etienne Pallier
<pre>
32 49 Etienne Pallier
TODO:
33 49 Etienne Pallier
Install XAMPP
34 49 Etienne Pallier
(but you could also use the pre-installed Mac OS MySql)
35 49 Etienne Pallier
</pre>
36 49 Etienne Pallier
37 49 Etienne Pallier
 * Windows
38 49 Etienne Pallier
<pre>
39 49 Etienne Pallier
TODO:
40 49 Etienne Pallier
</pre>
41 49 Etienne Pallier
42 49 Etienne Pallier
43 49 Etienne Pallier
---
44 1 Etienne Pallier
45 6 Etienne Pallier
h3. Create database
46 1 Etienne Pallier
47 3 Etienne Pallier
One liner:
48 3 Etienne Pallier
$ mysql -u root < pyros.sql
49 1 Etienne Pallier
50 3 Etienne Pallier
Or :
51 3 Etienne Pallier
$ mysql -u root
52 3 Etienne Pallier
mysql> create database pyros;
53 3 Etienne Pallier
mysql> use pyros;
54 3 Etienne Pallier
mysql> source pyros.sql;
55 1 Etienne Pallier
56 3 Etienne Pallier
(
57 3 Etienne Pallier
TODO:
58 3 Etienne Pallier
mysql> grant all on pyros.* to pyros@localhost identified by ‘pyros’;)
59 3 Etienne Pallier
mysql> flush privileges;
60 3 Etienne Pallier
)
61 1 Etienne Pallier
62 1 Etienne Pallier
63 1 Etienne Pallier
64 4 Etienne Pallier
---
65 5 Etienne Pallier
66 6 Etienne Pallier
h3. Install python3.5
67 1 Etienne Pallier
68 11 Etienne Pallier
69 11 Etienne Pallier
 * Mac OS X :
70 23 Etienne Pallier
<pre>
71 24 Etienne Pallier
1) Installer MacPort
72 24 Etienne Pallier
(TODO: doc)
73 24 Etienne Pallier
74 24 Etienne Pallier
2) Installer le "port" python35
75 1 Etienne Pallier
$ sudo port install python35
76 23 Etienne Pallier
</pre>
77 1 Etienne Pallier
78 11 Etienne Pallier
 * Linux (Ubuntu) :
79 23 Etienne Pallier
<pre>
80 1 Etienne Pallier
$ sudo apt-get ...
81 23 Etienne Pallier
</pre>
82 1 Etienne Pallier
83 5 Etienne Pallier
84 3 Etienne Pallier
85 4 Etienne Pallier
---
86 5 Etienne Pallier
87 13 Etienne Pallier
h3. Create project dir
88 13 Etienne Pallier
89 13 Etienne Pallier
$ mkdir pyros
90 13 Etienne Pallier
91 13 Etienne Pallier
92 13 Etienne Pallier
---
93 13 Etienne Pallier
94 14 Etienne Pallier
h3. Create virtualenv with python3.5 dedicated to pyros project
95 3 Etienne Pallier
96 3 Etienne Pallier
$ cd pyros/
97 3 Etienne Pallier
98 3 Etienne Pallier
$ which python3.5
99 3 Etienne Pallier
/opt/local/bin/python3.5
100 3 Etienne Pallier
101 15 Etienne Pallier
$ virtualenv-3.5 venv_py35_pyros -p /opt/local/bin/python3.5
102 3 Etienne Pallier
=> creates a venv_py35_pyros/ folder inside pyros/
103 3 Etienne Pallier
104 1 Etienne Pallier
105 1 Etienne Pallier
106 7 Etienne Pallier
---
107 3 Etienne Pallier
108 16 Etienne Pallier
h3. Activate venv
109 7 Etienne Pallier
110 3 Etienne Pallier
$ source venv_py35_pyros/bin/activate
111 3 Etienne Pallier
112 3 Etienne Pallier
$ python -V
113 3 Etienne Pallier
Python 3.5.1
114 3 Etienne Pallier
115 3 Etienne Pallier
$ which pip
116 1 Etienne Pallier
…/pyros/venv_py35_pyros/bin/pip
117 16 Etienne Pallier
118 18 Etienne Pallier
Upgrade pip to last version available :
119 3 Etienne Pallier
120 3 Etienne Pallier
$ pip install --upgrade pip
121 3 Etienne Pallier
Collecting pip
122 3 Etienne Pallier
  Downloading pip-8.1.1-py2.py3-none-any.whl (1.2MB)
123 3 Etienne Pallier
Installing collected packages: pip
124 3 Etienne Pallier
  Found existing installation: pip 7.1.2
125 3 Etienne Pallier
    Uninstalling pip-7.1.2:
126 3 Etienne Pallier
      Successfully uninstalled pip-7.1.2
127 1 Etienne Pallier
Successfully installed pip-8.1.1
128 18 Etienne Pallier
129 27 Etienne Pallier
h3. Install needed python packages (from within the virtual environment)
130 18 Etienne Pallier
131 3 Etienne Pallier
132 33 Etienne Pallier
*Install Django* :
133 32 Etienne Pallier
134 32 Etienne Pallier
<pre>
135 3 Etienne Pallier
$ pip install django
136 3 Etienne Pallier
Collecting django
137 3 Etienne Pallier
  Downloading Django-1.9.4-py2.py3-none-any.whl (6.6MB)
138 3 Etienne Pallier
Installing collected packages: django
139 3 Etienne Pallier
Successfully installed django-1.9.4
140 3 Etienne Pallier
141 3 Etienne Pallier
$ pip install django-admin-tools
142 3 Etienne Pallier
Collecting django-admin-tools
143 3 Etienne Pallier
  Downloading django_admin_tools-0.7.2-py2.py3-none-any.whl (289kB)
144 3 Etienne Pallier
Installing collected packages: django-admin-tools
145 3 Etienne Pallier
Successfully installed django-admin-tools-0.7.2
146 3 Etienne Pallier
147 21 Etienne Pallier
$ pip install django-debug-toolbar
148 21 Etienne Pallier
Collecting django-debug-toolbar
149 21 Etienne Pallier
  Downloading django_debug_toolbar-1.4-py2.py3-none-any.whl (212kB)
150 21 Etienne Pallier
Requirement already satisfied (use --upgrade to upgrade): Django>=1.7 in ./venv_py35_pyros/lib/python3.5/site-packages (from django-debug-toolbar)
151 21 Etienne Pallier
Collecting sqlparse (from django-debug-toolbar)
152 21 Etienne Pallier
  Downloading sqlparse-0.1.19.tar.gz (58kB)
153 21 Etienne Pallier
Building wheels for collected packages: sqlparse
154 21 Etienne Pallier
  Running setup.py bdist_wheel for sqlparse ... done
155 21 Etienne Pallier
  Stored in directory: /Users/epallier/Library/Caches/pip/wheels/7b/d4/72/6011bb100dd5fc213164e4bbee13d4e03261dd54ce6a5de6b8
156 21 Etienne Pallier
Successfully built sqlparse
157 21 Etienne Pallier
Installing collected packages: sqlparse, django-debug-toolbar
158 21 Etienne Pallier
Successfully installed django-debug-toolbar-1.4 sqlparse-0.1.19
159 21 Etienne Pallier
160 21 Etienne Pallier
$ pip install django-extensions
161 21 Etienne Pallier
Collecting django-extensions
162 21 Etienne Pallier
  Downloading django_extensions-1.6.1-py2.py3-none-any.whl (202kB)
163 21 Etienne Pallier
Collecting six>=1.2 (from django-extensions)
164 21 Etienne Pallier
  Downloading six-1.10.0-py2.py3-none-any.whl
165 21 Etienne Pallier
Installing collected packages: six, django-extensions
166 21 Etienne Pallier
Successfully installed django-extensions-1.6.1 six-1.10.0
167 21 Etienne Pallier
168 21 Etienne Pallier
$ pip install django-suit
169 21 Etienne Pallier
Collecting django-suit
170 21 Etienne Pallier
  Downloading django-suit-0.2.18.tar.gz (587kB)
171 21 Etienne Pallier
Building wheels for collected packages: django-suit
172 1 Etienne Pallier
  Running setup.py bdist_wheel for django-suit ... done
173 1 Etienne Pallier
  Stored in directory: /Users/epallier/Library/Caches/pip/wheels/12/8b/9a/e02ab0ad9229881638aa040d47d77c8f562999533811927d41
174 1 Etienne Pallier
Successfully built django-suit
175 1 Etienne Pallier
Installing collected packages: django-suit
176 1 Etienne Pallier
Successfully installed django-suit-0.2.18
177 21 Etienne Pallier
178 32 Etienne Pallier
</pre>
179 32 Etienne Pallier
180 33 Etienne Pallier
*Install the web application server gunicorn (will be used in production instead of the dev django web server)* :
181 32 Etienne Pallier
<pre>
182 25 Etienne Pallier
$ pip install gunicorn
183 25 Etienne Pallier
Collecting gunicorn
184 25 Etienne Pallier
  Downloading gunicorn-19.4.5-py2.py3-none-any.whl (112kB)
185 21 Etienne Pallier
Installing collected packages: gunicorn
186 26 Etienne Pallier
Successfully installed gunicorn-19.4.5
187 32 Etienne Pallier
</pre>
188 1 Etienne Pallier
189 33 Etienne Pallier
*Install the python mysql client*:
190 32 Etienne Pallier
<pre>
191 32 Etienne Pallier
$ pip install mysqlclient
192 32 Etienne Pallier
...
193 32 Etienne Pallier
</pre>
194 20 Etienne Pallier
195 33 Etienne Pallier
=> Issue under Mac OS X:
196 21 Etienne Pallier
<pre>
197 20 Etienne Pallier
198 3 Etienne Pallier
Collecting mysqlclient
199 3 Etienne Pallier
  Downloading mysqlclient-1.3.7.tar.gz (79kB)
200 1 Etienne Pallier
Building wheels for collected packages: mysqlclient
201 22 Etienne Pallier
  Running setup.py bdist_wheel for mysqlclient ... error
202 3 Etienne Pallier
203 3 Etienne Pallier
  ----------------------------------------
204 1 Etienne Pallier
  Failed building wheel for mysqlclient
205 1 Etienne Pallier
  Running setup.py clean for mysqlclient
206 1 Etienne Pallier
Failed to build mysqlclient
207 1 Etienne Pallier
Installing collected packages: mysqlclient
208 1 Etienne Pallier
  Running setup.py install for mysqlclient ... done
209 1 Etienne Pallier
Successfully installed mysqlclient-1.3.7
210 1 Etienne Pallier
211 1 Etienne Pallier
BOUH !!!
212 1 Etienne Pallier
213 1 Etienne Pallier
$ pip install --upgrade wheel
214 1 Etienne Pallier
Collecting wheel
215 1 Etienne Pallier
  Downloading wheel-0.29.0-py2.py3-none-any.whl (66kB)
216 1 Etienne Pallier
Installing collected packages: wheel
217 1 Etienne Pallier
  Found existing installation: wheel 0.24.0
218 1 Etienne Pallier
    Uninstalling wheel-0.24.0:
219 1 Etienne Pallier
      Successfully uninstalled wheel-0.24.0
220 1 Etienne Pallier
Successfully installed wheel-0.29.0
221 1 Etienne Pallier
222 1 Etienne Pallier
$ pip uninstall mysqlclient
223 1 Etienne Pallier
224 1 Etienne Pallier
$ pip install mysqlclient
225 1 Etienne Pallier
Collecting mysqlclient
226 1 Etienne Pallier
  Using cached mysqlclient-1.3.7.tar.gz
227 1 Etienne Pallier
Building wheels for collected packages: mysqlclient
228 1 Etienne Pallier
  Running setup.py bdist_wheel for mysqlclient ... done
229 1 Etienne Pallier
  Stored in directory: /Users/epallier/Library/Caches/pip/wheels/9b/06/50/d11418c26cf8f2156b13d4363b5afde8e7e75ebb8540d0228d
230 1 Etienne Pallier
Successfully built mysqlclient
231 1 Etienne Pallier
Installing collected packages: mysqlclient
232 1 Etienne Pallier
Successfully installed mysqlclient-1.3.7
233 1 Etienne Pallier
234 1 Etienne Pallier
YES !!!
235 21 Etienne Pallier
</pre>
236 1 Etienne Pallier
237 1 Etienne Pallier
238 12 Etienne Pallier
239 12 Etienne Pallier
240 12 Etienne Pallier
---
241 12 Etienne Pallier
242 28 Etienne Pallier
h3. Project organization
243 12 Etienne Pallier
 
244 29 Etienne Pallier
Example of a good organization :
245 1 Etienne Pallier
246 29 Etienne Pallier
1 project = N applis
247 29 Etienne Pallier
(but 1 appli can be part of many projects)
248 30 Etienne Pallier
(then 1 appli = N models)
249 12 Etienne Pallier
250 31 Etienne Pallier
<pre>
251 34 Etienne Pallier
252 29 Etienne Pallier
MYPROJECT/
253 34 Etienne Pallier
254 50 Etienne Pallier
255 1 Etienne Pallier
	src/
256 1 Etienne Pallier
		myproject/
257 34 Etienne Pallier
		appli1/
258 34 Etienne Pallier
		appli2/
259 12 Etienne Pallier
260 34 Etienne Pallier
		appliN/
261 34 Etienne Pallier
262 12 Etienne Pallier
	public/
263 34 Etienne Pallier
		static/
264 34 Etienne Pallier
265 12 Etienne Pallier
	private/
266 1 Etienne Pallier
		requirements.txt
267 50 Etienne Pallier
268 50 Etienne Pallier
	venv_py35_pyros/
269 50 Etienne Pallier
270 1 Etienne Pallier
</pre>
271 1 Etienne Pallier
272 1 Etienne Pallier
273 37 Etienne Pallier
Set needed folders:
274 37 Etienne Pallier
<pre>
275 37 Etienne Pallier
$ cd pyros/
276 12 Etienne Pallier
$ mkdir private public
277 12 Etienne Pallier
$ mkdir public/static
278 37 Etienne Pallier
</pre>
279 3 Etienne Pallier
280 7 Etienne Pallier
---
281 3 Etienne Pallier
282 39 Etienne Pallier
h3. Create Django project pyros
283 7 Etienne Pallier
284 38 Etienne Pallier
<pre>
285 38 Etienne Pallier
$ cd pyros/
286 38 Etienne Pallier
287 3 Etienne Pallier
$ django-admin startproject pyros
288 3 Etienne Pallier
289 3 Etienne Pallier
$ tree pyros/
290 3 Etienne Pallier
pyros/
291 3 Etienne Pallier
├── manage.py
292 3 Etienne Pallier
└── pyros
293 3 Etienne Pallier
    ├── __init__.py
294 3 Etienne Pallier
    ├── settings.py
295 3 Etienne Pallier
    ├── urls.py
296 3 Etienne Pallier
    └── wsgi.py
297 3 Etienne Pallier
298 3 Etienne Pallier
$ mv pyros src
299 3 Etienne Pallier
300 3 Etienne Pallier
$ cd src/
301 3 Etienne Pallier
302 3 Etienne Pallier
$ ./manage.py runserver
303 40 Etienne Pallier
(or gunicorn pyros.wsgi)
304 1 Etienne Pallier
==> http://localhost:8000
305 38 Etienne Pallier
</pre>
306 3 Etienne Pallier
307 3 Etienne Pallier
308 7 Etienne Pallier
---
309 3 Etienne Pallier
310 42 Etienne Pallier
h3. Set Database engine as MySql
311 7 Etienne Pallier
312 3 Etienne Pallier
Edit src/pyros/settings.py
313 3 Etienne Pallier
314 41 Etienne Pallier
<pre>
315 3 Etienne Pallier
DATABASES = {
316 3 Etienne Pallier
    'default': {
317 3 Etienne Pallier
        'ENGINE': 'django.db.backends.mysql',
318 1 Etienne Pallier
        'NAME': 'pyros',
319 3 Etienne Pallier
        'USER': 'root',
320 1 Etienne Pallier
        'PASSWORD': ''
321 1 Etienne Pallier
    }
322 1 Etienne Pallier
}
323 41 Etienne Pallier
</pre>
324 3 Etienne Pallier
325 7 Etienne Pallier
---
326 3 Etienne Pallier
327 43 Etienne Pallier
h3. Import database into Django (with inspectdb)
328 7 Etienne Pallier
329 43 Etienne Pallier
$ cd src/
330 3 Etienne Pallier
331 3 Etienne Pallier
$ ./manage.py inspectdb > models.py
332 3 Etienne Pallier
333 44 Etienne Pallier
*Issue on Mac OS X*:
334 44 Etienne Pallier
<pre>
335 3 Etienne Pallier
Traceback (most recent call last):
336 3 Etienne Pallier
  File "/Users/epallier/Documents/_W_more/PROJECTS/GFT/SOFT/PYROS/pyros/venv_py35_pyros/lib/python3.5/site-packages/django/db/backends/mysql/base.py", line 25, in <module>
337 3 Etienne Pallier
    import MySQLdb as Database
338 3 Etienne Pallier
  File "/Users/epallier/Documents/_W_more/PROJECTS/GFT/SOFT/PYROS/pyros/venv_py35_pyros/lib/python3.5/site-packages/MySQLdb/__init__.py", line 19, in <module>
339 3 Etienne Pallier
    import _mysql
340 3 Etienne Pallier
ImportError: dlopen(/Users/epallier/Documents/_W_more/PROJECTS/GFT/SOFT/PYROS/pyros/venv_py35_pyros/lib/python3.5/site-packages/_mysql.cpython-35m-darwin.so, 2): Library not loaded: libmysqlclient.18.dylib
341 3 Etienne Pallier
  Referenced from: /Users/epallier/Documents/_W_more/PROJECTS/GFT/SOFT/PYROS/pyros/venv_py35_pyros/lib/python3.5/site-packages/_mysql.cpython-35m-darwin.so
342 3 Etienne Pallier
  Reason: image not found
343 3 Etienne Pallier
344 3 Etienne Pallier
=> BOUH !!!
345 3 Etienne Pallier
346 3 Etienne Pallier
LA SOLUTION EST ICI : http://stackoverflow.com/questions/6383310/python-mysqldb-library-not-loaded-libmysqlclient-18-dylib
347 3 Etienne Pallier
348 3 Etienne Pallier
(
349 3 Etienne Pallier
Apparemment, ceci aurait dû suffire:
350 3 Etienne Pallier
mkdir -p /usr/local/lib   
351 3 Etienne Pallier
ln -s /usr/local/mysql/lib/libmysql* /usr/local/lib
352 3 Etienne Pallier
)
353 3 Etienne Pallier
354 3 Etienne Pallier
Mais j’ai fait ceci:
355 3 Etienne Pallier
356 3 Etienne Pallier
$ otool -L /Users/epallier/Documents/_W_more/PROJECTS/GFT/SOFT/PYROS/pyros/venv_py35_pyros/lib/python3.5/site-packages/_mysql.cpython-35m-darwin.so
357 3 Etienne Pallier
/Users/epallier/Documents/_W_more/PROJECTS/GFT/SOFT/PYROS/pyros/venv_py35_pyros/lib/python3.5/site-packages/_mysql.cpython-35m-darwin.so:
358 1 Etienne Pallier
	libmysqlclient.18.dylib (compatibility version 18.0.0, current version 18.0.0)
359 10 Etienne Pallier
...
360 3 Etienne Pallier
361 3 Etienne Pallier
$ locate libmysqlclient.18.dylib
362 3 Etienne Pallier
/Applications/XAMPP/xamppfiles/lib/libmysqlclient.18.dylib
363 1 Etienne Pallier
/Library/SystemMigration/History/Migration-68137DFB-CB6A-4FBB-81E2-11BDB5D01E48/QuarantineRoot/usr/lib/libmysqlclient.18.dylib
364 1 Etienne Pallier
365 1 Etienne Pallier
$ sudo install_name_tool -change libmysqlclient.18.dylib /Applications/XAMPP/xamppfiles/lib/libmysqlclient.18.dylib /Users/epallier/Documents/_W_more/PROJECTS/GFT/SOFT/PYROS/pyros/venv_py35_pyros/lib/python3.5/site-packages/_mysql.cpython-35m-darwin.so
366 1 Etienne Pallier
367 10 Etienne Pallier
$ otool -L /Users/epallier/Documents/_W_more/PROJECTS/GFT/SOFT/PYROS/pyros/venv_py35_pyros/lib/python3.5/site-packages/_mysql.cpython-35m-darwin.so
368 10 Etienne Pallier
/Users/epallier/Documents/_W_more/PROJECTS/GFT/SOFT/PYROS/pyros/venv_py35_pyros/lib/python3.5/site-packages/_mysql.cpython-35m-darwin.so:
369 10 Etienne Pallier
	/Applications/XAMPP/xamppfiles/lib/libmysqlclient.18.dylib (compatibility version 18.0.0, current version 18.0.0)
370 10 Etienne Pallier
...
371 3 Etienne Pallier
372 1 Etienne Pallier
$ ./manage.py inspectdb > models.py
373 1 Etienne Pallier
374 3 Etienne Pallier
=> YES !!!
375 44 Etienne Pallier
</pre>
376 3 Etienne Pallier
377 3 Etienne Pallier
378 7 Etienne Pallier
---
379 3 Etienne Pallier
380 48 Etienne Pallier
h3. Create a Django application pyrosapp
381 7 Etienne Pallier
382 3 Etienne Pallier
$ ./manage.py startapp pyrosapp
383 3 Etienne Pallier
384 3 Etienne Pallier
$ tree src
385 3 Etienne Pallier
src
386 3 Etienne Pallier
├── manage.py
387 3 Etienne Pallier
├── pyros
388 3 Etienne Pallier
│   ├── __init__.py
389 3 Etienne Pallier
│   ├── __pycache__
390 3 Etienne Pallier
│   │   ├── __init__.cpython-35.pyc
391 3 Etienne Pallier
│   │   ├── settings.cpython-35.pyc
392 3 Etienne Pallier
│   │   ├── urls.cpython-35.pyc
393 3 Etienne Pallier
│   │   └── wsgi.cpython-35.pyc
394 3 Etienne Pallier
│   ├── settings.py
395 3 Etienne Pallier
│   ├── urls.py
396 3 Etienne Pallier
│   └── wsgi.py
397 3 Etienne Pallier
└── pyrosapp
398 3 Etienne Pallier
    ├── __init__.py
399 1 Etienne Pallier
    ├── admin.py
400 3 Etienne Pallier
    ├── apps.py
401 1 Etienne Pallier
    ├── migrations
402 1 Etienne Pallier
    │   └── __init__.py
403 3 Etienne Pallier
    ├── models.py
404 3 Etienne Pallier
    ├── tests.py
405 3 Etienne Pallier
    └── views.py
406 1 Etienne Pallier
407 1 Etienne Pallier
408 7 Etienne Pallier
---
409 1 Etienne Pallier
410 7 Etienne Pallier
h3. Replace the default pyrosapp models.py with the inspectdb generated one
411 7 Etienne Pallier
412 3 Etienne Pallier
$ mv models.py pyrosapp/
413 3 Etienne Pallier
414 3 Etienne Pallier
415 3 Etienne Pallier
416 3 Etienne Pallier
417 7 Etienne Pallier
418 1 Etienne Pallier
---
419 9 Etienne Pallier
420 47 Etienne Pallier
h3. *TODO: Fix and improve the inspectdb generated file models.py*
421 3 Etienne Pallier
422 3 Etienne Pallier
$ cd pyrosapp/
423 3 Etienne Pallier
424 8 Etienne Pallier
$ vi models.py