# HG changeset patch # User Cédric Krier <ced@b2ck.com> # Date 1734964140 -3600 # Mon Dec 23 15:29:00 2024 +0100 # Node ID a788d2dd2fe0de595a8894d27f9197c311fd4565 # Parent ceb83d197bfcced51643cb723590cd97127eda86 Search relational models by name in model graph Since a4f347999b83 the name of the model is stored in the name field. diff --git a/trytond/trytond/ir/model.py b/trytond/trytond/ir/model.py --- a/trytond/trytond/ir/model.py +++ b/trytond/trytond/ir/model.py @@ -1676,7 +1676,7 @@ sub_models.add(field.relation) if sub_models: model_ids = Model.search([ - ('model', 'in', list(sub_models)), + ('name', 'in', list(sub_models)), ]) sub_models = Model.browse(model_ids) if set(sub_models) != set(models): # HG changeset patch # User Cédric Krier <ced@b2ck.com> # Date 1734964196 -3600 # Mon Dec 23 15:29:56 2024 +0100 # Node ID 670a6f7485d92970f23e4257f2fabdc4498f9945 # Parent a788d2dd2fe0de595a8894d27f9197c311fd4565 Do not fail to render field without type in model graph diff --git a/trytond/trytond/ir/model.py b/trytond/trytond/ir/model.py --- a/trytond/trytond/ir/model.py +++ b/trytond/trytond/ir/model.py @@ -1693,7 +1693,7 @@ if field.name in ('create_uid', 'write_uid', 'create_date', 'write_date', 'id'): continue - label += '+ ' + field.name + ': ' + field.ttype + label += f'+ {field.name} : {field.ttype}' if field.relation: label += ' ' + field.relation label += '\\l' # HG changeset patch # User Cédric Krier <ced@b2ck.com> # Date 1734964331 -3600 # Mon Dec 23 15:32:11 2024 +0100 # Node ID 6a4295d396eba62b475f07ebf5a79ab431eed007 # Parent 670a6f7485d92970f23e4257f2fabdc4498f9945 Move test workflow graph under ir module test diff --git a/trytond/trytond/tests/test_ir.py b/trytond/trytond/tests/test_ir.py --- a/trytond/trytond/tests/test_ir.py +++ b/trytond/trytond/tests/test_ir.py @@ -526,6 +526,24 @@ 'cc': ['fallback@example.com'], }) + @unittest.skipUnless( + pydot and shutil.which('dot'), "pydot is needed to generate graph") + @with_transaction() + def test_workflow_graph(self): + "Test workflow graph" + pool = Pool() + Model = pool.get('ir.model') + ModelWorkflowGraph = pool.get('ir.model.workflow_graph', type='report') + + model, = Model.search([('name', '=', 'ir.error')]) + + oext, content, print_, filename = ( + ModelWorkflowGraph.execute([model.id], {})) + self.assertEqual(oext, 'png') + self.assertTrue(content) + self.assertFalse(print_) + self.assertEqual(filename, "Workflow Graph") + class IrCronTestCase(TestCase): "Test ir.cron features" @@ -608,23 +626,5 @@ self.assertIsInstance(cron.get_timezone('timezone'), str) - @unittest.skipUnless( - pydot and shutil.which('dot'), "pydot is needed to generate graph") - @with_transaction() - def test_workflow_graph(self): - "Test workflow graph" - pool = Pool() - Model = pool.get('ir.model') - ModelWorkflowGraph = pool.get('ir.model.workflow_graph', type='report') - - model, = Model.search([('name', '=', 'ir.error')]) - - oext, content, print_, filename = ( - ModelWorkflowGraph.execute([model.id], {})) - self.assertEqual(oext, 'png') - self.assertTrue(content) - self.assertFalse(print_) - self.assertEqual(filename, "Workflow Graph") - del ModuleTestCase # HG changeset patch # User Cédric Krier <ced@b2ck.com> # Date 1734964607 -3600 # Mon Dec 23 15:36:47 2024 +0100 # Node ID bab161998741e90f6eaa031b48fc37b11e378bd9 # Parent 6a4295d396eba62b475f07ebf5a79ab431eed007 Test model graph report diff --git a/trytond/trytond/tests/test_ir.py b/trytond/trytond/tests/test_ir.py --- a/trytond/trytond/tests/test_ir.py +++ b/trytond/trytond/tests/test_ir.py @@ -529,6 +529,27 @@ @unittest.skipUnless( pydot and shutil.which('dot'), "pydot is needed to generate graph") @with_transaction() + def test_model_graph(self): + "Test model graph" + pool = Pool() + Model = pool.get('ir.model') + ModelGraph = pool.get('ir.model.graph', type='report') + + models = Model.search([]) + + oext, content, print_, filename = ( + ModelGraph.execute([m.id for m in models], { + 'level': 1, + 'filter': '', + })) + self.assertEqual(oext, 'png') + self.assertTrue(content) + self.assertFalse(print_) + self.assertEqual(filename, "Graph") + + @unittest.skipUnless( + pydot and shutil.which('dot'), "pydot is needed to generate graph") + @with_transaction() def test_workflow_graph(self): "Test workflow graph" pool = Pool()