pgadmin4/web/pgadmin/dashboard/precondition.py
2024-05-20 16:54:49 +05:30

77 lines
2.4 KiB
Python

##########################################################################
#
# pgAdmin 4 - PostgreSQL Tools
#
# Copyright (C) 2013 - 2024, The pgAdmin Development Team
# This software is released under the PostgreSQL Licence
#
##########################################################################
from config import PG_DEFAULT_DRIVER
from pgadmin.utils.driver import get_driver
from pgadmin.utils.ajax import precondition_required
from flask_babel import gettext
from flask import g
from functools import wraps
def check_precondition(f):
"""
This function will behave as a decorator which will check
database connection before running view, it also adds
manager, conn & template_path properties to self
"""
@wraps(f)
def wrap(*args, **kwargs):
# Here args[0] will hold self & kwargs will hold gid,sid,did
g.manager = get_driver(
PG_DEFAULT_DRIVER).connection_manager(
kwargs['sid']
)
def get_error(i_node_type):
stats_type = ('activity', 'prepared', 'locks', 'config')
if f.__name__ in stats_type:
return precondition_required(
gettext("Please connect to the selected {0}"
" to view the table.".format(i_node_type))
)
else:
return precondition_required(
gettext("Please connect to the selected {0}"
" to view the graph.".format(i_node_type))
)
# Below check handle the case where existing server is deleted
# by user and python server will raise exception if this check
# is not introduce.
if g.manager is None:
return get_error('server')
if 'did' in kwargs:
g.conn = g.manager.connection(did=kwargs['did'])
node_type = 'database'
else:
g.conn = g.manager.connection()
node_type = 'server'
# If not connected then return error to browser
if not g.conn.connected():
return get_error(node_type)
# Set template path for sql scripts
g.server_type = g.manager.server_type
g.version = g.manager.version
# Include server_type in template_path
g.template_path = 'dashboard/sql/' + (
'#{0}#'.format(g.version)
)
return f(*args, **kwargs)
return wrap