diff --git a/src/spiffworkflow_backend/api.yml b/src/spiffworkflow_backend/api.yml index 4f935571..1a683ec5 100755 --- a/src/spiffworkflow_backend/api.yml +++ b/src/spiffworkflow_backend/api.yml @@ -273,6 +273,12 @@ paths: description: The group containing the models we want to return schema: type: string + - name: recursive + in: query + required: false + description: Get all sub process models recursively if true + schema: + type: string - name: page in: query required: false diff --git a/src/spiffworkflow_backend/routes/process_api_blueprint.py b/src/spiffworkflow_backend/routes/process_api_blueprint.py index bc9fd79f..8f87ab5c 100644 --- a/src/spiffworkflow_backend/routes/process_api_blueprint.py +++ b/src/spiffworkflow_backend/routes/process_api_blueprint.py @@ -347,11 +347,14 @@ def process_model_move( def process_model_list( - process_group_identifier: Optional[str] = None, page: int = 1, per_page: int = 100 + process_group_identifier: Optional[str] = None, + recursive: Optional[bool] = False, + page: int = 1, + per_page: int = 100, ) -> flask.wrappers.Response: """Process model list!""" process_models = ProcessModelService().get_process_models( - process_group_id=process_group_identifier + process_group_id=process_group_identifier, recursive=recursive ) batch = ProcessModelService().get_batch( process_models, page=page, per_page=per_page diff --git a/src/spiffworkflow_backend/services/process_model_service.py b/src/spiffworkflow_backend/services/process_model_service.py index 65de4272..f9788658 100644 --- a/src/spiffworkflow_backend/services/process_model_service.py +++ b/src/spiffworkflow_backend/services/process_model_service.py @@ -179,7 +179,7 @@ class ProcessModelService(FileSystemService): raise ProcessEntityNotFoundError("process_model_not_found") def get_process_models( - self, process_group_id: Optional[str] = None + self, process_group_id: Optional[str] = None, recursive: Optional[bool] = False ) -> List[ProcessModelInfo]: """Get process models.""" process_models = [] @@ -187,7 +187,11 @@ class ProcessModelService(FileSystemService): if process_group_id: awesome_id = process_group_id.replace("/", os.sep) root_path = os.path.join(root_path, awesome_id) - process_model_glob = os.path.join(root_path, "**", "process_model.json") + + process_model_glob = os.path.join(root_path, "*", "process_model.json") + if recursive: + process_model_glob = os.path.join(root_path, "**", "process_model.json") + for file in glob(process_model_glob, recursive=True): process_model_relative_path = os.path.relpath( file, start=FileSystemService.root_path() diff --git a/tests/spiffworkflow_backend/integration/test_process_api.py b/tests/spiffworkflow_backend/integration/test_process_api.py index 6f850a89..ef65dfbe 100644 --- a/tests/spiffworkflow_backend/integration/test_process_api.py +++ b/tests/spiffworkflow_backend/integration/test_process_api.py @@ -381,7 +381,7 @@ class TestProcessApi(BaseTest): # get all models response = client.get( - "/v1.0/process-models?per_page=1000", + "/v1.0/process-models?per_page=1000&recursive=true", headers=self.logged_in_headers(with_super_admin_user), ) assert response.json is not None