from typing import List, Tuple
|
|
|
|
|
|
class DataImporter( object ):
|
|
"""
|
|
An abstract data importer.
|
|
|
|
Instanciate concrete instances via the Importer() function
|
|
"""
|
|
|
|
def retrieve( self ) -> List[str]:
|
|
"""
|
|
Retrieve a list of transactions
|
|
"""
|
|
return []
|
|
|
|
from .mock import MockDataImporter
|
|
from .modo import ModoDataImporter
|
|
|
|
#-------------------------------------------------------------------------------
|
|
|
|
def verify( config: dict, path: str = "" ) -> Tuple[bool, List[str]]:
|
|
"""
|
|
Verifies that the configuration is correct
|
|
|
|
Args:
|
|
config: dict with password manager configuration
|
|
path: path to the "config" dict in the main configuration file
|
|
|
|
Returns:
|
|
bool: true if the config is correct
|
|
List[str]: list of errors if the config is not correct
|
|
"""
|
|
if "import" not in config:
|
|
return (False, [f'Missing "{path}.import" value'])
|
|
if "name" not in config:
|
|
return (False, [f'Missing "{path}.name" value'])
|
|
|
|
importer = config["import"]
|
|
for cls in DataImporter.__subclasses__():
|
|
if importer == cls.name():
|
|
return cls.verify(config, path)
|
|
return (False, [f'Unknown data importer "{importer}"'])
|
|
|
|
#-------------------------------------------------------------------------------
|
|
|
|
def Importer( config: dict ) -> DataImporter:
|
|
"""
|
|
Instanciate an Importer instance from a given configuration
|
|
"""
|
|
if "import" not in config:
|
|
raise ValueError
|
|
if "name" not in config:
|
|
raise ValueError
|
|
importer = config["import"]
|
|
for cls in DataImporter.__subclasses__():
|
|
if importer == cls.name():
|
|
return cls(config)
|
|
raise ValueError
|