66import requests
77import json
88from typing import Any
9- from mars_lib .authentication import get_metabolights_auth_token , get_webin_auth_token
9+ from mars_lib .authentication import (
10+ get_metabolights_auth_token ,
11+ get_webin_auth_token ,
12+ load_credentials ,
13+ AuthProvider ,
14+ )
1015from mars_lib .biosamples_external_references import (
1116 get_header ,
1217 biosamples_endpoints ,
@@ -44,8 +49,9 @@ def save_step_to_file(time_stamp: float, filename: str, isa_json: IsaJson):
4449
4550
4651def submission (
47- credential_service_name : str ,
48- username_credentials : str ,
52+ webin_username : str ,
53+ metabolights_username : str ,
54+ metabolights_ftp_username : str ,
4955 credentials_file : TextIOWrapper ,
5056 isa_json_file : str ,
5157 target_repositories : list [str ],
@@ -59,17 +65,24 @@ def submission(
5965 # Get password from the credential manager
6066 # Else:
6167 # read credentials from file
62- if not (credential_service_name is None or username_credentials is None ):
63- cm = CredentialManager (credential_service_name )
68+ if all ([webin_username , metabolights_username , metabolights_ftp_username ]):
6469 user_credentials = {
65- "username" : username_credentials ,
66- "password" : cm .get_password_keyring (username_credentials ),
70+ cred_pair [0 ]: {
71+ "username" : cred_pair [1 ],
72+ "password" : CredentialManager (cred_pair [0 ]).get_password_keyring (
73+ cred_pair [1 ]
74+ ),
75+ }
76+ for cred_pair in zip (
77+ AuthProvider .available_providers (),
78+ [webin_username , metabolights_username , metabolights_ftp_username ],
79+ )
6780 }
6881 else :
6982 if credentials_file == "" :
7083 raise ValueError ("No credentials found" )
7184
72- user_credentials = json . load (credentials_file )
85+ user_credentials = load_credentials (credentials_file )
7386
7487 isa_json = load_isa_json (isa_json_file , investigation_is_root )
7588
@@ -101,7 +114,7 @@ def submission(
101114 # Submit to Biosamples
102115 biosamples_result = submit_to_biosamples (
103116 isa_json = isa_json ,
104- biosamples_credentials = user_credentials ,
117+ biosamples_credentials = user_credentials [ AuthProvider . WEBIN . value ] ,
105118 biosamples_url = urls ["BIOSAMPLES" ]["SUBMISSION" ],
106119 webin_token_url = urls ["WEBIN" ]["TOKEN" ],
107120 )
@@ -124,7 +137,7 @@ def submission(
124137 file_paths = [
125138 Path (df ) for df in data_file_map [TargetRepository .ENA .value ]
126139 ],
127- user_credentials = user_credentials ,
140+ user_credentials = user_credentials [ AuthProvider . WEBIN . value ] ,
128141 submission_url = urls ["ENA" ]["DATA-SUBMISSION" ],
129142 file_transfer = file_transfer ,
130143 )
@@ -135,7 +148,7 @@ def submission(
135148 # Step 2 : submit isa-json to ena
136149 ena_result = submit_to_ena (
137150 isa_json = isa_json ,
138- user_credentials = user_credentials ,
151+ user_credentials = user_credentials [ AuthProvider . WEBIN . value ] ,
139152 submission_url = urls ["ENA" ]["SUBMISSION" ],
140153 )
141154 print_and_log (
@@ -159,7 +172,9 @@ def submission(
159172 file_paths = data_file_map [TargetRepository .METABOLIGHTS .value ],
160173 file_transfer = file_transfer ,
161174 isa_json = isa_json ,
162- metabolights_credentials = user_credentials ,
175+ metabolights_credentials = user_credentials [
176+ AuthProvider .METABOLIGHTS_METADATA .value
177+ ],
163178 metabolights_url = urls ["METABOLIGHTS" ]["SUBMISSION" ],
164179 metabolights_token_url = urls ["METABOLIGHTS" ]["TOKEN" ],
165180 )
@@ -252,9 +267,9 @@ def upload_to_metabolights(
252267 "accept" : "application/json" ,
253268 "Authorization" : f"Bearer { token } " ,
254269 }
255- isa_json_str = isa_json . investigation . model_dump_json (
256- by_alias = True , exclude_none = True
257- )
270+ isa_json_str = reduce_isa_json_for_target_repo (
271+ isa_json , TargetRepository . METABOLIGHTS
272+ ). investigation . model_dump_json ( by_alias = True , exclude_none = True )
258273 json_file = io .StringIO (isa_json_str )
259274
260275 files = {"isa_json_file" : ("isa_json.json" , json_file )}
@@ -360,7 +375,7 @@ def submit_to_ena(
360375 else result .request .body or ""
361376 )
362377 raise requests .HTTPError (
363- f"Request towards ENA failed!\n Request:\n Method:{ result .request .method } \n Status:{ result .status_code } \n URL:{ result . request . url } \n Headers:{ result .request .headers } \n Body:{ body } "
378+ f"Request towards ENA failed!\n Request:\n Method:{ result .request .method } \n Status:{ result .status_code } \n URL:{ submission_url } \n Params: ['webinUserName': { params . get ( 'webinUserName' ) } , 'webinPassword': ****] \n Headers:{ result .request .headers } \n Body:{ body } "
364379 )
365380
366381 return result
@@ -372,11 +387,8 @@ def upload_to_ena(
372387 submission_url : str ,
373388 file_transfer : str ,
374389):
375- ALLOWED_FILE_TRANSFER_SOLUTIONS = {"ftp" , "aspera" }
376390 file_transfer = file_transfer .lower ()
377391
378- if file_transfer not in ALLOWED_FILE_TRANSFER_SOLUTIONS :
379- raise ValueError (f"Unsupported transfer protocol: { file_transfer } " )
380392 if file_transfer == "ftp" :
381393 uploader = FTPUploader (
382394 submission_url ,
0 commit comments