Fix model_actions registry to use set operations

The registry was changed to defaultdict(set) but the registration
code still used list methods. Update .append() to .add() and fix
tests to use set-compatible access patterns.
This commit is contained in:
Jason Novinger
2026-04-06 09:29:00 -05:00
parent b5839d5ac4
commit a57a538b92
2 changed files with 12 additions and 11 deletions

View File

@@ -58,8 +58,7 @@ def register_model_actions(model: type[Model], actions: list[ModelAction | str])
raise ValueError("Action name must not be empty.")
if action.name in RESERVED_ACTIONS:
raise ValueError(f"'{action.name}' is a reserved action and cannot be registered.")
if action not in registry['model_actions'][label]:
registry['model_actions'][label].append(action)
registry['model_actions'][label].add(action)
def get_action_model_map(model_actions):

View File

@@ -52,16 +52,17 @@ class RegisterModelActionsTest(TestCase):
])
actions = registry['model_actions']['dcim.site']
self.assertEqual(len(actions), 1)
self.assertEqual(actions[0].name, 'test_action')
self.assertEqual(actions[0].help_text, 'Test help')
action = next(iter(actions))
self.assertEqual(action.name, 'test_action')
self.assertEqual(action.help_text, 'Test help')
def test_register_string_actions(self):
register_model_actions(Site, ['action1', 'action2'])
actions = registry['model_actions']['dcim.site']
self.assertEqual(len(actions), 2)
self.assertIsInstance(actions[0], ModelAction)
self.assertEqual(actions[0].name, 'action1')
self.assertEqual(actions[1].name, 'action2')
action_names = {a.name for a in actions}
self.assertEqual(action_names, {'action1', 'action2'})
self.assertTrue(all(isinstance(a, ModelAction) for a in actions))
def test_register_mixed_actions(self):
register_model_actions(Site, [
@@ -70,16 +71,17 @@ class RegisterModelActionsTest(TestCase):
])
actions = registry['model_actions']['dcim.site']
self.assertEqual(len(actions), 2)
self.assertEqual(actions[0].help_text, 'Has help')
self.assertEqual(actions[1].help_text, '')
actions_by_name = {a.name: a for a in actions}
self.assertEqual(actions_by_name['with_help'].help_text, 'Has help')
self.assertEqual(actions_by_name['without_help'].help_text, '')
def test_multiple_registrations_append(self):
register_model_actions(Site, [ModelAction('first')])
register_model_actions(Site, [ModelAction('second')])
actions = registry['model_actions']['dcim.site']
self.assertEqual(len(actions), 2)
self.assertEqual(actions[0].name, 'first')
self.assertEqual(actions[1].name, 'second')
action_names = {a.name for a in actions}
self.assertEqual(action_names, {'first', 'second'})
def test_duplicate_registration_ignored(self):
register_model_actions(Site, [ModelAction('sync')])