Metascheduler for TPV as Service
Create a venv
python -m venv .venv
source .venv/bin/activate
pip install -r requirements.txt
Run the API locally:
uvicorn main:app --reload
Testing the API with input data:
SwaggerUI: http://127.0.0.1:8000/docs Try out > Fill out the request body: Request body:
{
"destinations": [
{
"id": "pulsar_italy",
"abstract": false,
"runner": "general_pulsar_1",
"destination_name_override": "pulsar_italy",
"cores": null,
"mem": null,
"gpus": null,
"min_cores": null,
"min_mem": null,
"min_gpus": null,
"max_cores": null,
"max_mem": null,
"max_gpus": null,
"min_accepted_cores": null,
"min_accepted_mem": null,
"min_accepted_gpus": null,
"max_accepted_cores": 8,
"max_accepted_mem": 32,
"max_accepted_gpus": null,
"env": null,
"params": null,
"resubmit": null,
"scheduling": {
"require": ["pulsar"],
"prefer": [],
"accept": ["general"],
"reject": []
},
"inherits": null,
"context": {
"latitude": 50.0689816,
"longitude": 19.9070188 },
"rules": {},
"tags": null,
"queued_job_count": 10
},
{
"id": "slurm_poland",
"abstract": false,
"runner": "slurm",
"destination_name_override": "slurm_poland",
"cores": null,
"mem": null,
"gpus": null,
"min_cores": null,
"min_mem": null,
"min_gpus": null,
"max_cores": null,
"max_mem": null,
"max_gpus": null,
"min_accepted_cores": null,
"min_accepted_mem": null,
"min_accepted_gpus": null,
"max_accepted_cores": 16,
"max_accepted_mem": 64,
"max_accepted_gpus": null,
"env": null,
"params": null,
"resubmit": null,
"scheduling": {
"require": [],
"prefer": [],
"accept": ["slurm"],
"reject": []
},
"inherits": null,
"context": {
"latitude": 51.9189046,
"longitude": 19.1343786 },
"rules": {},
"tags": null,
"queued_job_count": 8
}
],
"objectstores": {
"object_store_italy_S3_01": {
"latitude": 50.0689816,
"longitude": 19.9070188,
"other_stuff_that_we_find_useful": "foobar"
},
"object_store_poland": {
"latitude": 51.9189046,
"longitude": 19.1343786,
"other_stuff_that_we_find_useful": "foobar"
}
},
"dataset_attributes": {
"dataset_italy": {
"object_store_id": "object_store_italy_S3_01",
"size": 12345678
},
"dataset_poland": {
"object_store_id": "object_store_poland",
"size": 123456789
}
}
}
curl
The Swagger UI can give you a curl version of your request after executing
Using a python script with the requests or httpx library
There is an example of how to do this with TPV:
tpv-metascheduler-api/example_tpv_config_locations_api.yml
This config can be set up with a galaxy instance or by cloning the TPV repo (the example currently depends on an open PR to this repo)
test/test_scenario_esg_group_user_api
contains a test that has a similar request as above to test out:
# Clone the remote repository
git clone https://github.com/pauldg/total-perspective-vortex.git
# Change into the cloned repository directory
cd total-perspective-vortex
# Checkout the desired remote branch
git checkout -b location_test origin/location_test
# Create a venv for testing
python -m venv .venv
source .venv/bin/activate
pip install -r requirements_test.txt
# Run pytest for the api
pytest -rPv tests/test_scenarios_locations.py::TestScenarios::test_scenario_esg_group_user_api