From 24be8d3f13b94e2329c08fe256ef8a3d158d2115 Mon Sep 17 00:00:00 2001 From: Matthias Bisping Date: Wed, 15 Jun 2022 09:59:47 +0200 Subject: [PATCH] test config options for logging and docker; changed object name construction --- config.yaml | 3 ++- pyinfra/visitor.py | 22 ++++++++++------------ test/config.yaml | 5 ++++- test/conftest.py | 21 ++++++++++++--------- 4 files changed, 28 insertions(+), 23 deletions(-) diff --git a/config.yaml b/config.yaml index ff85cd2..65ce275 100755 --- a/config.yaml +++ b/config.yaml @@ -1,6 +1,7 @@ service: logging_level: $LOGGING_LEVEL_ROOT|DEBUG # Logging level for service logger - response_file_extension: $RESPONSE_FILE_EXTENSION|"json.gz" # Extension for files uploaded to storage + target_file_extension: $TARGET_FILE_EXTENSION|"pdf.gz" # Extension for files to download from storage and process + response_file_extension: $RESPONSE_FILE_EXTENSION|"json.gz" # Extension for response files to upload to storage # In case a service is not supposed to place response files under the root folder `dossierId/fileId` and requests do # not specify an operation, this parameter can specify an output folder response_folder: $RESPONSE_FOLDER|null diff --git a/pyinfra/visitor.py b/pyinfra/visitor.py index 8c2d7a2..b789ede 100644 --- a/pyinfra/visitor.py +++ b/pyinfra/visitor.py @@ -8,7 +8,7 @@ from copy import deepcopy from operator import itemgetter from typing import Callable, Dict, Union -from funcy import omit, filter, lmap, lflatten +from funcy import omit, filter, lflatten from more_itertools import peekable from pyinfra.config import CONFIG, parse_disjunction_string @@ -31,21 +31,19 @@ def unique_hash(pages): return hsh -def get_object_name(body): +def get_object_name(body: dict): + + def get_key(key): + return key if key in body else False body = deepcopy(body) - if "pages" not in body: - body["pages"] = [] + folder = f"/{folder}/" if (folder := get_key("pages") or get_key("images")) else "" + idnt = f"id:{idnt}" if (idnt := body.get("id", "0" if folder else False)) else "" - if "id" not in body: - body["id"] = 0 + dossier_id, file_id = itemgetter("dossierId", "fileId")(body) - dossier_id, file_id, pages, idnt, target_file_extension = itemgetter( - "dossierId", "fileId", "pages", "id", "targetFileExtension" - )(body) - - object_name = f"{dossier_id}/{file_id}/{unique_hash(pages)}-id:{idnt}.{CONFIG.service.response_file_extension}" + object_name = f"{dossier_id}/{file_id}{folder}{idnt}.{CONFIG.service.target_file_extension}" return object_name @@ -339,7 +337,7 @@ class MultiDownloadStrategy(DownloadStrategy): def download(self, storage: Storage, queue_item_body): pages = "|".join(map(str, queue_item_body["pages"])) - matches_page = r".*-id:(" + pages + r").*" + matches_page = r".*id:(" + pages + r").*" object_names = storage.get_all_object_names(self.bucket_name) object_names = filter(matches_page, object_names) diff --git a/test/config.yaml b/test/config.yaml index d404715..1e9d94d 100644 --- a/test/config.yaml +++ b/test/config.yaml @@ -22,4 +22,7 @@ webserver: mode: $SERVER_MODE|production # webserver mode: {development, production} -mock_analysis_endpoint: "http://127.0.0.1:5000" \ No newline at end of file +mock_analysis_endpoint: "http://127.0.0.1:5000" + +use_docker_fixture: False +logging: False \ No newline at end of file diff --git a/test/conftest.py b/test/conftest.py index ba90441..b60fe0f 100644 --- a/test/conftest.py +++ b/test/conftest.py @@ -40,9 +40,10 @@ logging.getLogger("PIL.PngImagePlugin").setLevel(level=logging.CRITICAL + 1) logging.getLogger("waitress").setLevel(level=logging.CRITICAL + 1) -@pytest.fixture(autouse=False) +@pytest.fixture(autouse=True) def mute_logger(): - logger.setLevel(logging.CRITICAL + 1) + if not CONFIG.logging: + logger.setLevel(logging.CRITICAL + 1) @pytest.fixture(scope="session") @@ -99,13 +100,15 @@ def s3_backend(request): @pytest.fixture(scope="session", autouse=True) def docker_compose(sleep_seconds=30): - logger.info(f"Starting docker containers with {COMPOSE_PATH}/docker-compose.yml...") - compose = DockerCompose(COMPOSE_PATH, compose_file_name="docker-compose.yml") - compose.start() - logger.info(f"Sleeping for {sleep_seconds} seconds to wait for containers to finish startup... ") - time.sleep(sleep_seconds) - yield compose - compose.stop() + if CONFIG.use_docker_fixture: + logger.info(f"Starting docker containers with {COMPOSE_PATH}/docker-compose.yml...") + compose = DockerCompose(COMPOSE_PATH, compose_file_name="docker-compose.yml") + compose.start() + logger.info(f"Sleeping for {sleep_seconds} seconds to wait for containers to finish startup... ") + time.sleep(sleep_seconds) + yield compose + compose.stop() + yield None def get_pika_connection_params():