mirror of
https://github.com/pgadmin-org/pgadmin4.git
synced 2025-02-25 18:55:31 -06:00
Fix PEP8 issues in various modules. Fixes #3121
This commit is contained in:
committed by
Dave Page
parent
30868614ff
commit
7301e30ff3
@@ -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
|
||||
)
|
||||
|
@@ -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)
|
||||
|
||||
|
@@ -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
|
||||
|
||||
|
@@ -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('/')
|
||||
|
@@ -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:
|
||||
|
@@ -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)
|
||||
|
@@ -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
|
||||
|
@@ -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 """
|
||||
|
@@ -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:
|
||||
|
@@ -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
|
||||
)
|
||||
|
@@ -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
|
||||
|
||||
|
@@ -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"])
|
||||
|
@@ -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)
|
||||
|
||||
|
Reference in New Issue
Block a user