diff --git a/api.py b/api.py index e62758b072db59306aeb149e4392343b0cca1bdd..ff82c0448cdbeb7368f10a34e129afde7cbd1450 100644 --- a/api.py +++ b/api.py @@ -22,6 +22,14 @@ def read_root(): def read_root(par1=None, par2=None): return {'success': True, 'params': {'par1': par1, 'par2': par2}} +@app.get('/paths') +def list_session_paths(): + pass + +@app.put('/paths/{path_id}') +def set_path_id(path_id: str, abs_path: str): + pass + @app.get('/restart') def restart_session() -> dict: session.restart() diff --git a/conf/defaults.py b/conf/defaults.py new file mode 100644 index 0000000000000000000000000000000000000000..c1761b7a6712bcb6a8213c4672348401c8cf8cc8 --- /dev/null +++ b/conf/defaults.py @@ -0,0 +1,14 @@ +from pathlib import Path + +root = Path('c:/Users/rhodes/projects/proj0015-model-server/resources') +paths = { + 'logs': root / 'logs' / 'session', + 'inbound_images': root / 'images' / 'inbound', + 'outbound_images': root / 'images' / 'outbound', + 'ilastik_projects': root / 'ilastik', +} + +for gk in paths.keys(): + paths[gk].mkdir(parents=True, exist_ok=True) + +# TODO: consider configuring paths via API, and this just becomes a HTTP client script \ No newline at end of file diff --git a/conf/server.py b/conf/server.py deleted file mode 100644 index 707b60ac28f42e4a0e02a22bb93802ec5f4b7b23..0000000000000000000000000000000000000000 --- a/conf/server.py +++ /dev/null @@ -1,21 +0,0 @@ -from pathlib import Path - -root = Path('c:/Users/rhodes/projects/proj0015-model-server/resources') -paths = { - 'logs': { - 'session': root / 'logs' / 'session', - }, - 'images': { - 'inbound': root / 'images' / 'inbound', - 'outbound': root / 'images' / 'outbound', - }, - 'ilastik': { - 'projects': root / 'ilastik' - } -} - -for gk in paths.keys(): - for pk in paths[gk].keys(): - paths[gk][pk].mkdir(parents=True, exist_ok=True) - -# TODO: consider configuring paths via API, and this just becomes a HTTP client script \ No newline at end of file diff --git a/model_server/ilastik.py b/model_server/ilastik.py index 54419f78195024c4b4d31e6229f77dec5118ac6a..c4b876dee2aa0a2aa29e31df87e0d0e92f3d528c 100644 --- a/model_server/ilastik.py +++ b/model_server/ilastik.py @@ -4,7 +4,7 @@ import pathlib import numpy as np import vigra -import conf.server +import conf.defaults from model_server.image import GenericImageDataAccessor, InMemoryDataAccessor from model_server.model import ImageToImageModel, ParameterExpectedError @@ -14,7 +14,7 @@ class IlastikImageToImageModel(ImageToImageModel): def __init__(self, params, autoload=True): self.project_file = str(params['project_file']) self.project_file_abspath = pathlib.Path( - conf.server.paths['ilastik']['projects'] / self.project_file, + conf.defaults.paths['ilastik_projects'] / self.project_file, ) if 'project_file' not in params or not self.project_file_abspath.exists(): raise ParameterExpectedError('Ilastik model expects a project (*.ilp) file') diff --git a/model_server/session.py b/model_server/session.py index 1a9b38b9d3cf01c6f24ec5a5af3bf9818e2f47f6..989fc1b3f0d1297ebfcd9a4ffdccf802f5050d79 100644 --- a/model_server/session.py +++ b/model_server/session.py @@ -5,7 +5,7 @@ from pathlib import Path from time import strftime, localtime from typing import Dict -from conf.server import paths +from conf.defaults import paths from model_server.model import Model from model_server.share import SharedImageDirectory from model_server.workflow import WorkflowRunRecord @@ -17,9 +17,9 @@ class Session(object): """ Singleton class for a server session that persists data between API calls """ - inbound = SharedImageDirectory(paths['images']['inbound']) - outbound = SharedImageDirectory(paths['images']['outbound']) - where_records = Path(paths['logs']['session']) + inbound = SharedImageDirectory(paths['inbound_images']) + outbound = SharedImageDirectory(paths['outbound_images']) + where_records = paths['logs'] def __new__(cls): if not hasattr(cls, 'instance'): diff --git a/tests/test_api.py b/tests/test_api.py index b7835ffd2e5b7f4e24834d690c6223d9f21b1791..8c6c248bdecb847943b668ca755cab57b223bdc7 100644 --- a/tests/test_api.py +++ b/tests/test_api.py @@ -22,11 +22,10 @@ class TestServerBaseClass(unittest.TestCase): @staticmethod def copy_input_file_to_server(): - import pathlib from shutil import copyfile - from conf.server import paths + from conf.defaults import paths - outpath = pathlib.Path(paths['images']['inbound'] / czifile['filename']) + outpath = paths['inbound_images'] / czifile['filename'] copyfile( czifile['path'], @@ -47,6 +46,12 @@ class TestApiFromAutomatedClient(TestServerBaseClass): self.assertEqual(resp.json()['params']['par1'], 'hello', resp.json()) self.assertEqual(resp.json()['params']['par2'], None, resp.json()) + def test_default_session_paths(self): + import conf.defaults + resp = requests.get(self.uri + 'paths') + for p in ['inbound', 'outbound', 'logs']: + self.assertEqual(resp.json()['paths'][p], conf.defaults.paths[p]) + def test_list_empty_loaded_models(self): resp = requests.get(self.uri + 'models') self.assertEqual(resp.status_code, 200) diff --git a/tests/test_ilastik.py b/tests/test_ilastik.py index 204ad2375dab90ce2bffe57baab2c11625312163..fba595e144f497d02dc15e5663d32e987f317c4c 100644 --- a/tests/test_ilastik.py +++ b/tests/test_ilastik.py @@ -6,7 +6,6 @@ import numpy as np import conf.testing from model_server.image import CziImageFileAccessor, InMemoryDataAccessor, write_accessor_data_to_file from model_server.ilastik import IlastikObjectClassifierModel, IlastikPixelClassifierModel -from model_server.model import Model from model_server.workflow import infer_image_to_image from tests.test_api import TestServerBaseClass