From 1360aab35d865f02417b8006a9f3710e1520c5d7 Mon Sep 17 00:00:00 2001 From: Marcelo Arocha Date: Thu, 30 Jan 2025 10:55:19 -0300 Subject: [PATCH 1/5] nifi show attributes --- services/admin/admin_integration_remote_service.py | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/services/admin/admin_integration_remote_service.py b/services/admin/admin_integration_remote_service.py index ddcfd964..b72b21f1 100644 --- a/services/admin/admin_integration_remote_service.py +++ b/services/admin/admin_integration_remote_service.py @@ -376,6 +376,9 @@ def _validate_custom_endpoint(endpoint: str): pattern2 = re.compile( "^nifi-api\/flowfile-queues\/[\w-]{36}\/listing-requests\/[\w-]{36}$" ) + pattern3 = re.compile( + "^nifi-api\/flowfile-queues\/[\w-]{36}\/flowfiles\/[\w-]{36}$" + ) if pattern1.match(endpoint): return True @@ -383,6 +386,9 @@ def _validate_custom_endpoint(endpoint: str): if pattern2.match(endpoint): return True + if pattern3.match(endpoint): + return True + raise ValidationError( "Endpoint custom inválido", "errors.businessRules", From aa67fd70eb435f88d29bc0157945829f13437303 Mon Sep 17 00:00:00 2001 From: Marcelo Arocha Date: Thu, 30 Jan 2025 11:10:41 -0300 Subject: [PATCH 2/5] remove validationerror --- services/admin/admin_drug_service.py | 6 +----- 1 file changed, 1 insertion(+), 5 deletions(-) diff --git a/services/admin/admin_drug_service.py b/services/admin/admin_drug_service.py index 9c893ab1..95bfdc9f 100644 --- a/services/admin/admin_drug_service.py +++ b/services/admin/admin_drug_service.py @@ -373,11 +373,7 @@ def calculate_dosemax_uniq(id_drug: int, id_segment: int): conversions = drugs_repository.get_conversions(id_drug=id_drug) if not drug_attributes: - raise ValidationError( - "Registro inválido/inconsistente", - "errors.businessRules", - status.HTTP_400_BAD_REQUEST, - ) + return None attributes: DrugAttributes = drug_attributes[0].DrugAttributes segment: Segment = drug_attributes[0].Segment From ff8e42f376f03ff4683afca33c214672166f0efc Mon Sep 17 00:00:00 2001 From: Marcelo Arocha Date: Thu, 30 Jan 2025 14:33:36 -0300 Subject: [PATCH 3/5] nifi add data provenance --- models/enums.py | 1 + .../admin/admin_integration_remote_service.py | 45 +++++++++++++------ 2 files changed, 32 insertions(+), 14 deletions(-) diff --git a/models/enums.py b/models/enums.py index 241a1519..522ac01c 100644 --- a/models/enums.py +++ b/models/enums.py @@ -127,6 +127,7 @@ class NifiQueueActionTypeEnum(Enum): CUSTOM_CALLBACK = "CUSTOM_CALLBACK" REFRESH_TEMPLATE = "REFRESH_TEMPLATE" UPDATE_PROPERTY = "UPDATE_PROPERTY" + VIEW_PROVENANCE = "VIEW_PROVENANCE" class DrugAlertTypeEnum(Enum): diff --git a/services/admin/admin_integration_remote_service.py b/services/admin/admin_integration_remote_service.py index b72b21f1..59295f4a 100644 --- a/services/admin/admin_integration_remote_service.py +++ b/services/admin/admin_integration_remote_service.py @@ -292,6 +292,21 @@ def _get_new_queue(id_processor: str, action_type: str, data: dict): "config": {"properties": data["properties"]}, } } + elif NifiQueueActionTypeEnum.VIEW_PROVENANCE.value == action_type: + queue.url = f"nifi-api/provenance" + queue.method = "POST" + queue.body = { + "provenance": { + "request": { + "maxResults": 100, + "summarize": True, + "incrementalResults": False, + "searchTerms": { + "ProcessorID": {"value": escape(id_processor), "inverse": False} + }, + } + } + } return queue @@ -370,24 +385,26 @@ def get_errors(user_context: User): def _validate_custom_endpoint(endpoint: str): - pattern1 = re.compile( - "^nifi-api\/flowfile-queues\/[\w-]{36}\/flowfiles\/[\w-]{36}\/content$" + patterns = [] + patterns.append( + re.compile( + "^nifi-api\/flowfile-queues\/[\w-]{36}\/flowfiles\/[\w-]{36}\/content$" + ) ) - pattern2 = re.compile( - "^nifi-api\/flowfile-queues\/[\w-]{36}\/listing-requests\/[\w-]{36}$" + patterns.append( + re.compile( + "^nifi-api\/flowfile-queues\/[\w-]{36}\/listing-requests\/[\w-]{36}$" + ) ) - pattern3 = re.compile( - "^nifi-api\/flowfile-queues\/[\w-]{36}\/flowfiles\/[\w-]{36}$" + patterns.append( + re.compile("^nifi-api\/flowfile-queues\/[\w-]{36}\/flowfiles\/[\w-]{36}$") ) + patterns.append(re.compile("^nifi-api\/provenance-events\/\d*$")) + patterns.append(re.compile("^nifi-api\/provenance-events\/\d*\/content\/output$")) - if pattern1.match(endpoint): - return True - - if pattern2.match(endpoint): - return True - - if pattern3.match(endpoint): - return True + for p in patterns: + if p.match(endpoint): + return True raise ValidationError( "Endpoint custom inválido", From 5d9150d590b8ff1826dc2c80a4a27eb11a31fe57 Mon Sep 17 00:00:00 2001 From: Marcelo Arocha Date: Fri, 31 Jan 2025 15:11:53 -0300 Subject: [PATCH 4/5] getname proxy chunks --- routes/names.py | 19 +++++++++++++++---- services/admin/admin_ai_service.py | 1 - 2 files changed, 15 insertions(+), 5 deletions(-) diff --git a/routes/names.py b/routes/names.py index 81862ca7..20c01bcc 100644 --- a/routes/names.py +++ b/routes/names.py @@ -100,14 +100,26 @@ def proxy_multiple(): ids_list = data.get("patients", []) config = _get_config(user) token = _get_token(config) - is_internal = config["getname"].get("internal", False) - auth_prefix = config["getname"].get("authPrefix", "") + CHUNK_SIZE = 200 + chunks = [ids_list[i : i + CHUNK_SIZE] for i in range(0, len(ids_list), CHUNK_SIZE)] + names = [] + + for chunk in chunks: + names += _getname_multiple_iteration(config=config, ids_list=chunk, token=token) + + return names, status.HTTP_200_OK + + +def _getname_multiple_iteration(config: dict, ids_list: list, token: str): url = ( config["getname"]["urlDev"] if Config.ENV == NoHarmENV.DEVELOPMENT.value else config["getname"]["url"] ) + is_internal = config["getname"].get("internal", False) + auth_prefix = config["getname"].get("authPrefix", "") + names = [] try: if is_internal: @@ -137,7 +149,6 @@ def proxy_multiple(): ) found = [] - names = [] if response.status_code == status.HTTP_200_OK: data = response.json() results = data if is_internal else data["data"] @@ -178,7 +189,7 @@ def proxy_multiple(): } ) - return names, status.HTTP_200_OK + return names @app_names.route("/names/auth-token", methods=["GET"]) diff --git a/services/admin/admin_ai_service.py b/services/admin/admin_ai_service.py index d8556a8e..71e952a1 100644 --- a/services/admin/admin_ai_service.py +++ b/services/admin/admin_ai_service.py @@ -2,7 +2,6 @@ import boto3 import tempfile import numpy -import re import gc import logging from typing import List From b8555faa3747f46d79a027b08b8aaed9aa95206e Mon Sep 17 00:00:00 2001 From: Marcelo Arocha Date: Fri, 31 Jan 2025 15:12:26 -0300 Subject: [PATCH 5/5] v4.29-beta --- config.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/config.py b/config.py index d84785b7..e42b1749 100644 --- a/config.py +++ b/config.py @@ -5,7 +5,7 @@ class Config: - VERSION = "v4.28-beta" + VERSION = "v4.29-beta" FRONTEND_VERSION = "4.0.21" ENV = getenv("ENV") or NoHarmENV.DEVELOPMENT.value SECRET_KEY = getenv("SECRET_KEY") or "secret_key"