aboutsummaryrefslogtreecommitdiff
path: root/wqflask/utility/tools.py
blob: feb1a6743eb2631be31ed00c0dea2f9eaf86941c (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
# Tools/paths finder resolves external paths from settings and/or environment
# variables
import os

from .configuration import (
    mk_dir,
    tempdir,
    valid_bin,
    valid_file,
    valid_path,
    assert_bin,
    assert_dir,
    assert_file,
    get_setting,
    get_setting_int,
    get_setting_bool,
    assert_writable_dir)

def js_path(app, module=None):
    """
    Find the JS module in the two paths
    """
    try_gn = get_setting(app, "JS_GN_PATH") + "/" + module
    if valid_path(try_gn):
        return try_gn
    try_guix = get_setting(app, "JS_GUIX_PATH") + "/" + module
    if valid_path(try_guix):
        return try_guix
    raise "No JS path found for " + module + \
        " (if not in Guix check JS_GN_PATH)"

def reaper_command(app, guess=None):
    return get_setting(app, "REAPER_COMMAND", guess)

def gemma_command(app, guess=None):
    return assert_bin(get_setting(app, "GEMMA_COMMAND", guess))

def gemma_wrapper_command(app, guess=None):
    return assert_bin(get_setting(app, "GEMMA_WRAPPER_COMMAND", guess))

def plink_command(app, guess=None):
    return assert_bin(get_setting(app, "PLINK_COMMAND", guess))

def set_mandatory_settings(app):
    """Set up the mandatory settings."""
    ## Setup profile dependent settings: Remove these eventually ##
    GN2_PROFILE = get_setting(app, "GN2_PROFILE", os.environ.get("GN2_PROFILE"))
    app.config["GN2_PROFILE"] = GN2_PROFILE
    app.config["JS_GUIX_PATH"] = get_setting(
        app,
        "JS_GUIX_PATH",
        f"{GN2_PROFILE}/share/genenetwork2/javascript")
    app.config["REAPER_COMMAND"] = reaper_command(app)
    app.config["GEMMA_COMMAND"] = gemma_command(app, f"{GN2_PROFILE}/bin/gemma")
    assert(app.config["GEMMA_COMMAND"] is not None)
    app.config["PLINK_COMMAND"] = plink_command(
        app, f"{GN2_PROFILE}/bin/plink2")
    app.config["GEMMA_WRAPPER_COMMAND"] = gemma_wrapper_command(
        app, f"{GN2_PROFILE}/bin/gemma-wrapper")
    app.config["GUIX_GENENETWORK_FILES"] = get_setting(
        app,
        "GUIX_GENENETWORK_FILES",
        f"{GN2_PROFILE}/share/genenetwork2")
    assert_dir(app.config["JS_GUIX_PATH"])
    ## END: Setup profile dependent settings: Remove these eventually ##

    # Cached values
    app.config["GN_VERSION"] = get_setting(app, 'GN_VERSION')
    app.config["HOME"] = get_setting(app, 'HOME')
    app.config["SERVER_PORT"] = get_setting_int(app, 'SERVER_PORT')
    app.config["WEBSERVER_MODE"] = get_setting(app, 'WEBSERVER_MODE')
    app.config["GN2_BASE_URL"] = get_setting(app, 'GN2_BASE_URL')
    app.config["GN2_BRANCH_URL"] = get_setting(app, 'GN2_BRANCH_URL')
    app.config["GN_SERVER_URL"] = get_setting(app, 'GN_SERVER_URL')
    app.config["GN_PROXY_URL"] = get_setting(app, 'GN_PROXY_URL')
    app.config["GN3_LOCAL_URL"] = get_setting(app, 'GN3_LOCAL_URL')
    app.config["SQL_URI"] = get_setting(app, 'SQL_URI')
    app.config["LOG_LEVEL"] = get_setting(app, 'LOG_LEVEL')
    app.config["LOG_LEVEL_DEBUG"] = get_setting_int(app, 'LOG_LEVEL_DEBUG')
    app.config["LOG_SQL"] = get_setting_bool(app, 'LOG_SQL')
    app.config["LOG_SQL_ALCHEMY"] = get_setting_bool(app, 'LOG_SQL_ALCHEMY')
    app.config["LOG_BENCH"] = get_setting_bool(app, 'LOG_BENCH')
    app.config["LOG_FORMAT"] = "%(message)s"    # not yet in use
    app.config["USE_REDIS"] = get_setting_bool(app, 'USE_REDIS')
    app.config["REDIS_URL"] = get_setting(app, 'REDIS_URL')
    app.config["USE_GN_SERVER"] = get_setting_bool(app, 'USE_GN_SERVER')

    app.config["GENENETWORK_FILES"] = get_setting(app, 'GENENETWORK_FILES')
    app.config["JS_GN_PATH"] = get_setting(app, 'JS_GN_PATH')
    # assert_dir(JS_GN_PATH)

    app.config["GITHUB_CLIENT_ID"] = get_setting(app, 'GITHUB_CLIENT_ID')
    app.config["GITHUB_CLIENT_SECRET"] = get_setting(app, 'GITHUB_CLIENT_SECRET')
    app.config["GITHUB_AUTH_URL"] = get_setting(app, "GITHUB_AUTH_URL")
    if app.config["GITHUB_CLIENT_ID"] != 'UNKNOWN' and app.config["GITHUB_CLIENT_SECRET"]:
        app.config["GITHUB_AUTH_URL"] = (
            "https://github.com/login/oauth/authorize?"
            f"client_id={GITHUB_CLIENT_ID}"
            f"&client_secret={GITHUB_CLIENT_SECRET}")
        app.config["GITHUB_API_URL"] = get_setting(app, 'GITHUB_API_URL')

    app.config["ORCID_CLIENT_ID"] = get_setting(app, 'ORCID_CLIENT_ID')
    app.config["ORCID_CLIENT_SECRET"] = get_setting(app, 'ORCID_CLIENT_SECRET')
    app.config["ORCID_AUTH_URL"] = get_setting(app, "ORCID_AUTH_URL")
    if app.config["ORCID_CLIENT_ID"] != 'UNKNOWN' and app.config["ORCID_CLIENT_SECRET"]:
        app.config["ORCID_AUTH_URL"] = (
            "https://orcid.org/oauth/authorize?response_type=code"
            f"&scope=/authenticate&show_login=true&client_id={ORCID_CLIENT_ID}"
            f"&client_secret={ORCID_CLIENT_SECRET}"
            f"&redirect_uri={GN2_BRANCH_URL}n/login/orcid_oauth2")
        app.config["ORCID_TOKEN_URL"] = get_setting(app, 'ORCID_TOKEN_URL')


    app.config["SMTP_CONNECT"] = get_setting(app, 'SMTP_CONNECT')
    app.config["SMTP_USERNAME"] = get_setting(app, 'SMTP_USERNAME')
    app.config["SMTP_PASSWORD"] = get_setting(app, 'SMTP_PASSWORD')

    app.config["TEMPDIR"] = tempdir(app)  # defaults to UNIX TMPDIR
    assert_dir(app.config["TEMPDIR"])

    # ---- Handle specific JS modules
    app.config["JS_GUIX_PATH"] = get_setting(app, "JS_GUIX_PATH")
    assert_dir(app.config["JS_GUIX_PATH"])
    assert_dir(app.config["JS_GUIX_PATH"] + '/cytoscape-panzoom')

    app.config["CSS_PATH"] = get_setting(app, "JS_GUIX_PATH")  # The CSS is bundled together with the JS
    # assert_dir(JS_PATH)

    app.config["JS_TWITTER_POST_FETCHER_PATH"] = get_setting(
        app,
        "JS_TWITTER_POST_FETCHER_PATH",
        js_path(app, "javascript-twitter-post-fetcher"))
    assert_dir(app.config["JS_TWITTER_POST_FETCHER_PATH"])
    assert_file(app.config["JS_TWITTER_POST_FETCHER_PATH"] + "/js/twitterFetcher_min.js")

    app.config["JS_CYTOSCAPE_PATH"] = get_setting(
        app, "JS_CYTOSCAPE_PATH", js_path(app, "cytoscape"))
    assert_dir(app.config["JS_CYTOSCAPE_PATH"])
    assert_file(app.config["JS_CYTOSCAPE_PATH"] + '/cytoscape.min.js')

    # assert_file(PHEWAS_FILES+"/auwerx/PheWAS_pval_EMMA_norm.RData")

    app.config["OAUTH2_CLIENT_ID"] = get_setting(app, 'OAUTH2_CLIENT_ID')
    app.config["OAUTH2_CLIENT_SECRET"] = get_setting(app, 'OAUTH2_CLIENT_SECRET')
    return app