blob: c3a9848ca5f9bebcaf1fcb6018e7c0bfcf209bb8 (
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
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
|
# genenetwork3
GeneNetwork3 REST API for data science and machine learning
## Installation
#### Using guix
Simply load up the environment (for development purposes):
```bash
guix environment --load=guix.scm
```
Also, make sure you have the [guix-bioinformatics](https://git.genenetwork.org/guix-bioinformatics/guix-bioinformatics) channel set up.
```bash
env GUIX_PACKAGE_PATH=~/guix-bioinformatics/ ~/.config/guix/current/bin/guix environment --load=guix.scm
python3
import redis
```
Better run a proper container
```
env GUIX_PACKAGE_PATH=~/guix-bioinformatics/ ~/.config/guix/current/bin/guix environment -C --network --load=guix.scm
```
If you get a Guix error, such as `ice-9/boot-9.scm:1669:16: In procedure raise-exception:
error: python-sqlalchemy-stubs: unbound variable` it typically means an update to guix latest is required (i.e., guix pull):
```
guix pull
source ~/.config/guix/current/etc/profile
```
and try again.
See also instructions in [.guix.scm](.guix.scm).
#### Running Tests
(assuming you are in a guix container; otherwise use venv!)
To run tests:
```bash
python -m unittest discover -v
```
Running pylint:
```bash
pylint *py tests gn3
```
Running mypy(type-checker):
```bash
mypy .
```
#### Running the flask app
To spin up the server on its own (for development):
```bash
env FLASK_DEBUG=1 FLASK_APP="main.py" flask run --port=8080
```
And test with
```
curl localhost:8080/api/version
"1.0"
```
To run with gunicorn
```
gunicorn --bind 0.0.0.0:8080 wsgi:app
```
consider the following options for development `--bind 0.0.0.0:$SERVER_PORT --workers=1 --timeout 180 --reload wsgi`.
And for the scalable production version run
```
gunicorn --bind 0.0.0.0:8080 --workers 8 --keep-alive 6000 --max-requests 10 --max-requests-jitter 5 --timeout 1200 wsgi:app
```
##### Using python-pip
IMPORTANT NOTE: we do not recommend using pip tools, use Guix instead
1. Prepare your system. You need to make you have python > 3.8, and
the ability to install modules.
2. Create and enter your virtualenv:
```bash
virtualenv --python python3 venv
. venv/bin/activate
```
3. Install the required packages
```bash
# The --ignore-installed flag forces packages to
# get installed in the venv even if they existed
# in the global env
pip install -r requirements.txt --ignore-installed
```
#### A note on dependencies
Make sure that the dependencies in the `requirements.txt` file match those in
guix. To freeze dependencies:
```bash
# Consistent way to ensure you don't capture globally
# installed packages
pip freeze --path venv/lib/python3.8/site-packages > requirements.txt
```
|