Commit 1a8abf18ba4f55b8a6a6226ca276b10a995eff36

Authored by Etienne Pallier
1 parent 3cc75c0f
Exists in master and in 1 other branch dev

updated install doc

install/INSTALLATION.html
1 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd"> 1 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
2 <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en"> 2 <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">
3 <head> 3 <head>
4 -<title>Wiki</title> 4 +<title>Project Installation</title>
5 <meta http-equiv="content-type" content="text/html; charset=utf-8" /> 5 <meta http-equiv="content-type" content="text/html; charset=utf-8" />
6 <style> 6 <style>
7 body { font:80% Verdana,Tahoma,Arial,sans-serif; } 7 body { font:80% Verdana,Tahoma,Arial,sans-serif; }
@@ -16,49 +16,20 @@ h1:hover a.wiki-anchor, h2:hover a.wiki-anchor, h3:hover a.wiki-anchor { display @@ -16,49 +16,20 @@ h1:hover a.wiki-anchor, h2:hover a.wiki-anchor, h3:hover a.wiki-anchor { display
16 </style> 16 </style>
17 </head> 17 </head>
18 <body> 18 <body>
19 -<a name="Technical-Documentation-for-the-PYROS-project-FGFT-CC"></a>  
20 -<h1 >Technical Documentation for the PYROS project (FGFT-CC)<a href="#Technical-Documentation-for-the-PYROS-project-FGFT-CC" class="wiki-anchor">&para;</a></h1> 19 +<a name="Project-Installation"></a>
  20 +<h1 >Project Installation<a href="#Project-Installation" class="wiki-anchor">&para;</a></h1>
21 21
22 22
23 - <p>HOWTO Format Redmine Wiki : <a class="external" href="http://www.redmine.org/projects/redmine/wiki/FrRedmineWikiFormatting">http://www.redmine.org/projects/redmine/wiki/FrRedmineWikiFormatting</a></p>  
24 -  
25 -  
26 - <ul class="toc right"><li><a href="#Technical-Documentation-for-the-PYROS-project-FGFT-CC">Technical Documentation for the PYROS project (FGFT-CC)</a><ul><li><a href="#I-TODO">I - TODO</a></li><li><a href="#I-DATABASE-SCHEMA-v021">I - DATABASE SCHEMA (v0.2.1)</a></li><li><a href="#II-Get-the-project-from-gitlab">II - Get the project (from gitlab)</a><ul><li><a href="#Get-the-project-from-the-terminal">Get the project from the terminal</a></li><li><a href="#Get-the-project-from-Eclipse">Get the project from Eclipse</a></li></ul>  
27 -</li><li><a href="#III-INSTALLATION">III - INSTALLATION</a><ul><li><a href="#Install-MySql-only-if-necessary">Install MySql (only if necessary)</a></li><li><a href="#Install-Python35-only-if-necessary">Install Python3.5 (only if necessary)</a></li><li><a href="#Create-a-Python3-virtual-environment-dedicated-to-the-project-inside-the-project-folder">Create a Python3 virtual environment dedicated to the project (inside the project folder)</a></li><li><a href="#Activate-the-python-virtual-environment-from-inside-the-project">Activate the python virtual environment (from inside the project)</a></li><li><a href="#Install-the-needed-Python-packages-from-within-the-virtual-environment">Install the needed Python packages (from within the virtual environment)</a></li><li><a href="#Test-the-project">Test the project</a></li></ul>  
28 -</li><li><a href="#IV-CONFIGURATION-of-the-Django-Back-Office-administration-interface">IV - CONFIGURATION of the Django Back Office (administration interface)</a><ul><li><a href="#Back-Office-setup">Back Office setup</a></li><li><a href="#Adaptation-of-the-one-to-many-and-many-to-many-display">Adaptation of the one-to-many and many-to-many display</a></li></ul>  
29 -</li><li><a href="#V-INSTALLATION-FROM-THE-BEGINNING-for-dev-only-history-of-the-initial-project-creation">V - INSTALLATION FROM THE BEGINNING (for dev only, history of the initial project creation)</a></li></ul></li></ul>  
30 -  
31 -  
32 -<hr />  
33 - 23 + <p>Project Development page : <a href="Project_Development.html" class="wiki-page">Project Development</a></p>
34 24
35 - <a name="I-TODO"></a>  
36 -<h2 ><span style="margin-left:0px;font-weight:bold;font-size:25px;color:red;">I - TODO</span><a href="#I-TODO" class="wiki-anchor">&para;</a></h2>  
37 25
38 -  
39 - <ul>  
40 - <li>installation sur windows</li>  
41 - </ul>  
42 -  
43 -  
44 - <ul>  
45 - <li>gitlab</li>  
46 - </ul>  
47 -  
48 -  
49 - <ul>  
50 - <li>séparation des BD Django et Pyros</li>  
51 - </ul>  
52 -  
53 -  
54 - <ul>  
55 - <li>intégration dans Eclipse</li>  
56 - </ul> 26 + <p>HOWTO Format Redmine Wiki : <a class="external" href="http://www.redmine.org/projects/redmine/wiki/FrRedmineWikiFormatting">http://www.redmine.org/projects/redmine/wiki/FrRedmineWikiFormatting</a></p>
57 27
58 28
59 - <ul>  
60 - <li>Intégration des modules Django déjà développés</li>  
61 - </ul> 29 + <ul class="toc right"><li><a href="#Project-Installation">Project Installation</a><ul><li><a href="#I-DATABASE-SCHEMA-v021">I - DATABASE SCHEMA (v0.2.1)</a></li><li><a href="#II-Get-the-project-from-gitlab">II - Get the project (from gitlab)</a><ul><li><a href="#Browse-the-code-from-gitlab">Browse the code from gitlab</a></li><li><a href="#Project-structure">Project structure</a></li><li><a href="#From-the-terminal">From the terminal</a></li><li><a href="#From-Eclipse">From Eclipse</a></li><li><a href="#For-easier-installation-you-can-use-Sqlite-instead-of-Mysql">For easier installation, you can use Sqlite instead of Mysql</a></li></ul>
  30 +</li><li><a href="#III-INSTALLATION">III - INSTALLATION</a><ul><li><a href="#Install-MySql-only-if-necessary">Install MySql (only if necessary)</a></li><li><a href="#Install-Python35-only-if-necessary">Install Python3.5 (only if necessary)</a></li><li><a href="#Create-a-Python3-virtual-environment-dedicated-to-the-project-inside-the-project-folder">Create a Python3 virtual environment dedicated to the project (inside the project folder)</a></li><li><a href="#Activate-the-python-virtual-environment-from-inside-the-project">Activate the python virtual environment (from inside the project)</a></li><li><a href="#Install-the-needed-Python-packages-from-within-the-virtual-environment">Install the needed Python packages (from within the virtual environment)</a></li><li><a href="#Eclipse-only-Set-the-Python3-virtual-environment-as-the-project-interpreter">(Eclipse only) Set the Python3 virtual environment as the project interpreter</a></li><li><a href="#Run-the-project">Run the project</a><ul><li><a href="#From-the-terminal-2">From the terminal</a></li><li><a href="#From-Eclipse-2">From Eclipse</a></li></ul>
  31 +</li></ul>
  32 +</li><li><a href="#IV-TEST">IV - TEST</a><ul><li><a href="#From-Terminal">From Terminal</a></li><li><a href="#From-Eclipse-3">From Eclipse:</a></li><li><a href="#Custom-commands-">Custom commands :</a></li></ul></li></ul></li></ul>
62 33
63 34
64 <hr /> 35 <hr />
@@ -68,7 +39,7 @@ h1:hover a.wiki-anchor, h2:hover a.wiki-anchor, h3:hover a.wiki-anchor { display @@ -68,7 +39,7 @@ h1:hover a.wiki-anchor, h2:hover a.wiki-anchor, h3:hover a.wiki-anchor { display
68 <h2 ><span style="margin-left:0px;font-weight:bold;font-size:25px;color:red;">I - DATABASE SCHEMA (v0.2.1)</span><a href="#I-DATABASE-SCHEMA-v021" class="wiki-anchor">&para;</a></h2> 39 <h2 ><span style="margin-left:0px;font-weight:bold;font-size:25px;color:red;">I - DATABASE SCHEMA (v0.2.1)</span><a href="#I-DATABASE-SCHEMA-v021" class="wiki-anchor">&para;</a></h2>
69 40
70 41
71 - <p><a href="/attachments/2510" class="thumbnail" title="Pyros data model"><img alt="PYROS_PDM_v021.png" src="/attachments/thumbnail/2510/300" /></a></p> 42 + <p><a href="/attachments/2543" class="thumbnail" title="Pyros data model"><img alt="PYROS_PDM_v021.png" src="/attachments/thumbnail/2543/300" /></a></p>
72 43
73 44
74 <hr /> 45 <hr />
@@ -78,33 +49,26 @@ h1:hover a.wiki-anchor, h2:hover a.wiki-anchor, h3:hover a.wiki-anchor { display @@ -78,33 +49,26 @@ h1:hover a.wiki-anchor, h2:hover a.wiki-anchor, h3:hover a.wiki-anchor { display
78 <h2 ><span style="margin-left:0px;font-weight:bold;font-size:25px;color:red;">II - Get the project (from gitlab)</span><a href="#II-Get-the-project-from-gitlab" class="wiki-anchor">&para;</a></h2> 49 <h2 ><span style="margin-left:0px;font-weight:bold;font-size:25px;color:red;">II - Get the project (from gitlab)</span><a href="#II-Get-the-project-from-gitlab" class="wiki-anchor">&para;</a></h2>
79 50
80 51
81 - <a name="Get-the-project-from-the-terminal"></a>  
82 -<h3 >Get the project from the terminal<a href="#Get-the-project-from-the-terminal" class="wiki-anchor">&para;</a></h3> 52 + <a name="Browse-the-code-from-gitlab"></a>
  53 +<h3 >Browse the code from gitlab<a href="#Browse-the-code-from-gitlab" class="wiki-anchor">&para;</a></h3>
83 54
84 55
85 -<pre>  
86 -git clone https://gitlab.irap.omp.eu/epallier/pyros.git PYROS  
87 -  
88 -(or also : git clone git@gitlab.irap.omp.eu:epallier/pyros.git)  
89 -</pre>  
90 -  
91 - <p>This creates a PYROS/ folder containing the project (with a .git/ subfolder for synchronization with the git repository)</p> 56 + <p><a class="external" href="https://gitlab.irap.omp.eu/epallier/pyros/tree/master">https://gitlab.irap.omp.eu/epallier/pyros/tree/master</a></p>
92 57
93 58
94 - <p><em>If you just wanted a static copy of the project (without synchronization) just remove the .git/ folder:</em><br /><pre>  
95 -$ rm -r .git/  
96 -</pre></p> 59 + <a name="Project-structure"></a>
  60 +<h3 >Project structure<a href="#Project-structure" class="wiki-anchor">&para;</a></h3>
97 61
98 62
99 - <p>You should obtain this structure:</p> 63 + <p>Once you have fetched the project, you should obtain this structure:</p>
100 64
101 65
102 <pre> 66 <pre>
103 67
104 PYROS/ 68 PYROS/
105 -├── REQUIREMENTS.txt  
106 -├── private/  
107 -│ └── venv_py35_pyros/ 69 +├── install/
  70 +│ └── REQUIREMENTS.txt
  71 +│ └── INSTALLATION.txt
108 ├── public/ 72 ├── public/
109 │ └── static/ 73 │ └── static/
110 ├── src/ 74 ├── src/
@@ -126,14 +90,109 @@ PYROS/ @@ -126,14 +90,109 @@ PYROS/
126 90
127 </pre> 91 </pre>
128 92
129 - <a name="Get-the-project-from-Eclipse"></a>  
130 -<h3 >Get the project from Eclipse<a href="#Get-the-project-from-Eclipse" class="wiki-anchor">&para;</a></h3> 93 + <a name="From-the-terminal"></a>
  94 +<h3 >From the terminal<a href="#From-the-terminal" class="wiki-anchor">&para;</a></h3>
131 95
132 96
133 <pre> 97 <pre>
134 -TODO: 98 +git clone https://gitlab.irap.omp.eu/epallier/pyros.git PYROS
  99 +(or also : git clone git@gitlab.irap.omp.eu:epallier/pyros.git PYROS)
135 </pre> 100 </pre>
136 101
  102 + <p>This creates a PYROS/ folder containing the project (with a .git/ subfolder for synchronization with the git repository)</p>
  103 +
  104 +
  105 + <p><em>If you just wanted a static copy of the project (without synchronization), just remove the .git/ folder:</em><br /><pre>
  106 +$ rm -r .git/
  107 +</pre></p>
  108 +
  109 +
  110 + <a name="From-Eclipse"></a>
  111 +<h3 >From Eclipse<a href="#From-Eclipse" class="wiki-anchor">&para;</a></h3>
  112 +
  113 +
  114 + <p>0) Install Eclipse (if necessary)</p>
  115 +
  116 +
  117 + <p>Get the Eclipse version for Php</p>
  118 +
  119 +
  120 + <p>Install the plug-in pydev (via install new software, add <a class="external" href="http://pydev.org/updates">http://pydev.org/updates</a>)</p>
  121 +
  122 +
  123 + <p>1) Deactivate CA certificate verification</p>
  124 +
  125 +
  126 + <p>Window -> Preferences -> Team -> git -> configuration -> Add entry</p>
  127 +
  128 +
  129 + <p>Key = http.sslVerify<br />Value = false</p>
  130 +
  131 +
  132 + <p>2) Fetch the project</p>
  133 +
  134 +
  135 + <p>File/Import project from git</p>
  136 +
  137 +
  138 + <p>Select repository source: Clone URI: <a class="external" href="https://gitlab.irap.omp.eu/epallier/pyros.git">https://gitlab.irap.omp.eu/epallier/pyros.git</a></p>
  139 +
  140 +
  141 + <p>Directory: <br />par défaut, il propose : /Users/epallier/git/pyros<br />mais on peut le mettre ailleurs (c'est ce que j'ai fait)</p>
  142 +
  143 +
  144 + <p>initial branch: master<br />remote name: origin</p>
  145 +
  146 +
  147 + <p>Import as general project</p>
  148 +
  149 +
  150 + <p>Project name: PYROS</p>
  151 +
  152 +
  153 + <p>3) Configure the project</p>
  154 +
  155 +
  156 + <p>The project is created. Now, you have to set it as a «PyDev » and a « Django » project.</p>
  157 +
  158 +
  159 + <p>clic droit sur le projet / PyDev / set as a PyDev project</p>
  160 +
  161 +
  162 + <p>clic droit sur le projet / PyDev / set as a Django project</p>
  163 +
  164 +
  165 + <p>clic droit sur le projet : on doit maintenant avoir un sous-menu Django</p>
  166 +
  167 +
  168 + <p>clic droit sur le dossier src / PyDev / set as source folder (add to PYTHONPATH)</p>
  169 +
  170 +
  171 + <p>clic droit sur projet / Properties / Pydev-Django :<br /> - Django manage.py : src/manage.py<br /> - Django settings module : pyros.settings</p>
  172 +
  173 +
  174 + <p>4) Set Code style</p>
  175 +
  176 +
  177 + <p>Window/Preferences : Pydev / Editor<br />- Auto Imports : uncheck « Do auto import »<br />- Code style:<br /> - Locals … : camelCase<br /> - Methods : camelCase() with first lower<br />- Code style / Code Formatter: activer « use autopep8.py for code formatting »<br />- Tabs : Tab length : 4</p>
  178 +
  179 +
  180 + <p>(<br />il faudra aussi faire un peu plus loin : <br /><a class="external" href="https://projects.irap.omp.eu/projects/pyros/wiki/Project_Installation#Eclipse-only-Set-the-Python3-virtual-environment-as-the-project-interpreter">https://projects.irap.omp.eu/projects/pyros/wiki/Project_Installation#Eclipse-only-Set-the-Python3-virtual-environment-as-the-project-interpreter</a><br />)</p>
  181 +
  182 +
  183 + <a name="For-easier-installation-you-can-use-Sqlite-instead-of-Mysql"></a>
  184 +<h3 >For easier installation, you can use Sqlite instead of Mysql<a href="#For-easier-installation-you-can-use-Sqlite-instead-of-Mysql" class="wiki-anchor">&para;</a></h3>
  185 +
  186 +
  187 + <p>By default, Mysql will be used, but then you will need to install the Mysql database server.</p>
  188 +
  189 +
  190 + <p>Thus, in order to skip Mysql installation, use Sqlite instead as the database server (which will need no installation at all) :</p>
  191 +
  192 +
  193 + <p>Edit pyros/settings.py and just set MYSQL variable to False, and that's it.</p>
  194 +
  195 +
137 <a name="III-INSTALLATION"></a> 196 <a name="III-INSTALLATION"></a>
138 <h2 ><span style="margin-left:0px;font-weight:bold;font-size:25px;color:red;">III - INSTALLATION</span><a href="#III-INSTALLATION" class="wiki-anchor">&para;</a></h2> 197 <h2 ><span style="margin-left:0px;font-weight:bold;font-size:25px;color:red;">III - INSTALLATION</span><a href="#III-INSTALLATION" class="wiki-anchor">&para;</a></h2>
139 198
@@ -145,6 +204,8 @@ TODO: @@ -145,6 +204,8 @@ TODO:
145 <h3 >Install MySql (only if necessary)<a href="#Install-MySql-only-if-necessary" class="wiki-anchor">&para;</a></h3> 204 <h3 >Install MySql (only if necessary)<a href="#Install-MySql-only-if-necessary" class="wiki-anchor">&para;</a></h3>
146 205
147 206
  207 + <p><strong>Skip this step if you are using Sqlite instead of MySql</strong>
  208 +
148 <ul> 209 <ul>
149 <li>Linux Ubuntu<br /><pre> 210 <li>Linux Ubuntu<br /><pre>
150 211
@@ -174,6 +235,7 @@ TODO: @@ -174,6 +235,7 @@ TODO:
174 <ul> 235 <ul>
175 <li>Windows</li> 236 <li>Windows</li>
176 </ul> 237 </ul>
  238 +</p>
177 239
178 240
179 <pre> 241 <pre>
@@ -303,6 +365,9 @@ Successfully installed wheel-0.29.0 @@ -303,6 +365,9 @@ Successfully installed wheel-0.29.0
303 365
304 </pre> 366 </pre>
305 367
  368 +<hr />
  369 +
  370 +
306 <a name="Install-the-needed-Python-packages-from-within-the-virtual-environment"></a> 371 <a name="Install-the-needed-Python-packages-from-within-the-virtual-environment"></a>
307 <h3 >Install the needed Python packages (from within the virtual environment)<a href="#Install-the-needed-Python-packages-from-within-the-virtual-environment" class="wiki-anchor">&para;</a></h3> 372 <h3 >Install the needed Python packages (from within the virtual environment)<a href="#Install-the-needed-Python-packages-from-within-the-virtual-environment" class="wiki-anchor">&para;</a></h3>
308 373
@@ -439,7 +504,6 @@ YES !!! @@ -439,7 +504,6 @@ YES !!!
439 $ pip install mysqlclient 504 $ pip install mysqlclient
440 Collecting mysqlclient 505 Collecting mysqlclient
441 Downloading mysqlclient-1.3.7.tar.gz (79kB) 506 Downloading mysqlclient-1.3.7.tar.gz (79kB)
442 - 100% |████████████████████████████████| 81kB 1.5MB/s  
443 Complete output from command python setup.py egg_info: 507 Complete output from command python setup.py egg_info:
444 /bin/sh: 1: mysql_config: not found 508 /bin/sh: 1: mysql_config: not found
445 Traceback (most recent call last): 509 Traceback (most recent call last):
@@ -481,308 +545,147 @@ YES !!! @@ -481,308 +545,147 @@ YES !!!
481 </ul> 545 </ul>
482 546
483 547
484 -<hr />  
485 -  
486 -  
487 - <a name="Test-the-project"></a>  
488 -<h3 >Test the project<a href="#Test-the-project" class="wiki-anchor">&para;</a></h3>  
489 - 548 + <ul>
  549 + <li>=> Issue under Windows<br /><pre>
  550 +Same message as the issue for Mac.
490 551
491 -<pre> 552 +Go to http://www.lfd.uci.edu/~gohlke/pythonlibs/#mysqlclient to download the newest mysqlclient wheel
492 553
493 -$ cd src/ 554 +$ pip install path\to\mysqlclient\wheel
494 555
495 -$ ./manage.py runserver  
496 -(or gunicorn pyros.wsgi)  
497 -==&gt; http://localhost:8000  
498 -...  
499 -...  
500 -Ctrl-c 556 +No need to redo "pip install mysqlclient"
  557 +</pre></li>
  558 + </ul>
501 559
502 -</pre>  
503 560
504 <hr /> 561 <hr />
505 562
506 563
507 - <a name="IV-CONFIGURATION-of-the-Django-Back-Office-administration-interface"></a>  
508 -<h2 ><span style="margin-left:0px;font-weight:bold;font-size:25px;color:red;">IV - CONFIGURATION of the Django Back Office (administration interface)</span><a href="#IV-CONFIGURATION-of-the-Django-Back-Office-administration-interface" class="wiki-anchor">&para;</a></h2>  
509 -  
510 -  
511 -<hr /> 564 + <a name="Eclipse-only-Set-the-Python3-virtual-environment-as-the-project-interpreter"></a>
  565 +<h3 >(Eclipse only) Set the Python3 virtual environment as the project interpreter<a href="#Eclipse-only-Set-the-Python3-virtual-environment-as-the-project-interpreter" class="wiki-anchor">&para;</a></h3>
512 566
513 567
514 - <a name="Back-Office-setup"></a>  
515 -<h3 >Back Office setup<a href="#Back-Office-setup" class="wiki-anchor">&para;</a></h3> 568 + <p>clic droit sur projet / Properties / PyDev - Interpreter/Grammar :<br />Grammar version : 3</p>
516 569
517 570
518 - <ul>  
519 - <li>Prerequisites in src/pyros/settings.py : 571 + <p>Interpreter : click on « click here to configure an interpreter not listed »</p>
520 572
521 - <ul>  
522 - <li>INSTALLED_APPS must (at least) contain :  
523 573
524 - <ul>  
525 - <li>django.contrib.admin</li>  
526 - <li>django.contrib.auth</li>  
527 - <li>django.contrib.contenttypes</li>  
528 - <li>django.contrib.sessions</li>  
529 - </ul></li>  
530 - </ul> 574 + <p>click on « New » :<br />- Interpreter name : venv_py35_pyros<br />- Interpreter executable : click on « Browse »<br /> Select your private/venv_py35_pyros/bin/python3.5 executable<br /> click OK<br /> click OK again</p>
531 575
532 576
533 - <ul>  
534 - <li>MIDDLEWARES must (at least) contain : 577 + <p>Interpreter: select now venv_py35_pyros from the list</p>
535 578
536 - <ul>  
537 - <li>django.contrib.sessions.middleware.SessionMiddleware</li>  
538 - <li>django.middleware.common.CommonMiddleware</li>  
539 - <li>django.contrib.auth.middleware.AuthenticationMiddleware</li>  
540 - </ul></li>  
541 - </ul></li>  
542 - </ul>  
543 579
  580 +<hr />
544 581
545 - <ul>  
546 - <li>At least one 'python manage.py migrate' must have been executed</li>  
547 - </ul>  
548 582
  583 + <a name="Run-the-project"></a>
  584 +<h3 >Run the project<a href="#Run-the-project" class="wiki-anchor">&para;</a></h3>
549 585
550 - <ul>  
551 - <li>Create a superuser for the administration :</li>  
552 - </ul>  
553 586
  587 + <p>TODO: more details... (notamment sur localhost:8000/admin)</p>
554 588
555 -<pre>  
556 -$ python manage.py createsuperuser  
557 -</pre>  
558 589
559 - <ul>  
560 - <li>For each app of the project, fill the admin.py file :</li>  
561 - </ul> 590 + <a name="From-the-terminal-2"></a>
  591 +<h4 >From the terminal<a href="#From-the-terminal-2" class="wiki-anchor">&para;</a></h4>
562 592
563 593
564 <pre> 594 <pre>
565 -from django.contrib import admin  
566 -from app.models import Model1, Model2  
567 -  
568 -admin.site.register(Model1)  
569 -admin.site.register(Model2)  
570 -</pre>  
571 595
572 - <p><strong>Reminder</strong> : each application must be registered in the settings.py INSTALLED_APPS variable.</p>  
573 -  
574 -  
575 - <ul>  
576 - <li>For each model in models.py, add a '__str__()' method in order to identify the object on the back office. Example :</li>  
577 - </ul> 596 +$ cd src/
578 597
  598 +$ ./manage.py runserver
  599 +(or gunicorn pyros.wsgi)
  600 +==&gt; http://localhost:8000
  601 +...
  602 +...
  603 +Ctrl-c
579 604
580 -<pre>  
581 -class UserLevel(models.Model):  
582 - name = models.CharField(max_length=45, blank=True, null=True)  
583 - desc = models.TextField(blank=True, null=True)  
584 - priority = models.IntegerField(blank=True, null=True)  
585 - quota = models.FloatField(blank=True, null=True)  
586 -  
587 - class Meta:  
588 - managed = True  
589 - db_table = 'userlevel'  
590 -  
591 - def __str__(self):  
592 - return (str(self.name))  
593 </pre> 605 </pre>
594 606
595 - <p><strong>Naming convention</strong> : Use self.name when possible, the creation time/date otherwise. Example :</p> 607 + <a name="From-Eclipse-2"></a>
  608 +<h4 >From Eclipse<a href="#From-Eclipse-2" class="wiki-anchor">&para;</a></h4>
596 609
597 610
598 -<pre>  
599 -class SiteWatch(models.Model):  
600 - updated = models.DateTimeField(blank=True, null=True)  
601 - lights = models.CharField(max_length=45, blank=True, null=True)  
602 - dome = models.CharField(max_length=45, blank=True, null=True)  
603 - doors = models.CharField(max_length=45, blank=True, null=True)  
604 - temperature = models.FloatField(blank=True, null=True)  
605 -  
606 - class Meta:  
607 - managed = True  
608 - db_table = 'sitewatch'  
609 -  
610 - def __str__(self):  
611 - return (str(self.updated))  
612 -</pre>  
613 -  
614 -<hr /> 611 + <p>Right clic on project -> Django/Custom command/runserver</p>
615 612
616 613
617 - <a name="Adaptation-of-the-one-to-many-and-many-to-many-display"></a>  
618 -<h3 >Adaptation of the one-to-many and many-to-many display<a href="#Adaptation-of-the-one-to-many-and-many-to-many-display" class="wiki-anchor">&para;</a></h3> 614 + <p>Error on Ubuntu :</p>
619 615
620 616
621 - <ul>  
622 - <li>The one-to-many relationships are the following (One.many format) : 617 +<pre>
623 618
624 - <ul>  
625 - <li>Schedule.sequences</li>  
626 - <li>Request.sequences</li>  
627 - <li>Sequence.albums</li>  
628 - <li>Album.plans</li>  
629 - <li>Plan.images</li>  
630 - <li>Telescope.detectors</li>  
631 - <li>Detector.filters</li>  
632 - <li>NrtAnalysis.images</li>  
633 - <li>Filter.plans</li>  
634 - <li>Detector.albums</li>  
635 - <li>UserLevel.users</li>  
636 - <li>Country.users</li>  
637 - <li>ScientificProgram.requests</li>  
638 - <li>User.requests</li>  
639 - <li>StrategyObs.alerts</li>  
640 - <li>SequenceType.sequences</li>  
641 - </ul></li>  
642 - </ul> 619 +Traceback (most recent call last):
  620 + File "/home/carens_p/git/pyros/src/manage.py", line 8, in &lt;module&gt;
  621 + from django.core.management import execute_from_command_line
  622 +ImportError: No module named 'django'
643 623
  624 +</pre>
644 625
645 - <ul>  
646 - <li>For each "many", create a new class in admin.py just after the imports, following these examples :</li>  
647 - </ul> 626 + <p>Project -> Properties -> Pydev interpreter -> Clic here to configure an interpreter not listed</p>
648 627
649 628
650 -<pre> 629 + <p>select venv_py35_pyros</p>
651 630
652 -For Schedule.sequences, Request.sequences and Sequentype.sequences, we will need :  
653 631
654 -class SequenceInline(admin.TabularInline):  
655 - model = Sequence  
656 - fields = ("name",)  
657 - show_change_link = True 632 + <p>In Libraries, clic on 'New folder', then select your virtualenv's lib/python3.5/site-packages folder.</p>
658 633
659 -For Sequence.albums and Detector.albums, we will need :  
660 634
661 -class AlbumInline(admin.TabularInline):  
662 - model = Album  
663 - fields = ("name",)  
664 - show_change_link = True 635 + <p>OK -> re-select venv_py35_pyros in 'Interpreter' dropdown menu</p>
665 636
666 -For StrategyObs.alerts, we will need :  
667 637
668 -class AlertInline(admin.TabularInline):  
669 - model = Alert  
670 - fields = ("request.name",) # there is no 'name' attribute in the Alert model  
671 - show_change_link = True 638 + <p>Then right clic on project -> Django/Custom command/runserver</p>
672 639
673 -</pre>  
674 640
675 - <ul>  
676 - <li>For each "One", declare a new class in admin.py, just after the "Inlines" class declaration, as done in the following examples :</li>  
677 - </ul> 641 + <p>check <a class="external" href="http://localhost:8000/">http://localhost:8000/</a></p>
678 642
679 643
680 -<pre>  
681 -For Request.sequences : 644 +<hr />
682 645
683 -class RequestAdmin(admin.ModelAdmin):  
684 - inlines = [  
685 - SequenceInline,  
686 - ]  
687 646
688 -For Detector.filters and Detector.albums : 647 + <a name="IV-TEST"></a>
  648 +<h2 ><span style="margin-left:0px;font-weight:bold;font-size:25px;color:red;">IV - TEST</span><a href="#IV-TEST" class="wiki-anchor">&para;</a></h2>
689 649
690 -class DetectorAdmin(admin.ModelAdmin):  
691 - inlines = [  
692 - FilterInline,  
693 - AlbumInline,  
694 - ]  
695 650
696 -</pre> 651 + <p>Tests are classes declared in all apps' test.py file. The test classes inherit from django.test.TestCase</p>
697 652
698 - <ul>  
699 - <li>The many-to-many relationships are the following :  
700 653
701 - <ul>  
702 - <li>ScientificProgram - User</li>  
703 - <li>ScheduleHistory - Sequence</li>  
704 - </ul></li>  
705 - </ul> 654 + <p>You can run the tests suite, just to be sure that the software is well installed.</p>
706 655
707 656
708 - <ul>  
709 - <li>For each many-to-many relationship, declare a new "Inline" class in admin.py just after the imports, like this :</li>  
710 - </ul> 657 + <a name="From-Terminal"></a>
  658 +<h3 >From Terminal<a href="#From-Terminal" class="wiki-anchor">&para;</a></h3>
711 659
712 660
713 <pre> 661 <pre>
714 -For ScientificProgram - User :  
715 -  
716 -class UserAndSPInline(admin.TabularInline):  
717 - model = ScientificProgram.users.through 662 +$ cd src/
718 663
719 -For ScheduleHistory - Sequence 664 +$ ./manage.py test
720 665
721 -class SequenceAndSHInline(admin.TabularInline):  
722 - model = ScheduleHistory.sequences.through 666 +Ran 5 tests in 0.093s
723 667
  668 +OK
724 </pre> 669 </pre>
725 670
726 - <p><ins>Note :</ins> The order in the line "model = ScientificProgram.users.through" is very important : the first model (ScientificProgram) is the one in which is declared the ManyToManyField relationship.</p> 671 + <a name="From-Eclipse-3"></a>
  672 +<h3 >From Eclipse:<a href="#From-Eclipse-3" class="wiki-anchor">&para;</a></h3>
727 673
728 674
729 <ul> 675 <ul>
730 - <li>For each many-to-many relationship, declare two new classes in admin.py, just after the inlines, like in the following examples :</li> 676 + <li>Right-clic on the project / Django / Run Django tests</li>
731 </ul> 677 </ul>
732 678
733 679
734 -<pre>  
735 -For the ScheduleHistory - Sequence relationship :  
736 -  
737 -class ScheduleHistoryAdmin(admin.ModelAdmin):  
738 - inlines = [  
739 - SequenceAndSHInline,  
740 - ]  
741 - exclude = ('sequences',) # ScheduleHistory declares the ManyToManyField, and we want to replace its display in the back office, so we won't display the default field  
742 -  
743 -class SequenceAdmin(admin.ModelAdmin):  
744 - inlines = [  
745 - AlbumInline, # This is the Inline for the one-to-many relationship Sequence.albums  
746 - SequenceAndSHInline,  
747 - ]  
748 -  
749 -For the ScientificProgram - User relationship :  
750 -  
751 -class ScientificProgramAdmin(admin.ModelAdmin):  
752 - inlines = [  
753 - RequestInline,  
754 - UserAndSPInline,  
755 - ]  
756 - exclude = ('users',) # Same as ScheduleHistory  
757 -  
758 -class UserAdmin(admin.ModelAdmin):  
759 - inlines = [  
760 - RequestInline, # This is the Inline for the one-to-many relationship User.requests  
761 - UserAndSPInline,  
762 - ]  
763 -  
764 -</pre>  
765 -  
766 <ul> 680 <ul>
767 - <li>For each ModelAdmin class in the admin.py, change the registering line</li> 681 + <li>Right-clic on the project / Django / Custom command / ...</li>
768 </ul> 682 </ul>
769 683
770 684
771 -<pre>  
772 -admin.site.register(Album)  
773 -</pre>  
774 -  
775 - <p>to</p>  
776 -  
777 -  
778 -<pre>  
779 -admin.site.register(Album, AlbumAdmin)  
780 -</pre>  
781 -  
782 - <a name="V-INSTALLATION-FROM-THE-BEGINNING-for-dev-only-history-of-the-initial-project-creation"></a>  
783 -<h2 ><span style="margin-left:0px;font-weight:bold;font-size:25px;color:red;">V - INSTALLATION FROM THE BEGINNING (for dev only, history of the initial project creation)</span><a href="#V-INSTALLATION-FROM-THE-BEGINNING-for-dev-only-history-of-the-initial-project-creation" class="wiki-anchor">&para;</a></h2> 685 + <a name="Custom-commands-"></a>
  686 +<h3 >Custom commands :<a href="#Custom-commands-" class="wiki-anchor">&para;</a></h3>
784 687
785 688
786 - <p><a href="Pyros_install_from_start.html" class="wiki-page">Pyros installation from the beginning</a></p> 689 + <p>$ [./manage.py] test app.tests # Run tests for the application 'app'<br />$ [./manage.py] test app.tests.ModelTests # Run test methods declared in the class app.tests.ModelTests<br />$ [./manage.py] test app.tests.ModelTests.test_method # Only run the method test_method declared in app.tests.ModelTests</p>
787 </body> 690 </body>
788 </html> 691 </html>
install/INSTALLATION.pdf
No preview for this file type
install/INSTALLATION.txt
1 -h1. Technical Documentation for the PYROS project (FGFT-CC) 1 +h1. Project Installation
2 2
3 3
  4 +Project Development page : [[Project Development]]
  5 +
4 HOWTO Format Redmine Wiki : http://www.redmine.org/projects/redmine/wiki/FrRedmineWikiFormatting 6 HOWTO Format Redmine Wiki : http://www.redmine.org/projects/redmine/wiki/FrRedmineWikiFormatting
5 7
6 {{>toc}} 8 {{>toc}}
@@ -8,21 +10,6 @@ HOWTO Format Redmine Wiki : http://www.redmine.org/projects/redmine/wiki/FrRedmi @@ -8,21 +10,6 @@ HOWTO Format Redmine Wiki : http://www.redmine.org/projects/redmine/wiki/FrRedmi
8 10
9 --- 11 ---
10 12
11 -h2. %{margin-left:0px; font-weight:bold; font-size:25px; display:block; color:red;}I - TODO%  
12 -  
13 - * installation sur windows  
14 -  
15 - * gitlab  
16 -  
17 - * séparation des BD Django et Pyros  
18 -  
19 - * intégration dans Eclipse  
20 -  
21 - * Intégration des modules Django déjà développés  
22 -  
23 -  
24 ----  
25 -  
26 h2. %{margin-left:0px; font-weight:bold; font-size:25px; display:block; color:red;}I - DATABASE SCHEMA (v0.2.1)% 13 h2. %{margin-left:0px; font-weight:bold; font-size:25px; display:block; color:red;}I - DATABASE SCHEMA (v0.2.1)%
27 14
28 15
@@ -33,29 +20,21 @@ h2. %{margin-left:0px; font-weight:bold; font-size:25px; display:block; color:r @@ -33,29 +20,21 @@ h2. %{margin-left:0px; font-weight:bold; font-size:25px; display:block; color:r
33 20
34 h2. %{margin-left:0px; font-weight:bold; font-size:25px; display:block; color:red;}II - Get the project (from gitlab)% 21 h2. %{margin-left:0px; font-weight:bold; font-size:25px; display:block; color:red;}II - Get the project (from gitlab)%
35 22
36 -h3. Get the project from the terminal  
37 23
38 -<pre>  
39 -git clone https://gitlab.irap.omp.eu/epallier/pyros.git PYROS 24 +h3. Browse the code from gitlab
40 25
41 -(or also : git clone git@gitlab.irap.omp.eu:epallier/pyros.git)  
42 -</pre> 26 +https://gitlab.irap.omp.eu/epallier/pyros/tree/master
43 27
44 -This creates a PYROS/ folder containing the project (with a .git/ subfolder for synchronization with the git repository) 28 +h3. Project structure
45 29
46 -_If you just wanted a static copy of the project (without synchronization) just remove the .git/ folder:_  
47 -<pre>  
48 -$ rm -r .git/  
49 -</pre>  
50 -  
51 -You should obtain this structure: 30 +Once you have fetched the project, you should obtain this structure:
52 31
53 <pre> 32 <pre>
54 33
55 PYROS/ 34 PYROS/
56 -├── REQUIREMENTS.txt  
57 -├── private/  
58 -│ └── venv_py35_pyros/ 35 +├── install/
  36 +│ └── REQUIREMENTS.txt
  37 +│ └── INSTALLATION.txt
59 ├── public/ 38 ├── public/
60 │ └── static/ 39 │ └── static/
61 ├── src/ 40 ├── src/
@@ -78,13 +57,94 @@ PYROS/ @@ -78,13 +57,94 @@ PYROS/
78 57
79 </pre> 58 </pre>
80 59
  60 +h3. From the terminal
  61 +
  62 +<pre>
  63 +git clone https://gitlab.irap.omp.eu/epallier/pyros.git PYROS
  64 +(or also : git clone git@gitlab.irap.omp.eu:epallier/pyros.git PYROS)
  65 +</pre>
81 66
82 -h3. Get the project from Eclipse 67 +This creates a PYROS/ folder containing the project (with a .git/ subfolder for synchronization with the git repository)
83 68
  69 +_If you just wanted a static copy of the project (without synchronization), just remove the .git/ folder:_
84 <pre> 70 <pre>
85 -TODO: 71 +$ rm -r .git/
86 </pre> 72 </pre>
87 73
  74 +h3. From Eclipse
  75 +
  76 +0) Install Eclipse (if necessary)
  77 +
  78 +Get the Eclipse version for Php
  79 +
  80 +Install the plug-in pydev (via install new software, add http://pydev.org/updates)
  81 +
  82 +
  83 +1) Deactivate CA certificate verification
  84 +
  85 +Window -> Preferences -> Team -> git -> configuration -> Add entry
  86 +
  87 +Key = http.sslVerify
  88 +Value = false
  89 +
  90 +2) Fetch the project
  91 +
  92 +File/Import project from git
  93 +
  94 +Select repository source: Clone URI: https://gitlab.irap.omp.eu/epallier/pyros.git
  95 +
  96 +Directory:
  97 +par défaut, il propose : /Users/epallier/git/pyros
  98 +mais on peut le mettre ailleurs (c'est ce que j'ai fait)
  99 +
  100 +initial branch: master
  101 +remote name: origin
  102 +
  103 +Import as general project
  104 +
  105 +Project name: PYROS
  106 +
  107 +
  108 +3) Configure the project
  109 +
  110 +The project is created. Now, you have to set it as a «PyDev » and a « Django » project.
  111 +
  112 +clic droit sur le projet / PyDev / set as a PyDev project
  113 +
  114 +clic droit sur le projet / PyDev / set as a Django project
  115 +
  116 +clic droit sur le projet : on doit maintenant avoir un sous-menu Django
  117 +
  118 +clic droit sur le dossier src / PyDev / set as source folder (add to PYTHONPATH)
  119 +
  120 +clic droit sur projet / Properties / Pydev-Django :
  121 + - Django manage.py : src/manage.py
  122 + - Django settings module : pyros.settings
  123 +
  124 +
  125 +4) Set Code style
  126 +
  127 +Window/Preferences : Pydev / Editor
  128 +- Auto Imports : uncheck « Do auto import »
  129 +- Code style:
  130 + - Locals … : camelCase
  131 + - Methods : camelCase() with first lower
  132 +- Code style / Code Formatter: activer « use autopep8.py for code formatting »
  133 +- Tabs : Tab length : 4
  134 +
  135 +(
  136 +il faudra aussi faire un peu plus loin :
  137 +https://projects.irap.omp.eu/projects/pyros/wiki/Project_Installation#Eclipse-only-Set-the-Python3-virtual-environment-as-the-project-interpreter
  138 +)
  139 +
  140 +h3. For easier installation, you can use Sqlite instead of Mysql
  141 +
  142 +By default, Mysql will be used, but then you will need to install the Mysql database server.
  143 +
  144 +Thus, in order to skip Mysql installation, use Sqlite instead as the database server (which will need no installation at all) :
  145 +
  146 +Edit pyros/settings.py and just set MYSQL variable to False, and that's it.
  147 +
88 h2. %{margin-left:0px; font-weight:bold; font-size:25px; display:block; color:red;}III - INSTALLATION% 148 h2. %{margin-left:0px; font-weight:bold; font-size:25px; display:block; color:red;}III - INSTALLATION%
89 149
90 150
@@ -92,6 +152,8 @@ h2. %{margin-left:0px; font-weight:bold; font-size:25px; display:block; color:r @@ -92,6 +152,8 @@ h2. %{margin-left:0px; font-weight:bold; font-size:25px; display:block; color:r
92 152
93 h3. Install MySql (only if necessary) 153 h3. Install MySql (only if necessary)
94 154
  155 +*Skip this step if you are using Sqlite instead of MySql*
  156 +
95 * Linux Ubuntu 157 * Linux Ubuntu
96 <pre> 158 <pre>
97 159
@@ -172,8 +234,8 @@ Open cmd (windows + R, cmd) : @@ -172,8 +234,8 @@ Open cmd (windows + R, cmd) :
172 TODO: 234 TODO:
173 </pre> 235 </pre>
174 236
175 ----  
176 - 237 +---
  238 +
177 h3. Create a Python3 virtual environment dedicated to the project (inside the project folder) 239 h3. Create a Python3 virtual environment dedicated to the project (inside the project folder)
178 240
179 <pre> 241 <pre>
@@ -190,8 +252,8 @@ $ virtualenv-3.5 venv_py35_pyros -p /opt/local/bin/python3.5 @@ -190,8 +252,8 @@ $ virtualenv-3.5 venv_py35_pyros -p /opt/local/bin/python3.5
190 252
191 </pre> 253 </pre>
192 254
193 ----  
194 - 255 +---
  256 +
195 h3. Activate the python virtual environment (from inside the project) 257 h3. Activate the python virtual environment (from inside the project)
196 258
197 <pre> 259 <pre>
@@ -229,8 +291,10 @@ Installing collected packages: wheel @@ -229,8 +291,10 @@ Installing collected packages: wheel
229 Successfully installed wheel-0.29.0 291 Successfully installed wheel-0.29.0
230 292
231 293
232 -</pre>  
233 - 294 +</pre>
  295 +
  296 +---
  297 +
234 h3. Install the needed Python packages (from within the virtual environment) 298 h3. Install the needed Python packages (from within the virtual environment)
235 299
236 First, be sure that the virtual environment is activated: 300 First, be sure that the virtual environment is activated:
@@ -356,7 +420,6 @@ YES !!! @@ -356,7 +420,6 @@ YES !!!
356 $ pip install mysqlclient 420 $ pip install mysqlclient
357 Collecting mysqlclient 421 Collecting mysqlclient
358 Downloading mysqlclient-1.3.7.tar.gz (79kB) 422 Downloading mysqlclient-1.3.7.tar.gz (79kB)
359 - 100% |████████████████████████████████| 81kB 1.5MB/s  
360 Complete output from command python setup.py egg_info: 423 Complete output from command python setup.py egg_info:
361 /bin/sh: 1: mysql_config: not found 424 /bin/sh: 1: mysql_config: not found
362 Traceback (most recent call last): 425 Traceback (most recent call last):
@@ -394,246 +457,113 @@ YES !!! @@ -394,246 +457,113 @@ YES !!!
394 457
395 </pre> 458 </pre>
396 459
397 ----  
398 -  
399 -h3. Test the project  
400 - 460 + * => Issue under Windows
401 <pre> 461 <pre>
  462 +Same message as the issue for Mac.
402 463
403 -$ cd src/ 464 +Go to http://www.lfd.uci.edu/~gohlke/pythonlibs/#mysqlclient to download the newest mysqlclient wheel
404 465
405 -$ ./manage.py runserver  
406 -(or gunicorn pyros.wsgi)  
407 -==> http://localhost:8000  
408 -...  
409 -...  
410 -Ctrl-c 466 +$ pip install path\to\mysqlclient\wheel
411 467
  468 +No need to redo "pip install mysqlclient"
412 </pre> 469 </pre>
413 470
414 -  
415 -  
416 ----  
417 -  
418 -h2. %{margin-left:0px; font-weight:bold; font-size:25px; display:block; color:red;}IV - CONFIGURATION of the Django Back Office (administration interface)%  
419 -  
420 --- 471 ---
421 472
422 -h3. Back Office setup 473 +h3. (Eclipse only) Set the Python3 virtual environment as the project interpreter
423 474
424 - * Prerequisites in src/pyros/settings.py : 475 +clic droit sur projet / Properties / PyDev - Interpreter/Grammar :
  476 +Grammar version : 3
425 477
426 - * INSTALLED_APPS must (at least) contain : 478 +Interpreter : click on « click here to configure an interpreter not listed »
427 479
428 - * django.contrib.admin  
429 - * django.contrib.auth  
430 - * django.contrib.contenttypes  
431 - * django.contrib.sessions 480 +click on « New » :
  481 +- Interpreter name : venv_py35_pyros
  482 +- Interpreter executable : click on « Browse »
  483 + Select your private/venv_py35_pyros/bin/python3.5 executable
  484 + click OK
  485 + click OK again
432 486
433 - * MIDDLEWARES must (at least) contain : 487 +Interpreter: select now venv_py35_pyros from the list
434 488
435 - * django.contrib.sessions.middleware.SessionMiddleware  
436 - * django.middleware.common.CommonMiddleware  
437 - * django.contrib.auth.middleware.AuthenticationMiddleware  
438 -  
439 - * At least one 'python manage.py migrate' must have been executed 489 +---
440 490
441 - * Create a superuser for the administration : 491 +h3. Run the project
442 492
443 -<pre>  
444 -$ python manage.py createsuperuser  
445 -</pre> 493 +TODO: more details... (notamment sur localhost:8000/admin)
446 494
447 -* For each app of the project, fill the admin.py file : 495 +h4. From the terminal
448 496
449 <pre> 497 <pre>
450 -from django.contrib import admin  
451 -from app.models import Model1, Model2  
452 498
453 -admin.site.register(Model1)  
454 -admin.site.register(Model2)  
455 -</pre>  
456 -  
457 -*Reminder* : each application must be registered in the settings.py INSTALLED_APPS variable.  
458 -  
459 -* For each model in models.py, add a '__str__()' method in order to identify the object on the back office. Example :  
460 -  
461 -<pre>  
462 -class UserLevel(models.Model):  
463 - name = models.CharField(max_length=45, blank=True, null=True)  
464 - desc = models.TextField(blank=True, null=True)  
465 - priority = models.IntegerField(blank=True, null=True)  
466 - quota = models.FloatField(blank=True, null=True)  
467 -  
468 - class Meta:  
469 - managed = True  
470 - db_table = 'userlevel'  
471 -  
472 - def __str__(self):  
473 - return (str(self.name))  
474 -</pre> 499 +$ cd src/
475 500
476 -*Naming convention* : Use self.name when possible, the creation time/date otherwise. Example : 501 +$ ./manage.py runserver
  502 +(or gunicorn pyros.wsgi)
  503 +==> http://localhost:8000
  504 +...
  505 +...
  506 +Ctrl-c
477 507
478 -<pre>  
479 -class SiteWatch(models.Model):  
480 - updated = models.DateTimeField(blank=True, null=True)  
481 - lights = models.CharField(max_length=45, blank=True, null=True)  
482 - dome = models.CharField(max_length=45, blank=True, null=True)  
483 - doors = models.CharField(max_length=45, blank=True, null=True)  
484 - temperature = models.FloatField(blank=True, null=True)  
485 -  
486 - class Meta:  
487 - managed = True  
488 - db_table = 'sitewatch'  
489 -  
490 - def __str__(self):  
491 - return (str(self.updated))  
492 </pre> 508 </pre>
493 509
494 ----  
495 -  
496 -h3. Adaptation of the one-to-many and many-to-many display  
497 -  
498 -* The one-to-many relationships are the following (One.many format) :  
499 -  
500 - * Schedule.sequences  
501 - * Request.sequences  
502 - * Sequence.albums  
503 - * Album.plans  
504 - * Plan.images  
505 - * Telescope.detectors  
506 - * Detector.filters  
507 - * NrtAnalysis.images  
508 - * Filter.plans  
509 - * Detector.albums  
510 - * UserLevel.users  
511 - * Country.users  
512 - * ScientificProgram.requests  
513 - * User.requests  
514 - * StrategyObs.alerts  
515 - * SequenceType.sequences  
516 -  
517 -* For each "many", create a new class in admin.py just after the imports, following these examples :  
518 -  
519 -<pre>  
520 -  
521 -For Schedule.sequences, Request.sequences and Sequentype.sequences, we will need :  
522 -  
523 -class SequenceInline(admin.TabularInline):  
524 - model = Sequence  
525 - fields = ("name",)  
526 - show_change_link = True  
527 -  
528 -  
529 -For Sequence.albums and Detector.albums, we will need :  
530 -  
531 -class AlbumInline(admin.TabularInline):  
532 - model = Album  
533 - fields = ("name",)  
534 - show_change_link = True  
535 - 510 +h4. From Eclipse
536 511
537 -For StrategyObs.alerts, we will need : 512 +Right clic on project -> Django/Custom command/runserver
538 513
539 -class AlertInline(admin.TabularInline):  
540 - model = Alert  
541 - fields = ("request.name",) # there is no 'name' attribute in the Alert model  
542 - show_change_link = True  
543 -  
544 -</pre>  
545 -  
546 -* For each "One", declare a new class in admin.py, just after the "Inlines" class declaration, as done in the following examples : 514 +Error on Ubuntu :
547 515
548 <pre> 516 <pre>
549 -For Request.sequences :  
550 -  
551 -class RequestAdmin(admin.ModelAdmin):  
552 - inlines = [  
553 - SequenceInline,  
554 - ]  
555 517
556 -For Detector.filters and Detector.albums :  
557 -  
558 -class DetectorAdmin(admin.ModelAdmin):  
559 - inlines = [  
560 - FilterInline,  
561 - AlbumInline,  
562 - ] 518 +Traceback (most recent call last):
  519 + File "/home/carens_p/git/pyros/src/manage.py", line 8, in <module>
  520 + from django.core.management import execute_from_command_line
  521 +ImportError: No module named 'django'
563 522
564 </pre> 523 </pre>
565 524
  525 +Project -> Properties -> Pydev interpreter -> Clic here to configure an interpreter not listed
566 526
567 -* The many-to-many relationships are the following : 527 +select venv_py35_pyros
568 528
569 - * ScientificProgram - User  
570 - * ScheduleHistory - Sequence 529 +In Libraries, clic on 'New folder', then select your virtualenv's lib/python3.5/site-packages folder.
571 530
572 -* For each many-to-many relationship, declare a new "Inline" class in admin.py just after the imports, like this : 531 +OK -> re-select venv_py35_pyros in 'Interpreter' dropdown menu
573 532
574 -<pre>  
575 -For ScientificProgram - User : 533 +Then right clic on project -> Django/Custom command/runserver
576 534
577 -class UserAndSPInline(admin.TabularInline):  
578 - model = ScientificProgram.users.through 535 +check http://localhost:8000/
579 536
580 537
581 -For ScheduleHistory - Sequence 538 +---
  539 +
  540 +h2. %{margin-left:0px; font-weight:bold; font-size:25px; display:block; color:red;}IV - TEST%
582 541
583 -class SequenceAndSHInline(admin.TabularInline):  
584 - model = ScheduleHistory.sequences.through 542 +Tests are classes declared in all apps' test.py file. The test classes inherit from django.test.TestCase
585 543
586 -</pre> 544 +You can run the tests suite, just to be sure that the software is well installed.
587 545
588 -+Note :+ The order in the line "model = ScientificProgram.users.through" is very important : the first model (ScientificProgram) is the one in which is declared the ManyToManyField relationship. 546 +h3. From Terminal
589 547
590 -* For each many-to-many relationship, declare two new classes in admin.py, just after the inlines, like in the following examples :  
591 548
592 <pre> 549 <pre>
593 -For the ScheduleHistory - Sequence relationship :  
594 -  
595 -class ScheduleHistoryAdmin(admin.ModelAdmin):  
596 - inlines = [  
597 - SequenceAndSHInline,  
598 - ]  
599 - exclude = ('sequences',) # ScheduleHistory declares the ManyToManyField, and we want to replace its display in the back office, so we won't display the default field  
600 -  
601 -class SequenceAdmin(admin.ModelAdmin):  
602 - inlines = [  
603 - AlbumInline, # This is the Inline for the one-to-many relationship Sequence.albums  
604 - SequenceAndSHInline,  
605 - ]  
606 -  
607 -For the ScientificProgram - User relationship :  
608 -  
609 -class ScientificProgramAdmin(admin.ModelAdmin):  
610 - inlines = [  
611 - RequestInline,  
612 - UserAndSPInline,  
613 - ]  
614 - exclude = ('users',) # Same as ScheduleHistory  
615 -  
616 -class UserAdmin(admin.ModelAdmin):  
617 - inlines = [  
618 - RequestInline, # This is the Inline for the one-to-many relationship User.requests  
619 - UserAndSPInline,  
620 - ] 550 +$ cd src/
621 551
622 -</pre> 552 +$ ./manage.py test
623 553
624 -* For each ModelAdmin class in the admin.py, change the registering line 554 +Ran 5 tests in 0.093s
625 555
626 -<pre>  
627 -admin.site.register(Album) 556 +OK
628 </pre> 557 </pre>
629 558
630 -to 559 +h3. From Eclipse:
631 560
632 -<pre>  
633 -admin.site.register(Album, AlbumAdmin)  
634 -</pre>  
635 -  
636 -h2. %{margin-left:0px; font-weight:bold; font-size:25px; display:block; color:red;}V - INSTALLATION FROM THE BEGINNING (for dev only, history of the initial project creation)% 561 +* Right-clic on the project / Django / Run Django tests
  562 +
  563 +* Right-clic on the project / Django / Custom command / ...
637 564
  565 +h3. Custom commands :
638 566
639 -[[pyros_install_from_start|Pyros installation from the beginning]] 567 +$ [./manage.py] test app.tests # Run tests for the application 'app'
  568 +$ [./manage.py] test app.tests.ModelTests # Run test methods declared in the class app.tests.ModelTests
  569 +$ [./manage.py] test app.tests.ModelTests.test_method # Only run the method test_method declared in app.tests.ModelTests
640 \ No newline at end of file 570 \ No newline at end of file