Skip to content

Commit

Permalink
[WIP] convert common_qualifiers to a compute stored
Browse files Browse the repository at this point in the history
  • Loading branch information
d-fence committed Feb 11, 2025
1 parent b3e337b commit 251a82a
Show file tree
Hide file tree
Showing 3 changed files with 12 additions and 16 deletions.
23 changes: 12 additions & 11 deletions runbot/models/build_error.py
Original file line number Diff line number Diff line change
Expand Up @@ -103,7 +103,7 @@ class BuildError(models.Model):
tags_min_version_id = fields.Many2one('runbot.version', 'Tags Min version', help="Minimal version where the test tags will be applied.")
tags_max_version_id = fields.Many2one('runbot.version', 'Tags Max version', help="Maximal version where the test tags will be applied.")

common_qualifiers = JsonDictField('Selection Qualifiers', help="Minimal qualifiers in common needed to link error content.")
common_qualifiers = JsonDictField('Selection Qualifiers', compute='_compute_common_qualifiers', store=True, help="Minimal qualifiers in common needed to link error content.")
similar_ids = fields.One2many('runbot.build.error', compute='_compute_similar_ids', string="Similar Errors", help="Similar Errors based on common qualifiers")

# Build error related data
Expand Down Expand Up @@ -152,6 +152,17 @@ def _compute_random(self):
for record in self:
record.random = any(error.random for error in record.error_content_ids)

@api.depends('error_content_ids.qualifiers')
def _compute_common_qualifiers(self):
for record in self:
qualifiers = defaultdict(set)
key_count = defaultdict(int)
for content in record.error_content_ids:
for key, value in content.qualifiers.dict.items():
qualifiers[key].add(value)
key_count[key] += 1
record.common_qualifiers = {k: v.pop() for k, v in qualifiers.items() if len(v) == 1 and key_count[k] == len(record.error_content_ids)}

@api.depends('common_qualifiers')
def _compute_similar_ids(self):
for record in self:
Expand Down Expand Up @@ -262,16 +273,6 @@ def action_view_errors(self):
'target': 'current',
}

def action_infer_qualifiers(self):
for record in self:
qualifiers = defaultdict(set)
key_count = defaultdict(int)
for content in record.error_content_ids:
for key, value in content.qualifiers.dict.items():
qualifiers[key].add(value)
key_count[key] += 1
record.common_qualifiers = {k: v.pop() for k, v in qualifiers.items() if len(v) == 1 and key_count[k] == len(record.error_content_ids)}

def action_show_qualified_contents(self):
similar_content_ids = []
for record in self:
Expand Down
2 changes: 0 additions & 2 deletions runbot/tests/test_build_error.py
Original file line number Diff line number Diff line change
Expand Up @@ -570,8 +570,6 @@ def test_build_error_qualifers(self):
main_error._merge(error_contents[1].error_id)
self.assertEqual(len(main_error.error_content_ids), 2)

self.assertFalse(main_error.common_qualifiers)
main_error.action_infer_qualifiers()
self.assertEqual(main_error.common_qualifiers.dict, expected_common_qualifiers)
self.env.flush_all()
self.assertEqual(len(main_error.similar_ids), 1)
Expand Down
3 changes: 0 additions & 3 deletions runbot/views/build_error_views.xml
Original file line number Diff line number Diff line change
Expand Up @@ -84,9 +84,6 @@
</page>
<page string="Qualifying" groups="runbot.group_runbot_admin,runbot.group_runbot_error_manager">
<div class="btn-group">
<button class="btn btn-sm btn-primary" type="object" name="action_infer_qualifiers" help="Suggest qualifiers based on content's qualifiers">
Suggest Qualifiers
</button>
<button class="btn btn-sm btn-primary" type="object" name="action_show_qualified_contents">
View corresponding contents
</button>
Expand Down

0 comments on commit 251a82a

Please sign in to comment.