Author: cito
Date: Fri Feb 5 09:04:31 2016
New Revision: 820
Log:
Skip test for privileges when running as superuser
It's not possible to test for missing privileges as a superuser
because superusers always have all privileges.
Modified:
trunk/pg.py
trunk/tests/test_classic_dbwrapper.py
Modified: trunk/pg.py
==============================================================================
--- trunk/pg.py Fri Feb 5 07:43:28 2016 (r819)
+++ trunk/pg.py Fri Feb 5 09:04:31 2016 (r820)
@@ -1789,18 +1789,26 @@
self.dbtypes.clear()
return regtypes
- def has_table_privilege(self, table, privilege='select'):
- """Check whether current user has specified table privilege."""
+ def has_table_privilege(self, table, privilege='select', flush=False):
+ """Check whether current user has specified table privilege.
+
+ If flush is set, then the internal cache for table privileges will
+ be flushed. This may be necessary after privileges have been changed.
+ """
+ privileges = self._privileges
+ if flush:
+ privileges.clear()
+ self._do_debug('The privileges cache has been flushed')
privilege = privilege.lower()
try: # ask cache
- return self._privileges[(table, privilege)]
+ ret = privileges[table, privilege]
except KeyError: # cache miss, ask the database
q = "SELECT has_table_privilege(%s, $2)" % (
_quote_if_unqualified('$1', table),)
q = self.db.query(q, (table, privilege))
ret = q.getresult()[0][0] == self._make_bool(True)
- self._privileges[(table, privilege)] = ret # cache it
- return ret
+ privileges[table, privilege] = ret # cache it
+ return ret
def get(self, table, row, keyname=None):
"""Get a row from a database table or view.
Modified: trunk/tests/test_classic_dbwrapper.py
==============================================================================
--- trunk/tests/test_classic_dbwrapper.py Fri Feb 5 07:43:28 2016
(r819)
+++ trunk/tests/test_classic_dbwrapper.py Fri Feb 5 09:04:31 2016
(r820)
@@ -1071,9 +1071,8 @@
def testGetAttnamesWithRegtypes(self):
get_attnames = self.db.get_attnames
- self.createTable('test_table',
- ' n int, alpha smallint, beta bool,'
- ' gamma char(5), tau text, v varchar(3)')
+ self.createTable('test_table', 'n int, alpha smallint, beta bool,'
+ ' gamma char(5), tau text, v varchar(3)')
use_regtypes = self.db.use_regtypes
regtypes = use_regtypes()
self.assertEqual(regtypes, self.regtypes)
@@ -1089,9 +1088,8 @@
def testGetAttnamesWithoutRegtypes(self):
get_attnames = self.db.get_attnames
- self.createTable('test_table',
- ' n int, alpha smallint, beta bool,'
- ' gamma char(5), tau text, v varchar(3)')
+ self.createTable('test_table', 'n int, alpha smallint, beta bool,'
+ ' gamma char(5), tau text, v varchar(3)')
use_regtypes = self.db.use_regtypes
regtypes = use_regtypes()
self.assertEqual(regtypes, self.regtypes)
@@ -1150,9 +1148,8 @@
r = ' '.join(list(r.keys()))
self.assertEqual(r, 'i2 i4 i8 d f4 f8 m v4 c4 t')
table = 'test table for get_attnames'
- self.createTable(table,
- ' n int, alpha smallint, v varchar(3),'
- ' gamma char(5), tau text, beta bool')
+ self.createTable(table, 'n int, alpha smallint, v varchar(3),'
+ ' gamma char(5), tau text, beta bool')
r = get_attnames(table)
self.assertIsInstance(r, OrderedDict)
if self.regtypes:
@@ -1189,9 +1186,8 @@
r = ' '.join(list(r.keys()))
self.assertEqual(r, 'i2 i4 i8 d f4 f8 m v4 c4 t')
table = 'test table for get_attnames'
- self.createTable(table,
- ' n int, alpha smallint, v varchar(3),'
- ' gamma char(5), tau text, beta bool')
+ self.createTable(table, 'n int, alpha smallint, v varchar(3),'
+ ' gamma char(5), tau text, beta bool')
r = get_attnames(table)
self.assertIsInstance(r, AttrDict)
if self.regtypes:
@@ -1215,10 +1211,16 @@
self.assertEqual(can('test', 'insert'), True)
self.assertEqual(can('test', 'update'), True)
self.assertEqual(can('test', 'delete'), True)
- self.assertEqual(can('pg_views', 'select'), True)
- self.assertEqual(can('pg_views', 'delete'), False)
self.assertRaises(pg.ProgrammingError, can, 'test', 'foobar')
self.assertRaises(pg.ProgrammingError, can, 'table_does_not_exist')
+ r = self.db.query('select rolsuper FROM pg_roles'
+ ' where rolname=current_user').getresult()[0][0]
+ if not pg.get_bool():
+ r = r == 't'
+ if r:
+ self.skipTest('must not be superuser')
+ self.assertEqual(can('pg_views', 'select'), True)
+ self.assertEqual(can('pg_views', 'delete'), False)
def testGet(self):
get = self.db.get
_______________________________________________
PyGreSQL mailing list
[email protected]
https://mail.vex.net/mailman/listinfo.cgi/pygresql