Commit e62cb00ea9774296f06b35a38dd799bfd8ccdb48

Authored by Miguel Barão
1 parent 0be0f447
Exists in master and in 1 other branch dev

- update README.md.

- minor changes in the code.
Showing 4 changed files with 61 additions and 33 deletions   Show diff stats
@@ -2,4 +2,5 @@ __pycache__/ @@ -2,4 +2,5 @@ __pycache__/
2 .DS_Store 2 .DS_Store
3 demo/ans 3 demo/ans
4 demo/students.db 4 demo/students.db
5 -LIXO  
6 \ No newline at end of file 5 \ No newline at end of file
  6 +LIXO
  7 +static/libs
@@ -17,39 +17,44 @@ The webserver is a python application and requires `python3.7` and `pip` to be i @@ -17,39 +17,44 @@ The webserver is a python application and requires `python3.7` and `pip` to be i
17 - SQLAlchemy 17 - SQLAlchemy
18 - bcrypt 18 - bcrypt
19 19
20 -These can be installed for a single user (recommended), in a python virtual environment or system wide. 20 +These can be installed for a single user, in a python virtual environment or system wide.
21 21
22 -#### Installing packages for a single user (recommended) 22 +#### Installing packages for a single user
23 23
24 ```.bash 24 ```.bash
25 -pip3 install --user tornado mistune pyyaml pygments sqlalchemy bcrypt markdown 25 +pip3 install --user tornado mistune pyyaml pygments sqlalchemy bcrypt
26 ``` 26 ```
27 27
28 #### Installing packages in a virtual environment (alternative) 28 #### Installing packages in a virtual environment (alternative)
29 29
30 ```bash 30 ```bash
31 -pyvenv-3.6 venv/perguntations # or other virtualenv directory  
32 -source venv/perguntations/bin/activate # activate virtualenv 31 +python3 -m venv PATH/TO/VENV/perguntations
  32 +source PATH/TO/VENV/perguntations/bin/activate # activate virtualenv
33 33
34 pip3 install tornado mistune pyyaml pygments sqlalchemy bcrypt markdown 34 pip3 install tornado mistune pyyaml pygments sqlalchemy bcrypt markdown
35 ``` 35 ```
36 36
37 #### Installing packages system wide (alternative) 37 #### Installing packages system wide (alternative)
38 38
39 -I personally prefer python packages to be installed for a single user, but if a system wide installation is required, it is probably better to use the operating system package manager instead of `pip`: 39 +I personally prefer python packages to be installed for a single user, but if a system wide installation is required, the operating system package manager should be used:
40 40
41 Linux: 41 Linux:
42 42
43 ```bash 43 ```bash
44 -apt-get install py37-tornado py37-mistune? py37-yaml py37-pygments... 44 +apt install python3-tornado python3-mistune python3-yaml python3-pygments...
45 ``` 45 ```
46 46
47 macOS macports: 47 macOS macports:
48 48
49 ```bash 49 ```bash
50 -port install py37-py37-tornado py37-mistune? py37-yaml py37-pygments... 50 +port install py37-tornado py37-mistune py37-yaml py37-pygments...
51 ``` 51 ```
52 52
  53 +FreeBSD:
  54 +
  55 +```bash
  56 +pkg install py37-tornado py37-mistune py37-yaml py37-pygments...
  57 +```
53 58
54 ### 1.2 Install and setup perguntations 59 ### 1.2 Install and setup perguntations
55 60
@@ -65,6 +70,22 @@ where USERNAME is your account on bitbucket. @@ -65,6 +70,22 @@ where USERNAME is your account on bitbucket.
65 The server will run an https server and requires valid certificates. 70 The server will run an https server and requires valid certificates.
66 To generate certificates, there are two possibilities: public server with static IP address or a private server. 71 To generate certificates, there are two possibilities: public server with static IP address or a private server.
67 72
  73 +The thirdparty javascript libraries are not included in the repository. They should be downloaded and installed in the directory perguntations/static/lib.
  74 +
  75 +The following libraries are currently necessary (as of 24/1/2019):
  76 +
  77 +```
  78 +DataTables
  79 +MDB-Free_4
  80 +MathJax-2.7.5
  81 +bootstrap-4.2.1-dist
  82 +codemirror-5.42.2
  83 +fontawesome-free-5.6.3-web
  84 +jquery-3.3.1.min.js
  85 +popper.min.js
  86 +```
  87 +
  88 +
68 #### Generating certificates for a public server (FreeBSD) 89 #### Generating certificates for a public server (FreeBSD)
69 90
70 ```sh 91 ```sh
@@ -153,6 +174,7 @@ Ports 80 and 443 are reserved for the root user and and this software _should NO @@ -153,6 +174,7 @@ Ports 80 and 443 are reserved for the root user and and this software _should NO
153 174
154 ```.bash 175 ```.bash
155 iptables -t nat -I PREROUTING -i eth0 -p tcp --dport 80 -j REDIRECT --to-ports 8080 176 iptables -t nat -I PREROUTING -i eth0 -p tcp --dport 80 -j REDIRECT --to-ports 8080
  177 +FIXME: also for port 443...
156 ``` 178 ```
157 179
158 Explanation: 180 Explanation:
@@ -176,7 +198,9 @@ Edit `/etc/pf.conf`: @@ -176,7 +198,9 @@ Edit `/etc/pf.conf`:
176 198
177 or `ext_if="vtnet0"` for guest additions under virtual box. 199 or `ext_if="vtnet0"` for guest additions under virtual box.
178 200
179 -Edit `rc.conf` 201 +Start firewall with `sudo service pf start`.
  202 +
  203 +Optionally, to activate pf on boot, edit `rc.conf`:
180 204
181 pf_enable="YES" 205 pf_enable="YES"
182 pf_flags="" 206 pf_flags=""
@@ -187,11 +211,10 @@ Edit `rc.conf` @@ -187,11 +211,10 @@ Edit `rc.conf`
187 pflog_flags="" 211 pflog_flags=""
188 pflog_logfile="/var/log/pflog" 212 pflog_logfile="/var/log/pflog"
189 213
190 -Reboot.  
191 214
192 ## Troubleshooting 215 ## Troubleshooting
193 216
194 -* The server tries to run `python3.6` so this command must be accessible from user accounts. 217 +* The server tries to run `python3` so this command must be accessible from user accounts. Currently, the minimum supported python version is 3.6.
195 * If you are getting any `UnicodeEncodeError` type of errors that's because the terminal is not supporting UTF-8. This error may occur when a unicode character is printed to the screen by the server or, when running question generator or correction scripts, a message is piped between the server and the scripts that includes unicode characters. 218 * If you are getting any `UnicodeEncodeError` type of errors that's because the terminal is not supporting UTF-8. This error may occur when a unicode character is printed to the screen by the server or, when running question generator or correction scripts, a message is piped between the server and the scripts that includes unicode characters.
196 Try running `locale` on the terminal and see if there are any error messages. Solutions: 219 Try running `locale` on the terminal and see if there are any error messages. Solutions:
197 - debian: fix it with `sudo dpkg-reconfigure locales`, select your UTF-8 locales and try again. 220 - debian: fix it with `sudo dpkg-reconfigure locales`, select your UTF-8 locales and try again.
@@ -212,4 +235,4 @@ Try running `locale` on the terminal and see if there are any error messages. So @@ -212,4 +235,4 @@ Try running `locale` on the terminal and see if there are any error messages. So
212 235
213 ### Contacts ### 236 ### Contacts ###
214 237
215 -* Miguel Barão mjsb@uevora.pt  
216 \ No newline at end of file 238 \ No newline at end of file
  239 +* Miguel Barão mjsb@uevora.pt
@@ -21,7 +21,10 @@ class Student(Base): @@ -21,7 +21,10 @@ class Student(Base):
21 questions = relationship('Question', back_populates='student') 21 questions = relationship('Question', back_populates='student')
22 22
23 def __repr__(self): 23 def __repr__(self):
24 - return 'Student:\n id: "{0}"\n name: "{1}"\n password: "{2}"'.format(self.id, self.name, self.password) 24 + return f'Student:\n\
  25 + id: "{self.id}"\n\
  26 + name: "{self.name}"\n\
  27 + password: "{self.password}"'
25 28
26 29
27 # --------------------------------------------------------------------------- 30 # ---------------------------------------------------------------------------
@@ -43,17 +46,17 @@ class Test(Base): @@ -43,17 +46,17 @@ class Test(Base):
43 questions = relationship('Question', back_populates='test') 46 questions = relationship('Question', back_populates='test')
44 47
45 def __repr__(self): 48 def __repr__(self):
46 - return 'Test:\n\  
47 - id: "{}"\n\  
48 - ref="{}"\n\  
49 - title="{}"\n\  
50 - grade="{}"\n\  
51 - state="{}"\n\  
52 - comment="{}"\n\  
53 - starttime="{}"\n\  
54 - finishtime="{}"\n\  
55 - filename="{}"\n\  
56 - student_id="{}"\n'.format(self.id, self.ref, self.title, self.grade, self.state, self.comment, self.starttime, self.finishtime, self.filename, self.student_id) 49 + return f'Test:\n\
  50 + id: "{self.id}"\n\
  51 + ref: "{self.ref}"\n\
  52 + title: "{self.title}"\n\
  53 + grade: "{self.grade}"\n\
  54 + state: "{self.state}"\n\
  55 + comment: "{self.comment}"\n\
  56 + starttime: "{self.starttime}"\n\
  57 + finishtime: "{self.finishtime}"\n\
  58 + filename: "{self.filename}"\n\
  59 + student_id: "{self.student_id}"\n'
57 60
58 61
59 # --------------------------------------------------------------------------- 62 # ---------------------------------------------------------------------------
@@ -72,14 +75,14 @@ class Question(Base): @@ -72,14 +75,14 @@ class Question(Base):
72 test = relationship('Test', back_populates='questions') 75 test = relationship('Test', back_populates='questions')
73 76
74 def __repr__(self): 77 def __repr__(self):
75 - return 'Question:\n\  
76 - id: "{}"\n\  
77 - ref: "{}"\n\  
78 - grade: "{}"\n\  
79 - starttime: "{}"\n\  
80 - finishtime: "{}"\n\  
81 - student_id: "{}"\n\  
82 - test_id: "{}"\n'.fotmat(self.id, self.ref, self.grade, self.starttime, self.finishtime, self.student_id, self.test_id) 78 + return f'Question:\n\
  79 + id: "{self.id}"\n\
  80 + ref: "{self.ref}"\n\
  81 + grade: "{self.grade}"\n\
  82 + starttime: "{self.starttime}"\n\
  83 + finishtime: "{self.finishtime}"\n\
  84 + student_id: "{self.student_id}"\n\
  85 + test_id: "{self.test_id}"\n'
83 86
84 87
85 # --------------------------------------------------------------------------- 88 # ---------------------------------------------------------------------------
@@ -168,6 +168,7 @@ class FileHandler(BaseHandler): @@ -168,6 +168,7 @@ class FileHandler(BaseHandler):
168 self.write(data) 168 self.write(data)
169 await self.flush() 169 await self.flush()
170 170
  171 + break # for loop
171 172
172 # ------------------------------------------------------------------------- 173 # -------------------------------------------------------------------------
173 # Test shown to students 174 # Test shown to students