main
Steve Nyemba 4 weeks ago
parent ce4382e08f
commit 58895acbb0

@ -21,6 +21,7 @@ class Loader :
# self._names = _names if type(_names) == list else [_names] # self._names = _names if type(_names) == list else [_names]
self._modules = {} self._modules = {}
self._names = [] self._names = []
self._alias = {} #-- synonyms
if 'file' in _args : if 'file' in _args :
self.load(**_args) self.load(**_args)
# self._registry = _args['registry'] # self._registry = _args['registry']
@ -43,6 +44,9 @@ class Loader :
for _name in dir(module) : for _name in dir(module) :
if self.isplugin(module,_name,_decoratorName) : if self.isplugin(module,_name,_decoratorName) :
self._modules[_name] = getattr(module,_name) self._modules[_name] = getattr(module,_name)
if hasattr(self._modules[_name],'name') :
_alt = getattr(self._modules[_name],'name')
self._alias[_alt] = _name
return self._modules is not None return self._modules is not None
# self._names [_name] # self._names [_name]
# def format (self,**_args): # def format (self,**_args):
@ -85,16 +89,28 @@ class Loader :
""" """
This will determine if the module name is loaded or not This will determine if the module name is loaded or not
""" """
return _name in self._modules return _name in self._modules or _name in self._alias
def names (self): def names (self):
return list(self._modules.keys()) return list(self._modules.keys())
def get (self,_name=None): def get (self,_name=None):
""" """
This functiion determines how many modules loaded vs unloaded given the list of names This functiion determines how many modules loaded vs unloaded given the list of names
""" """
return self._modules.get(_name,None) if _name else self._modules if _name in self._alias :
_name = self._alias[_name]
if _name in self._modules :
return self._modules[_name]
def apply(self,_name,**_args): def apply(self,_name,**_args):
_pointer = self.get(_name) _pointer = self.get(_name)
if _pointer : if _pointer :
return _pointer (**_args) if _args else _pointer() return _pointer (**_args) if _args else _pointer()
def visitor(self,_args,logger=None) :
for _name in self._names :
_pointer = self.get(_name)
_kwargs = _pointer(_args)
if (type(_kwargs) == pd.DataFrame and not _kwargs.empty) or _kwargs is not None :
_args = _kwargs
# _args = _caller(_pointer,_args)
return _args

@ -14,19 +14,20 @@ from . import loader
class Registry : class Registry :
def __init__(self,folder=None,reader = None) : def __init__(self,folder=None,reader = None,plugin_folder=None) :
""" """
""" """
self._folder = folder if folder else os.environ.get('REGISTRY_FOLDER',None) self._folder = folder if folder else os.environ.get('REGISTRY_FOLDER',None)
self._filename = os.sep.join([self._folder,'plugins-registry.json']) self._filename = os.sep.join([self._folder,'plugins-registry.json'])
self._plugin_folder = os.sep.join([self._folder,'code']) if not plugin_folder else os.sep.join([self._folder,plugin_folder])
# #
# Let us refactor this in case the user decided to provide a file name instead # Let us refactor this in case the user decided to provide a file name instead
if os.path.isfile(self._folder) : if os.path.isfile(self._folder) :
_name = self._folder.split(os.sep)[-1].strip() _name = self._folder.split(os.sep)[-1].strip()
self._folder = os.sep.join(self._folder.split(os.sep)[:-1]).strip() self._folder = os.sep.join(self._folder.split(os.sep)[:-1]).strip()
self._filename = os.sep.join([self._folder,_name]) self._filename = os.sep.join([self._folder,_name])
print (' *** ',_name,self._folder) # print (' *** ',_name,self._folder)
# self._context = self._folder.split(os.sep)[-1] # self._context = self._folder.split(os.sep)[-1]
self._reader = reader self._reader = reader
self._data = {} self._data = {}
@ -35,7 +36,6 @@ class Registry :
# self.make(os.sep.join([self._folder,'code'])) # self.make(os.sep.join([self._folder,'code']))
self.load() self.load()
def set(self,filename,names) : def set(self,filename,names) :
""" """
:filename this is the python file :filename this is the python file
@ -43,14 +43,23 @@ class Registry :
""" """
if os.path.exists(filename) and names: if os.path.exists(filename) and names:
_file = filename.split(os.sep)[-1].split('.')[0] _file = filename.split(os.sep)[-1].split('.')[0]
_newlocation = os.sep.join([self._folder,'code',filename.split(os.sep)[-1]]) _newlocation = os.sep.join([self._plugin_folder,filename.split(os.sep)[-1]])
if _file in self._data :
names += self._data[_file]['content']
names = list(set(names))
self._data[_file] = {"content":names,"path":_newlocation} self._data[_file] = {"content":names,"path":_newlocation}
#
# @TODO:
# Makes sure the names exist in the file, use the loader to do this
#
# #
# we need to copy the file to the new location # we need to copy the file to the new location
# #
shutil.copyfile(filename, _newlocation) shutil.copyfile(filename, _newlocation)
self.write() self.write()
return 1 return len(self._data[_file]['content'])
else: else:
return 0 return 0
def stats (self): def stats (self):
@ -85,20 +94,20 @@ class Registry :
""" """
_key can be formatted as _name@file with _key can be formatted as _name@file with
""" """
if '@' in _key : # if '@' in _key :
_name,_file = _key.split('@') # _name,_file = _key.split('@')
else: # elif '.' in _key :
_name = _key # _file,_name = _key.split('.')
_file = None # else:
if len(self._data.keys()) == 1 : # _name = _key
_file = list(self._data.keys())[0] # _file = None
# if len(self._data.keys()) == 1 :
# _file = list(self._data.keys())[0]
_file,_name = self.getref(_key)
if _file in self._data : if _file in self._data :
return _name in self._data[_file]['content'] return _name in self._data[_file]['content']
return False return False
def get(self,_key): def getref (self,_key):
"""
_key is either file.funcName, _funcName@file
"""
if '@' in _key : if '@' in _key :
_name,_file = _key.split('@') _name,_file = _key.split('@')
elif '.' in _key : elif '.' in _key :
@ -108,7 +117,15 @@ class Registry :
_file = None _file = None
if len(self._data.keys()) == 1 : if len(self._data.keys()) == 1 :
_file = list(self._data.keys())[0] _file = list(self._data.keys())[0]
return _file, _name
def get(self,_key):
"""
_key is either file.funcName, _funcName@file
"""
_file,_name = self.getref(_key)
filename = self._data[_file]['path'] filename = self._data[_file]['path']
_loader = loader.Loader(file=filename) _loader = loader.Loader(file=filename)
return _loader.get(_name) return _loader.get(_name)
def write (self): def write (self):
@ -118,3 +135,4 @@ class Registry :
f.write(json.dumps(self._data)) f.write(json.dumps(self._data))
f.close() f.close()
pass pass
Loading…
Cancel
Save