Commit 1da435f293b01af9df0b88e19558ad5e75811e69

Authored by Miguel Barao
1 parent c8de491d
Exists in master and in 1 other branch dev

Documentation updates and changed the python3.4 to python3 so that other versions can be used

README.md
... ... @@ -3,38 +3,52 @@
3 3  
4 4 ### Requirements:
5 5  
6   -Installed using `pip3`:
  6 +The webserver is a python3 application and only requires python to be installed. Versions 3.3, 3.4 and 3.5 should be Ok. It does not require any other webserver (apache, ...)
7 7  
8   -- CherryPy (3.7.0)
9   -- Mako (1.0.1)
10   -- Markdown (2.6.2)
11   -- PyYAML (3.11)
12   -- bcrypt (2.0.0)
  8 +Installed using `pip`:
  9 +
  10 +- CherryPy (>=3.7.0)
  11 +- Mako (>=1.0.1)
  12 +- Markdown (>=2.6.2)
  13 +- PyYAML (>=3.11)
  14 +- bcrypt (>=2.0.0)
13 15  
14 16 ### System setup:
15 17  
16   -Open a terminal and navigate to a directory where this software is to be installed, e.g. `/var/www`. Then run the following commands:
  18 +Open a terminal and navigate to a directory where this software is to be installed, e.g. `/var/www` or `/home/username`.
  19 +Run the following commands:
17 20  
18   -```
19   -#!bash
  21 +```.bash
  22 +
  23 +cd WHERE/TO/PUT/THE/SOFTWARE
20 24  
21   -# get the software using git
  25 +# get software using git
22 26 git clone https://mjsb@bitbucket.org/mjsb/perguntations.git
23 27 cd perguntations
24 28  
25 29 # create database in the directory db/
26   -initdb_from_csv.py siiue.csv
  30 +./initdb_from_csv.py YOUR_CSV_FILE_HERE
27 31 mkdir db
28 32 mv students.db db
29 33  
30   -# update test configuration
31   -vi demo/test.yaml # update students_db
  34 +# update test configuration with the correct database file.
  35 +vi demo/test.yaml
  36 +# Edit line 7 to something like
  37 +# database: db/students.db
  38 +
  39 +# get help
  40 +./serve.py --help
32 41  
33 42 # run demo test
34   -./serve demo/test.yaml
  43 +./serve.py demo/test.yaml
  44 +
  45 +# open browser at http://127.0.0.1:8080/
  46 +# the professor is number 0
  47 +
  48 +# ^C to terminate the server
35 49 ```
36 50  
37   -(For the time being, also create `ans`, `questions`, `tests`, `scripts`, `sessions` in the same directory, until paths are fixed)
  51 +(FIXME For the time being, also create `ans`, `questions`, `tests`, `scripts`, `sessions` in the same directory, until paths are fixed)
38 52  
39 53 ### Contribute ###
40 54  
... ...
demo/correct-question.py
1   -#!/usr/bin/env python3.4
  1 +#!/usr/bin/env python3
2 2  
3 3 import re
4 4 import sys
... ...
demo/generate-question.py
1   -#!/usr/bin/env python3.4
  1 +#!/usr/bin/env python3
2 2  
3 3 from random import randint
4 4 import sys
... ...
demo/questions.yaml
1 1 -
2 2 ref: solar-system-jupiter
3 3 type: radio
4   - text: Which one is the largest planet?
  4 + text: Qual dos seguintes é o maior planeta?
5 5 options:
6 6 - Jupiter
7 7 - Mercury
... ... @@ -10,12 +10,12 @@
10 10 correct: 0
11 11 shuffle: True
12 12 discount: True
13   - hint: Just don't choose the wrong ones
  13 + hint: Também é o mais pesado.
14 14 # ---------------------------------------------------------------------------
15 15 -
16 16 ref: solar-system-mars
17 17 type: checkbox
18   - text: Which ones are correct?
  18 + text: Quais das seguintes expressões são verdadeiras?
19 19 options:
20 20 - $1 > 0$
21 21 - $-1 > 1$
... ... @@ -24,28 +24,28 @@
24 24 correct: [1, -1, 1, 0.5]
25 25 # optional
26 26 discount: True
27   - hint: There are three.
  27 + hint: Uma delas é falsa.
28 28 # ---------------------------------------------------------------------------
29 29 -
30 30 ref: question-v1
31 31 type: text
32   - text: What's your favorite basic color?
33   - correct: ['blue', 'green']
34   - hint: It's not red.
  32 + text: Qual é a minha cor básica favorita?
  33 + correct: ['Azul', 'Verde']
  34 + hint: Só há 3 cores básicas e não gosto de vermelho.
35 35 # ---------------------------------------------------------------------------
36 36 -
37 37 ref: question-v2
38 38 type: text_regex
39   - text: What's my favorite basic color?
40   - correct: '[bB]lue'
41   - hint: It's not red.
  39 + text: Qual é a minha cor básica favorita?
  40 + correct: '[aA]zul'
  41 + hint: O céu é...
42 42 # ---------------------------------------------------------------------------
43 43 -
44 44 ref: question-colors
45 45 type: textarea
46   - text: Write names of the three basic colors.
  46 + text: Escreva o nome de três cores básicas.
47 47 correct: correct-question.py
48   - hint: They start by RGB and order does not matter.
  48 + hint: Qualquer ordem serve.
49 49 # ---------------------------------------------------------------------------
50 50 -
51 51 ref: question-whatever
... ... @@ -58,14 +58,14 @@
58 58 -
59 59 ref: one-question
60 60 type: information
61   - text: Please do not cheat.
  61 + text: Não vale fazer batota.
62 62 # ---------------------------------------------------------------------------
63 63 -
64 64 ref: another-question
65 65 # type: information (default)
66 66 text: |
67   - The text of questions is parsed as __markdown__ and can include
68   - LaTeX formulas $\sqrt{2\pi}$ and pretty code
  67 + O texto das perguntas é escrito em __markdown__ e pode incluir formulas em
  68 + LaTeX $\sqrt{2\pi}$ e código lindinho
69 69  
70 70 ```.C
71 71 int main() {
... ...
demo/test.yaml
... ... @@ -4,7 +4,7 @@ title: Teste de Demonstração
4 4  
5 5 # database contains students+passwords, final results of the tests, and questions done
6 6 # database: path/to/students.db
7   -database: inscritos.db
  7 +database: db/students.db
8 8  
9 9 # this will generate a file for each test done. The file is like a replacement
10 10 # for a test done in paper.
... ... @@ -17,8 +17,8 @@ practice: True
17 17 # debug: False
18 18  
19 19 #-----------------------------------------------------------------------------
20   -# This is the base path applied to the questions files and all the scripts
21   -# including generators and correctors.
  20 +# Base path applied to the questions files and all the scripts
  21 +# including question generators and correctors.
22 22 # Either absolute path or relative to current directory.
23 23 path: demo
24 24 # (Note: answers are saved in a different path defined in answers_dir)
... ...
initdb_from_csv.py
1   -#!/usr/bin/env python3.4
  1 +#!/usr/bin/env python3
2 2 # -*- coding: utf-8 -*-
3 3  
4 4 import sqlite3
... ...
serve.py
1   -#!/usr/bin/env python3.4
  1 +#!/usr/bin/env python3
2 2 # -*- coding: utf-8 -*-
3 3  
4 4 # The program runs a web server where students login to answer a sequence of questions.
... ... @@ -10,14 +10,14 @@ import argparse
10 10 from os import path
11 11  
12 12 # path where this file is located
13   -server_path = path.dirname(path.realpath(__file__))
  13 +SERVER_PATH = path.dirname(path.realpath(__file__))
  14 +TEMPLATES_DIR = SERVER_PATH + '/templates'
14 15  
15 16 # my code
16 17 from myauth import AuthController, require
17 18 import test
18 19 import database
19 20  
20   -TEMPLATES_DIR = server_path + '/templates'
21 21  
22 22  
23 23 # ============================================================================
... ... @@ -153,7 +153,7 @@ class Root(object):
153 153 # ============================================================================
154 154 def parse_arguments():
155 155 argparser = argparse.ArgumentParser(description='Server for online tests. Enrolled students and tests have to be previously configured. Please read the documentation included with this software before running the server.')
156   - serverconf_file = path.normpath(path.join(server_path, 'config', 'server.conf'))
  156 + serverconf_file = path.normpath(path.join(SERVER_PATH, 'config', 'server.conf'))
157 157 argparser.add_argument('--server', default=serverconf_file, type=str, help='server configuration file')
158 158 argparser.add_argument('--debug', action='store_true',
159 159 help='Show datastructures when rendering questions')
... ... @@ -178,7 +178,7 @@ if __name__ == '__main__':
178 178  
179 179 print('=' * 79)
180 180 print('- Title: %s' % testconf['title'])
181   - print('- StudentsDB: %s' % testconf['database'])
  181 + print('- Database: %s' % testconf['database'])
182 182 print('- Questions:\n ', '\n '.join(testconf['files']))
183 183 print(' (%i questions read)' % len(testconf['questions']))
184 184 print('-' * 79)
... ... @@ -188,7 +188,7 @@ if __name__ == '__main__':
188 188 root = Root(testconf)
189 189  
190 190 # --- Mount and run server.
191   - cherrypy.config.update({'tools.staticdir.root': server_path})
  191 + cherrypy.config.update({'tools.staticdir.root': SERVER_PATH})
192 192 cherrypy.quickstart(root, '/', config=arg.server)
193 193 cherrypy.log('Terminated OK ------------------------', 'APPLICATION')
194 194 print('\n- Server terminated OK')
... ...