diff --git a/pfbridge/config/settings.py b/pfbridge/config/settings.py index b553355..265abef 100644 --- a/pfbridge/config/settings.py +++ b/pfbridge/config/settings.py @@ -9,12 +9,16 @@ class Pflink(BaseSettings): testURL:str = 'http://localhost:8050/api/v1/testing' ignore_duplicate:bool = True + +class Analyses(BaseSettings): + analyses: dict = {} + class DylldAnalysis(Pflink): pipelineName:str = '' - pluginName:str = 'pl-dylld' - pluginVersion:str = '4.4.28' - pluginArgs:str = '--pattern **/*dcm --CUBEurl %urlCUBE --CUBEuser %usernameCUBE --CUBEpassword %passwordCUBE --orthancURL %urlOrthanc --orthancuser %usernameOrthanc --orthancpassword %passwordOrthanc' - feedName:str = 'dylld-%SeriesInstanceUID' + pluginName:str = '' + pluginVersion:str = '' + pluginArgs:str = '' + feedName:str = 'pfbridge-%SeriesInstanceUID' class PflinkAuth(Pflink): pflink_auth_url:str = "http://localhost:8050/api/v1/auth-token" @@ -48,7 +52,7 @@ def vaultCheckLock(vault:Vault) -> None: vault.locked = True print("Vault check: key has already been set. Vault is now LOCKED.") -def analysis_decode() -> None: +def analysis_decode(key:str) -> None: decode:pftag.Pftag = pftag.Pftag({}) addDict:bool = decode.lookupDict_add( [ @@ -74,7 +78,7 @@ def analysis_decode() -> None: ] ) for field in ["pluginArgs", "pipelineName", "pluginName", "feedName", "pluginVersion"]: - d_decode:dict = decode(analysis.__getattribute__(field)) + d_decode:dict = decode(analyses.analyses[key].__getattribute__(field)) analysisDecoded.__setattr__(field, d_decode["result"]) pflink = Pflink() @@ -86,4 +90,7 @@ def analysis_decode() -> None: serviceURLs = ServiceURLs() pflinkAuth = PflinkAuth() pfdcm = Pfdcm() +analyses = Analyses() +analyses.analyses["dylld"] = analysisDecoded + diff --git a/pfbridge/lib/map.py b/pfbridge/lib/map.py index b968f86..4b5afb0 100644 --- a/pfbridge/lib/map.py +++ b/pfbridge/lib/map.py @@ -56,13 +56,12 @@ def intoPflink_transform(self, payload:relayModel.clientPayload) -> relayModel.p pflinkPOST.workflow_info.feed_name = settings.analysis.feedName pflinkPOST.cube_user_info.username = settings.credentialsCUBE.usernameCUBE pflinkPOST.cube_user_info.password = settings.credentialsCUBE.passwordCUBE - match payload.analyzeFunction: - case 'dylld': - pflinkPOST.workflow_info.pipeline_name = settings.analysis.pipelineName - pflinkPOST.workflow_info.plugin_name = settings.analysis.pluginName - pflinkPOST.workflow_info.plugin_version = settings.analysis.pluginVersion - settings.analysis_decode() - pflinkPOST.workflow_info.plugin_params = settings.analysisDecoded.pluginArgs + if settings.analyses.analyses.get(payload.analyzeFunction): + pflinkPOST.workflow_info.pipeline_name = settings.analyses.analyses[payload.analyzeFunction].pipelineName + pflinkPOST.workflow_info.plugin_name = settings.analyses.analyses[payload.analyzeFunction].pluginName + pflinkPOST.workflow_info.plugin_version = settings.analyses.analyses[payload.analyzeFunction].pluginVersion + settings.analysis_decode(payload.analyzeFunction) + pflinkPOST.workflow_info.plugin_params = settings.analysisDecoded.pluginArgs return pflinkPOST def fromPflink_transform(self, payload:httpx.Response) -> relayModel.clientResponseSchema: diff --git a/pfbridge/lib/pflinkclient.py b/pfbridge/lib/pflinkclient.py index bc1f853..6233842 100644 --- a/pfbridge/lib/pflinkclient.py +++ b/pfbridge/lib/pflinkclient.py @@ -1,3 +1,6 @@ +""" +This class contains useful methods to authenticate and re/generate auth tokens for `pflink` +""" import httpx class Client(object): diff --git a/pfbridge/models/relayModel.py b/pfbridge/models/relayModel.py index 4afe420..08f6144 100644 --- a/pfbridge/models/relayModel.py +++ b/pfbridge/models/relayModel.py @@ -64,7 +64,7 @@ class PACSqueryCore(BaseModel): AcquisitionProtocolName : str = "" class analysisModel(BaseModel): - feed_name:str = settings.analysis.feedName + feed_name:str = "" plugin_name:str = "" plugin_version:str = "" plugin_params:str = "" diff --git a/pfbridge/routes/relayRouter.py b/pfbridge/routes/relayRouter.py index 771596a..7df19a0 100644 --- a/pfbridge/routes/relayRouter.py +++ b/pfbridge/routes/relayRouter.py @@ -274,6 +274,7 @@ def urlOrthanc_update(URL:str) -> relayModel.serviceURLs: ''' ) def analysis_update( + analysis_name = '', key = '', value = '' ) -> settings.DylldAnalysis: @@ -299,18 +300,20 @@ def analysis_update( ------- * `settings.Analysis`: The current Analysis settings """ + if not settings.analyses.analyses.get(analysis_name): + settings.analyses.analyses[analysis_name] = settings.DylldAnalysis() match key: case 'analysisPipelineName': - settings.analysis.pipelineName = value + settings.analyses.analyses[analysis_name].pipelineName = value case 'analysisPluginName': - settings.analysis.pluginName = value + settings.analyses.analyses[analysis_name].pluginName = value case 'analysisPluginArgs': - settings.analysis.pluginArgs = value + settings.analyses.analyses[analysis_name].pluginArgs = value case 'analysisPluginVersion': - settings.analysis.pluginVersion = value + settings.analyses.analyses[analysis_name].pluginVersion = value case 'analysisFeedName': - settings.analysis.feedName = value - return settings.analysis + settings.analyses.analyses[analysis_name].feedName = value + return settings.analyses.analyses[analysis_name] @router.get( '/analysis/', @@ -319,7 +322,7 @@ def analysis_update( GET the internal Analysis settings. ''' ) -def analysisValues_get(vaultKey:str = "") -> settings.DylldAnalysis: +def analysisValues_get(vaultKey:str = "", analysis_name:str = "") -> settings.DylldAnalysis: """ Description ----------- @@ -332,12 +335,15 @@ def analysisValues_get(vaultKey:str = "") -> settings.DylldAnalysis: ------- * `settings.Analysis`: The current Analysis settings """ - values:settings.DylldAnalysis = settings.analysis + if settings.analyses.analyses.get(analysis_name): + values:settings.DylldAnalysis = settings.analyses.analyses[analysis_name] + else: + values:settings.DylldAnalysis = settings.analysis if vaultKey: d_vaultAccess:credentialModel.credentialsStatus = credentialModel.credentialsStatus() d_vaultAccess = credentialRouter.credentialAccess_check(vaultKey) if d_vaultAccess.status: - settings.analysis_decode() + settings.analysis_decode(analysis_name) values = settings.analysisDecoded return values