Source code for django_tenant_options.management.commands.syncoptions
"""Command to update the project's Options."""importloggingfromdjango.core.management.baseimportBaseCommandfromdjango_tenant_options.choicesimportOptionTypelogger=logging.getLogger("django_tenant_options")
[docs]classCommand(BaseCommand):"""Synchronizes the project's Options Lists."""help="Synchronizes the project's Options Lists."
[docs]defsyncoptions(self):"""Synchronize the project's Options Lists."""fromdjango_tenant_options.helpersimportall_option_subclassesmodel_subclasses=self.get_model_subclasses(all_option_subclasses)ifnotmodel_subclasses:self.stdout.write(self.style.WARNING("No default options found in the project."))# pylint: disable=E1101returnforModelClassinmodel_subclasses:# pylint: disable=C0103updated_options=self.update_options(ModelClass)ifupdated_options:self.print_updated_options(ModelClass,updated_options)
[docs]defget_model_subclasses(self,all_option_subclasses):"""Fetches all model subclasses."""try:returnall_option_subclasses()exceptExceptionase:# pylint: disable=W0718logger.error("Error fetching model subclasses: %s",e)return[]
[docs]defupdate_options(self,ModelClass):# pylint: disable=C0103"""Updates default options for a given model class."""try:updated_options=ModelClass.objects._update_default_options()# pylint: disable=W0212returnupdated_optionsexceptExceptionase:# pylint: disable=W0718logger.error("Error updating options for %s: %s",ModelClass.__name__,e)return{}
[docs]defprint_updated_options(self,ModelClass,updated_options):# pylint: disable=C0103"""Prints the updated options for a given model class."""self.stdout.write(self.style.NOTICE(f"\nModel: {ModelClass.__name__}"))# pylint: disable=E1101self.print_imported_or_verified_options(updated_options)self.print_all_active_custom_options(ModelClass)self.print_newly_deleted_options(updated_options)self.print_all_pre_existing_deleted_options(ModelClass,updated_options)
[docs]defprint_imported_or_verified_options(self,updated_options):"""Prints the imported or verified options."""imported_count=sum(1foroptions_dictinupdated_options.values()ifoptions_dict.get("deleted")isNone)ifimported_count>0:self.stdout.write(self.style.WARNING(" Imported or Verified Options:"))# pylint: disable=E1101forname,options_dictinupdated_options.items():ifoptions_dict.get("deleted")isNone:option_type=dict(OptionType.choices).get(options_dict.get("option_type"))self.stdout.write(f" - '{name}', Type: {option_type}")self.stdout.write(f" {imported_count} options imported or verified")else:self.stdout.write(self.style.WARNING(" No options imported or verified"))# pylint: disable=E1101