From cb635f670661027f385e606d2e5da51bd108ebb9 Mon Sep 17 00:00:00 2001 From: Aditya Toshniwal Date: Thu, 30 Jun 2022 11:06:50 +0530 Subject: [PATCH] Removing dynamic module loading and replacing it with static loading. Fixes #7492 Gets rid of all occurrences and usage of get_own_javascripts since it is no longer used. --- docs/en_US/release_notes.rst | 1 + docs/en_US/release_notes_6_12.rst | 19 +++ web/pgadmin/__init__.py | 3 +- web/pgadmin/about/__init__.py | 7 - web/pgadmin/authenticate/mfa/registry.py | 25 ++- web/pgadmin/authenticate/registry.py | 29 +++- web/pgadmin/browser/__init__.py | 159 +----------------- web/pgadmin/browser/collection.py | 27 --- web/pgadmin/browser/server_groups/__init__.py | 9 + .../browser/server_groups/servers/__init__.py | 41 ++--- .../servers/databases/__init__.py | 34 ++++ .../foreign_data_wrappers/__init__.py | 9 + .../foreign_servers/__init__.py | 9 + .../servers/databases/schemas/__init__.py | 74 ++++++++ .../schemas/catalog_objects/__init__.py | 10 ++ .../databases/schemas/domains/__init__.py | 9 + .../databases/schemas/packages/__init__.py | 12 ++ .../databases/schemas/tables/__init__.py | 37 +++- .../schemas/tables/constraints/__init__.py | 22 +++ .../schemas/tables/partitions/__init__.py | 6 +- .../databases/schemas/views/__init__.py | 19 +++ .../server_groups/servers/pgagent/__init__.py | 13 ++ web/pgadmin/dashboard/__init__.py | 7 - web/pgadmin/misc/__init__.py | 44 +++-- web/pgadmin/misc/bgprocess/__init__.py | 7 - web/pgadmin/misc/cloud/__init__.py | 34 ++-- web/pgadmin/misc/dependencies/__init__.py | 8 +- web/pgadmin/misc/dependents/__init__.py | 7 +- web/pgadmin/misc/file_manager/__init__.py | 9 - web/pgadmin/misc/sql/__init__.py | 7 - web/pgadmin/misc/statistics/__init__.py | 8 +- web/pgadmin/preferences/__init__.py | 13 -- web/pgadmin/settings/__init__.py | 7 - web/pgadmin/static/bundle/app.js | 2 +- web/pgadmin/submodules.py | 26 +++ web/pgadmin/tools/__init__.py | 75 ++++++--- web/pgadmin/tools/backup/__init__.py | 11 -- web/pgadmin/tools/debugger/__init__.py | 22 --- web/pgadmin/tools/erd/__init__.py | 7 - web/pgadmin/tools/grant_wizard/__init__.py | 18 -- web/pgadmin/tools/import_export/__init__.py | 18 -- .../tools/import_export_servers/__init__.py | 18 -- web/pgadmin/tools/maintenance/__init__.py | 21 --- web/pgadmin/tools/psql/__init__.py | 7 - web/pgadmin/tools/restore/__init__.py | 11 -- web/pgadmin/tools/schema_diff/__init__.py | 7 - web/pgadmin/tools/storage_manager/__init__.py | 17 -- web/pgadmin/tools/user_management/__init__.py | 16 -- web/pgadmin/utils/__init__.py | 17 -- web/pgadmin/utils/driver/registry.py | 17 +- .../utils/dynamic_registry/__init__.py | 5 +- 51 files changed, 490 insertions(+), 550 deletions(-) create mode 100644 docs/en_US/release_notes_6_12.rst create mode 100644 web/pgadmin/submodules.py diff --git a/docs/en_US/release_notes.rst b/docs/en_US/release_notes.rst index 19e3597c1..32204c1e8 100644 --- a/docs/en_US/release_notes.rst +++ b/docs/en_US/release_notes.rst @@ -11,6 +11,7 @@ notes for it. .. toctree:: :maxdepth: 1 + release_notes_6_12 release_notes_6_11 release_notes_6_10 release_notes_6_9 diff --git a/docs/en_US/release_notes_6_12.rst b/docs/en_US/release_notes_6_12.rst new file mode 100644 index 000000000..8d49f73c5 --- /dev/null +++ b/docs/en_US/release_notes_6_12.rst @@ -0,0 +1,19 @@ +************ +Version 6.12 +************ + +Release date: 2022-07-28 + +This release contains a number of bug fixes and new features since the release of pgAdmin 4 v6.11. + +New features +************ + + +Housekeeping +************ + + | `Issue #7492 `_ - Removing dynamic module loading and replacing it with static loading. + +Bug fixes +********* diff --git a/web/pgadmin/__init__.py b/web/pgadmin/__init__.py index d5188dd5d..40cbe5c0c 100644 --- a/web/pgadmin/__init__.py +++ b/web/pgadmin/__init__.py @@ -713,7 +713,8 @@ def create_app(app_name=None): ########################################################################## # Load plugin modules ########################################################################## - for module in app.find_submodules('pgadmin'): + from .submodules import get_submodules + for module in get_submodules(): app.logger.info('Registering blueprint module: %s' % module) if app.blueprints.get(module.name) is None: app.register_blueprint(module) diff --git a/web/pgadmin/about/__init__.py b/web/pgadmin/about/__init__.py index 56610f8c3..e520a1e80 100644 --- a/web/pgadmin/about/__init__.py +++ b/web/pgadmin/about/__init__.py @@ -41,13 +41,6 @@ class AboutModule(PgAdminModule): ] } - def get_own_javascripts(self): - return [{ - 'name': 'pgadmin.about', - 'path': url_for('about.index') + 'about', - 'when': None - }] - def get_exposed_url_endpoints(self): return ['about.index'] diff --git a/web/pgadmin/authenticate/mfa/registry.py b/web/pgadmin/authenticate/mfa/registry.py index d88aa0b17..dae8c7fac 100644 --- a/web/pgadmin/authenticate/mfa/registry.py +++ b/web/pgadmin/authenticate/mfa/registry.py @@ -22,8 +22,31 @@ class: MultiFactorAuthRegistry An registry factory for the multi-factor authentication methods. """ + + +@classmethod +def load_modules(cls, app=None): + submodules = [] + from . import authenticator as module + submodules.append(module) + + from . import email as module + submodules.append(module) + + from . import utils as module + submodules.append(module) + + from . import views as module + submodules.append(module) + + for module in submodules: + if "init_app" in module.__dict__.keys(): + module.__dict__["init_app"](app) + + MultiFactorAuthRegistry = create_registry_metaclass( - 'MultiFactorAuthRegistry', __package__, decorate_as_module=True + 'MultiFactorAuthRegistry', __package__, load_modules=load_modules, + decorate_as_module=True ) diff --git a/web/pgadmin/authenticate/registry.py b/web/pgadmin/authenticate/registry.py index 77f111aa7..e361525f6 100644 --- a/web/pgadmin/authenticate/registry.py +++ b/web/pgadmin/authenticate/registry.py @@ -13,6 +13,33 @@ from pgadmin.utils.dynamic_registry import create_registry_metaclass +@classmethod +def load_modules(cls, app=None): + submodules = [] + from . import internal as module + submodules.append(module) + + from . import kerberos as module + submodules.append(module) + + from . import ldap as module + submodules.append(module) + + from . import mfa as module + submodules.append(module) + + from . import oauth2 as module + submodules.append(module) + + from . import webserver as module + submodules.append(module) + + for module in submodules: + if "init_app" in module.__dict__.keys(): + module.__dict__["init_app"](app) + + AuthSourceRegistry = create_registry_metaclass( - "AuthSourceRegistry", __package__, decorate_as_module=True + "AuthSourceRegistry", __package__, load_modules=load_modules, + decorate_as_module=True ) diff --git a/web/pgadmin/browser/__init__.py b/web/pgadmin/browser/__init__.py index c3f67f57d..e02d7cfbe 100644 --- a/web/pgadmin/browser/__init__.py +++ b/web/pgadmin/browser/__init__.py @@ -102,103 +102,6 @@ class BrowserModule(PgAdminModule): stylesheets.append(url_for(endpoint, filename=filename)) return stylesheets - def get_own_javascripts(self): - scripts = list() - scripts.append({ - 'name': 'alertify', - 'path': url_for( - 'static', - filename='vendor/alertifyjs/alertify' if current_app.debug - else 'vendor/alertifyjs/alertify.min' - ), - 'exports': 'alertify', - 'preloaded': True - }) - scripts.append({ - 'name': 'jqueryui.position', - 'path': url_for( - 'static', - filename='vendor/jQuery-contextMenu/jquery.ui.position' if - current_app.debug else - 'vendor/jQuery-contextMenu/jquery.ui.position.min' - ), - 'deps': ['jquery'], - 'exports': 'jQuery.ui.position', - 'preloaded': True - }) - scripts.append({ - 'name': 'jquery.contextmenu', - 'path': url_for( - 'static', - filename='vendor/jQuery-contextMenu/jquery.contextMenu' if - current_app.debug else - 'vendor/jQuery-contextMenu/jquery.contextMenu.min' - ), - 'deps': ['jquery', 'jqueryui.position'], - 'exports': 'jQuery.contextMenu', - 'preloaded': True - }) - scripts.append({ - 'name': 'wcdocker', - 'path': url_for( - 'static', - filename='vendor/wcDocker/wcDocker' if current_app.debug - else 'vendor/wcDocker/wcDocker.min' - ), - 'deps': ['jquery.contextmenu'], - 'exports': '', - 'preloaded': True - }) - - scripts.append({ - 'name': 'pgadmin.browser.datamodel', - 'path': url_for(BROWSER_STATIC, filename='js/datamodel'), - 'preloaded': True - }) - - for name, script in [ - [PGADMIN_BROWSER, 'js/browser'], - ['pgadmin.browser.endpoints', 'js/endpoints'], - ['pgadmin.browser.error', 'js/error'], - ['pgadmin.browser.constants', 'js/constants'] - ]: - scripts.append({ - 'name': name, - 'path': url_for(BROWSER_INDEX) + script, - 'preloaded': True - }) - - for name, script in [ - ['pgadmin.browser.node', 'js/node'], - ['pgadmin.browser.messages', 'js/messages'], - ['pgadmin.browser.collection', 'js/collection'] - ]: - scripts.append({ - 'name': name, - 'path': url_for(BROWSER_INDEX) + script, - 'preloaded': True, - 'deps': ['pgadmin.browser.datamodel'] - }) - - for name, end in [ - ['pgadmin.browser.menu', 'js/menu'], - ['pgadmin.browser.panel', 'js/panel'], - ['pgadmin.browser.frame', 'js/frame'] - ]: - scripts.append({ - 'name': name, 'path': url_for(BROWSER_STATIC, filename=end), - 'preloaded': True}) - - scripts.append({ - 'name': 'pgadmin.browser.node.ui', - 'path': url_for(BROWSER_STATIC, filename='js/node.ui'), - 'when': 'server_group' - }) - - for module in self.submodules: - scripts.extend(module.get_own_javascripts()) - return scripts - def get_own_menuitems(self): menus = { 'file_items': [ @@ -311,6 +214,15 @@ class BrowserModule(PgAdminModule): 'browser.lock_layout', 'browser.signal_runtime'] + def register(self, app, options): + """ + Override the default register function to automagically register + sub-modules at once. + """ + from .server_groups import blueprint as module + self.submodules.append(module) + super(BrowserModule, self).register(app, options) + blueprint = BrowserModule(MODULE_NAME, __name__) @@ -377,51 +289,6 @@ class BrowserPluginModule(PgAdminModule): """ return False - def get_own_javascripts(self): - """ - Returns the list of javascripts information used by the module. - - Each javascripts information must contain name, path of the script. - - The name must be unique for each module, hence - in order to refer them - properly, we do use 'pgadmin.node.' as norm. - - That can also refer to when to load the script. - - i.e. - We may not need to load the javascript of table node, when we're - not yet connected to a server, and no database is loaded. Hence - it - make sense to load them when a database is loaded. - - We may also add 'deps', which also refers to the list of javascripts, - it may depends on. - """ - scripts = [] - - if self.module_use_template_javascript: - scripts.extend([{ - 'name': PGADMIN_NODE % self.node_type, - 'path': url_for(BROWSER_INDEX - ) + '%s/module' % self.node_type, - 'when': self.script_load, - 'is_template': True - }]) - else: - scripts.extend([{ - 'name': PGADMIN_NODE % self.node_type, - 'path': url_for( - '%s.static' % self.name, - filename=('js/%s' % self.node_type) - ), - 'when': self.script_load, - 'is_template': False - }]) - - for module in self.submodules: - scripts.extend(module.get_own_javascripts()) - - return scripts - def generate_browser_node( self, node_id, parent_id, label, icon, inode, node_type, **kwargs ): @@ -508,14 +375,6 @@ class BrowserPluginModule(PgAdminModule): """ return self.browser_url_prefix + self.node_type - @property - def javascripts(self): - """ - Override the javascript of PgAdminModule, so that - we don't return - javascripts from the get_own_javascripts itself. - """ - return [] - @property def label(self): """ diff --git a/web/pgadmin/browser/collection.py b/web/pgadmin/browser/collection.py index 39c6ca072..5127d5615 100644 --- a/web/pgadmin/browser/collection.py +++ b/web/pgadmin/browser/collection.py @@ -59,33 +59,6 @@ class CollectionNodeModule(PgAdminModule, PGChildModule): """ return True - def get_own_javascripts(self): - scripts = [] - - if self.module_use_template_javascript: - scripts.extend([{ - 'name': PGADMIN_NODE % self.node_type, - 'path': url_for('browser.index' - ) + '%s/module' % self.node_type, - 'when': self.script_load, - 'is_template': True - }]) - else: - scripts.extend([{ - 'name': PGADMIN_NODE % self.node_type, - 'path': url_for( - '%s.static' % self.name, - filename=('js/%s' % self.node_type) - ), - 'when': self.script_load, - 'is_template': False - }]) - - for module in self.submodules: - scripts.extend(module.get_own_javascripts()) - - return scripts - def generate_browser_node( self, node_id, parent_id, label, icon, **kwargs ): diff --git a/web/pgadmin/browser/server_groups/__init__.py b/web/pgadmin/browser/server_groups/__init__.py index 84d54351f..88368369e 100644 --- a/web/pgadmin/browser/server_groups/__init__.py +++ b/web/pgadmin/browser/server_groups/__init__.py @@ -123,6 +123,15 @@ class ServerGroupModule(BrowserPluginModule): """ pass + def register(self, app, options): + """ + Override the default register function to automagically register + sub-modules at once. + """ + from .servers import blueprint as module + self.submodules.append(module) + super(BrowserPluginModule, self).register(app, options) + class ServerGroupMenuItem(MenuItem): def __init__(self, **kwargs): diff --git a/web/pgadmin/browser/server_groups/servers/__init__.py b/web/pgadmin/browser/server_groups/servers/__init__.py index 870a4bba4..a4fed1f20 100644 --- a/web/pgadmin/browser/server_groups/servers/__init__.py +++ b/web/pgadmin/browser/server_groups/servers/__init__.py @@ -283,30 +283,6 @@ class ServerModule(sg.ServerGroupPluginModule): return snippets - def get_own_javascripts(self): - scripts = [] - - scripts.extend([{ - 'name': 'pgadmin.browser.server.privilege', - 'path': url_for('%s.static' % self.name, filename='js/privilege'), - 'when': self.node_type, - 'is_template': False, - 'deps': ['pgadmin.browser.node.ui'] - }, { - 'name': 'pgadmin.browser.server.variable', - 'path': url_for('%s.static' % self.name, filename='js/variable'), - 'when': self.node_type, - 'is_template': False - }, { - 'name': 'pgadmin.server.supported_servers', - 'path': url_for('browser.index') + 'server/supported_servers', - 'is_template': True, - 'when': self.node_type - }]) - scripts.extend(sg.ServerGroupPluginModule.get_own_javascripts(self)) - - return scripts - def register(self, app, options): """ Override the default register function to automagically register @@ -318,6 +294,23 @@ class ServerModule(sg.ServerGroupPluginModule): app.jinja_env.filters['qtTypeIdent'] = driver.qtTypeIdent app.jinja_env.filters['hasAny'] = has_any + from .ppas import PPAS + + from .databases import blueprint as module + self.submodules.append(module) + + from .pgagent import blueprint as module + self.submodules.append(module) + + from .resource_groups import blueprint as module + self.submodules.append(module) + + from .roles import blueprint as module + self.submodules.append(module) + + from .tablespaces import blueprint as module + self.submodules.append(module) + super(ServerModule, self).register(app, options) # We do not have any preferences for server node. diff --git a/web/pgadmin/browser/server_groups/servers/databases/__init__.py b/web/pgadmin/browser/server_groups/servers/databases/__init__.py index 0b6589046..3eb369f49 100644 --- a/web/pgadmin/browser/server_groups/servers/databases/__init__.py +++ b/web/pgadmin/browser/server_groups/servers/databases/__init__.py @@ -95,6 +95,40 @@ class DatabaseModule(CollectionNodeModule): """ return False + def register(self, app, options): + """ + Override the default register function to automagically register + sub-modules at once. + """ + from .casts import blueprint as module + self.submodules.append(module) + + from .event_triggers import blueprint as module + self.submodules.append(module) + + from .extensions import blueprint as module + self.submodules.append(module) + + from .foreign_data_wrappers import blueprint as module + self.submodules.append(module) + + from .languages import blueprint as module + self.submodules.append(module) + + from .publications import blueprint as module + self.submodules.append(module) + + from .schemas import schema_blueprint as module + self.submodules.append(module) + + from .schemas import catalog_blueprint as module + self.submodules.append(module) + + from .subscriptions import blueprint as module + self.submodules.append(module) + + super(DatabaseModule, self).register(app, options) + blueprint = DatabaseModule(__name__) diff --git a/web/pgadmin/browser/server_groups/servers/databases/foreign_data_wrappers/__init__.py b/web/pgadmin/browser/server_groups/servers/databases/foreign_data_wrappers/__init__.py index 7736f5185..8db8f2ecb 100644 --- a/web/pgadmin/browser/server_groups/servers/databases/foreign_data_wrappers/__init__.py +++ b/web/pgadmin/browser/server_groups/servers/databases/foreign_data_wrappers/__init__.py @@ -95,6 +95,15 @@ class ForeignDataWrapperModule(CollectionNodeModule): """ return False + def register(self, app, options): + """ + Override the default register function to automagically register + sub-modules at once. + """ + from .foreign_servers import blueprint as module + self.submodules.append(module) + super(ForeignDataWrapperModule, self).register(app, options) + blueprint = ForeignDataWrapperModule(__name__) diff --git a/web/pgadmin/browser/server_groups/servers/databases/foreign_data_wrappers/foreign_servers/__init__.py b/web/pgadmin/browser/server_groups/servers/databases/foreign_data_wrappers/foreign_servers/__init__.py index b32f1ca3a..2c776fb85 100644 --- a/web/pgadmin/browser/server_groups/servers/databases/foreign_data_wrappers/foreign_servers/__init__.py +++ b/web/pgadmin/browser/server_groups/servers/databases/foreign_data_wrappers/foreign_servers/__init__.py @@ -96,6 +96,15 @@ class ForeignServerModule(CollectionNodeModule): """ return False + def register(self, app, options): + """ + Override the default register function to automagically register + sub-modules at once. + """ + from .user_mappings import blueprint as module + self.submodules.append(module) + super(ForeignServerModule, self).register(app, options) + blueprint = ForeignServerModule(__name__) diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/__init__.py b/web/pgadmin/browser/server_groups/servers/databases/schemas/__init__.py index 7e113d288..594caf295 100644 --- a/web/pgadmin/browser/server_groups/servers/databases/schemas/__init__.py +++ b/web/pgadmin/browser/server_groups/servers/databases/schemas/__init__.py @@ -103,6 +103,73 @@ class SchemaModule(CollectionNodeModule): """ return False + def register(self, app, options): + """ + Override the default register function to automagically register + sub-modules at once. + """ + from .aggregates import blueprint as module + self.submodules.append(module) + + from .catalog_objects import blueprint as module + self.submodules.append(module) + + from .collations import blueprint as module + self.submodules.append(module) + + from .domains import blueprint as module + self.submodules.append(module) + + from .foreign_tables import blueprint as module + self.submodules.append(module) + + from .fts_configurations import blueprint as module + self.submodules.append(module) + + from .fts_dictionaries import blueprint as module + self.submodules.append(module) + + from .fts_parsers import blueprint as module + self.submodules.append(module) + + from .fts_templates import blueprint as module + self.submodules.append(module) + + from .functions import blueprint as module + self.submodules.append(module) + + from .functions import trigger_function_blueprint as module + self.submodules.append(module) + + from .functions import procedure_blueprint as module + self.submodules.append(module) + + from .operators import blueprint as module + self.submodules.append(module) + + from .packages import blueprint as module + self.submodules.append(module) + + from .sequences import blueprint as module + self.submodules.append(module) + + from .synonyms import blueprint as module + self.submodules.append(module) + + from .tables import blueprint as module + self.submodules.append(module) + + from .types import blueprint as module + self.submodules.append(module) + + from .views import view_blueprint as module + self.submodules.append(module) + + from .views import mview_blueprint as module + self.submodules.append(module) + + super(SchemaModule, self).register(app, options) + class CatalogModule(SchemaModule): """ @@ -114,6 +181,13 @@ class CatalogModule(SchemaModule): _NODE_TYPE = 'catalog' _COLLECTION_LABEL = gettext("Catalogs") + def register(self, app, options): + """ + Override the default register function to automagically register + sub-modules at once. + """ + super(SchemaModule, self).register(app, options) + schema_blueprint = SchemaModule(__name__) catalog_blueprint = CatalogModule(__name__) diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/catalog_objects/__init__.py b/web/pgadmin/browser/server_groups/servers/databases/schemas/catalog_objects/__init__.py index bef0c7f2f..06184dfc2 100644 --- a/web/pgadmin/browser/server_groups/servers/databases/schemas/catalog_objects/__init__.py +++ b/web/pgadmin/browser/server_groups/servers/databases/schemas/catalog_objects/__init__.py @@ -80,6 +80,16 @@ class CatalogObjectModule(SchemaChildModule): """ return database.DatabaseModule.node_type + def register(self, app, options): + """ + Override the default register function to automagically register + sub-modules at once. + """ + super(CatalogObjectModule, self).register(app, options) + + from .columns import blueprint as module + app.register_blueprint(module) + blueprint = CatalogObjectModule(__name__) diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/domains/__init__.py b/web/pgadmin/browser/server_groups/servers/databases/schemas/domains/__init__.py index 025243048..8011eda39 100644 --- a/web/pgadmin/browser/server_groups/servers/databases/schemas/domains/__init__.py +++ b/web/pgadmin/browser/server_groups/servers/databases/schemas/domains/__init__.py @@ -71,6 +71,15 @@ class DomainModule(SchemaChildModule): """ return databases.DatabaseModule.node_type + def register(self, app, options): + """ + Override the default register function to automagically register + sub-modules at once. + """ + from .domain_constraints import blueprint as module + self.submodules.append(module) + super(DomainModule, self).register(app, options) + blueprint = DomainModule(__name__) diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/packages/__init__.py b/web/pgadmin/browser/server_groups/servers/databases/schemas/packages/__init__.py index dbc9ad7da..15c25f090 100644 --- a/web/pgadmin/browser/server_groups/servers/databases/schemas/packages/__init__.py +++ b/web/pgadmin/browser/server_groups/servers/databases/schemas/packages/__init__.py @@ -76,6 +76,18 @@ class PackageModule(SchemaChildModule): """ return database.DatabaseModule.node_type + def register(self, app, options): + """ + Override the default register function to automagically register + sub-modules at once. + """ + from .edbfuncs import blueprint as module + self.submodules.append(module) + + from .edbvars import blueprint as module + self.submodules.append(module) + super(PackageModule, self).register(app, options) + blueprint = PackageModule(__name__) diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/__init__.py b/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/__init__.py index c39e4b664..e24bce49b 100644 --- a/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/__init__.py +++ b/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/__init__.py @@ -118,17 +118,36 @@ class TableModule(SchemaChildModule): return snippets - def get_own_javascripts(self): - scripts = SchemaChildModule.get_own_javascripts(self) + def register(self, app, options): + """ + Override the default register function to automagically register + sub-modules at once. + """ + from .columns import blueprint as module + self.submodules.append(module) - scripts.append({ - 'name': 'pgadmin.browser.table.partition.utils', - 'path': url_for('browser.index') + - 'table/static/js/partition.utils', - 'when': 'database', 'is_template': False - }) + from .compound_triggers import blueprint as module + self.submodules.append(module) - return scripts + from .constraints import blueprint as module + self.submodules.append(module) + + from .indexes import blueprint as module + self.submodules.append(module) + + from .partitions import blueprint as module + self.submodules.append(module) + + from .row_security_policies import blueprint as module + self.submodules.append(module) + + from .rules import blueprint as module + self.submodules.append(module) + + from .triggers import blueprint as module + self.submodules.append(module) + + super(TableModule, self).register(app, options) blueprint = TableModule(__name__) diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/constraints/__init__.py b/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/constraints/__init__.py index 88ed80c67..cecd3d391 100644 --- a/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/constraints/__init__.py +++ b/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/constraints/__init__.py @@ -83,6 +83,28 @@ class ConstraintsModule(CollectionNodeModule): """ return False + def register(self, app, options): + """ + Override the default register function to automagically register + sub-modules at once. + """ + from .check_constraint import blueprint as module + self.submodules.append(module) + + from .exclusion_constraint import blueprint as module + self.submodules.append(module) + + from .foreign_key import blueprint as module + self.submodules.append(module) + + from .index_constraint import primary_key_blueprint as module + self.submodules.append(module) + + from .index_constraint import unique_constraint_blueprint as module + self.submodules.append(module) + + super(ConstraintsModule, self).register(app, options) + blueprint = ConstraintsModule(__name__) diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/partitions/__init__.py b/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/partitions/__init__.py index cac098d59..f22459cb4 100644 --- a/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/partitions/__init__.py +++ b/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/partitions/__init__.py @@ -122,13 +122,9 @@ class PartitionsModule(CollectionNodeModule): sub-modules of table node under partition table node. """ - self.submodules = list(app.find_submodules(self.import_name)) + self.submodules = [] super(CollectionNodeModule, self).register(app, options) - for module in self.submodules: - module.parentmodules.append(self) - app.register_blueprint(module) - # Now add sub modules of table node to partition table node. # Exclude 'partition' module for now to avoid cyclic import issue. modules_to_skip = ['partition', 'column'] diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/views/__init__.py b/web/pgadmin/browser/server_groups/servers/databases/schemas/views/__init__.py index e61098337..210feab16 100644 --- a/web/pgadmin/browser/server_groups/servers/databases/schemas/views/__init__.py +++ b/web/pgadmin/browser/server_groups/servers/databases/schemas/views/__init__.py @@ -130,6 +130,25 @@ class ViewModule(SchemaChildModule): return snippets + def register(self, app, options): + from pgadmin.browser.server_groups.servers.databases.schemas.\ + tables.columns import blueprint as module + self.submodules.append(module) + from pgadmin.browser.server_groups.servers.databases.schemas.\ + tables.indexes import blueprint as module + self.submodules.append(module) + from pgadmin.browser.server_groups.servers.databases.schemas.\ + tables.triggers import blueprint as module + self.submodules.append(module) + from pgadmin.browser.server_groups.servers.databases.schemas.\ + tables.rules import blueprint as module + self.submodules.append(module) + from pgadmin.browser.server_groups.servers.databases.schemas.\ + tables.compound_triggers import blueprint as module + self.submodules.append(module) + + super(ViewModule, self).register(app, options) + class Message(IProcessDesc): def __init__(self, _sid, _data, _query): diff --git a/web/pgadmin/browser/server_groups/servers/pgagent/__init__.py b/web/pgadmin/browser/server_groups/servers/pgagent/__init__.py index 15fdf0450..52a36ea98 100644 --- a/web/pgadmin/browser/server_groups/servers/pgagent/__init__.py +++ b/web/pgadmin/browser/server_groups/servers/pgagent/__init__.py @@ -111,6 +111,19 @@ SELECT EXISTS( """ return False + def register(self, app, options): + """ + Override the default register function to automagically register + sub-modules at once. + """ + from .schedules import blueprint as module + self.submodules.append(module) + + from .steps import blueprint as module + self.submodules.append(module) + + super(JobModule, self).register(app, options) + blueprint = JobModule(__name__) diff --git a/web/pgadmin/dashboard/__init__.py b/web/pgadmin/dashboard/__init__.py index e4ca0d2ed..d13b8bdeb 100644 --- a/web/pgadmin/dashboard/__init__.py +++ b/web/pgadmin/dashboard/__init__.py @@ -36,13 +36,6 @@ class DashboardModule(PgAdminModule): def get_own_menuitems(self): return {} - def get_own_javascripts(self): - return [{ - 'name': 'pgadmin.dashboard', - 'path': url_for('dashboard.index') + 'dashboard', - 'when': None - }] - def get_own_stylesheets(self): """ Returns: diff --git a/web/pgadmin/misc/__init__.py b/web/pgadmin/misc/__init__.py index 1acb64dd2..7f6a783fb 100644 --- a/web/pgadmin/misc/__init__.py +++ b/web/pgadmin/misc/__init__.py @@ -29,22 +29,6 @@ MODULE_NAME = 'misc' class MiscModule(PgAdminModule): LABEL = gettext('Miscellaneous') - def get_own_javascripts(self): - return [ - { - 'name': 'pgadmin.misc.explain', - 'path': url_for('misc.index') + 'explain/explain', - 'preloaded': False - }, { - 'name': 'snap.svg', - 'path': url_for( - 'misc.static', filename='explain/vendor/snap.svg/' + ( - 'snap.svg' if config.DEBUG else 'snap.svg-min' - )), - 'preloaded': False - } - ] - def get_own_stylesheets(self): stylesheets = [] return stylesheets @@ -110,6 +94,34 @@ class MiscModule(PgAdminModule): return ['misc.ping', 'misc.index', 'misc.cleanup', 'misc.validate_binary_path'] + def register(self, app, options): + """ + Override the default register function to automagically register + sub-modules at once. + """ + from .bgprocess import blueprint as module + self.submodules.append(module) + + from .cloud import blueprint as module + self.submodules.append(module) + + from .dependencies import blueprint as module + self.submodules.append(module) + + from .dependents import blueprint as module + self.submodules.append(module) + + from .file_manager import blueprint as module + self.submodules.append(module) + + from .sql import blueprint as module + self.submodules.append(module) + + from .statistics import blueprint as module + self.submodules.append(module) + + super(MiscModule, self).register(app, options) + # Initialise the module blueprint = MiscModule(MODULE_NAME, __name__) diff --git a/web/pgadmin/misc/bgprocess/__init__.py b/web/pgadmin/misc/bgprocess/__init__.py index e71e92595..e3bd8cbf4 100644 --- a/web/pgadmin/misc/bgprocess/__init__.py +++ b/web/pgadmin/misc/bgprocess/__init__.py @@ -23,13 +23,6 @@ MODULE_NAME = 'bgprocess' class BGProcessModule(PgAdminModule): - def get_own_javascripts(self): - return [{ - 'name': 'pgadmin.browser.bgprocess', - 'path': url_for('bgprocess.static', filename='js/bgprocess'), - 'when': None - }] - def get_own_stylesheets(self): """ Returns: diff --git a/web/pgadmin/misc/cloud/__init__.py b/web/pgadmin/misc/cloud/__init__.py index 67a468b30..529ad28f9 100644 --- a/web/pgadmin/misc/cloud/__init__.py +++ b/web/pgadmin/misc/cloud/__init__.py @@ -51,24 +51,6 @@ class CloudModule(PgAdminModule): stylesheets = [] return stylesheets - def get_own_javascripts(self): - """" - Returns: - list: js files used by this module - """ - scripts = [] - scripts.append({ - 'name': 'pgadmin.misc.cloud', - 'path': url_for('cloud.index') + 'cloud', - 'when': None - }) - scripts.append({ - 'name': 'pgadmin.browser.wizard', - 'path': url_for('browser.static', filename='js/wizard'), - 'when': None - }) - return scripts - def get_exposed_url_endpoints(self): """ Returns: @@ -80,6 +62,22 @@ class CloudModule(PgAdminModule): 'cloud.get_host_ip', 'cloud.clear_cloud_session'] + def register(self, app, options): + """ + Override the default register function to automagically register + sub-modules at once. + """ + super(CloudModule, self).register(app, options) + + from .azure import blueprint as module + app.register_blueprint(module) + + from .biganimal import blueprint as module + app.register_blueprint(module) + + from .rds import blueprint as module + app.register_blueprint(module) + # Create blueprint for CloudModule class blueprint = CloudModule( diff --git a/web/pgadmin/misc/dependencies/__init__.py b/web/pgadmin/misc/dependencies/__init__.py index a2c64f598..4bae2a129 100644 --- a/web/pgadmin/misc/dependencies/__init__.py +++ b/web/pgadmin/misc/dependencies/__init__.py @@ -16,13 +16,7 @@ MODULE_NAME = 'dependencies' class DependenciesModule(PgAdminModule): - def get_own_javascripts(self): - return [{ - 'name': 'pgadmin.browser.dependencies', - 'path': url_for('dependencies.static', - filename='js/dependencies'), - 'when': None - }] + pass # Initialise the module diff --git a/web/pgadmin/misc/dependents/__init__.py b/web/pgadmin/misc/dependents/__init__.py index feb8b9fb4..da7a4d284 100644 --- a/web/pgadmin/misc/dependents/__init__.py +++ b/web/pgadmin/misc/dependents/__init__.py @@ -16,12 +16,7 @@ MODULE_NAME = 'dependents' class DependentsModule(PgAdminModule): - def get_own_javascripts(self): - return [{ - 'name': 'pgadmin.browser.dependents', - 'path': url_for('dependents.static', filename='js/dependents'), - 'when': None - }] + pass # Initialise the module diff --git a/web/pgadmin/misc/file_manager/__init__.py b/web/pgadmin/misc/file_manager/__init__.py index 77754cf44..f9562b1a8 100644 --- a/web/pgadmin/misc/file_manager/__init__.py +++ b/web/pgadmin/misc/file_manager/__init__.py @@ -116,15 +116,6 @@ class FileManagerModule(PgAdminModule): LABEL = gettext("Storage") - def get_own_javascripts(self): - return [ - { - 'name': 'pgadmin.file_manager', - 'path': url_for('file_manager.index') + 'file_manager', - 'when': None - }, - ] - def get_own_stylesheets(self): return [ url_for('static', filename='vendor/jquery.dropzone/dropzone.css') diff --git a/web/pgadmin/misc/sql/__init__.py b/web/pgadmin/misc/sql/__init__.py index 1cadcb07b..c642ce49c 100644 --- a/web/pgadmin/misc/sql/__init__.py +++ b/web/pgadmin/misc/sql/__init__.py @@ -20,13 +20,6 @@ MODULE_NAME = 'sql' class SQLModule(PgAdminModule): - def get_own_javascripts(self): - return [{ - 'name': 'pgadmin.browser.object_sql', - 'path': url_for('sql.static', filename='js/sql'), - 'when': None - }] - def get_exposed_url_endpoints(self): """ Returns: diff --git a/web/pgadmin/misc/statistics/__init__.py b/web/pgadmin/misc/statistics/__init__.py index 45890d416..43158b9f4 100644 --- a/web/pgadmin/misc/statistics/__init__.py +++ b/web/pgadmin/misc/statistics/__init__.py @@ -22,13 +22,7 @@ class StatisticsModule(PgAdminModule): This module will render the statistics of the browser nodes on selection when statistics panel is active. """ - - def get_own_javascripts(self): - return [{ - 'name': 'pgadmin.browser.object_statistics', - 'path': url_for('statistics.static', filename='js/statistics'), - 'when': None - }] + pass # Initialise the module diff --git a/web/pgadmin/preferences/__init__.py b/web/pgadmin/preferences/__init__.py index a84731336..76952b257 100644 --- a/web/pgadmin/preferences/__init__.py +++ b/web/pgadmin/preferences/__init__.py @@ -36,19 +36,6 @@ class PreferencesModule(PgAdminModule): And, allows the user to modify (not add/remove) as per their requirement. """ - def get_own_javascripts(self): - scripts = list() - for name, script in [ - ['pgadmin.preferences', 'js/preferences'] - ]: - scripts.append({ - 'name': name, - 'path': url_for('preferences.index') + script, - 'when': None - }) - - return scripts - def get_own_stylesheets(self): return [] diff --git a/web/pgadmin/settings/__init__.py b/web/pgadmin/settings/__init__.py index 9dea81cc3..178c546a8 100644 --- a/web/pgadmin/settings/__init__.py +++ b/web/pgadmin/settings/__init__.py @@ -28,13 +28,6 @@ MODULE_NAME = 'settings' class SettingsModule(PgAdminModule): - def get_own_javascripts(self): - return [{ - 'name': 'pgadmin.settings', - 'path': url_for('settings.index') + 'settings', - 'when': None - }] - def get_own_menuitems(self): return { 'file_items': [ diff --git a/web/pgadmin/static/bundle/app.js b/web/pgadmin/static/bundle/app.js index cbf89aee4..fedc24c74 100644 --- a/web/pgadmin/static/bundle/app.js +++ b/web/pgadmin/static/bundle/app.js @@ -24,7 +24,7 @@ define('app', [ } else if (module && module.Init && typeof module.Init == 'function') { try { - module.init(); + module.Init(); } catch (e) { console.warn(e.stack || e); diff --git a/web/pgadmin/submodules.py b/web/pgadmin/submodules.py new file mode 100644 index 000000000..50becf985 --- /dev/null +++ b/web/pgadmin/submodules.py @@ -0,0 +1,26 @@ +from .about import blueprint as AboutModule +from .authenticate import blueprint as AuthenticateModule +from .browser import blueprint as BrowserModule +from .dashboard import blueprint as DashboardModule +from .help import blueprint as HelpModule +from .misc import blueprint as MiscModule +from .preferences import blueprint as PreferencesModule +from .redirects import blueprint as RedirectModule +from .settings import blueprint as SettingsModule +from .tools import blueprint as ToolsModule + + +def get_submodules(): + return [ + AboutModule, + AuthenticateModule, + BrowserModule, + DashboardModule, + DashboardModule, + HelpModule, + MiscModule, + PreferencesModule, + RedirectModule, + SettingsModule, + ToolsModule + ] diff --git a/web/pgadmin/tools/__init__.py b/web/pgadmin/tools/__init__.py index c923d537f..711699a89 100644 --- a/web/pgadmin/tools/__init__.py +++ b/web/pgadmin/tools/__init__.py @@ -21,33 +21,54 @@ MODULE_NAME = 'tools' class ToolsModule(PgAdminModule): - def get_own_javascripts(self): - return [{ - 'name': 'translations', - 'path': url_for('tools.index') + "translations", - 'when': None - }, { - 'name': 'pgadmin-sqlfoldcode', - 'path': url_for( - 'static', - filename='js/codemirror/addon/fold/pgadmin-sqlfoldcode' - ), - 'when': 'debugger' - }, { - 'name': 'slick.pgadmin.editors', - 'path': url_for( - 'static', - filename='js/slickgrid/slick.pgadmin.editors' - ), - 'when': 'debugger' - }, { - 'name': 'slick.pgadmin.formatters', - 'path': url_for( - 'static', - filename='js/slickgrid/slick.pgadmin.formatters' - ), - 'when': 'debugger' - }] + def register(self, app, options): + """ + Override the default register function to automagically register + sub-modules at once. + """ + super(PgAdminModule, self).register(app, options) + + from .backup import blueprint as module + app.register_blueprint(module) + + from .debugger import blueprint as module + app.register_blueprint(module) + + from .erd import blueprint as module + app.register_blueprint(module) + + from .grant_wizard import blueprint as module + app.register_blueprint(module) + + from .import_export import blueprint as module + app.register_blueprint(module) + + from .import_export_servers import blueprint as module + app.register_blueprint(module) + + from .maintenance import blueprint as module + app.register_blueprint(module) + + from .psql import blueprint as module + app.register_blueprint(module) + + from .restore import blueprint as module + app.register_blueprint(module) + + from .schema_diff import blueprint as module + app.register_blueprint(module) + + from .search_objects import blueprint as module + app.register_blueprint(module) + + from .sqleditor import blueprint as module + app.register_blueprint(module) + + from .storage_manager import blueprint as module + app.register_blueprint(module) + + from .user_management import blueprint as module + app.register_blueprint(module) # Initialise the module diff --git a/web/pgadmin/tools/backup/__init__.py b/web/pgadmin/tools/backup/__init__.py index 8d8362211..0742e5882 100644 --- a/web/pgadmin/tools/backup/__init__.py +++ b/web/pgadmin/tools/backup/__init__.py @@ -44,17 +44,6 @@ class BackupModule(PgAdminModule): LABEL = _('Backup') - def get_own_javascripts(self): - """" - Returns: - list: js files used by this module - """ - return [{ - 'name': 'pgadmin.tools.backup', - 'path': url_for('backup.index') + 'backup', - 'when': None - }] - def show_system_objects(self): """ return system preference objects diff --git a/web/pgadmin/tools/debugger/__init__.py b/web/pgadmin/tools/debugger/__init__.py index 738f849ad..087c8e7a1 100644 --- a/web/pgadmin/tools/debugger/__init__.py +++ b/web/pgadmin/tools/debugger/__init__.py @@ -53,31 +53,9 @@ class DebuggerModule(PgAdminModule): class DebuggerModule(PgAdminModule) A module class for debugger which is derived from PgAdminModule. - - Methods: - ------- - * get_own_javascripts(self) - - Method is used to load the required javascript files for debugger - module - """ LABEL = gettext("Debugger") - def get_own_javascripts(self): - scripts = list() - for name, script in [ - ['pgadmin.tools.debugger', 'js/index'], - ['pgadmin.tools.debugger.controller', 'js/debugger'], - ['pgadmin.tools.debugger.ui', 'js/debugger_ui'], - ]: - scripts.append({ - 'name': name, - 'path': url_for('debugger.index') + script, - 'when': None - }) - - return scripts - def register_preferences(self): self.preference.register( 'keyboard_shortcuts', 'btn_start', diff --git a/web/pgadmin/tools/erd/__init__.py b/web/pgadmin/tools/erd/__init__.py index 40ad9a6d8..f1b89c795 100644 --- a/web/pgadmin/tools/erd/__init__.py +++ b/web/pgadmin/tools/erd/__init__.py @@ -47,13 +47,6 @@ class ERDModule(PgAdminModule): def get_own_menuitems(self): return {} - def get_own_javascripts(self): - return [{ - 'name': 'pgadmin.erd', - 'path': url_for('erd.index') + "erd", - 'when': None - }] - def get_panels(self): return [] diff --git a/web/pgadmin/tools/grant_wizard/__init__.py b/web/pgadmin/tools/grant_wizard/__init__.py index af7c83e10..7921655bd 100644 --- a/web/pgadmin/tools/grant_wizard/__init__.py +++ b/web/pgadmin/tools/grant_wizard/__init__.py @@ -52,24 +52,6 @@ class GrantWizardModule(PgAdminModule): stylesheets = [] return stylesheets - def get_own_javascripts(self): - """" - Returns: - list: js files used by this module - """ - scripts = [] - scripts.append({ - 'name': 'pgadmin.tools.grant_wizard', - 'path': url_for('grant_wizard.index') + 'grant_wizard', - 'when': None - }) - scripts.append({ - 'name': 'pgadmin.browser.wizard', - 'path': url_for('browser.static', filename='js/wizard'), - 'when': None - }) - return scripts - def show_system_objects(self): """ return system preference objects diff --git a/web/pgadmin/tools/import_export/__init__.py b/web/pgadmin/tools/import_export/__init__.py index 748a2f673..099209cb9 100644 --- a/web/pgadmin/tools/import_export/__init__.py +++ b/web/pgadmin/tools/import_export/__init__.py @@ -33,28 +33,10 @@ class ImportExportModule(PgAdminModule): class ImportExportModule(PgAdminModule) A module class for import which is derived from PgAdminModule. - - Methods: - ------- - * get_own_javascripts(self) - - Method is used to load the required javascript files for import module """ LABEL = _('Import/Export') - def get_own_javascripts(self): - scripts = list() - for name, script in [ - ['pgadmin.tools.import_export', 'js/import_export'] - ]: - scripts.append({ - 'name': name, - 'path': url_for('import_export.index') + script, - 'when': None - }) - - return scripts - def get_exposed_url_endpoints(self): """ Returns: diff --git a/web/pgadmin/tools/import_export_servers/__init__.py b/web/pgadmin/tools/import_export_servers/__init__.py index ed4774628..596f73929 100644 --- a/web/pgadmin/tools/import_export_servers/__init__.py +++ b/web/pgadmin/tools/import_export_servers/__init__.py @@ -35,28 +35,10 @@ class ImportExportServersModule(PgAdminModule): class ImportExportServersModule(PgAdminModule) A module class for import which is derived from PgAdminModule. - - Methods: - ------- - * get_own_javascripts(self) - - Method is used to load the required javascript files for import module """ LABEL = _('Import/Export Servers') - def get_own_javascripts(self): - scripts = list() - for name, script in [ - ['pgadmin.tools.import_export_servers', 'js/import_export_servers'] - ]: - scripts.append({ - 'name': name, - 'path': url_for('import_export_servers.index') + script, - 'when': None - }) - - return scripts - def get_exposed_url_endpoints(self): """ Returns: diff --git a/web/pgadmin/tools/maintenance/__init__.py b/web/pgadmin/tools/maintenance/__init__.py index c641e49bb..f84da2587 100644 --- a/web/pgadmin/tools/maintenance/__init__.py +++ b/web/pgadmin/tools/maintenance/__init__.py @@ -32,30 +32,9 @@ class MaintenanceModule(PgAdminModule): A module class for maintenance tools of vacuum which is derived from PgAdminModule. - - Methods: - ------- - * get_own_javascripts() - - Method is used to load the required javascript files for maintenance - tool module - * get_own_stylesheets() - - Returns the list of CSS file used by Maintenance module """ LABEL = _('Maintenance') - def get_own_javascripts(self): - scripts = list() - for name, script in [ - ['pgadmin.tools.maintenance', 'js/maintenance'] - ]: - scripts.append({ - 'name': name, - 'path': url_for('maintenance.index') + script, - 'when': None - }) - - return scripts - def get_own_stylesheets(self): """ Returns: diff --git a/web/pgadmin/tools/psql/__init__.py b/web/pgadmin/tools/psql/__init__.py index c4cda7659..ef489291e 100644 --- a/web/pgadmin/tools/psql/__init__.py +++ b/web/pgadmin/tools/psql/__init__.py @@ -55,13 +55,6 @@ class PSQLModule(PgAdminModule): def get_own_menuitems(self): return {} - def get_own_javascripts(self): - return [{ - 'name': 'pgadmin.psql', - 'path': url_for('psql.index') + "psql", - 'when': None - }] - def get_panels(self): return [] diff --git a/web/pgadmin/tools/restore/__init__.py b/web/pgadmin/tools/restore/__init__.py index f7b103994..76f4d9df3 100644 --- a/web/pgadmin/tools/restore/__init__.py +++ b/web/pgadmin/tools/restore/__init__.py @@ -41,17 +41,6 @@ class RestoreModule(PgAdminModule): LABEL = _('Restore') - def get_own_javascripts(self): - """" - Returns: - list: js files used by this module - """ - return [{ - 'name': 'pgadmin.tools.restore', - 'path': url_for('restore.index') + 'restore', - 'when': None - }] - def get_exposed_url_endpoints(self): """ Returns: diff --git a/web/pgadmin/tools/schema_diff/__init__.py b/web/pgadmin/tools/schema_diff/__init__.py index 233b41127..12de8017f 100644 --- a/web/pgadmin/tools/schema_diff/__init__.py +++ b/web/pgadmin/tools/schema_diff/__init__.py @@ -45,13 +45,6 @@ class SchemaDiffModule(PgAdminModule): def get_own_menuitems(self): return {} - def get_own_javascripts(self): - return [{ - 'name': 'pgadmin.schema_diff', - 'path': url_for('schema_diff.index') + "schema_diff", - 'when': None - }] - def get_panels(self): return [] diff --git a/web/pgadmin/tools/storage_manager/__init__.py b/web/pgadmin/tools/storage_manager/__init__.py index 3024e0f6c..7850f6f95 100644 --- a/web/pgadmin/tools/storage_manager/__init__.py +++ b/web/pgadmin/tools/storage_manager/__init__.py @@ -30,23 +30,6 @@ class StorageManagerModule(PgAdminModule): LABEL = _('Storage Manager') - def get_own_javascripts(self): - """" - Returns: - list: js files used by this module - """ - scripts = list() - for name, script in [ - ['pgadmin.tools.storage_manager', 'js/storage_manager'] - ]: - scripts.append({ - 'name': name, - 'path': url_for('storage_manager.index') + script, - 'when': None - }) - - return scripts - blueprint = StorageManagerModule(MODULE_NAME, __name__) diff --git a/web/pgadmin/tools/user_management/__init__.py b/web/pgadmin/tools/user_management/__init__.py index ba8ed913b..2c7bfaa53 100644 --- a/web/pgadmin/tools/user_management/__init__.py +++ b/web/pgadmin/tools/user_management/__init__.py @@ -46,22 +46,6 @@ class UserManagementModule(PgAdminModule): LABEL = _('Users') - def get_own_javascripts(self): - """" - Returns: - list: js files used by this module - """ - return [{ - 'name': 'pgadmin.tools.user_management', - 'path': url_for('user_management.index') + 'user_management', - 'when': None - }, { - 'name': 'pgadmin.user_management.current_user', - 'path': url_for('user_management.index') + 'current_user', - 'when': None, - 'is_template': True - }] - def show_system_objects(self): """ return system preference objects diff --git a/web/pgadmin/utils/__init__.py b/web/pgadmin/utils/__init__.py index 5f184f35b..5ff244b2b 100644 --- a/web/pgadmin/utils/__init__.py +++ b/web/pgadmin/utils/__init__.py @@ -68,8 +68,6 @@ class PgAdminModule(Blueprint): sub-modules at once. """ - self.submodules = list(app.find_submodules(self.import_name)) - super(PgAdminModule, self).register(app, options) for module in self.submodules: @@ -94,14 +92,6 @@ class PgAdminModule(Blueprint): """ return dict() - def get_own_javascripts(self): - """ - Returns: - list: the javascripts used by this module, not including - any script needed by the submodules. - """ - return [] - def get_own_menuitems(self): """ Returns: @@ -139,13 +129,6 @@ class PgAdminModule(Blueprint): res.update(module.messages) return res - @property - def javascripts(self): - javascripts = self.get_own_javascripts() - for module in self.submodules: - javascripts.extend(module.javascripts) - return javascripts - @property def menu_items(self): menu_items = self.get_own_menuitems() diff --git a/web/pgadmin/utils/driver/registry.py b/web/pgadmin/utils/driver/registry.py index 1496fc3e6..1085cac43 100644 --- a/web/pgadmin/utils/driver/registry.py +++ b/web/pgadmin/utils/driver/registry.py @@ -12,6 +12,21 @@ from abc import ABCMeta from pgadmin.utils.dynamic_registry import create_registry_metaclass +@classmethod +def load_modules(cls, app=None): + submodules = [] + from . import psycopg2 as module + submodules.append(module) + + from . import abstract as module + submodules.append(module) + + for module in submodules: + if "init_app" in module.__dict__.keys(): + module.__dict__["init_app"](app) + + DriverRegistry = create_registry_metaclass( - "DriverRegistry", __package__, decorate_as_module=True + "DriverRegistry", __package__, load_modules=load_modules, + decorate_as_module=True ) diff --git a/web/pgadmin/utils/dynamic_registry/__init__.py b/web/pgadmin/utils/dynamic_registry/__init__.py index 9118c19be..5de1a8b5e 100644 --- a/web/pgadmin/utils/dynamic_registry/__init__.py +++ b/web/pgadmin/utils/dynamic_registry/__init__.py @@ -80,7 +80,8 @@ def __get_class_name(self, name, kwargs): return name -def create_registry_metaclass(name, package, decorate_as_module=True): +def create_registry_metaclass(name, package, load_modules=__load_modules, + decorate_as_module=True): class_params = { # constructor @@ -93,7 +94,7 @@ def create_registry_metaclass(name, package, decorate_as_module=True): # Member functions "get": __get, - "load_modules": __load_modules, + "load_modules": load_modules, "_name_": name, "_decorate_cls_name": __get_module_name if decorate_as_module is True else __get_class_name,