codekingpro/portable-devtools
115k
1##########################################################################2#3# pgAdmin 4 - PostgreSQL Tools4#5# Copyright (C) 2013 - 2024, The pgAdmin Development Team6# This software is released under the PostgreSQL Licence7#8##########################################################################9 10 11class SchemaDiffRegistry():12 """13 SchemaDiffRegistry14 15 It is more of a registry for different type of nodes for schema diff.16 """17 _registered_nodes = dict()18 19 def __init__(self, node_name, node_view, parent_node='schema'):20 if node_name not in SchemaDiffRegistry._registered_nodes:21 SchemaDiffRegistry._registered_nodes[node_name] = {22 'view': node_view,23 'parent': parent_node24 }25 26 @classmethod27 def get_registered_nodes(cls, node_name=None, parent_node='schema'):28 """29 This function will return the node's view object if node name30 is specified or return the complete list of registered nodes.31 32 :param node_name: Name of the node ex: Database, Schema, etc..33 :return:34 """35 if node_name is not None:36 if node_name in cls._registered_nodes:37 return cls._registered_nodes[node_name]['view']38 else:39 return None40 41 registered_nodes = {}42 for key, value in cls._registered_nodes.items():43 if value['parent'] == parent_node:44 registered_nodes[key] = value['view']45 46 return registered_nodes47 48 @classmethod49 def get_node_view(cls, node_name):50 """51 This function will return the view object for the "nodes"52 command as per the specified node name.53 54 :param node_name: Name of the node ex: Database, Schema, etc..55 :return:56 """57 cmd = {"cmd": "nodes, compare, ddl_compare"}58 module = SchemaDiffRegistry.get_registered_nodes(node_name)59 if not module:60 return None61 return module(**cmd)62 