You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 

65 lines
1.8 KiB

import yaml
from typing import List, Tuple
import ptaimport.passwords as pwd
import ptaimport.data_importers as importers
class Config:
def __init__( self, yaml_data: str ):
self.data = yaml.safe_load(yaml_data)
def is_correct( self ) -> Tuple[bool, str]:
"""
Verifies that the configuration is correct
Returns:
bool: true if the config is correct
str: error message to display to the user
"""
ok = True
errors = []
if "passwords" not in self.data:
errors.append('Missing "passwords" section')
else:
(pwd_ok, pwd_err) = pwd.verify(
self.data["passwords"],
"passwords"
)
ok &= pwd_ok
errors = errors + pwd_err
if "imports" not in self.data:
errors.append('missing "imports" section')
elif type(self.data["imports"]) is not list:
errors.append('"imports" section is not a list')
else:
for i, importer in enumerate(self.data["imports"]):
(imp_ok, imp_err) = importers.verify(
importer,
f"imports[{i}]"
)
ok &= imp_ok
errors = errors + imp_err
return (ok, "\n".join(errors))
def passwords( self ) -> pwd.PasswordManager:
"""
Returns the password manager defined in the config
"""
return pwd.Manager( self.data["passwords"] )
def data_imports( self ) -> List[importers.DataImporter]:
"""
Returns the list of data importers defined in the config
"""
ret = []
for config in self.data["imports"]:
ret.append( importers.Importer(
config
) )
return ret