From bc95832fc9563dbf290aa2c618930872303a9644 Mon Sep 17 00:00:00 2001 From: Steve Nyemba Date: Wed, 24 Apr 2024 16:34:47 -0500 Subject: [PATCH] bug fixes: context handling --- cms/engine/basic.py | 38 +++++++++++++++++---------------- index.py | 51 +++++++++++++-------------------------------- requirements.txt | 1 + static/js/menu.js | 5 +++-- templates/menu.html | 2 +- 5 files changed, 39 insertions(+), 58 deletions(-) diff --git a/cms/engine/basic.py b/cms/engine/basic.py index 60ebfdc..eb1a605 100644 --- a/cms/engine/basic.py +++ b/cms/engine/basic.py @@ -66,11 +66,6 @@ class Initializer : _config = self._config PATH= os.sep.join([_config['layout']['root'],'_plugins']) - # if not os.path.exists(PATH) : - # # - # # we need to determin if there's an existing - # print ([' **** ',PATH]) - # PATH = os.sep.join(self._path.split(os.sep)[:-1]+ [PATH] ) if not os.path.exists(PATH) and self._location and os.path.exists(self._location) : # # overriding the location of plugins ... @@ -79,7 +74,7 @@ class Initializer : else: _location = self._location PATH = os.sep.join([_location, _config['layout']['root'],'_plugins']) - + _context = _config['system']['context'] _map = {} # if not os.path.exists(PATH) : # return _map @@ -93,9 +88,11 @@ class Initializer : if not os.path.exists(_path): continue for _name in _conf[_key] : - _pointer = disk.plugins(path=_path,name=_name) + _pointer = disk.plugins(path=_path,name=_name,context=_context) if _pointer : - _uri = "/".join(["api",_key,_name]) + _uri = "/".join(["api",_key,_name]) + if _context : + _uri = f'{_context}/{_uri}' _map[_uri] = _pointer # # We are adding some source specific plugins to the user-defined plugins @@ -103,9 +100,9 @@ class Initializer : # if self._ISCLOUD : - _plugins = cloud.plugins() + _plugins = cloud.plugins(_context) else: - _plugins = disk.plugins() + _plugins = disk.plugins(context=_context) # # If there are any plugins found, we should load them and use them @@ -154,9 +151,10 @@ class Initializer : # # post-processing menu, overwrite items and behaviors # + _layout = copy.deepcopy(self._config['layout']) _overwrite = _layout['overwrite'] if 'overwrite' in _layout else {} - + _context = self.system()['context'] for _name in _object : _submenu = _object[_name] _index = 0 @@ -251,18 +249,22 @@ class Initializer : _index = _layout['index'] _newpath = os.sep.join([_path,_oroot]) self._config['system']['portal'] = self._caller != None - + _context = self.system()['context'] if self._caller : # - self._config['system']['caller'] = {'icon':'/caller/main/' + self._caller.system()['icon']} - # self._config['system']['caller'] = {'icon': self._caller.icon()} + _callerContext = self._caller.system()['context'] + if not self._config['system']['context'] : + self._config['system']['context'] = _callerContext + # self._config['system']['context'] = _callerContext + # self._config['system']['caller'] = {'icon':f'caller/main/' + self._caller.system()['icon']} + self._config['system']['caller'] = {'icon': 'caller/main/'+self._caller.system()['icon'].replace(_callerContext,'')} if os.path.exists(_newpath) and not self._ISCLOUD: # # LOG: rewrite due to the mode in which the site is being run # - _api = 'api/disk/read?uri='+_oroot + _api = f'{_context}/api/disk/read?uri='+_oroot _stream = json.dumps(self._config) _stream = _stream.replace(_oroot,_api) # self._config = json.loads(_stream) @@ -274,19 +276,19 @@ class Initializer : _logo = self._config['system']['logo'] if self._ISCLOUD: - _icon = f'/api/cloud/download?doc=/{_logo}' + _icon = f'{_context}/api/cloud/download?doc=/{_logo}' else: - _icon = f'api/disk/read?uri={_logo}' + _icon = f'{_context}/api/disk/read?uri={_logo}' if disk.exists(uri=_logo,config=self._config): _icon = _logo if self._location : self._config['layout']['location'] = _path self._config['system']['icon'] = _icon - self._config['system']['logo'] = _logo + self._config['system']['logo'] = _logo # self.set('layout.root',os.sep.join([_path,_oroot])) pass diff --git a/index.py b/index.py index 3bf4ad4..7b16483 100644 --- a/index.py +++ b/index.py @@ -75,9 +75,10 @@ def _index (): # # _args['routes']=_config['plugins'] # # _system = cms.components.get_system(_config) #copy.deepcopy(_config['system']) # _html = "" - _args={} + _args={'system':_handler.system(skip=['source','app','data']),'layout':_handler.layout()} try: uri = os.sep.join([_config['layout']['root'], _config['layout']['index']]) + # # _html = _route.get().html(uri,'index',_config,_system) # _html = _handler.html(uri,'index') _index_page = "index.html" @@ -93,7 +94,7 @@ def _index (): # _args = {'layout':_config['layout'],'index':_html} # _args['system'] = _handler.system(skip=['source','app','route']) - return render_template(_index_page,**_args) + return render_template(_index_page,**_args),200 if _index_page != "404.html" else 200 # @_app.route('/id/') # def people(uid): @@ -134,10 +135,14 @@ def _getproxy(module,name) : return _delegate(_handler,module,name) def _delegate(_handler,module,name): + global _route uri = '/'.join(['api',module,name]) # _args = dict(request.args,**{}) # _args['config'] = _handler.config() _plugins = _handler.plugins() + _context = _handler.system()['context'] + if _context : + uri = f'{_context}/{uri}' if uri not in _plugins : _data = {} @@ -153,7 +158,7 @@ def _delegate(_handler,module,name): if type(_data) == pd.DataFrame : _data = _data.to_dict(orient='records') if type(_data) == list: - _data = json.dumps(_data) + _data = json.dumps(_data) _code = 200 if _data else 500 return _data,_code @_app.route("/api//" , methods=['POST']) @@ -162,32 +167,7 @@ def _post (module,name): global _route _handler = _route.get() return _delegate(_handler,module,name) - # _config = _handler.config() - # _plugins = _handler.plugins() - # uri = '/'.join(['api',module,name]) - - # # _args = request.json - # # _args['config'] = _config - # code = 404 - - # _data = "" - # if uri in _plugins : - # _pointer = _plugins[uri] - # # _info = _pointer(**_args) - # _data = _pointer(request=request,config=_handler.config() ) - # if type(_data) == pd.DataFrame : - # _data = _data.to_dict(orient='records') - # if type(_data) == list: - # _data = json.dumps(_data) - # _code = 200 if _data else 500 - - - # # _info =io.BytesIO(_info) - - # # _info = base64.encodebytes(_info.getvalue()).decode('ascii') - - # return _data,code @_app.route('/version') def _version (): global _route @@ -252,23 +232,20 @@ def _cms_page (): # _handler = _route.get() # _config = _handler.config() _uri = request.args['uri'] + # _uri = os.sep.join([_config['layout']['root'],_uri]) _title = request.args['title'] if 'title' in request.args else '' - # _args = {'system':_handler.system()} #cms.components.get_system(_config) } - # if 'plugins' in _config: - # _args['routes'] = _config['plugins'] - # _html = _handler.html(_uri,_config) # cmsc.components.html(_uri,_title,_args) - # e = Environment(loader=BaseLoader()).from_string(_html) - # _args['system'] = _handler.system(skip=['app','source']) - # return e.render(**_args),200 _args = _route.render(_uri,_title) return _args[_title],200 @_app.route('/set/') def set(id): global _route - _handler = _route.set(id) - return redirect('/') + _route.set(id) + _handler = _route.get() + _context = _handler.system()['context'] + _uri = f'/{_context}'.replace('//','/') + return redirect(_uri) @_app.route('/') def _open(id): global _route diff --git a/requirements.txt b/requirements.txt index 5b55284..9abfa1e 100644 --- a/requirements.txt +++ b/requirements.txt @@ -6,3 +6,4 @@ numpy pandas mistune pygments +scholarly diff --git a/static/js/menu.js b/static/js/menu.js index d963040..4b18c6d 100644 --- a/static/js/menu.js +++ b/static/js/menu.js @@ -8,7 +8,8 @@ var menu = {} * :id * :pid parent identifier */ -menu.apply = function (uri,id,pid){ + +menu.apply = function (uri,id,pid,_context){ id = id.replace(/ /g,'-') if(uri == null){ return ; @@ -19,7 +20,7 @@ menu.apply = function (uri,id,pid){ httpclient.setHeader('uri',uri) httpclient.setHeader('dom',id) - httpclient.post('/page',function(x){ + httpclient.post(_context+'/page',function(x){ var _html = x.responseText var template = document.createElement('template'); template.innerHTML = _html.trim(); diff --git a/templates/menu.html b/templates/menu.html index 94aa352..9cf320d 100644 --- a/templates/menu.html +++ b/templates/menu.html @@ -26,7 +26,7 @@
{%elif _item.uri and _item.type not in ['dialog','embed'] %} -
+
{% else %}