PEP8 fixes. Fixes #3156

This commit is contained in:
Murtuza Zabuawala 2018-02-27 15:38:50 +00:00 committed by Dave Page
parent f5afd5fdb4
commit cca6504d54
12 changed files with 290 additions and 154 deletions

View File

@ -32,12 +32,14 @@ class ResourceGroupModule(CollectionNodeModule):
""" """
class ResourceGroupModule(CollectionNodeModule) class ResourceGroupModule(CollectionNodeModule)
A module class for Resource Group node derived from CollectionNodeModule. A module class for Resource Group node derived from
CollectionNodeModule.
Methods: Methods:
------- -------
* __init__(*args, **kwargs) * __init__(*args, **kwargs)
- Method is used to initialize the ResourceGroupModule and it's base module. - Method is used to initialize the ResourceGroupModule and it's
base module.
* BackendSupported(manager, **kwargs) * BackendSupported(manager, **kwargs)
- This function is used to check the database server type and version. - This function is used to check the database server type and version.
@ -50,8 +52,8 @@ class ResourceGroupModule(CollectionNodeModule):
- Method is overridden from its base class to make the node as leaf node. - Method is overridden from its base class to make the node as leaf node.
* script_load() * script_load()
- Load the module script for resource group, when any of the server node is - Load the module script for resource group, when any of the server
initialized. node is initialized.
""" """
NODE_TYPE = 'resource_group' NODE_TYPE = 'resource_group'
@ -59,7 +61,8 @@ class ResourceGroupModule(CollectionNodeModule):
def __init__(self, *args, **kwargs): def __init__(self, *args, **kwargs):
""" """
Method is used to initialize the ResourceGroupModule and it's base module. Method is used to initialize the ResourceGroupModule and
it's base module.
Args: Args:
*args: *args:
@ -93,13 +96,13 @@ class ResourceGroupModule(CollectionNodeModule):
@property @property
def script_load(self): def script_load(self):
""" """
Load the module script for resource group, when any of the server node is initialized. Load the module script for resource group, when any of the server
node is initialized.
Returns: node type of the server module. Returns: node type of the server module.
""" """
return servers.ServerModule.NODE_TYPE return servers.ServerModule.NODE_TYPE
@property @property
def module_use_template_javascript(self): def module_use_template_javascript(self):
""" """
@ -116,9 +119,10 @@ class ResourceGroupView(NodeView):
""" """
class ResourceGroupView(NodeView) class ResourceGroupView(NodeView)
A view class for resource group node derived from NodeView. This class is A view class for resource group node derived from NodeView.
responsible for all the stuff related to view like create/update/delete resource group, This class is responsible for all the stuff related to view like
showing properties of resource group node, showing sql in sql pane. create/update/delete resource group, showing properties of resource
group node, showing sql in sql pane.
Methods: Methods:
------- -------
@ -135,14 +139,16 @@ class ResourceGroupView(NodeView):
manager,conn & template_path properties to self manager,conn & template_path properties to self
* list() * list()
- This function is used to list all the resource group nodes within that collection. - This function is used to list all the resource group nodes within
that collection.
* nodes() * nodes()
- This function will used to create all the child node within that collection. - This function will used to create all the child node within that
Here it will create all the resource group node. collection. Here it will create all the resource group node.
* properties(gid, sid, did, rg_id) * properties(gid, sid, did, rg_id)
- This function will show the properties of the selected resource group node - This function will show the properties of the selected resource
group node
* create(gid, sid, did, rg_id) * create(gid, sid, did, rg_id)
- This function will create the new resource group object - This function will create the new resource group object
@ -154,13 +160,15 @@ class ResourceGroupView(NodeView):
- This function will drop the resource group object - This function will drop the resource group object
* msql(gid, sid, did, rg_id) * msql(gid, sid, did, rg_id)
- This function is used to return modified SQL for the selected resource group node - This function is used to return modified SQL for the selected
resource group node
* get_sql(data, rg_id) * get_sql(data, rg_id)
- This function will generate sql from model data - This function will generate sql from model data
* sql(gid, sid, did, rg_id): * sql(gid, sid, did, rg_id):
- This function will generate sql to show it in sql pane for the selected resource group node. - This function will generate sql to show it in sql pane for the
selected resource group node.
""" """
node_type = blueprint.node_type node_type = blueprint.node_type
@ -190,7 +198,8 @@ class ResourceGroupView(NodeView):
def __init__(self, **kwargs): def __init__(self, **kwargs):
""" """
Method is used to initialize the ResourceGroupView and it's base view. Method is used to initialize the ResourceGroupView and it's base view.
Also initialize all the variables create/used dynamically like conn, template_path. Also initialize all the variables create/used dynamically like conn,
template_path.
Args: Args:
**kwargs: **kwargs:
@ -244,7 +253,8 @@ class ResourceGroupView(NodeView):
@check_precondition @check_precondition
def list(self, gid, sid): def list(self, gid, sid):
""" """
This function is used to list all the resource group nodes within that collection. This function is used to list all the resource group nodes within
that collection.
Args: Args:
gid: Server Group ID gid: Server Group ID
@ -263,8 +273,8 @@ class ResourceGroupView(NodeView):
@check_precondition @check_precondition
def node(self, gid, sid, rg_id): def node(self, gid, sid, rg_id):
""" """
This function will used to create all the child node within that collection. This function will used to create all the child node within that
Here it will create all the resource group node. collection. Here it will create all the resource group node.
Args: Args:
gid: Server Group ID gid: Server Group ID
@ -281,11 +291,11 @@ class ResourceGroupView(NodeView):
return gone(gettext("""Could not find the resource group.""")) return gone(gettext("""Could not find the resource group."""))
res = self.blueprint.generate_browser_node( res = self.blueprint.generate_browser_node(
result['rows'][0]['oid'], result['rows'][0]['oid'],
sid, sid,
result['rows'][0]['name'], result['rows'][0]['name'],
icon="icon-resource_group" icon="icon-resource_group"
) )
return make_json_response( return make_json_response(
data=res, data=res,
@ -295,8 +305,8 @@ class ResourceGroupView(NodeView):
@check_precondition @check_precondition
def nodes(self, gid, sid): def nodes(self, gid, sid):
""" """
This function will used to create all the child node within that collection. This function will used to create all the child node within that
Here it will create all the resource group node. collection. Here it will create all the resource group node.
Args: Args:
gid: Server Group ID gid: Server Group ID
@ -325,14 +335,16 @@ class ResourceGroupView(NodeView):
@check_precondition @check_precondition
def properties(self, gid, sid, rg_id): def properties(self, gid, sid, rg_id):
""" """
This function will show the properties of the selected resource group node. This function will show the properties of the selected resource
group node.
Args: Args:
gid: Server Group ID gid: Server Group ID
sid: Server ID sid: Server ID
rg_id: Resource Group ID rg_id: Resource Group ID
""" """
sql = render_template("/".join([self.template_path, 'properties.sql']), rgid=rg_id) sql = render_template(
"/".join([self.template_path, 'properties.sql']), rgid=rg_id)
status, res = self.conn.execute_dict(sql) status, res = self.conn.execute_dict(sql)
if not status: if not status:
@ -373,21 +385,33 @@ class ResourceGroupView(NodeView):
) )
try: try:
# Below logic will create new resource group # Below logic will create new resource group
sql = render_template("/".join([self.template_path, 'create.sql']), rgname=data['name'], conn=self.conn) sql = render_template(
"/".join([self.template_path, 'create.sql']),
rgname=data['name'], conn=self.conn
)
if sql and sql.strip('\n') and sql.strip(' '): if sql and sql.strip('\n') and sql.strip(' '):
status, res = self.conn.execute_scalar(sql) status, res = self.conn.execute_scalar(sql)
if not status: if not status:
return internal_server_error(errormsg=res) return internal_server_error(errormsg=res)
# Below logic will update the cpu_rate_limit and dirty_rate_limit for resource group # Below logic will update the cpu_rate_limit and dirty_rate_limit
# we need to add this logic because in resource group you can't run multiple commands in one transaction. # for resource group, we need to add this logic because in
sql = render_template("/".join([self.template_path, 'update.sql']), data=data, conn=self.conn) # resource group you can't run multiple commands in one
# transaction.
sql = render_template(
"/".join([self.template_path, 'update.sql']),
data=data, conn=self.conn
)
# Checking if we are not executing empty query # Checking if we are not executing empty query
if sql and sql.strip('\n') and sql.strip(' '): if sql and sql.strip('\n') and sql.strip(' '):
status, res = self.conn.execute_scalar(sql) status, res = self.conn.execute_scalar(sql)
if not status: if not status:
return internal_server_error(errormsg=res) return internal_server_error(errormsg=res)
# Below logic is used to fetch the oid of the newly created resource group # Below logic is used to fetch the oid of the newly created
sql = render_template("/".join([self.template_path, 'getoid.sql']), rgname=data['name']) # resource group
sql = render_template(
"/".join([self.template_path, 'getoid.sql']),
rgname=data['name']
)
# Checking if we are not executing empty query # Checking if we are not executing empty query
rg_id = 0 rg_id = 0
if sql and sql.strip('\n') and sql.strip(' '): if sql and sql.strip('\n') and sql.strip(' '):
@ -424,7 +448,8 @@ class ResourceGroupView(NodeView):
) )
try: try:
sql = render_template("/".join([self.template_path, 'properties.sql']), rgid=rg_id) sql = render_template(
"/".join([self.template_path, 'properties.sql']), rgid=rg_id)
status, res = self.conn.execute_dict(sql) status, res = self.conn.execute_dict(sql)
if not status: if not status:
return internal_server_error(errormsg=res) return internal_server_error(errormsg=res)
@ -434,19 +459,26 @@ class ResourceGroupView(NodeView):
data[arg] = old_data[arg] data[arg] = old_data[arg]
if data['name'] != old_data['name']: if data['name'] != old_data['name']:
sql = render_template("/".join([self.template_path, 'update.sql']), sql = render_template(
oldname=old_data['name'], newname=data['name'], conn=self.conn) "/".join([self.template_path, 'update.sql']),
oldname=old_data['name'], newname=data['name'],
conn=self.conn
)
if sql and sql.strip('\n') and sql.strip(' '): if sql and sql.strip('\n') and sql.strip(' '):
status, res = self.conn.execute_scalar(sql) status, res = self.conn.execute_scalar(sql)
if not status: if not status:
return internal_server_error(errormsg=res) return internal_server_error(errormsg=res)
# Below logic will update the cpu_rate_limit and dirty_rate_limit for resource group # Below logic will update the cpu_rate_limit and dirty_rate_limit
# we need to add this logic because in resource group you can't run multiple commands # for resource group we need to add this logic because in
# in one transaction. # resource group you can't run multiple commands in one
if (data['cpu_rate_limit'] != old_data['cpu_rate_limit']) \ # transaction.
or (data['dirty_rate_limit'] != old_data['dirty_rate_limit']): if data['cpu_rate_limit'] != old_data['cpu_rate_limit'] or \
sql = render_template("/".join([self.template_path, 'update.sql']), data=data, conn=self.conn) data['dirty_rate_limit'] != old_data['dirty_rate_limit']:
sql = render_template(
"/".join([self.template_path, 'update.sql']),
data=data, conn=self.conn
)
if sql and sql.strip('\n') and sql.strip(' '): if sql and sql.strip('\n') and sql.strip(' '):
status, res = self.conn.execute_scalar(sql) status, res = self.conn.execute_scalar(sql)
if not status: if not status:
@ -476,7 +508,10 @@ class ResourceGroupView(NodeView):
""" """
try: try:
# Get name for resource group from rg_id # Get name for resource group from rg_id
sql = render_template("/".join([self.template_path, 'delete.sql']), rgid=rg_id, conn=self.conn) sql = render_template(
"/".join([self.template_path, 'delete.sql']),
rgid=rg_id, conn=self.conn
)
status, rgname = self.conn.execute_scalar(sql) status, rgname = self.conn.execute_scalar(sql)
if not status: if not status:
return internal_server_error(errormsg=rgname) return internal_server_error(errormsg=rgname)
@ -493,7 +528,10 @@ class ResourceGroupView(NodeView):
) )
# drop resource group # drop resource group
sql = render_template("/".join([self.template_path, 'delete.sql']), rgname=rgname, conn=self.conn) sql = render_template(
"/".join([self.template_path, 'delete.sql']),
rgname=rgname, conn=self.conn
)
status, res = self.conn.execute_scalar(sql) status, res = self.conn.execute_scalar(sql)
if not status: if not status:
return internal_server_error(errormsg=res) return internal_server_error(errormsg=res)
@ -514,7 +552,8 @@ class ResourceGroupView(NodeView):
@check_precondition @check_precondition
def msql(self, gid, sid, rg_id=None): def msql(self, gid, sid, rg_id=None):
""" """
This function is used to return modified SQL for the selected resource group node This function is used to return modified SQL for the selected
resource group node
Args: Args:
gid: Server Group ID gid: Server Group ID
@ -554,7 +593,8 @@ class ResourceGroupView(NodeView):
'name', 'cpu_rate_limit', 'dirty_rate_limit' 'name', 'cpu_rate_limit', 'dirty_rate_limit'
] ]
if rg_id is not None: if rg_id is not None:
sql = render_template("/".join([self.template_path, 'properties.sql']), rgid=rg_id) sql = render_template(
"/".join([self.template_path, 'properties.sql']), rgid=rg_id)
status, res = self.conn.execute_dict(sql) status, res = self.conn.execute_dict(sql)
if not status: if not status:
return internal_server_error(errormsg=res) return internal_server_error(errormsg=res)
@ -572,19 +612,41 @@ class ResourceGroupView(NodeView):
name_changed = False name_changed = False
if data['name'] != old_data['name']: if data['name'] != old_data['name']:
name_changed = True name_changed = True
sql = render_template("/".join([self.template_path, 'update.sql']), sql = render_template(
oldname=old_data['name'], newname=data['name'], conn=self.conn) "/".join([self.template_path, 'update.sql']),
if (data['cpu_rate_limit'] != old_data['cpu_rate_limit']) \ oldname=old_data['name'], newname=data['name'],
or data['dirty_rate_limit'] != old_data['dirty_rate_limit']: conn=self.conn
)
if data['cpu_rate_limit'] != old_data['cpu_rate_limit'] or \
data['dirty_rate_limit'] != old_data['dirty_rate_limit']:
if name_changed: if name_changed:
sql += "\n-- Following query will be executed in a separate transaction\n" sql += "\n-- Following query will be executed in a " \
sql += render_template("/".join([self.template_path, 'update.sql']), data=data, conn=self.conn) "separate transaction\n"
sql += render_template(
"/".join([self.template_path, 'update.sql']),
data=data, conn=self.conn
)
else: else:
sql = render_template("/".join([self.template_path, 'create.sql']), rgname=data['name'], conn=self.conn) sql = render_template(
if ('cpu_rate_limit' in data and data['cpu_rate_limit'] > 0) \ "/".join([self.template_path, 'create.sql']),
or ('dirty_rate_limit' in data and data['dirty_rate_limit'] > 0): rgname=data['name'], conn=self.conn
sql += "\n-- Following query will be executed in a separate transaction\n" )
sql += render_template("/".join([self.template_path, 'update.sql']), data=data, conn=self.conn)
cpu_rate_limit_flag = False
dirty_rate_limit_flag = False
if 'cpu_rate_limit' in data and data['cpu_rate_limit'] > 0:
cpu_rate_limit_flag = True
if 'dirty_rate_limit' in data and data['dirty_rate_limit'] > 0:
dirty_rate_limit_flag = True
if cpu_rate_limit_flag or dirty_rate_limit_flag:
sql += "\n-- Following query will be executed in a " \
"separate transaction\n"
sql += render_template(
"/".join([self.template_path, 'update.sql']),
data=data, conn=self.conn
)
return sql, data['name'] if 'name' in data else old_data['name'] return sql, data['name'] if 'name' in data else old_data['name']
@ -598,7 +660,9 @@ class ResourceGroupView(NodeView):
sid: Server ID sid: Server ID
rg_id: Resource Group ID rg_id: Resource Group ID
""" """
sql = render_template("/".join([self.template_path, 'properties.sql']), rgid=rg_id) sql = render_template(
"/".join([self.template_path, 'properties.sql']), rgid=rg_id
)
status, res = self.conn.execute_dict(sql) status, res = self.conn.execute_dict(sql)
if not status: if not status:
return internal_server_error(errormsg=res) return internal_server_error(errormsg=res)
@ -610,10 +674,16 @@ class ResourceGroupView(NodeView):
# Making copy of output for future use # Making copy of output for future use
old_data = dict(res['rows'][0]) old_data = dict(res['rows'][0])
sql = render_template("/".join([self.template_path, 'create.sql']), display_comments=True, sql = render_template(
rgname=old_data['name'], conn=self.conn) "/".join([self.template_path, 'create.sql']),
display_comments=True,
rgname=old_data['name'], conn=self.conn
)
sql += "\n" sql += "\n"
sql += render_template("/".join([self.template_path, 'update.sql']), data=old_data, conn=self.conn) sql += render_template(
"/".join([self.template_path, 'update.sql']),
data=old_data, conn=self.conn
)
return ajax_response(response=sql) return ajax_response(response=sql)

View File

@ -34,8 +34,8 @@ class ResourceGroupsDeleteTestCase(BaseTestGenerator):
self.skipTest(message) self.skipTest(message)
else: else:
if server_response["data"]["version"] < 90400: if server_response["data"]["version"] < 90400:
message = "Resource groups are not supported by PPAS 9.3 " \ message = "Resource groups are not supported by PPAS " \
"and below." "9.3 and below."
self.skipTest(message) self.skipTest(message)
self.resource_group = "test_resource_group_delete%s" % \ self.resource_group = "test_resource_group_delete%s" % \
str(uuid.uuid4())[1:8] str(uuid.uuid4())[1:8]

View File

@ -38,7 +38,7 @@ class ResourceGroupsGetTestCase(BaseTestGenerator):
" and below." " and below."
self.skipTest(message) self.skipTest(message)
self.resource_group = "test_resource_group_get%s" % \ self.resource_group = "test_resource_group_get%s" % \
str(uuid.uuid4())[1:8] str(uuid.uuid4())[1:8]
self.resource_group_id = resource_groups_utils.create_resource_groups( self.resource_group_id = resource_groups_utils.create_resource_groups(
self.server, self.resource_group) self.server, self.resource_group)

View File

@ -148,8 +148,8 @@ class RoleView(PGChildNodeView):
# postgres database datestyle format # postgres database datestyle format
try: try:
if data[u'rolvaliduntil'] is not None and \ if data[u'rolvaliduntil'] is not None and \
data[u'rolvaliduntil'] != '' and \ data[u'rolvaliduntil'] != '' and \
len(data[u'rolvaliduntil']) > 0: len(data[u'rolvaliduntil']) > 0:
data[u'rolvaliduntil'] = dateutil_parser.parse( data[u'rolvaliduntil'] = dateutil_parser.parse(
data[u'rolvaliduntil'] data[u'rolvaliduntil']
).isoformat() ).isoformat()
@ -161,9 +161,11 @@ class RoleView(PGChildNodeView):
if u'rolconnlimit' in data: if u'rolconnlimit' in data:
if data[u'rolconnlimit'] is not None: if data[u'rolconnlimit'] is not None:
data[u'rolconnlimit'] = int(data[u'rolconnlimit']) data[u'rolconnlimit'] = int(data[u'rolconnlimit'])
if type(data[u'rolconnlimit']) != int or data[u'rolconnlimit'] < -1: if type(data[u'rolconnlimit']) != int or \
data[u'rolconnlimit'] < -1:
return precondition_required( return precondition_required(
_("Connection limit must be an integer value or equal to -1.") _("Connection limit must be an integer value "
"or equal to -1.")
) )
if u'rolmembership' in data: if u'rolmembership' in data:
@ -185,7 +187,8 @@ rolmembership:[{
data[u'admins'] = [] data[u'admins'] = []
for r in data[u'rolmembership']: for r in data[u'rolmembership']:
if type(r) != dict or u'role' not in r or u'admin' not in r: if type(r) != dict or u'role' not in r or \
u'admin' not in r:
return precondition_required(msg) return precondition_required(msg)
else: else:
if r[u'admin']: if r[u'admin']:
@ -231,8 +234,9 @@ rolmembership:{
return precondition_required(msg) return precondition_required(msg)
for r in roles: for r in roles:
if (type(r) != dict or u'role' not in r or if type(r) != dict or \
u'admin' not in r): u'role' not in r or \
u'admin' not in r:
return precondition_required(msg) return precondition_required(msg)
if r[u'admin']: if r[u'admin']:
@ -259,8 +263,9 @@ rolmembership:{
return precondition_required(msg) return precondition_required(msg)
for r in roles: for r in roles:
if (type(r) != dict or u'role' not in r or if type(r) != dict or \
u'admin' not in r): u'role' not in r or \
u'admin' not in r:
return precondition_required(msg) return precondition_required(msg)
if not r[u'admin']: if not r[u'admin']:
@ -284,8 +289,9 @@ seclabels:[{
return precondition_required(msg) return precondition_required(msg)
for s in data[u'seclabels']: for s in data[u'seclabels']:
if (type(s) != dict or u'provider' not in s or if type(s) != dict or \
u'label' not in s): u'provider' not in s or \
u'label' not in s:
return precondition_required(msg) return precondition_required(msg)
else: else:
msg = _(""" msg = _("""
@ -322,8 +328,9 @@ seclabels:{
return precondition_required(msg) return precondition_required(msg)
for s in new_seclabels: for s in new_seclabels:
if (type(s) != dict or u'provider' not in s or if type(s) != dict or \
u'label' not in s): u'provider' not in s or \
u'label' not in s:
return precondition_required(msg) return precondition_required(msg)
if u'deleted' in seclabels: if u'deleted' in seclabels:
@ -343,15 +350,16 @@ seclabels:{
return precondition_required(msg) return precondition_required(msg)
for s in changed_seclabels: for s in changed_seclabels:
if (type(s) != dict or u'provider' not in s if type(s) != dict or \
and u'label' not in s): u'provider' not in s and \
u'label' not in s:
return precondition_required(msg) return precondition_required(msg)
if u'variables' in data: if u'variables' in data:
if u'rid' not in kwargs or kwargs['rid'] == -1: if u'rid' not in kwargs or kwargs['rid'] == -1:
msg = _(""" msg = _("""
Configuration parameters/variables must be passed as an array of JSON objects in Configuration parameters/variables must be passed as an array of JSON objects
the following format in create mode: in the following format in create mode:
variables:[{ variables:[{
database: <database> or null, database: <database> or null,
name: <configuration>, name: <configuration>,
@ -363,14 +371,13 @@ variables:[{
return precondition_required(msg) return precondition_required(msg)
for r in data[u'variables']: for r in data[u'variables']:
if (type(r) != dict or if type(r) != dict or u'name' not in r or \
u'name' not in r or u'value' not in r:
u'value' not in r):
return precondition_required(msg) return precondition_required(msg)
else: else:
msg = _(""" msg = _("""
Configuration parameters/variables must be passed as an array of JSON objects in Configuration parameters/variables must be passed as an array of JSON objects
the following format in update mode: in the following format in update mode:
rolmembership:{ rolmembership:{
'added': [{ 'added': [{
database: <database> or null, database: <database> or null,
@ -405,8 +412,8 @@ rolmembership:{
return precondition_required(msg) return precondition_required(msg)
for v in new_vars: for v in new_vars:
if (type(v) != dict or u'name' not in v or if type(v) != dict or u'name' not in v or \
u'value' not in v): u'value' not in v:
return precondition_required(msg) return precondition_required(msg)
if u'deleted' in variables: if u'deleted' in variables:
@ -426,8 +433,8 @@ rolmembership:{
return precondition_required(msg) return precondition_required(msg)
for v in new_vars: for v in new_vars:
if (type(v) != dict or u'name' not in v or if type(v) != dict or u'name' not in v or \
u'value' not in v): u'value' not in v:
return precondition_required(msg) return precondition_required(msg)
self.request = data self.request = data
@ -466,10 +473,10 @@ rolmembership:{
ver = self.manager.version ver = self.manager.version
self.sql_path = 'role/sql/{0}/'.format( self.sql_path = 'role/sql/{0}/'.format(
'post9_4' if ver >= 90500 else \ 'post9_4' if ver >= 90500 else
'post9_1' if ver >= 90200 else \ 'post9_1' if ver >= 90200 else
'post9_0' if ver >= 90100 else \ 'post9_0' if ver >= 90100 else
'post8_4' 'post8_4'
) )
self.alterKeys = [ self.alterKeys = [
@ -491,19 +498,22 @@ rolmembership:{
fetch_name = True fetch_name = True
if action == 'drop': if action == 'drop':
forbidden_msg = _( forbidden_msg = _(
"The current user does not have permission to drop the role." "The current user does not have permission to drop"
" the role."
) )
else: else:
forbidden_msg = _( forbidden_msg = _(
"The current user does not have permission to update the role." "The current user does not have permission to "
"update the role."
) )
elif action == 'create': elif action == 'create':
check_permission = True check_permission = True
forbidden_msg = _( forbidden_msg = _(
"The current user does not have permission to create the role." "The current user does not have permission to create "
"the role."
) )
elif (action == 'msql' and elif action == 'msql' and 'rid' in kwargs and \
'rid' in kwargs and kwargs['rid'] != -1): kwargs['rid'] != -1:
fetch_name = True fetch_name = True
if check_permission: if check_permission:
@ -511,13 +521,12 @@ rolmembership:{
if not user['is_superuser'] and \ if not user['is_superuser'] and \
not user['can_create_role']: not user['can_create_role']:
if (action != 'update' or if action != 'update' or 'rid' in kwargs:
'rid' in kwargs and kwargs['rid'] != -1 and if kwargs['rid'] != -1:
user['id'] != kwargs['rid']): if user['id'] != kwargs['rid']:
return forbidden(forbidden_msg) return forbidden(forbidden_msg)
if fetch_name: if fetch_name:
status, res = self.conn.execute_dict( status, res = self.conn.execute_dict(
render_template( render_template(
self.sql_path + 'permission.sql', self.sql_path + 'permission.sql',
@ -535,7 +544,8 @@ rolmembership:{
if len(res['rows']) == 0: if len(res['rows']) == 0:
return gone( return gone(
_("Could not find the role on the database server.") _("Could not find the role on the database "
"server.")
) )
row = res['rows'][0] row = res['rows'][0]
@ -583,7 +593,8 @@ rolmembership:{
if not status: if not status:
return internal_server_error( return internal_server_error(
_( _(
"Error fetching role information from the database server.\n{0}" "Error fetching role information from the database "
"server.\n{0}"
).format(rset) ).format(rset)
) )
@ -617,7 +628,8 @@ rolmembership:{
if not status: if not status:
return internal_server_error( return internal_server_error(
_( _(
"Error fetching role information from the database server.\n{0}" "Error fetching role information from the database "
"server.\n{0}"
).format(rset) ).format(rset)
) )
@ -707,7 +719,8 @@ rolmembership:{
if not status: if not status:
return internal_server_error( return internal_server_error(
_("Could not generate reversed engineered query for the role.\n{0}").format( _("Could not generate reversed engineered query for the "
"role.\n{0}").format(
res res
) )
) )
@ -756,7 +769,8 @@ rolmembership:{
if not status: if not status:
return internal_server_error( return internal_server_error(
_( _(
"Error fetching role information from the database server.\n{0}" "Error fetching role information from the database "
"server.\n{0}"
).format(rset) ).format(rset)
) )
for row in rset['rows']: for row in rset['rows']:
@ -803,7 +817,8 @@ rolmembership:{
if not status: if not status:
return internal_server_error( return internal_server_error(
_( _(
"Error fetching role information from the database server.\n{0}" "Error fetching role information from the database "
"server.\n{0}"
).format(rset) ).format(rset)
) )
@ -925,9 +940,21 @@ rolmembership:{
oid = db_row['datdba'] oid = db_row['datdba']
if db_row['type'] == 'd': if db_row['type'] == 'd':
if rid == oid: if rid == oid:
dependents.append({'type': 'database', 'name': '', 'field': db_row['datname']}) dependents.append(
{
'type': 'database',
'name': '',
'field': db_row['datname']
}
)
else: else:
dependents.append({'type': 'tablespace', 'name': db_row['datname'], 'field': ''}) dependents.append(
{
'type': 'tablespace',
'name': db_row['datname'],
'field': ''
}
)
# If connection to the database is not allowed then continue # If connection to the database is not allowed then continue
# with the next database # with the next database
@ -947,8 +974,11 @@ rolmembership:{
current_app.logger.exception(e) current_app.logger.exception(e)
if temp_conn.connected(): if temp_conn.connected():
query = render_template("/".join([self.sql_path, 'dependents.sql']), query = render_template(
fetch_dependents=True, rid=rid, lastsysoid=db_row['datlastsysoid']) "/".join([self.sql_path, 'dependents.sql']),
fetch_dependents=True, rid=rid,
lastsysoid=db_row['datlastsysoid']
)
status, result = temp_conn.execute_dict(query) status, result = temp_conn.execute_dict(query)
if not status: if not status:
@ -985,7 +1015,13 @@ rolmembership:{
else: else:
continue continue
dependents.append({'type': type_name, 'name': rel_name, 'field': db_row['datname']}) dependents.append(
{
'type': type_name,
'name': rel_name,
'field': db_row['datname']
}
)
# Release only those connections which we have created above. # Release only those connections which we have created above.
if not is_connected: if not is_connected:
@ -1027,7 +1063,8 @@ SELECT
NULL AS min_val, NULL AS max_val, NULL::text[] AS enumvals NULL AS min_val, NULL AS max_val, NULL::text[] AS enumvals
UNION ALL UNION ALL
SELECT SELECT
name, vartype, min_val::numeric AS min_val, max_val::numeric AS max_val, enumvals name, vartype, min_val::numeric AS min_val, max_val::numeric AS max_val,
enumvals
FROM FROM
pg_settings pg_settings
WHERE WHERE

View File

@ -36,10 +36,11 @@ class LoginRoleAddTestCase(BaseTestGenerator):
data = roles_utils.get_role_data(self.server['db_password']) data = roles_utils.get_role_data(self.server['db_password'])
self.role_name = data['rolname'] self.role_name = data['rolname']
response = self.tester.post(self.url + str(utils.SERVER_GROUP) + '/' response = self.tester.post(
+ str(server_id) + '/', self.url + str(utils.SERVER_GROUP) + '/' + str(server_id) + '/',
data=json.dumps(data), data=json.dumps(data),
content_type='html/json') content_type='html/json'
)
self.assertEquals(response.status_code, 200) self.assertEquals(response.status_code, 200)
response_data = json.loads(response.data.decode('utf-8')) response_data = json.loads(response.data.decode('utf-8'))
role_id = response_data['node']['_id'] role_id = response_data['node']['_id']

View File

@ -47,4 +47,3 @@ class LoginRoleDeleteTestCase(BaseTestGenerator):
self.server['port'], self.server['port'],
self.server['sslmode']) self.server['sslmode'])
roles_utils.delete_role(connection, self.role_name) roles_utils.delete_role(connection, self.role_name)

View File

@ -56,4 +56,3 @@ class LoginRolePutTestCase(BaseTestGenerator):
self.server['port'], self.server['port'],
self.server['sslmode']) self.server['sslmode'])
roles_utils.delete_role(connection, self.role_name) roles_utils.delete_role(connection, self.role_name)

View File

@ -119,7 +119,11 @@ class TablespaceView(PGChildNodeView):
def wrap(*args, **kwargs): def wrap(*args, **kwargs):
# Here args[0] will hold self & kwargs will hold gid,sid,tsid # Here args[0] will hold self & kwargs will hold gid,sid,tsid
self = args[0] self = args[0]
self.manager = get_driver(PG_DEFAULT_DRIVER).connection_manager(kwargs['sid']) self.manager = get_driver(
PG_DEFAULT_DRIVER
).connection_manager(
kwargs['sid']
)
self.conn = self.manager.connection() self.conn = self.manager.connection()
# If DB not connected then return error to browser # If DB not connected then return error to browser
@ -133,7 +137,9 @@ class TablespaceView(PGChildNodeView):
) )
) )
self.template_path = 'tablespaces/sql/#{0}#'.format(self.manager.version) self.template_path = 'tablespaces/sql/#{0}#'.format(
self.manager.version
)
current_app.logger.debug( current_app.logger.debug(
"Using the template path: %s", self.template_path "Using the template path: %s", self.template_path
) )
@ -173,11 +179,11 @@ class TablespaceView(PGChildNodeView):
return gone(gettext("""Could not find the tablespace.""")) return gone(gettext("""Could not find the tablespace."""))
res = self.blueprint.generate_browser_node( res = self.blueprint.generate_browser_node(
rset['rows'][0]['oid'], rset['rows'][0]['oid'],
sid, sid,
rset['rows'][0]['name'], rset['rows'][0]['name'],
icon="icon-tablespace" icon="icon-tablespace"
) )
return make_json_response( return make_json_response(
data=res, data=res,
@ -269,7 +275,9 @@ class TablespaceView(PGChildNodeView):
return internal_server_error(errormsg=res) return internal_server_error(errormsg=res)
if len(res['rows']) == 0: if len(res['rows']) == 0:
return gone(gettext("""Could not find the tablespace information.""")) return gone(
gettext("""Could not find the tablespace information.""")
)
# Making copy of output for future use # Making copy of output for future use
copy_data = dict(res['rows'][0]) copy_data = dict(res['rows'][0])
@ -494,11 +502,17 @@ class TablespaceView(PGChildNodeView):
for key in ['spcacl']: for key in ['spcacl']:
if key in data and data[key] is not None: if key in data and data[key] is not None:
if 'added' in data[key]: if 'added' in data[key]:
data[key]['added'] = parse_priv_to_db(data[key]['added'], self.acl) data[key]['added'] = parse_priv_to_db(
data[key]['added'], self.acl
)
if 'changed' in data[key]: if 'changed' in data[key]:
data[key]['changed'] = parse_priv_to_db(data[key]['changed'], self.acl) data[key]['changed'] = parse_priv_to_db(
data[key]['changed'], self.acl
)
if 'deleted' in data[key]: if 'deleted' in data[key]:
data[key]['deleted'] = parse_priv_to_db(data[key]['deleted'], self.acl) data[key]['deleted'] = parse_priv_to_db(
data[key]['deleted'], self.acl
)
# If name is not present with in update data then copy it # If name is not present with in update data then copy it
# from old data # from old data
@ -689,7 +703,10 @@ class TablespaceView(PGChildNodeView):
} }
# Fetching databases with CONNECT privileges status. # Fetching databases with CONNECT privileges status.
query = render_template("/".join([self.template_path, 'dependents.sql']), fetch_database=True) query = render_template(
"/".join([self.template_path, 'dependents.sql']),
fetch_database=True
)
status, db_result = self.conn.execute_dict(query) status, db_result = self.conn.execute_dict(query)
if not status: if not status:
current_app.logger.error(db_result) current_app.logger.error(db_result)
@ -726,8 +743,10 @@ class TablespaceView(PGChildNodeView):
current_app.logger.exception(e) current_app.logger.exception(e)
if temp_conn.connected(): if temp_conn.connected():
query = render_template("/".join([self.template_path, 'dependents.sql']), query = render_template(
fetch_dependents=True, tsid=tsid) "/".join([self.template_path, 'dependents.sql']),
fetch_dependents=True, tsid=tsid
)
status, result = temp_conn.execute_dict(query) status, result = temp_conn.execute_dict(query)
if not status: if not status:
current_app.logger.error(result) current_app.logger.error(result)
@ -763,7 +782,13 @@ class TablespaceView(PGChildNodeView):
else: else:
continue continue
dependents.append({'type': type_name, 'name': rel_name, 'field': db_row['datname']}) dependents.append(
{
'type': type_name,
'name': rel_name,
'field': db_row['datname']
}
)
# Release only those connections which we have created above. # Release only those connections which we have created above.
if not is_connected: if not is_connected:

View File

@ -37,6 +37,7 @@ class BackendSupportedTestCase(BaseTestGenerator):
expected_result=False expected_result=False
)) ))
] ]
class LocalManager: class LocalManager:
def __init__(self, properties): def __init__(self, properties):
self.sversion = properties['sversion'] self.sversion = properties['sversion']

View File

@ -47,10 +47,10 @@ class TableSpaceAddTestCase(BaseTestGenerator):
table_space_path, db_owner) table_space_path, db_owner)
self.tablespace_name = data['name'] self.tablespace_name = data['name']
response = self.tester.post( response = self.tester.post(
self.url + str(utils.SERVER_GROUP) + '/' self.url + str(utils.SERVER_GROUP) + '/' + str(server_id) + '/',
+ str(server_id) + '/',
data=json.dumps(data), data=json.dumps(data),
content_type='html/json') content_type='html/json'
)
self.assertEquals(response.status_code, 200) self.assertEquals(response.status_code, 200)
response_data = json.loads(response.data.decode('utf-8')) response_data = json.loads(response.data.decode('utf-8'))
tablespace_id = response_data['node']['_id'] tablespace_id = response_data['node']['_id']

View File

@ -36,9 +36,11 @@ class TableSpaceDeleteTestCase(BaseTestGenerator):
self.server_id = parent_node_dict["server"][-1]["server_id"] self.server_id = parent_node_dict["server"][-1]["server_id"]
self.tablespace_id = tablespace_utils.create_tablespace( self.tablespace_id = tablespace_utils.create_tablespace(
self.server, self.tablespace_name) self.server, self.tablespace_name)
tablespace_dict = {"tablespace_id": self.tablespace_id, tablespace_dict = {
"tablespace_name": self.tablespace_name, "tablespace_id": self.tablespace_id,
"server_id": self.server_id} "tablespace_name": self.tablespace_name,
"server_id": self.server_id
}
utils.write_node_info("tsid", tablespace_dict) utils.write_node_info("tsid", tablespace_dict)
def runTest(self): def runTest(self):
@ -48,10 +50,11 @@ class TableSpaceDeleteTestCase(BaseTestGenerator):
if tablespace_count == 0: if tablespace_count == 0:
raise Exception("No tablespace(s) to delete!!!") raise Exception("No tablespace(s) to delete!!!")
response = self.tester.delete(self.url + str(utils.SERVER_GROUP) response = self.tester.delete(
+ '/' + str(self.server_id) + '/' self.url + str(utils.SERVER_GROUP) +
+ str(self.tablespace_id), '/' + str(self.server_id) + '/' + str(self.tablespace_id),
follow_redirects=True) follow_redirects=True
)
self.assertEquals(response.status_code, 200) self.assertEquals(response.status_code, 200)
delete_response_data = json.loads(response.data.decode('utf-8')) delete_response_data = json.loads(response.data.decode('utf-8'))
self.assertEquals(delete_response_data['success'], 1) self.assertEquals(delete_response_data['success'], 1)
@ -65,4 +68,3 @@ class TableSpaceDeleteTestCase(BaseTestGenerator):
self.server['port'], self.server['port'],
self.server['sslmode']) self.server['sslmode'])
tablespace_utils.delete_tablespace(connection, self.tablespace_name) tablespace_utils.delete_tablespace(connection, self.tablespace_name)

View File

@ -50,11 +50,13 @@ class TableSpaceUpdateTestCase(BaseTestGenerator):
data = { data = {
"description": "This is test description.", "description": "This is test description.",
"table_space_id": self.tablespace_id "table_space_id": self.tablespace_id
} }
put_response = self.tester.put( put_response = self.tester.put(
self.url + str(utils.SERVER_GROUP) + '/' + str(self.server_id) + '/' self.url + str(utils.SERVER_GROUP) +
+ str(self.tablespace_id), data=json.dumps(data), '/' + str(self.server_id) + '/' + str(self.tablespace_id),
follow_redirects=True) data=json.dumps(data),
follow_redirects=True
)
self.assertEquals(put_response.status_code, 200) self.assertEquals(put_response.status_code, 200)
def tearDown(self): def tearDown(self):