update, community edition baseline

v2.2.0
Steve Nyemba 4 weeks ago
parent 2df926da12
commit d0e655e7e3

@ -3,6 +3,10 @@ import json
from info import __version__ from info import __version__
import copy import copy
import transport import transport
import importlib
import importlib.util
import shutil
""" """
This class manages data from the registry and allows (read only) This class manages data from the registry and allows (read only)
@ -16,28 +20,182 @@ REGISTRY_PATH=os.sep.join([os.environ['HOME'],'.data-transport'])
if 'DATA_TRANSPORT_REGISTRY_PATH' in os.environ : if 'DATA_TRANSPORT_REGISTRY_PATH' in os.environ :
REGISTRY_PATH = os.environ['DATA_TRANSPORT_REGISTRY_PATH'] REGISTRY_PATH = os.environ['DATA_TRANSPORT_REGISTRY_PATH']
REGISTRY_FILE= 'transport-registry.json' REGISTRY_FILE= 'transport-registry.json'
DATA = {} DATA = {}
class plugins:
#
# This is a utility function that should enable management of plugins-registry
# The class allows to add/remove elements
#
# @TODO: add read/write properties to the class (better design practice)
#
_data = {}
FOLDER = os.sep.join([REGISTRY_PATH,'plugins'])
CODE = os.sep.join([REGISTRY_PATH,'plugins','code'])
FILE = os.sep.join([REGISTRY_PATH,'plugin-registry.json'])
@staticmethod
def init():
if not os.path.exists(plugins.FOLDER) :
os.makedirs(plugins.FOLDER)
if not os.path.exists(plugins.CODE):
os.makedirs(plugins.CODE)
if not os.path.exists(plugins.FILE):
f = open(plugins.FILE,'w')
f.write("{}")
f.close()
plugins._read() #-- will load data as a side effect
@staticmethod
def copy (path) :
shutil.copy2(path,plugins.CODE)
@staticmethod
def _read ():
f = open(plugins.FILE)
try:
_data = json.loads(f.read())
f.close()
except Exception as e:
print (f"Corrupted registry, resetting ...")
_data = {}
plugins._write(_data)
plugins._data = _data
@staticmethod
def _write (_data):
f = open(plugins.FILE,'w')
f.write(json.dumps(_data))
f.close()
plugins._data = _data
@staticmethod
def inspect (_path):
_names = []
if os.path.exists(_path) :
_filename = _path.split(os.sep)[-1]
spec = importlib.util.spec_from_file_location(_filename, _path)
module = importlib.util.module_from_spec(spec)
spec.loader.exec_module(module)
# _names = [{'name':getattr(getattr(module,_name),'name'),'pointer':getattr(module,_name)} for _name in dir(module) if type( getattr(module,_name)).__name__ == 'function']
for _name in dir(module) :
_pointer = getattr(module,_name)
if hasattr(_pointer,'transport') :
_item = {'real_name':_name,'name':getattr(_pointer,'name'),'pointer':_pointer,'version':getattr(_pointer,'version')}
_names.append(_item)
return _names
@staticmethod
def add (alias,path):
"""
Add overwrite the registry entries
"""
_names = plugins.inspect (path)
_log = []
if _names :
#
# We should make sure we have all the plugins with the attributes (transport,name) set
_names = [_item for _item in _names if hasattr(_item['pointer'],'transport') ]
if _names :
plugins.copy(path)
_content = []
for _item in _names :
_key = '@'.join([alias,_item['name']])
_log.append(_item['name'])
#
# Let us update the registry
#
plugins.update(alias,path,_log)
return _log
@staticmethod
def update (alias,path,_log) :
"""
updating the registry entries of the plugins (management data)
"""
# f = open(plugins.FILE)
# _data = json.loads(f.read())
# f.close()
_data = plugins._data
# _log = plugins.add(alias,path)
if _log :
_data[alias] = {'content':_log,'name':path.split(os.sep)[-1]}
plugins._write(_data) #-- will update data as a side effect
return _log
@staticmethod
def get(**_args) :
# f = open(plugins.FILE)
# _data = json.loads(f.read())
# f.close()
# if 'key' in _args :
# alias,name = _args['key'].split('.') if '.' in _args['key'] else _args['key'].split('@')
# else :
# alias = _args['alias']
# name = _args['name']
# if alias in _data :
# _path = os.sep.join([plugins.CODE,_data[alias]['name']])
# _item = [_item for _item in plugins.inspect(_path) if name == _item['name']]
# _item = _item[0] if _item else None
# if _item :
# return _item['pointer']
# return None
_item = plugins.has(**_args)
return _item['pointer'] if _item else None
@staticmethod
def has (**_args):
f = open(plugins.FILE)
_data = json.loads(f.read())
f.close()
if 'key' in _args :
alias,name = _args['key'].split('.') if '.' in _args['key'] else _args['key'].split('@')
else :
alias = _args['alias']
name = _args['name']
if alias in _data :
_path = os.sep.join([plugins.CODE,_data[alias]['name']])
_item = [_item for _item in plugins.inspect(_path) if name == _item['name']]
_item = _item[0] if _item else None
if _item :
return copy.copy(_item)
return None
@staticmethod
def synch():
pass
def isloaded (): def isloaded ():
return DATA not in [{},None] return DATA not in [{},None]
def exists (path=REGISTRY_PATH) : def exists (path=REGISTRY_PATH,_file=REGISTRY_FILE) :
""" """
This function determines if there is a registry at all This function determines if there is a registry at all
""" """
p = os.path.exists(path) p = os.path.exists(path)
q = os.path.exists( os.sep.join([path,REGISTRY_FILE])) q = os.path.exists( os.sep.join([path,_file]))
return p and q return p and q
def load (_path=REGISTRY_PATH): def load (_path=REGISTRY_PATH,_file=REGISTRY_FILE):
global DATA global DATA
if exists(_path) : if exists(_path) :
path = os.sep.join([_path,REGISTRY_FILE]) path = os.sep.join([_path,_file])
f = open(path) f = open(path)
DATA = json.loads(f.read()) DATA = json.loads(f.read())
f.close() f.close()
def init (email,path=REGISTRY_PATH,override=False): def init (email,path=REGISTRY_PATH,override=False,_file=REGISTRY_FILE):
""" """
Initializing the registry and will raise an exception in the advent of an issue Initializing the registry and will raise an exception in the advent of an issue
""" """
@ -47,7 +205,7 @@ def init (email,path=REGISTRY_PATH,override=False):
_config = {"email":email,'version':__version__} _config = {"email":email,'version':__version__}
if not os.path.exists(path): if not os.path.exists(path):
os.makedirs(path) os.makedirs(path)
filename = os.sep.join([path,REGISTRY_FILE]) filename = os.sep.join([path,_file])
if not os.path.exists(filename) or override == True : if not os.path.exists(filename) or override == True :
f = open(filename,'w') f = open(filename,'w')

Loading…
Cancel
Save