from __future__ import print_function
from django.core.management.base import BaseCommand
from fobi.base import (
get_registered_form_element_plugin_uids,
get_registered_form_handler_plugin_uids
)
from fobi.models import FormElementEntry, FormHandlerEntry
[docs]class Command(BaseCommand):
"""Find the broken plugin records in the database:
- ``fobi.models.FormElementEntry``
- ``fobi.models.FormHandlerEntry``
"""
[docs] def handle(self, *args, **options):
"""Handle."""
form_element_entries = FormElementEntry._default_manager.all() \
.only('id', 'plugin_uid', 'form_entry') \
.values_list('id', 'plugin_uid', 'form_entry')
form_handler_entries = FormHandlerEntry._default_manager.all() \
.only('id', 'plugin_uid', 'form_entry') \
.values_list('id', 'plugin_uid', 'form_entry')
broken_form_element_entries = []
broken_form_handler_entries = []
registered_form_element_plugin_uids = \
get_registered_form_element_plugin_uids()
registered_form_handler_plugin_uids = \
get_registered_form_handler_plugin_uids()
for entry_id, plugin_uid, form_entry_id in form_element_entries:
if plugin_uid not in registered_form_element_plugin_uids:
broken_form_element_entries.append(
(form_entry_id, entry_id, plugin_uid)
)
if broken_form_element_entries:
print(
"Broken form element entries found (form ID, entry ID, "
"plugin UID)!",
broken_form_element_entries
)
for entry_id, plugin_uid, form_entry_id in form_handler_entries:
if plugin_uid not in registered_form_handler_plugin_uids:
broken_form_handler_entries.append(
(form_entry_id, entry_id, plugin_uid)
)
if broken_form_handler_entries:
print(
"Broken form handler entries found (form ID, entry ID, "
"plugin UID)!",
broken_form_handler_entries
)