# HG changeset patch # User Sylvain Thénault # Date 1409240494 -7200 # Node ID 5e44dd9dde6b6fc0af41945da046b8e9441f419e # Parent 671bbfed459b553b6214ee1e7c91cba60a41f685 [CWEP002 migration] support sync_schema_props_perms for computed attribute diff -r 671bbfed459b -r 5e44dd9dde6b hooks/syncschema.py --- a/hooks/syncschema.py Tue Jul 22 11:00:21 2014 +0200 +++ b/hooks/syncschema.py Thu Aug 28 17:41:34 2014 +0200 @@ -647,6 +647,8 @@ self.null_allowed_changed = True if 'fulltextindexed' in self.values: UpdateFTIndexOp.get_instance(cnx).add_data(rdef.subject) + if 'formula' in self.values: + RecomputeAttributeOperation.get_instance(cnx).add_data(rdef) def revertprecommit_event(self): if self.rdef is None: diff -r 671bbfed459b -r 5e44dd9dde6b server/test/datacomputed/migratedapp/schema.py --- a/server/test/datacomputed/migratedapp/schema.py Tue Jul 22 11:00:21 2014 +0200 +++ b/server/test/datacomputed/migratedapp/schema.py Thu Aug 28 17:41:34 2014 +0200 @@ -40,10 +40,12 @@ class Company(EntityType): score = Float(formula='Any AVG(NN) WHERE X employees E, N concerns E, N note NN') + score100 = Float(formula='Any AVG(NN) WHERE X employees E, N concerns E, N note100 NN') class Note(EntityType): note = Int() + note100 = Int(formula='Any N*100 WHERE X note N') class concerns(RelationDefinition): diff -r 671bbfed459b -r 5e44dd9dde6b server/test/datacomputed/schema.py --- a/server/test/datacomputed/schema.py Tue Jul 22 11:00:21 2014 +0200 +++ b/server/test/datacomputed/schema.py Thu Aug 28 17:41:34 2014 +0200 @@ -16,7 +16,7 @@ # You should have received a copy of the GNU Lesser General Public License along # with CubicWeb. If not, see . -from yams.buildobjs import EntityType, RelationDefinition, ComputedRelation, Int +from yams.buildobjs import EntityType, RelationDefinition, ComputedRelation, Int, Float class Employee(EntityType): @@ -34,11 +34,12 @@ class Company(EntityType): - pass + score100 = Float(formula='Any AVG(NN) WHERE X employees E, N concerns E, N note100 NN') class Note(EntityType): note = Int() note20 = Int(formula='Any N*20 WHERE X note N') + note100 = Int(formula='Any N*20 WHERE X note N') class concerns(RelationDefinition): subject = 'Note' diff -r 671bbfed459b -r 5e44dd9dde6b server/test/unittest_migractions.py --- a/server/test/unittest_migractions.py Tue Jul 22 11:00:21 2014 +0200 +++ b/server/test/unittest_migractions.py Thu Aug 28 17:41:34 2014 +0200 @@ -824,6 +824,22 @@ mh.cmd_drop_attribute('Note', 'note20') self.assert_computed_attribute_dropped() + def test_computed_attribute_sync_schema_props_perms_rtype(self): + self.assertIn('note100', self.schema) + with self.mh() as (cnx, mh): + mh.cmd_sync_schema_props_perms('note100') + self.assertEqual(self.schema['note100'].rdefs['Note', 'Int'].formula, + 'Any N*100 WHERE X note N') + + def test_computed_attribute_sync_schema_props_perms_rdef(self): + self.setup_add_score() + with self.mh() as (cnx, mh): + mh.cmd_sync_schema_props_perms(('Note', 'note100', 'Int')) + self.assertEqual([[200], [400]], + cnx.execute('Any N ORDERBY N WHERE X note100 N').rows) + self.assertEqual([[300]], + cnx.execute('Any CS WHERE C score100 CS, C is Company').rows) + if __name__ == '__main__': unittest_main()