Fix PEP8 issues in various modules. Fixes #3121

This commit is contained in:
Murtuza Zabuawala
2018-02-19 11:12:35 +00:00
committed by Dave Page
parent 30868614ff
commit 7301e30ff3
13 changed files with 369 additions and 229 deletions

View File

@@ -15,14 +15,13 @@ from flask_babel import gettext
from pgadmin.utils import PgAdminModule
from pgadmin.utils.menu import MenuItem, Panel
from pgadmin.utils.preferences import Preferences
import config
class HelpModule(PgAdminModule):
def get_own_menuitems(self):
"""Return a (set) of dicts of help menu items, with name, priority, URL,
target and onclick code."""
"""Return a (set) of dicts of help menu items, with name, priority,
URL, target and onclick code."""
return {'help_items': [
MenuItem(name='mnu_online_help',
label=gettext('Online Help'),
@@ -75,7 +74,9 @@ class HelpModule(PgAdminModule):
'https://www.postgresql.org/docs/$VERSION$/static/',
category_label=gettext('Help'),
help_str=gettext(
'Path to the PostgreSQL documentation. $VERSION$ will be replaced with the major.minor version number.')
'Path to the PostgreSQL documentation. $VERSION$ will be '
'replaced with the major.minor version number.'
)
)
self.edbas_help_path = self.help_preference.register(
@@ -84,7 +85,9 @@ class HelpModule(PgAdminModule):
'https://www.enterprisedb.com/docs/en/$VERSION$/pg/',
category_label=gettext('Help'),
help_str=gettext(
'Path to the EDB Advanced Server documentation. $VERSION$ will be replaced with the major.minor version number.')
'Path to the EDB Advanced Server documentation. $VERSION$ '
'will be replaced with the major.minor version number.'
)
)
def get_exposed_url_endpoints(self):
@@ -95,5 +98,8 @@ class HelpModule(PgAdminModule):
# Initialise the module
blueprint = HelpModule(MODULE_NAME, __name__, static_url_path='/help',
static_folder=config.HELP_PATH)
blueprint = HelpModule(
MODULE_NAME, __name__,
static_url_path='/help',
static_folder=config.HELP_PATH
)

View File

@@ -120,24 +120,28 @@ class Server(db.Model):
ssl_mode = db.Column(
db.String(16),
db.CheckConstraint(
"ssl_mode IN ('allow', 'prefer', 'require', 'disable', 'verify-ca', 'verify-full')"
"ssl_mode IN ('allow', 'prefer', 'require', 'disable', "
"'verify-ca', 'verify-full')"
),
nullable=False)
comment = db.Column(db.String(1024), nullable=True)
discovery_id = db.Column(db.String(128), nullable=True)
servers = db.relationship('ServerGroup',
backref=db.backref('server', cascade="all, delete-orphan"),
lazy='joined')
servers = db.relationship(
'ServerGroup',
backref=db.backref('server', cascade="all, delete-orphan"),
lazy='joined'
)
db_res = db.Column(db.Text(), nullable=True)
passfile = db.Column(db.Text(), nullable=True)
sslcert = db.Column(db.Text(), nullable=True)
sslkey = db.Column(db.Text(), nullable=True)
sslrootcert = db.Column(db.Text(), nullable=True)
sslcrl = db.Column(db.Text(), nullable=True)
sslcompression =db.Column(db.Integer(),
db.CheckConstraint(
'sslcompression >= 0 AND sslcompression <= 1'
), nullable=False)
sslcompression = db.Column(
db.Integer(),
db.CheckConstraint('sslcompression >= 0 AND sslcompression <= 1'),
nullable=False
)
bgcolor = db.Column(db.Text(10), nullable=True)
fgcolor = db.Column(db.Text(10), nullable=True)
@@ -193,15 +197,25 @@ class DebuggerFunctionArguments(db.Model):
schema_id = db.Column(db.Integer(), nullable=False, primary_key=True)
function_id = db.Column(db.Integer(), nullable=False, primary_key=True)
arg_id = db.Column(db.Integer(), nullable=False, primary_key=True)
is_null = db.Column(db.Integer(),
db.CheckConstraint('is_null >= 0 AND is_null <= 1'),
nullable=False)
is_expression = db.Column(db.Integer(),
db.CheckConstraint('is_expression >= 0 AND is_expression <= 1'),
nullable=False)
use_default = db.Column(db.Integer(),
db.CheckConstraint('use_default >= 0 AND use_default <= 1'),
nullable=False)
is_null = db.Column(
db.Integer(),
db.CheckConstraint('is_null >= 0 AND is_null <= 1'),
nullable=False
)
is_expression = db.Column(
db.Integer(),
db.CheckConstraint(
'is_expression >= 0 AND is_expression <= 1'
),
nullable=False
)
use_default = db.Column(
db.Integer(),
db.CheckConstraint(
'use_default >= 0 AND use_default <= 1'
),
nullable=False
)
value = db.Column(db.String(), nullable=True)

View File

@@ -60,7 +60,11 @@ class PreferencesModule(PgAdminModule):
Returns:
list: a list of url endpoints exposed to the client.
"""
return ['preferences.index', 'preferences.get_by_name', 'preferences.get_all']
return [
'preferences.index',
'preferences.get_by_name',
'preferences.get_all'
]
blueprint = PreferencesModule(MODULE_NAME, __name__)
@@ -70,9 +74,11 @@ blueprint = PreferencesModule(MODULE_NAME, __name__)
@login_required
def script():
"""render the required javascript"""
return Response(response=render_template("preferences/preferences.js", _=gettext),
status=200,
mimetype="application/javascript")
return Response(
response=render_template("preferences/preferences.js", _=gettext),
status=200,
mimetype="application/javascript"
)
@blueprint.route("/", methods=["GET"], endpoint='index')
@@ -171,7 +177,8 @@ def save(pid):
"""
data = request.form if request.form else json.loads(request.data.decode())
res, msg = Preferences.save(data['mid'], data['category_id'], data['id'], data['value'])
res, msg = Preferences.save(
data['mid'], data['category_id'], data['id'], data['value'])
if not res:
return internal_server_error(errormsg=msg)
@@ -195,4 +202,3 @@ def save(pid):
response.set_cookie("PGADMIN_LANGUAGE", language)
return response

View File

@@ -14,8 +14,9 @@ from pgadmin import PgAdminModule
MODULE_NAME = 'redirects'
blueprint = PgAdminModule(MODULE_NAME, __name__,
url_prefix='/')
blueprint = PgAdminModule(
MODULE_NAME, __name__, url_prefix='/'
)
@blueprint.route('/')

View File

@@ -35,12 +35,14 @@ class SettingsModule(PgAdminModule):
def get_own_menuitems(self):
return {
'file_items': [
MenuItem(name='mnu_resetlayout',
priority=999,
module="pgAdmin.Settings",
callback='show',
icon='fa fa-retweet',
label=gettext('Reset Layout'))
MenuItem(
name='mnu_resetlayout',
priority=999,
module="pgAdmin.Settings",
callback='show',
icon='fa fa-retweet',
label=gettext('Reset Layout')
)
]
}
@@ -49,7 +51,9 @@ class SettingsModule(PgAdminModule):
Returns:
list: a list of url endpoints exposed to the client.
"""
return ['settings.store', 'settings.store_bulk', 'settings.reset_layout']
return [
'settings.store', 'settings.store_bulk', 'settings.reset_layout'
]
blueprint = SettingsModule(MODULE_NAME, __name__)
@@ -66,7 +70,8 @@ def store_setting(setting, value):
def get_setting(setting, default=None):
"""Retrieve a configuration setting for the current user, or return the
default value specified by the caller."""
data = Setting.query.filter_by(user_id=current_user.id, setting=setting).first()
data = Setting.query.filter_by(
user_id=current_user.id, setting=setting).first()
if not data or data.value is None:
return default
@@ -102,7 +107,8 @@ def store(setting=None, value=None):
if request.method == 'POST':
if 'count' in request.form:
for x in range(int(request.form['count'])):
store_setting(request.form['setting%d' % (x + 1)], request.form['value%d' % (x + 1)])
store_setting(request.form['setting%d' % (
x + 1)], request.form['value%d' % (x + 1)])
else:
store_setting(request.form['setting'], request.form['value'])
else:

View File

@@ -18,8 +18,8 @@ def db_upgrade(app):
with app.app_context():
flask_migrate.Migrate(app, db)
migration_folder = os.path.join(
os.path.dirname(os.path.realpath(u(__file__, fs_encoding))),
os.pardir, os.pardir,
u'migrations'
)
os.path.dirname(os.path.realpath(u(__file__, fs_encoding))),
os.pardir, os.pardir,
u'migrations'
)
flask_migrate.upgrade(migration_folder)

View File

@@ -37,7 +37,7 @@ def user_info():
email = ''
p1 = ''
if os.environ['PGADMIN_SETUP_EMAIL'] and os.environ[
'PGADMIN_SETUP_PASSWORD']:
'PGADMIN_SETUP_PASSWORD']:
email = os.environ['PGADMIN_SETUP_EMAIL']
p1 = os.environ['PGADMIN_SETUP_PASSWORD']
else:
@@ -66,7 +66,8 @@ def user_info():
print(u'Passwords do not match. Please try again.')
else:
print(
u'Password must be at least 6 characters. Please try again.'
u'Password must be at least 6 characters. '
u'Please try again.'
)
p1, p2 = pprompt()
return email, p1

View File

@@ -13,6 +13,7 @@ import random
import time
class AppStarter:
""" Helper for starting the full pgadmin4 app and loading the page via
selenium
@@ -43,7 +44,8 @@ class AppStarter:
self.driver.set_window_size(1280, 1024)
self.driver.get(
"http://" + self.app_config.DEFAULT_SERVER + ":" +
random_server_port)
random_server_port
)
def stop_app(self):
""" This function stop the started app by killing process """

View File

@@ -27,8 +27,11 @@ class BaseFeatureTest(BaseTestGenerator):
self.server = deepcopy(self.server)
self.server['name'] += ' Feature Tests'
if app_config.SERVER_MODE:
self.skipTest("Currently, config is set to start pgadmin in server mode. "
"This test doesn't know username and password so doesn't work in server mode")
self.skipTest(
"Currently, config is set to start pgadmin in server mode. "
"This test doesn't know username and password so doesn't work "
"in server mode"
)
self.page = PgadminPage(self.driver, app_config)
try:
@@ -38,7 +41,7 @@ class BaseFeatureTest(BaseTestGenerator):
self.page.reset_layout()
self.page.wait_for_spinner_to_disappear()
self.before()
except:
except Exception:
self._screenshot()
raise
@@ -52,7 +55,8 @@ class BaseFeatureTest(BaseTestGenerator):
pass
def tearDown(self):
python2_failures = hasattr(self, "_resultForDoCleanups") and self.current_test_failed()
python2_failures = hasattr(
self, "_resultForDoCleanups") and self.current_test_failed()
python3_failures = hasattr(self, '_outcome') and self.any_step_failed()
@@ -68,7 +72,8 @@ class BaseFeatureTest(BaseTestGenerator):
return False
def current_test_failed(self):
all_failures = self._resultForDoCleanups.errors + self._resultForDoCleanups.failures
all_failures = self._resultForDoCleanups.errors + \
self._resultForDoCleanups.failures
for failure in all_failures:
if failure[0] == self:
return True
@@ -76,8 +81,10 @@ class BaseFeatureTest(BaseTestGenerator):
def _screenshot(self):
screenshots_directory = '{0}/../screenshots'.format(self.CURRENT_PATH)
screenshots_server_directory = '{0}/{1}'.format(screenshots_directory,
self.server["name"].replace(" ", "_"))
screenshots_server_directory = '{0}/{1}'.format(
screenshots_directory,
self.server["name"].replace(" ", "_")
)
self.ensure_directory_exists(screenshots_directory)
self.ensure_directory_exists(screenshots_server_directory)
@@ -86,10 +93,13 @@ class BaseFeatureTest(BaseTestGenerator):
python_version = sys.version.split(" ")[0]
self.page.driver.save_screenshot(
'{0}/{1}-{2}-Python-{3}.png'.format(screenshots_server_directory,
self.__class__.__name__,
date,
python_version))
'{0}/{1}-{2}-Python-{3}.png'.format(
screenshots_server_directory,
self.__class__.__name__,
date,
python_version
)
)
def ensure_directory_exists(self, path):
try:

View File

@@ -37,14 +37,17 @@ class PgadminPage:
def click_modal(self, button_text):
time.sleep(0.5)
# Find active alertify dialog in case of multiple alertify dialog & click on that dialog
# Find active alertify dialog in case of multiple alertify dialog
# & click on that dialog
modal_button = self.find_by_xpath(
"//div[contains(@class, 'alertify') and not(contains(@class, 'ajs-hidden'))]//button[.='%s']"
"//div[contains(@class, 'alertify') and "
"not(contains(@class, 'ajs-hidden'))]//button[.='%s']"
% button_text)
self.click_element(modal_button)
def add_server(self, server_config):
self.find_by_xpath("//*[@class='aciTreeText' and contains(.,'Servers')]").click()
self.find_by_xpath(
"//*[@class='aciTreeText' and contains(.,'Servers')]").click()
self.driver.find_element_by_link_text("Object").click()
ActionChains(self.driver) \
.move_to_element(self.driver.find_element_by_link_text("Create")) \
@@ -59,7 +62,8 @@ class PgadminPage:
self.fill_input_by_field_name("password", server_config['db_password'])
self.find_by_xpath("//button[contains(.,'Save')]").click()
self.find_by_xpath("//*[@id='tree']//*[.='" + server_config['name'] + "']")
self.find_by_xpath(
"//*[@id='tree']//*[.='" + server_config['name'] + "']")
def open_query_tool(self):
self.driver.find_element_by_link_text("Tools").click()
@@ -73,7 +77,6 @@ class PgadminPage:
self.find_by_partial_link_text("Query Tool").click()
self.click_tab('Query -')
def enable_menu_item(self, menu_item, wait_time):
start_time = time.time()
# wait until menu becomes enabled.
@@ -91,12 +94,19 @@ class PgadminPage:
def close_query_tool(self):
self.driver.switch_to.default_content()
tab = self.find_by_xpath("//*[contains(@class,'wcPanelTab') and contains(.,'" + "Query" + "')]")
tab = self.find_by_xpath(
"//*[contains(@class,'wcPanelTab') and "
"contains(.,'" + "Query" + "')]")
ActionChains(self.driver).context_click(tab).perform()
self.find_by_xpath("//li[contains(@class, 'context-menu-item')]/span[contains(text(), 'Remove Panel')]").click()
self.driver.switch_to.frame(self.driver.find_elements_by_tag_name("iframe")[0])
self.find_by_xpath(
"//li[contains(@class, 'context-menu-item')]/span[contains(text(),"
" 'Remove Panel')]").click()
self.driver.switch_to.frame(
self.driver.find_elements_by_tag_name("iframe")[0])
time.sleep(.5)
self.click_element(self.find_by_xpath('//button[contains(@class, "ajs-button") and contains(.,"Don\'t save")]'))
self.click_element(self.find_by_xpath(
'//button[contains(@class, "ajs-button") and '
'contains(.,"Don\'t save")]'))
self.driver.switch_to.default_content()
def close_data_grid(self):
@@ -106,7 +116,9 @@ class PgadminPage:
def remove_server(self, server_config):
self.driver.switch_to.default_content()
server_to_remove = self.find_by_xpath("//*[@id='tree']//*[.='" + server_config['name'] + "' and @class='aciTreeItem']")
server_to_remove = self.find_by_xpath(
"//*[@id='tree']//*[.='" + server_config['name'] +
"' and @class='aciTreeItem']")
self.click_element(server_to_remove)
object_menu_item = self.find_by_partial_link_text("Object")
self.click_element(object_menu_item)
@@ -115,10 +127,14 @@ class PgadminPage:
self.click_modal('OK')
def select_tree_item(self, tree_item_text):
self.find_by_xpath("//*[@id='tree']//*[.='" + tree_item_text + "' and @class='aciTreeItem']").click()
self.find_by_xpath(
"//*[@id='tree']//*[.='" + tree_item_text +
"' and @class='aciTreeItem']").click()
def toggle_open_tree_item(self, tree_item_text):
self.find_by_xpath("//*[@id='tree']//*[.='" + tree_item_text + "']/../*[@class='aciTreeButton']").click()
self.find_by_xpath(
"//*[@id='tree']//*[.='" + tree_item_text +
"']/../*[@class='aciTreeButton']").click()
def toggle_open_server(self, tree_item_text):
def check_for_password_dialog_or_tree_open(driver):
@@ -128,14 +144,17 @@ class PgadminPage:
dialog = None
try:
database_node = driver.find_element_by_xpath("//*[@id='tree']//*[.='Databases']/../*[@class='aciTreeButton']")
database_node = driver.find_element_by_xpath(
"//*[@id='tree']//*[.='Databases']"
"/../*[@class='aciTreeButton']")
except WebDriverException:
database_node = None
return dialog is not None or database_node is not None
self.toggle_open_tree_item(tree_item_text)
self._wait_for("Waiting for password dialog or tree to open", check_for_password_dialog_or_tree_open)
self._wait_for("Waiting for password dialog or tree to open",
check_for_password_dialog_or_tree_open)
try:
self.driver.find_element_by_id("frmPassword")
@@ -145,13 +164,19 @@ class PgadminPage:
return
def find_by_xpath(self, xpath):
return self.wait_for_element(lambda driver: driver.find_element_by_xpath(xpath))
return self.wait_for_element(
lambda driver: driver.find_element_by_xpath(xpath)
)
def find_by_id(self, element_id):
return self.wait_for_element(lambda driver: driver.find_element_by_id(element_id))
return self.wait_for_element(
lambda driver: driver.find_element_by_id(element_id)
)
def find_by_css_selector(self, css_selector):
return self.wait_for_element(lambda driver: driver.find_element_by_css_selector(css_selector))
return self.wait_for_element(
lambda driver: driver.find_element_by_css_selector(css_selector)
)
def find_by_partial_link_text(self, link_text):
return self._wait_for(
@@ -160,7 +185,8 @@ class PgadminPage:
)
def click_element(self, element):
# driver must be here to adhere to the method contract in selenium.webdriver.support.wait.WebDriverWait.until()
# driver must be here to adhere to the method contract in
# selenium.webdriver.support.wait.WebDriverWait.until()
def click_succeeded(driver):
try:
element.click()
@@ -168,7 +194,9 @@ class PgadminPage:
except WebDriverException:
return False
return self._wait_for("clicking the element not to throw an exception", click_succeeded)
return self._wait_for(
"clicking the element not to throw an exception", click_succeeded
)
def fill_input_by_field_name(self, field_name, field_content):
field = self.find_by_xpath("//input[@name='" + field_name + "']")
@@ -183,9 +211,11 @@ class PgadminPage:
def find_codemirror(driver):
try:
driver.switch_to.default_content()
driver.switch_to_frame(driver.find_element_by_tag_name("iframe"))
driver.switch_to_frame(
driver.find_element_by_tag_name("iframe"))
element = driver.find_element_by_xpath(
"//pre[contains(@class,'CodeMirror-line')]/../../../*[contains(@class,'CodeMirror-code')]")
"//pre[contains(@class,'CodeMirror-line')]/../../../"
"*[contains(@class,'CodeMirror-code')]")
if element.is_displayed() and element.is_enabled():
return element
except (NoSuchElementException, WebDriverException):
@@ -193,8 +223,8 @@ class PgadminPage:
time.sleep(1)
WebDriverWait(self.driver, timeout=self.timeout, poll_frequency=0.01).\
until(find_codemirror, "Timed out waiting for codemirror to appear").\
click()
until(find_codemirror, "Timed out waiting for codemirror "
"to appear").click()
time.sleep(1)
action = ActionChains(self.driver)
@@ -202,8 +232,9 @@ class PgadminPage:
action.perform()
def click_tab(self, tab_name):
tab = self.find_by_xpath("//*[contains(@class,'wcTabTop')]//*[contains(@class,'wcPanelTab') "
"and contains(.,'" + tab_name + "')]")
tab = self.find_by_xpath("//*[contains(@class,'wcTabTop')]//"
"*[contains(@class,'wcPanelTab') "
"and contains(.,'" + tab_name + "')]")
self.click_element(tab)
def wait_for_input_field_content(self, field_name, content):
@@ -213,7 +244,9 @@ class PgadminPage:
return str(content) == element.get_attribute('value')
return self._wait_for("field to contain '" + str(content) + "'", input_field_has_content)
return self._wait_for(
"field to contain '" + str(content) + "'", input_field_has_content
)
def wait_for_element(self, find_method_with_args):
def element_if_it_exists(driver):
@@ -247,7 +280,8 @@ class PgadminPage:
except NoSuchElementException:
return True
self._wait_for("reloading indicator to disappear", reloading_indicator_has_disappeared)
self._wait_for("reloading indicator to disappear",
reloading_indicator_has_disappeared)
def wait_for_spinner_to_disappear(self):
def spinner_has_disappeared(driver):
@@ -283,8 +317,11 @@ class PgadminPage:
self._wait_for("app to start", page_shows_app, self.app_start_timeout)
def _wait_for(self, waiting_for_message, condition_met_function, timeout = None):
def _wait_for(self, waiting_for_message, condition_met_function,
timeout=None):
if timeout is None:
timeout = self.timeout
return WebDriverWait(self.driver, timeout, 0.01).until(condition_met_function,
"Timed out waiting for " + waiting_for_message)
return WebDriverWait(self.driver, timeout, 0.01).until(
condition_met_function,
"Timed out waiting for " + waiting_for_message
)

View File

@@ -12,7 +12,9 @@ from jinja2 import Environment
class SimpleTemplateLoader(BaseLoader):
""" This class pretends to load whatever file content it is initialized with"""
""" This class pretends to load whatever file content it is initialized
with"""
def __init__(self, file_content):
self.file_content = file_content

View File

@@ -75,17 +75,19 @@ def get_config_data():
"""This function reads the server data from config_data"""
server_data = []
for srv in test_setup.config_data['server_credentials']:
if (not 'enabled' in srv) or srv['enabled']:
data = {"name": srv['name'],
"comment": srv['comment'],
"host": srv['host'],
"port": srv['db_port'],
"db": srv['maintenance_db'],
"username": srv['db_username'],
"db_password": srv['db_password'],
"role": "",
"sslmode": srv['sslmode'],
"tablespace_path": srv.get('tablespace_path', None)}
if 'enabled' not in srv or srv['enabled']:
data = {
"name": srv['name'],
"comment": srv['comment'],
"host": srv['host'],
"port": srv['db_port'],
"db": srv['maintenance_db'],
"username": srv['db_username'],
"db_password": srv['db_password'],
"role": "",
"sslmode": srv['sslmode'],
"tablespace_path": srv.get('tablespace_path', None)
}
server_data.append(data)
return server_data
@@ -115,12 +117,14 @@ def clear_node_info_dict():
def create_database(server, db_name):
"""This function used to create database and returns the database id"""
try:
connection = get_db_connection(server['db'],
server['username'],
server['db_password'],
server['host'],
server['port'],
server['sslmode'])
connection = get_db_connection(
server['db'],
server['username'],
server['db_password'],
server['host'],
server['port'],
server['sslmode']
)
old_isolation_level = connection.isolation_level
connection.set_isolation_level(0)
pg_cursor = connection.cursor()
@@ -154,24 +158,29 @@ def create_table(server, db_name, table_name):
:return: None
"""
try:
connection = get_db_connection(db_name,
server['username'],
server['db_password'],
server['host'],
server['port'],
server['sslmode'])
connection = get_db_connection(
db_name,
server['username'],
server['db_password'],
server['host'],
server['port'],
server['sslmode']
)
old_isolation_level = connection.isolation_level
connection.set_isolation_level(0)
pg_cursor = connection.cursor()
pg_cursor.execute(
'''CREATE TABLE "%s" (some_column VARCHAR, value NUMERIC, details VARCHAR)''' %
table_name)
'''CREATE TABLE "%s" (some_column VARCHAR, value NUMERIC,
details VARCHAR)''' % table_name)
pg_cursor.execute(
'''INSERT INTO "%s" VALUES ('Some-Name', 6, 'some info')''' % table_name)
'''INSERT INTO "%s" VALUES ('Some-Name', 6, 'some info')'''
% table_name)
pg_cursor.execute(
'''INSERT INTO "%s" VALUES ('Some-Other-Name', 22, 'some other info')''' % table_name)
'''INSERT INTO "%s" VALUES ('Some-Other-Name', 22,
'some other info')''' % table_name)
pg_cursor.execute(
'''INSERT INTO "%s" VALUES ('Yet-Another-Name', 14, 'cool info')''' % table_name)
'''INSERT INTO "%s" VALUES ('Yet-Another-Name', 14,
'cool info')''' % table_name)
connection.set_isolation_level(old_isolation_level)
connection.commit()
@@ -192,12 +201,14 @@ def create_table_with_query(server, db_name, query):
:return: None
"""
try:
connection = get_db_connection(db_name,
server['username'],
server['db_password'],
server['host'],
server['port'],
server['sslmode'])
connection = get_db_connection(
db_name,
server['username'],
server['db_password'],
server['host'],
server['port'],
server['sslmode']
)
old_isolation_level = connection.isolation_level
connection.set_isolation_level(0)
pg_cursor = connection.cursor()
@@ -213,12 +224,14 @@ def create_constraint(
server, db_name, table_name,
constraint_type="unique", constraint_name="test_unique"):
try:
connection = get_db_connection(db_name,
server['username'],
server['db_password'],
server['host'],
server['port'],
server['sslmode'])
connection = get_db_connection(
db_name,
server['username'],
server['db_password'],
server['host'],
server['port'],
server['sslmode']
)
old_isolation_level = connection.isolation_level
connection.set_isolation_level(0)
pg_cursor = connection.cursor()
@@ -237,12 +250,14 @@ def create_constraint(
def create_debug_function(server, db_name, function_name="test_func"):
try:
connection = get_db_connection(db_name,
server['username'],
server['db_password'],
server['host'],
server['port'],
server['sslmode'])
connection = get_db_connection(
db_name,
server['username'],
server['db_password'],
server['host'],
server['port'],
server['sslmode']
)
old_isolation_level = connection.isolation_level
connection.set_isolation_level(0)
pg_cursor = connection.cursor()
@@ -271,12 +286,14 @@ def create_debug_function(server, db_name, function_name="test_func"):
def drop_debug_function(server, db_name, function_name="test_func"):
try:
connection = get_db_connection(db_name,
server['username'],
server['db_password'],
server['host'],
server['port'],
server['sslmode'])
connection = get_db_connection(
db_name,
server['username'],
server['db_password'],
server['host'],
server['port'],
server['sslmode']
)
old_isolation_level = connection.isolation_level
connection.set_isolation_level(0)
pg_cursor = connection.cursor()
@@ -293,12 +310,14 @@ def drop_debug_function(server, db_name, function_name="test_func"):
def create_role(server, db_name, role_name="test_role"):
try:
connection = get_db_connection(db_name,
server['username'],
server['db_password'],
server['host'],
server['port'],
server['sslmode'])
connection = get_db_connection(
db_name,
server['username'],
server['db_password'],
server['host'],
server['port'],
server['sslmode']
)
old_isolation_level = connection.isolation_level
connection.set_isolation_level(0)
pg_cursor = connection.cursor()
@@ -325,12 +344,14 @@ def create_role(server, db_name, role_name="test_role"):
def drop_role(server, db_name, role_name="test_role"):
try:
connection = get_db_connection(db_name,
server['username'],
server['db_password'],
server['host'],
server['port'],
server['sslmode'])
connection = get_db_connection(
db_name,
server['username'],
server['db_password'],
server['host'],
server['port'],
server['sslmode']
)
old_isolation_level = connection.isolation_level
connection.set_isolation_level(0)
pg_cursor = connection.cursor()
@@ -351,13 +372,17 @@ def drop_database(connection, database_name):
pg_cursor = connection.cursor()
if connection.server_version >= 90100:
pg_cursor.execute(
"SELECT pg_terminate_backend(pg_stat_activity.pid) FROM pg_stat_activity "
"WHERE pg_stat_activity.datname ='%s' AND pid <> pg_backend_pid();" % database_name
"SELECT pg_terminate_backend(pg_stat_activity.pid) "
"FROM pg_stat_activity "
"WHERE pg_stat_activity.datname ='%s' AND "
"pid <> pg_backend_pid();" % database_name
)
else:
pg_cursor.execute(
"SELECT pg_terminate_backend(procpid) FROM pg_stat_activity " \
"WHERE pg_stat_activity.datname ='%s' AND current_query='<IDLE>';" % database_name
"SELECT pg_terminate_backend(procpid) "
"FROM pg_stat_activity "
"WHERE pg_stat_activity.datname ='%s' "
"AND current_query='<IDLE>';" % database_name
)
pg_cursor.execute("SELECT * FROM pg_database db WHERE"
" db.datname='%s'" % database_name)
@@ -401,8 +426,12 @@ def create_server(server):
server_id = cur.lastrowid
conn.commit()
# Add server info to parent_node_dict
regression.parent_node_dict["server"].append({"server_id": server_id,
"server": server})
regression.parent_node_dict["server"].append(
{
"server_id": server_id,
"server": server
}
)
return server_id
except Exception as exception:
@@ -421,17 +450,21 @@ def delete_server_with_api(tester, sid):
def add_db_to_parent_node_dict(srv_id, db_id, test_db_name):
""" This function stores the database details into parent dict """
regression.parent_node_dict["database"].append({"server_id": srv_id,
"db_id": db_id,
"db_name": test_db_name})
regression.parent_node_dict["database"].append({
"server_id": srv_id,
"db_id": db_id,
"db_name": test_db_name
})
def add_schema_to_parent_node_dict(srv_id, db_id, schema_id, schema_name):
""" This function stores the schema details into parent dict """
regression.parent_node_dict["schema"].append({"server_id": srv_id,
"db_id": db_id,
"schema_id": schema_id,
"schema_name": schema_name})
regression.parent_node_dict["schema"].append({
"server_id": srv_id,
"db_id": db_id,
"schema_id": schema_id,
"schema_name": schema_name
})
def create_parent_server_node(server_info):
@@ -449,16 +482,19 @@ def create_parent_server_node(server_info):
add_db_to_parent_node_dict(srv_id, db_id, test_db_name)
# Create schema
schema_name = "test_schema_%s" % str(uuid.uuid4())[1:6]
connection = get_db_connection(test_db_name,
server_info['username'],
server_info['db_password'],
server_info['host'],
server_info['port'],
server_info['sslmode'])
connection = get_db_connection(
test_db_name,
server_info['username'],
server_info['db_password'],
server_info['host'],
server_info['port'],
server_info['sslmode']
)
schema = regression.schema_utils.create_schema(connection, schema_name)
add_schema_to_parent_node_dict(srv_id, db_id, schema[0],
schema[1])
add_schema_to_parent_node_dict(
srv_id, db_id, schema[0], schema[1]
)
def delete_test_server(tester):
@@ -473,35 +509,43 @@ def delete_test_server(tester):
srv_id = test_server["server_id"]
servers_dict = test_server["server"]
for database in test_databases:
connection = get_db_connection(servers_dict['db'],
servers_dict['username'],
servers_dict['db_password'],
servers_dict['host'],
servers_dict['port'],
servers_dict['sslmode'])
connection = get_db_connection(
servers_dict['db'],
servers_dict['username'],
servers_dict['db_password'],
servers_dict['host'],
servers_dict['port'],
servers_dict['sslmode']
)
database_name = database["db_name"]
# Drop database
drop_database(connection, database_name)
for role in test_roles:
connection = get_db_connection(servers_dict['db'],
servers_dict['username'],
servers_dict['db_password'],
servers_dict['host'],
servers_dict['port'],
servers_dict['sslmode'])
connection = get_db_connection(
servers_dict['db'],
servers_dict['username'],
servers_dict['db_password'],
servers_dict['host'],
servers_dict['port'],
servers_dict['sslmode']
)
# Delete role
regression.roles_utils.delete_role(connection,
role["role_name"])
regression.roles_utils.delete_role(
connection, role["role_name"]
)
for tablespace in test_table_spaces:
connection = get_db_connection(servers_dict['db'],
servers_dict['username'],
servers_dict['db_password'],
servers_dict['host'],
servers_dict['port'],
servers_dict['sslmode'])
connection = get_db_connection(
servers_dict['db'],
servers_dict['username'],
servers_dict['db_password'],
servers_dict['host'],
servers_dict['port'],
servers_dict['sslmode']
)
# Delete tablespace
regression.tablespace_utils.delete_tablespace(
connection, tablespace["tablespace_name"])
connection, tablespace["tablespace_name"]
)
# Delete server
delete_server_with_api(tester, srv_id)
except Exception:
@@ -528,8 +572,10 @@ def get_db_server(sid):
connection = ''
conn = sqlite3.connect(config.TEST_SQLITE_PATH)
cur = conn.cursor()
server = cur.execute('SELECT name, host, port, maintenance_db,'
' username, ssl_mode FROM server where id=%s' % sid)
server = cur.execute(
'SELECT name, host, port, maintenance_db,'
' username, ssl_mode FROM server where id=%s' % sid
)
server = server.fetchone()
if server:
name = server[0]
@@ -543,12 +589,9 @@ def get_db_server(sid):
db_password = get_db_password(config_servers, name, host, db_port)
if db_password:
# Drop database
connection = get_db_connection(db_name,
username,
db_password,
host,
db_port,
ssl_mode)
connection = get_db_connection(
db_name, username, db_password, host, db_port, ssl_mode
)
conn.close()
return connection
@@ -564,13 +607,13 @@ def _cleanup(tester, app_starter):
schemas etc) during the test suite run"""
try:
test_servers = regression.parent_node_dict["server"] + \
regression.node_info_dict["sid"]
regression.node_info_dict["sid"]
test_databases = regression.parent_node_dict["database"] + \
regression.node_info_dict["did"]
regression.node_info_dict["did"]
test_table_spaces = regression.parent_node_dict["tablespace"] + \
regression.node_info_dict["tsid"]
regression.node_info_dict["tsid"]
test_roles = regression.parent_node_dict["role"] + \
regression.node_info_dict["lrid"]
regression.node_info_dict["lrid"]
# Drop databases
for database in test_databases:
connection = get_db_server(database["server_id"])

View File

@@ -87,7 +87,7 @@ if pgadmin_credentials:
'login_password'])
# Execute the setup file
exec (open("setup.py").read())
exec(open("setup.py").read())
# Get the config database schema version. We store this in pgadmin.model
# as it turns out that putting it in the config files isn't a great idea
@@ -210,10 +210,15 @@ def add_arguments():
"""
parser = argparse.ArgumentParser(description='Test suite for pgAdmin4')
parser.add_argument('--pkg', help='Executes the test cases of particular'
' package and subpackages')
parser.add_argument('--exclude', help='Skips execution of the test '
'cases of particular package and sub-packages')
parser.add_argument(
'--pkg',
help='Executes the test cases of particular package and subpackages'
)
parser.add_argument(
'--exclude',
help='Skips execution of the test cases of particular package and '
'sub-packages'
)
arg = parser.parse_args()
return arg
@@ -314,12 +319,12 @@ if __name__ == '__main__':
signal.signal(getattr(signal, sig), sig_handler)
# Set basic logging configuration for log file
logging.basicConfig(level=logging.DEBUG,
format='%(asctime)s:%(levelname)s:%(name)s:%(message)s'
,
filename=CURRENT_PATH + "/" + "regression.log",
filemode='w'
)
logging.basicConfig(
level=logging.DEBUG,
format='%(asctime)s:%(levelname)s:%(name)s:%(message)s',
filename=CURRENT_PATH + "/" + "regression.log",
filemode='w'
)
# Create logger to write log in the logger file as well as on console
stderr_logger = logging.getLogger('STDERR')
@@ -343,8 +348,8 @@ if __name__ == '__main__':
suite = get_suite(test_module_list, server, test_client)
tests = unit_test.TextTestRunner(stream=sys.stderr,
descriptions=True,
verbosity=2).run(suite)
descriptions=True,
verbosity=2).run(suite)
ran_tests, failed_cases, skipped_cases, passed_cases = \
get_tests_result(tests)
@@ -364,12 +369,16 @@ if __name__ == '__main__':
if handle_cleanup:
handle_cleanup()
print("\n==============================================================="
"=======", file=sys.stderr)
print(
"\n==============================================================="
"=======",
file=sys.stderr
)
print("Test Result Summary", file=sys.stderr)
print(
"==================================================================="
"===\n", file=sys.stderr)
"===\n", file=sys.stderr
)
test_result_json = {}
for server_res in test_result:
@@ -404,10 +413,11 @@ if __name__ == '__main__':
file=sys.stderr)
temp_dict_for_server = {
server_res: {"tests_passed": [total_passed_cases, passed_cases],
"tests_failed": [total_failed, failed_cases_json],
"tests_skipped": [total_skipped, skipped_cases_json]
}
server_res: {
"tests_passed": [total_passed_cases, passed_cases],
"tests_failed": [total_failed, failed_cases_json],
"tests_skipped": [total_skipped, skipped_cases_json]
}
}
test_result_json.update(temp_dict_for_server)
@@ -418,7 +428,9 @@ if __name__ == '__main__':
print(
"==================================================================="
"===\n", file=sys.stderr)
"===\n",
file=sys.stderr
)
print("Please check output in file: %s/regression.log\n" % CURRENT_PATH)