summaryrefslogtreecommitdiff
path: root/readme.md
blob: f52a663c9455530b6a470db6257ecd4831dd1dd3 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
Deployment
==========

Install the following packages:

  - apache2
  - python3-falcon
  - python3-ply
  - python3-psycopg2
  - python3-termcolor
  - python3-waitress
  - swi-prolog-nox
  - nodejs (>= 10.0.22)

Settings:

  - point webroot to codeq-web
  - set up reverse proxy for /ws/ to the node server:
      ProxyPass /ws/ http://localhost:8083/ws/
      ProxyPassReverse /ws/ http://localhost:8083/ws/
  - set _path_prefix in server.problems
  - set DB settings in db
  - run "npm install" inside the "web" directory to install all dependencies
    (they will be installed inside the "web" directory)

Running:

  - run prolog/runner/main.pl
  - run python/runner/main.py
  - run daemon.py
  - start the node process (node web/main.js)

Misc.
=====

Add a new problem to the database by running

    python -m scripts.add_problem

in the toplevel directory. This will ask for language and problem group (groups
can be shared between languages, e.g. Introduction can be used for both Prolog
and Python). The script will print the ID and path for the new problem.

You can test stuff in a python interpreter:

    >>> import server
    >>> session = server.user_session.authenticate_and_create_session(<user>, <pass>)
    >>> session.get_problem_data('python', 'introduction', 'fahrenheit_to_celsius')

    >>> python = session.get_python()
    >>> python.test(231, 180, '''print('-17.7')''')
    >>> python.hint(231, 180, '''print('-17.7')''')

    >>> prolog = session.get_prolog()
    >>> prolog.test(231, 96, 'sister(X,Y):- parent(P,X), parent(P,Y), female(X).')
    >>> prolog.hint(231, 96, 'sister(X,Y):- parent(P,X), parent(P,Y), female(X).')