11import ast
2+ import configparser
23import csv
34import gettext
45import logging
89import xml .etree .ElementTree as ET
910from abc import ABC , abstractmethod
1011from functools import wraps
12+ from importlib .resources import read_text
1113
1214import idutils
1315import pandas as pd
1416import requests
1517
16- import api .utils as ut
18+ import fair_eva . api .utils as ut
1719
1820logger = logging .getLogger ("api.plugin.evaluation_steps" )
1921
@@ -92,13 +94,25 @@ def __init__(
9294 self , item_id , api_endpoint = None , lang = "en" , config = None , name = None , ** kwargs
9395 ):
9496 self .item_id = item_id
95- self .api_endpoint = api_endpoint
9697 self .lang = lang
9798 self .config = config
9899 self .name = name
99100 self .metadata = None
100101 self .cvs = []
101102
103+ # API endpoint
104+ self .api_endpoint = api_endpoint
105+ if not self .api_endpoint :
106+ try :
107+ self .api_endpoint = self .config .get ("Generic" , "endpoint" )
108+ except configparser .NoOptionError as e :
109+ raise (e )
110+ else :
111+ logger .debug (
112+ "API endpoint not passed as input argument, getting it from configuration: %s"
113+ % self .api_endpoint
114+ )
115+
102116 # Config attributes
103117 self .identifier_term = ast .literal_eval (
104118 self .config [self .name ]["identifier_term" ]
@@ -119,41 +133,15 @@ def __init__(
119133 self .terms_relations = ast .literal_eval (
120134 self .config [self .name ]["terms_relations" ]
121135 )
122- self .metadata_access_manual = ast .literal_eval (
123- self .config [self .name ]["metadata_access_manual" ]
124- )
125- self .data_access_manual = ast .literal_eval (
126- self .config [self .name ]["data_access_manual" ]
127- )
128136 self .terms_access_protocols = ast .literal_eval (
129137 self .config [self .name ]["terms_access_protocols" ]
130138 )
131-
132- # self.vocabularies = ast.literal_eval(self.config[self.name]["vocabularies"])
133-
134- self .dict_vocabularies = ast .literal_eval (
135- self .config [self .name ]["dict_vocabularies" ]
136- )
137-
138- self .vocabularies = list (self .dict_vocabularies .keys ())
139139 self .metadata_standard = ast .literal_eval (
140140 self .config [self .name ]["metadata_standard" ]
141141 )
142-
143- self .metadata_authentication = ast .literal_eval (
144- self .config [self .name ]["metadata_authentication" ]
145- )
146- self .metadata_persistence = ast .literal_eval (
147- self .config [self .name ]["metadata_persistence" ]
148- )
149- self .terms_vocabularies = ast .literal_eval (
150- self .config [self .name ]["terms_vocabularies" ]
151- )
152-
153142 self .fairsharing_username = ast .literal_eval (
154143 self .config ["fairsharing" ]["username" ]
155144 )
156-
157145 self .fairsharing_password = ast .literal_eval (
158146 self .config ["fairsharing" ]["password" ]
159147 )
@@ -169,6 +157,29 @@ def __init__(
169157 global _
170158 _ = self .translation ()
171159
160+ @staticmethod
161+ def load_config (plugin_path , fail_if_no_config = True ):
162+ """Find the path to a data file."""
163+ config = configparser .ConfigParser ()
164+ try :
165+ config .read_string (read_text ("fair_eva" , "config.ini" ))
166+ config .read_string (read_text (plugin_path , "config.ini" ))
167+ except FileNotFoundError as e :
168+ logging .error ("Could not load config file: %s" % str (e ))
169+ if fail_if_no_config :
170+ raise (e )
171+ except configparser .MissingSectionHeaderError as e :
172+ message = "Bad INI format in main and/or plugin's configuration files"
173+ logging .error (message )
174+ logging .debug (e )
175+ error = {"code" : 500 , "message" : "%s" % message }
176+ logging .debug ("Returning API response: %s" % error )
177+ return json .dumps (error ), 500
178+ else :
179+ logging .debug ("Successfully loaded main & plugin's configuration files" )
180+
181+ return config
182+
172183 def translation (self ):
173184 # Translations
174185 t = gettext .translation (
@@ -1598,7 +1609,7 @@ def rda_r1_1_02m(self, license_list=[], machine_readable=False, **kwargs):
15981609 terms_license_list = terms_license ["list" ]
15991610 terms_license_metadata = terms_license ["metadata" ]
16001611
1601- if not license_list :
1612+ if license_list is None or len ( license_list ) == 0 :
16021613 license_list = terms_license_metadata .text_value .values
16031614
16041615 license_num = len (license_list )
0 commit comments