blob: 66c780d827a944a5565166360ceb6835c4550e48 (
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
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
|
# 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).
#### Using a Guix profile (or rolling back)
Create a new profile with
```
env GUIX_PACKAGE_PATH=~/guix-bioinformatics/ ~/.config/guix/current/bin/guix package -i genenetwork3 -p ~/opt/genenetwork3
```
and load the profile settings with
```
source ~/opt/genenetwork3/etc/profile
start server...
```
Note that GN2 profiles include the GN3 profile (!). To roll genenetwork3 back you can use either in the same fashion (probably best to start a new shell first)
```
bash
source ~/opt/genenetwork2-older-version/etc/profile
set|grep store
run tests, server etc...
```
#### 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
```
|