pgadmin4/web/pgadmin/browser/collection.py
Ashesh Vashi eb83d57c5a Introduced new controls to show the list of a node type (by name and id) as properties of other node.
Resolved a typo in privileges control.
Removed duplicate lines in backform.pgadmin.js
2015-12-28 01:00:20 +05:30

171 lines
4.9 KiB
Python

##########################################################################
#
# pgAdmin 4 - PostgreSQL Tools
#
# Copyright (C) 2013 - 2015, The pgAdmin Development Team
# This software is released under the PostgreSQL Licence
#
##########################################################################
import six
from abc import ABCMeta, abstractmethod
from flask import url_for, render_template
from flask.ext.babel import gettext
from pgadmin.browser.utils import PgAdminModule, PGChildModule
from pgadmin.browser import BrowserPluginModule
from pgadmin.browser.utils import PGChildNodeView
@six.add_metaclass(ABCMeta)
class CollectionNodeModule(PgAdminModule, PGChildModule):
"""
Base class for collection node submodules.
"""
browser_url_prefix = BrowserPluginModule.browser_url_prefix
def __init__(self, import_name, **kwargs):
kwargs.setdefault("url_prefix", self.node_path)
kwargs.setdefault("static_url_path", '/static')
super(CollectionNodeModule, self).__init__(
"NODE-%s" % self.node_type,
import_name,
**kwargs
)
@property
def jssnippets(self):
"""
Returns a snippet of javascript to include in the page
"""
return []
def get_own_javascripts(self):
scripts = []
scripts.extend([{
'name': 'pgadmin.node.%s' % self.node_type,
'path': url_for('browser.index') + '%s/module' % self.node_type,
'when': self.script_load
}])
for module in self.submodules:
scripts.extend(module.get_own_javascripts())
return scripts
def generate_browser_node(
self, node_id, label, icon, **kwargs
):
obj = {
"id": "%s/%s" % (self.node_type, node_id),
"label": label,
"icon": self.node_icon if not icon else icon,
"inode": self.node_inode,
"_type": self.node_type,
"_id": node_id,
"module": 'pgadmin.node.%s' % self.node_type
}
for key in kwargs:
obj.setdefault(key, kwargs[key])
return obj
def generate_browser_collection_node(self, sid, **kwargs):
obj = {
"id": "coll-%s/%d" % (self.node_type, sid),
"label": self.collection_label,
"icon": self.collection_icon,
"inode": True,
"_type": 'coll-%s' % (self.node_type),
"_id": sid,
"module": 'pgadmin.node.%s' % self.node_type
}
for key in kwargs:
obj.setdefault(key, kwargs[key])
return obj
@property
def node_type(self):
return '%s' % (self.NODE_TYPE)
@property
def csssnippets(self):
"""
Returns a snippet of css to include in the page
"""
snippets = [
render_template(
"browser/css/collection.css",
node_type=self.node_type
),
render_template(
"browser/css/node.css",
node_type=self.node_type,
_=gettext
)
]
for submodule in self.submodules:
snippets.extend(submodule.csssnippets)
return snippets
@property
def collection_label(self):
"""
Label to be shown for the collection node, do not forget to set the
class level variable COLLECTION_LABEL.
"""
return self.COLLECTION_LABEL
@property
def collection_icon(self):
"""
icon to be displayed for the browser collection node
"""
return 'icon-coll-%s' % (self.node_type)
@property
def node_icon(self):
"""
icon to be displayed for the browser nodes
"""
return 'icon-%s' % (self.node_type)
@property
def node_inode(self):
"""
Override this property to make the node as leaf node.
"""
return True
@abstractmethod
def get_nodes(self, sid, *args, **kwargs):
"""
Generate the collection node
You need to override this method because every node will have different
url pattern for the parent.
"""
pass
@property
def script_load(self):
"""
This property defines, when to load this script.
In order to allow creation of an object, we need to load script for any
node at the parent level.
i.e.
- In order to allow creating a server object, it should be loaded at
server-group node.
"""
pass
@property
def node_path(self):
return self.browser_url_prefix + self.node_type
@property
def javascripts(self):
return []