# HG changeset patch # User Sylvain Thénault # Date 1423083337 -3600 # Node ID a0a11be5a9cb982e2d95eceb33ee043c5cc336ee # Parent 365e5a0287d63a9b8fbb11edd86d04a42a2651f6 [schema] set permissions that do not allow edition on computed relation. Closes #4903918 Also, drop 'del schema' from test which clutters the code for no benefit. diff -r 365e5a0287d6 -r a0a11be5a9cb schema.py --- a/schema.py Mon Feb 02 23:17:15 2015 +0100 +++ b/schema.py Wed Feb 04 21:55:37 2015 +0100 @@ -1094,7 +1094,10 @@ if self[objtype].final: raise BadSchemaDefinition('computed relations cannot be final') rdef = ybo.RelationDefinition( - subjtype, rschema.type, objtype) + subjtype, rschema.type, objtype, + __permissions__={'add': (), + 'delete': (), + 'read': ('managers', 'users', 'guests')}) rdef.infered = True self.add_relation_def(rdef) diff -r 365e5a0287d6 -r a0a11be5a9cb test/unittest_schema.py --- a/test/unittest_schema.py Mon Feb 02 23:17:15 2015 +0100 +++ b/test/unittest_schema.py Wed Feb 04 21:55:37 2015 +0100 @@ -298,10 +298,14 @@ total_salary = Int(formula='Any SUM(SA) GROUPBY X WHERE ' 'P works_for X, P salary SA') good_schema = build_schema_from_namespace(vars().items()) - + rdef = good_schema['Company'].rdef('total_salary') # ensure 'X is Company' is added to the rqlst to avoid ambiguities, see #4901163 - self.assertEqual(str(good_schema['Company'].rdef('total_salary').formula_select), + self.assertEqual(str(rdef.formula_select), 'Any SUM(SA) GROUPBY X WHERE P works_for X, P salary SA, X is Company') + # check relation definition permissions + self.assertEqual(rdef.permissions, + {'add': (), 'update': (), + 'read': ('managers', 'users', 'guests')}) class Company(EntityType): total_salary = String(formula='Any SUM(SA) GROUPBY X WHERE ' @@ -358,11 +362,15 @@ schema['produces_and_buys2'].rdefs.keys()) self.assertEqual([('Company', 'Service'), ('Person', 'Service')], schema['reproduce'].rdefs.keys()) - # check relations as marked infered - self.assertTrue( - schema['produces_and_buys'].rdefs[('Person','Service')].infered) + # check relation definitions are marked infered + rdef = schema['produces_and_buys'].rdefs[('Person','Service')] + self.assertTrue(rdef.infered) + # and have no add/delete permissions + self.assertEqual(rdef.permissions, + {'add': (), + 'delete': (), + 'read': ('managers', 'users', 'guests')}) - del schema class autoname(ComputedRelation): rule = 'S produce X, X name O'