mirror of
https://github.com/Novartis/cellxgene-gateway.git
synced 2026-10-10 04:30:55 +08:00
added unit test
This commit is contained in:
@@ -65,6 +65,7 @@ Here's what the environment variables mean:
|
|||||||
* `CELLXGENE_DATA` - a directory that can contain subdirectories with `.h5ad` data files, *without* trailing slash, e.g. `/mnt/cellxgene_data`
|
* `CELLXGENE_DATA` - a directory that can contain subdirectories with `.h5ad` data files, *without* trailing slash, e.g. `/mnt/cellxgene_data`
|
||||||
* `GATEWAY_HOST` - the hostname and port that the gateway will run on, typically `localhost:5005` if running locally
|
* `GATEWAY_HOST` - the hostname and port that the gateway will run on, typically `localhost:5005` if running locally
|
||||||
* `GATEWAY_PROTOCOL` - typically http when running locally, can be https when deployed if the gateway is behind a load balancer or reverse proxy.
|
* `GATEWAY_PROTOCOL` - typically http when running locally, can be https when deployed if the gateway is behind a load balancer or reverse proxy.
|
||||||
|
* `GATEWAY_EXTRA_SCRIPTS` - (optional) JSON array of script paths, will be embedded into each page and forwarded with `--scripts` to cellxgene server
|
||||||
|
|
||||||
The defaults should be fine if you set up a venv and cellxgene_data folder as above.
|
The defaults should be fine if you set up a venv and cellxgene_data folder as above.
|
||||||
|
|
||||||
@@ -73,11 +74,11 @@ The defaults should be fine if you set up a venv and cellxgene_data folder as ab
|
|||||||
The current paradigm for customization is to modify files during a build or deployment phase:
|
The current paradigm for customization is to modify files during a build or deployment phase:
|
||||||
|
|
||||||
* To modify CSS or JS on particular gateway pages, overwrite or append to the templates
|
* To modify CSS or JS on particular gateway pages, overwrite or append to the templates
|
||||||
* To add script tags such as for user analytics to all pages, overwrite the extra_scripts.py file.
|
* To add script tags such as for user analytics to all pages, set GATEWAY_EXTRA_SCRIPTS
|
||||||
* these scripts will also be run on the pages served by cellxgene server via the --scripts parameter
|
* these scripts will also be run on the pages served by cellxgene server via the --scripts parameter
|
||||||
* See https://github.com/chanzuckerberg/cellxgene/pull/680 for details on --scripts parameter
|
* See https://github.com/chanzuckerberg/cellxgene/pull/680 for details on --scripts parameter
|
||||||
|
|
||||||
Currently we use a build.sh that copies the gateway to a "build" directory before modifying with sed and the like.
|
Currently we use a bash script that copies the gateway to a "build" directory before modifying templates with sed and the like. There is probably a better way.
|
||||||
|
|
||||||
# Development
|
# Development
|
||||||
|
|
||||||
@@ -106,6 +107,12 @@ python setup.py develop
|
|||||||
|
|
||||||
For convenience, the code repo includes a `run.sh.example` shell script to run the gateway.
|
For convenience, the code repo includes a `run.sh.example` shell script to run the gateway.
|
||||||
|
|
||||||
|
## Running Tests
|
||||||
|
|
||||||
|
```bash
|
||||||
|
python -m unittest discover tests
|
||||||
|
```
|
||||||
|
|
||||||
## Running Linters
|
## Running Linters
|
||||||
|
|
||||||
pip install isort flake8 black
|
pip install isort flake8 black
|
||||||
|
|||||||
+16
-15
@@ -24,21 +24,22 @@ env_vars = {
|
|||||||
"GATEWAY_IP": ip,
|
"GATEWAY_IP": ip,
|
||||||
}
|
}
|
||||||
|
|
||||||
if not all(env_vars.values()):
|
def validate():
|
||||||
raise ValueError(
|
if not all(env_vars.values()):
|
||||||
f"""
|
raise ValueError(
|
||||||
Please ensure that environment variables are set correctly.
|
f"""
|
||||||
The ones with None below are missing and need to be set.
|
Please ensure that environment variables are set correctly.
|
||||||
|
The ones with None below are missing and need to be set.
|
||||||
|
|
||||||
{env_vars}
|
{env_vars}
|
||||||
|
|
||||||
Set them at the terminal before running the gateway.
|
Set them at the terminal before running the gateway.
|
||||||
An example is:
|
An example is:
|
||||||
|
|
||||||
export CELLXGENE_LOCATION=~/anaconda/envs/cellxgene-dev/bin/cellxgene
|
export CELLXGENE_LOCATION=~/anaconda/envs/cellxgene-dev/bin/cellxgene
|
||||||
export CELLXGENE_DATA=../cellxgene_data
|
export CELLXGENE_DATA=../cellxgene_data
|
||||||
export GATEWAY_HOST=localhost:5005
|
export GATEWAY_HOST=localhost:5005
|
||||||
export GATEWAY_PROTOCOL=http
|
export GATEWAY_PROTOCOL=http
|
||||||
export GATEWAY_IP=127.0.0.1
|
export GATEWAY_IP=127.0.0.1
|
||||||
"""
|
"""
|
||||||
)
|
)
|
||||||
|
|||||||
@@ -8,10 +8,11 @@
|
|||||||
# the specific language governing permissions and limitations under the License.
|
# the specific language governing permissions and limitations under the License.
|
||||||
|
|
||||||
from cellxgene_gateway import env
|
from cellxgene_gateway import env
|
||||||
|
from json import loads
|
||||||
|
|
||||||
def get_extra_scripts():
|
def get_extra_scripts():
|
||||||
# can be array of script tags to inject on every page, e.g. for google analytics could be
|
# can be array of script tags to inject on every page, e.g. for google analytics could be
|
||||||
# ['https://www.googletagmanager.com/gtag/js?id=UA-123456-2',
|
# ['https://www.googletagmanager.com/gtag/js?id=UA-123456-2',
|
||||||
# f"{env.gateway_protocol}://{env.gateway_host}/static/js/google_ua.js"]
|
# f"{env.gateway_protocol}://{env.gateway_host}/static/js/google_ua.js"]
|
||||||
# where google_ua.js is a script you add to the static/js folder prior to deployment.
|
# where google_ua.js is a script you add to the static/js folder prior to deployment.
|
||||||
return [] if env.extra_scripts is None else [p.strip() for p in env.extra_scripts.split(",") if len(p.strip()) > 0]
|
return [] if env.extra_scripts is None else loads(env.extra_scripts)
|
||||||
|
|||||||
@@ -184,6 +184,7 @@ def do_GET(path):
|
|||||||
|
|
||||||
|
|
||||||
def main():
|
def main():
|
||||||
|
env.validate()
|
||||||
background_thread = Thread(target=PruneProcessCache(cache))
|
background_thread = Thread(target=PruneProcessCache(cache))
|
||||||
background_thread.start()
|
background_thread.start()
|
||||||
|
|
||||||
|
|||||||
@@ -0,0 +1,23 @@
|
|||||||
|
import unittest
|
||||||
|
from unittest.mock import MagicMock, patch
|
||||||
|
from cellxgene_gateway.extra_scripts import get_extra_scripts
|
||||||
|
|
||||||
|
class TestExtraScripts(unittest.TestCase):
|
||||||
|
@patch('cellxgene_gateway.env.extra_scripts', new='["abc","def"]')
|
||||||
|
def test_GIVEN_two_scripts_THEN_returns_two_strings(self):
|
||||||
|
self.assertEqual(get_extra_scripts(), ['abc', 'def'])
|
||||||
|
|
||||||
|
@patch('cellxgene_gateway.env.extra_scripts', new='["abc", "def"]')
|
||||||
|
def test_GIVEN_two_scripts_space_THEN_returns_two_strings(self):
|
||||||
|
self.assertEqual(get_extra_scripts(), ['abc', 'def'])
|
||||||
|
|
||||||
|
@patch('cellxgene_gateway.env.extra_scripts', new=None)
|
||||||
|
def test_GIVEN_none_THEN_returns_empty_array(self):
|
||||||
|
self.assertEqual(get_extra_scripts(), [])
|
||||||
|
|
||||||
|
@patch('cellxgene_gateway.env.extra_scripts', new='[]')
|
||||||
|
def test_GIVEN_empty_string_THEN_returns_empty_array(self):
|
||||||
|
self.assertEqual(get_extra_scripts(), [])
|
||||||
|
|
||||||
|
if __name__ == '__main__':
|
||||||
|
unittest.main()
|
||||||
Reference in New Issue
Block a user