Project Development

Version 43 (Etienne Pallier, 03/25/2016 06:57 pm)

1 1 Etienne Pallier
h1. Project Development
2 2 Etienne Pallier
3 17 Etienne Pallier
Project Installation page : [[Project Installation]]
4 2 Etienne Pallier
5 2 Etienne Pallier
HOWTO Format Redmine Wiki : http://www.redmine.org/projects/redmine/wiki/FrRedmineWikiFormatting
6 2 Etienne Pallier
7 2 Etienne Pallier
{{>toc}}
8 2 Etienne Pallier
9 2 Etienne Pallier
---
10 3 Etienne Pallier
11 3 Etienne Pallier
h2. %{margin-left:0px; font-weight:bold; font-size:25px;  display:block; color:red;}TODO%
12 3 Etienne Pallier
13 36 Etienne Pallier
 * Interface admin (http://localhost:8000/admin):
14 1 Etienne Pallier
15 36 Etienne Pallier
  * Impossible d'ajouter un pays dans Country depuis admin (erreur sur pyrosuser.name)
16 36 Etienne Pallier
  * Impossible d'ajouter un telescope (erreur sur device.name)
17 37 Etienne Pallier
  * champs booleans: représenter en case à cocher (cf requests.is_alert) : is_alert = models.BooleanField()
18 36 Etienne Pallier
  * Fix plurals:
19 32 Etienne Pallier
20 36 Etienne Pallier
   * Country : plural "countries" and not "countrys"
21 36 Etienne Pallier
   * NrtAnalysiss
22 36 Etienne Pallier
   * Historys
23 1 Etienne Pallier
   * ...
24 37 Etienne Pallier
25 37 Etienne Pallier
 * Models: bien définir les valeurs par défaut
26 37 Etienne Pallier
27 37 Etienne Pallier
  * ex: request.is_alert = False par défaut
28 28 Etienne Pallier
29 28 Etienne Pallier
 * Preload some data for some tables:
30 30 Etienne Pallier
  
31 30 Etienne Pallier
  * country => France, Mexico, ...
32 30 Etienne Pallier
  * sequencetype => 0=routine, 1=alert, ...
33 28 Etienne Pallier
  * userlevel => 0=normal, 1=expert, 2=admin, ...
34 28 Etienne Pallier
  * ...
35 27 Etienne Pallier
36 27 Etienne Pallier
 * updated et created : champs automatiques Django
37 29 Etienne Pallier
38 29 Etienne Pallier
 * readonly admin interface : https://gist.github.com/aaugustin/1388243
39 35 Etienne Pallier
40 35 Etienne Pallier
 * Ecrire quelques premiers petits tests
41 18 Etienne Pallier
42 3 Etienne Pallier
 * Tester install eclipse from scratch (vérifier qu'on n'a plus besoin de faire "set as pydev" et "set as django" et set DJANGO_MANAGE_LOCATION et set DJANGO_SETTINGS_MODULE)
43 3 Etienne Pallier
44 3 Etienne Pallier
 * Séparation des BD Django et Pyros
45 3 Etienne Pallier
46 3 Etienne Pallier
 * Intégration des modules Django déjà développés
47 3 Etienne Pallier
48 3 Etienne Pallier
 * Intégration continue avec Jenkins (+ run des tests sur une VM Windows)
49 3 Etienne Pallier
50 3 Etienne Pallier
 * Planifier la suite...
51 3 Etienne Pallier
52 3 Etienne Pallier
 * Doc pour le meeting de mai
53 24 Etienne Pallier
54 24 Etienne Pallier
 * pyrossu : pyrossu!
55 3 Etienne Pallier
56 4 Etienne Pallier
---
57 4 Etienne Pallier
58 4 Etienne Pallier
h2. %{margin-left:0px; font-weight:bold; font-size:25px;  display:block; color:red;}LIENS UTILES%
59 4 Etienne Pallier
60 4 Etienne Pallier
 * Liens vers web local :
61 4 Etienne Pallier
62 4 Etienne Pallier
  * homepage: http://localhost:8000
63 4 Etienne Pallier
  * admin: http://localhost:8000/admin
64 25 Etienne Pallier
65 25 Etienne Pallier
 * Eclipse:
66 26 Etienne Pallier
 
67 26 Etienne Pallier
  * Shift-Ctrl-f (ou Shift-Cmd-f) : reformatage du fichier selon PEP8
68 25 Etienne Pallier
  * Shift-Ctrl-1 : make doc string ...
69 4 Etienne Pallier
70 4 Etienne Pallier
 * Django:
71 4 Etienne Pallier
72 38 Etienne Pallier
  * Coding style: https://docs.djangoproject.com/en/dev/internals/contributing/writing-code/coding-style
73 38 Etienne Pallier
  * Doc : https://docs.djangoproject.com/en/1.9
74 4 Etienne Pallier
75 4 Etienne Pallier
 * Git docs: 
76 19 Etienne Pallier
77 4 Etienne Pallier
  * Permissions gitlab: https://gitlab.com/gitlab-org/gitlab-ce/blob/master/doc/permissions/permissions.md
78 4 Etienne Pallier
  * https://git-scm.com/docs
79 4 Etienne Pallier
  * https://git-scm.com/book/fr/v1/Les-bases-de-Git-Travailler-avec-des-d%C3%A9p%C3%B4ts-distants
80 4 Etienne Pallier
  * les workflows: https://aresu.dsi.cnrs.fr/spip.php?article219
81 15 Etienne Pallier
  * Git for Eclipse users : http://wiki.eclipse.org/EGit/Git_For_Eclipse_Users
82 4 Etienne Pallier
  * Git sur sourcesup (avec jenkins) : https://services.renater.fr/sourcesup/formation/chap04#gestion_d_un_projet_avec_git_jenkins_sonar_et_nexus
83 4 Etienne Pallier
84 4 Etienne Pallier
 * CADOR web interface: http://cador.obs-hp.fr/ros/manual/cador_actions.html
85 4 Etienne Pallier
86 4 Etienne Pallier
 * pylint (analyse de code) : https://www.pylint.org
87 4 Etienne Pallier
88 4 Etienne Pallier
 * pyreverse (uml diagrams generation, inclus dans pylint) : https://www.logilab.org/blogentry/6883
89 4 Etienne Pallier
90 4 Etienne Pallier
 * tox (a generic virtualenv management and test command line tool) : https://testrun.org/tox/latest/index.html
91 4 Etienne Pallier
92 5 Etienne Pallier
---
93 5 Etienne Pallier
94 5 Etienne Pallier
95 5 Etienne Pallier
---
96 5 Etienne Pallier
97 5 Etienne Pallier
h2. %{margin-left:0px; font-weight:bold; font-size:25px;  display:block; color:red;}I - DATABASE SCHEMA (v0.2.1)%
98 5 Etienne Pallier
99 5 Etienne Pallier
100 6 Etienne Pallier
{{thumbnail(PYROS_PDM_v021.png, size=300, title=Pyros data model)}}
101 7 Etienne Pallier
102 6 Etienne Pallier
---
103 7 Etienne Pallier
104 6 Etienne Pallier
h2. %{margin-left:0px; font-weight:bold; font-size:25px;  display:block; color:red;}II - Get the project (from gitlab)%
105 20 Etienne Pallier
106 20 Etienne Pallier
h3. Gitlab management interface
107 20 Etienne Pallier
108 20 Etienne Pallier
https://gitlab.irap.omp.eu/epallier/pyros
109 20 Etienne Pallier
110 20 Etienne Pallier
https://gitlab.irap.omp.eu/epallier/pyros/team
111 20 Etienne Pallier
112 6 Etienne Pallier
h3. Get the project
113 8 Etienne Pallier
114 8 Etienne Pallier
https://projects.irap.omp.eu/projects/pyros/wiki/Project_Installation#II-Get-the-project-from-gitlab
115 7 Etienne Pallier
116 7 Etienne Pallier
---
117 11 Etienne Pallier
118 11 Etienne Pallier
h2. %{margin-left:0px; font-weight:bold; font-size:25px;  display:block; color:red;}III - INSTALLATION%
119 11 Etienne Pallier
120 11 Etienne Pallier
https://projects.irap.omp.eu/projects/pyros/wiki/Project_Installation#III-INSTALLATION
121 11 Etienne Pallier
122 11 Etienne Pallier
---
123 6 Etienne Pallier
124 6 Etienne Pallier
h2. %{margin-left:0px; font-weight:bold; font-size:25px;  display:block; color:red;}IV - CONFIGURATION of the Django Back Office (administration interface)%
125 6 Etienne Pallier
126 6 Etienne Pallier
[[django_backoffice_config|Configuration of the Django Back office (admin)]]
127 9 Etienne Pallier
128 9 Etienne Pallier
---
129 13 Etienne Pallier
130 43 Etienne Pallier
h2. %{margin-left:0px; font-weight:bold; font-size:25px;  display:block; color:red;}V - EVOLUTION OF THE PROJECT%
131 1 Etienne Pallier
132 43 Etienne Pallier
133 43 Etienne Pallier
134 43 Etienne Pallier
h3. Linking the User model to the django's one
135 43 Etienne Pallier
136 43 Etienne Pallier
* Modifications in models.py :
137 43 Etienne Pallier
138 43 Etienne Pallier
    * Rename User model to PyrosUser
139 43 Etienne Pallier
    * Rename user table name to pyros_user
140 43 Etienne Pallier
    * Change all occurences (User -> PyrosUser, users -> pyros_users, ...)
141 43 Etienne Pallier
    * from django.contrib.auth.models import User <== add at the beginning of the file
142 43 Etienne Pallier
    * user = models.OneToOneField(User, on_delete=models.CASCADE) <== add this field in PyrosUser declaration
143 43 Etienne Pallier
    * delete fields in PyrosUser : name, firstname, email, login, pass
144 43 Etienne Pallier
145 43 Etienne Pallier
* Modifications in admin.py :
146 43 Etienne Pallier
147 43 Etienne Pallier
    * Change all occurences (User* -> PyrosUser*, users -> pyros_users, ...)
148 43 Etienne Pallier
149 43 Etienne Pallier
<pre>
150 43 Etienne Pallier
$ python manage.py makemigrations pyrosapp
151 43 Etienne Pallier
$ python manage.py migrate
152 43 Etienne Pallier
</pre>
153 43 Etienne Pallier
154 43 Etienne Pallier
---
155 43 Etienne Pallier
156 43 Etienne Pallier
h3. Manage static files (for admin but also for each application)
157 41 Etienne Pallier
158 41 Etienne Pallier
./manage.py runserver
159 41 Etienne Pallier
160 41 Etienne Pallier
if DEBUG=False, we have errors, missing static files :
161 41 Etienne Pallier
162 41 Etienne Pallier
<pre>
163 41 Etienne Pallier
Not Found: /static/admin/css/base.css
164 41 Etienne Pallier
Not Found: /static/admin/css/login.css
165 41 Etienne Pallier
Not Found: /admin/login
166 41 Etienne Pallier
Not Found: /static/admin/css/base.css
167 41 Etienne Pallier
Not Found: /static/admin/css/login.css
168 41 Etienne Pallier
Not Found: /static/admin/css/base.css
169 41 Etienne Pallier
Not Found: /static/admin/css/login.css
170 41 Etienne Pallier
Not Found: /static/admin/css/base.css
171 41 Etienne Pallier
Not Found: /static/admin/css/dashboard.css
172 41 Etienne Pallier
Not Found: /static/admin/css/base.css
173 41 Etienne Pallier
Not Found: /static/admin/css/base.css
174 41 Etienne Pallier
175 41 Etienne Pallier
</pre>
176 41 Etienne Pallier
177 41 Etienne Pallier
178 41 Etienne Pallier
=> We have to activate the static files management
179 41 Etienne Pallier
180 41 Etienne Pallier
(see https://docs.djangoproject.com/en/1.9/howto/static-files)
181 41 Etienne Pallier
182 41 Etienne Pallier
In pyros/urls.py, add this:
183 41 Etienne Pallier
<pre>
184 41 Etienne Pallier
185 41 Etienne Pallier
from django.conf import settings
186 41 Etienne Pallier
from django.conf.urls.static import static
187 41 Etienne Pallier
188 41 Etienne Pallier
urlpatterns = [
189 41 Etienne Pallier
    url(r'^admin/', admin.site.urls),
190 41 Etienne Pallier
] + static(settings.STATIC_URL, document_root=settings.STATIC_ROOT)
191 41 Etienne Pallier
</pre>
192 41 Etienne Pallier
193 41 Etienne Pallier
STATIC_ROOT must be defined in settings and says where is the root of all static files
194 41 Etienne Pallier
195 41 Etienne Pallier
Edit settings.py, add:
196 41 Etienne Pallier
<pre>
197 41 Etienne Pallier
STATIC_ROOT = os.path.join(os.path.dirname(BASE_DIR), 'public', 'static')
198 41 Etienne Pallier
</pre>
199 41 Etienne Pallier
200 41 Etienne Pallier
201 41 Etienne Pallier
./manage.py collectstatic
202 41 Etienne Pallier
203 41 Etienne Pallier
=> 56 static files copied to '.../PYROS/public/static'
204 41 Etienne Pallier
205 41 Etienne Pallier
(in fact it is in public/static/admin/)
206 41 Etienne Pallier
207 41 Etienne Pallier
Cette commande copie tous les fichiers statiques de toutes les applis
208 41 Etienne Pallier
dans public/static
209 41 Etienne Pallier
210 41 Etienne Pallier
Apache viendra lire ce dossier unique
211 41 Etienne Pallier
212 41 Etienne Pallier
A chq changement d’un fichier statique d’une appli, exécuter « collectstatic » pour mettre à jour le dossier final public/static (auquel on ne doit pas toucher manuellement, c’est un dossier « final »)
213 41 Etienne Pallier
214 41 Etienne Pallier
215 39 Etienne Pallier
---
216 39 Etienne Pallier
217 40 Etienne Pallier
h2. %{margin-left:0px; font-weight:bold; font-size:25px;  display:block; color:red;}INSTALLATION FROM THE BEGINNING (for dev only, history of the initial project creation)%
218 6 Etienne Pallier
219 6 Etienne Pallier
220 1 Etienne Pallier
[[pyros_install_from_start|Pyros installation from the beginning]]