From c1804aef135b05236b259169c0deb242791da211 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fr=C3=A9d=C3=A9ric=20P=C3=A9ters?= Date: Mon, 13 Aug 2018 11:03:28 +0200 Subject: [PATCH 1/3] multitenant: sync management command base classes with upstream (#25656) --- .../management/commands/__init__.py | 27 +++++++++++++------ 1 file changed, 19 insertions(+), 8 deletions(-) diff --git a/hobo/multitenant/management/commands/__init__.py b/hobo/multitenant/management/commands/__init__.py index 9f51632..c44ae08 100644 --- a/hobo/multitenant/management/commands/__init__.py +++ b/hobo/multitenant/management/commands/__init__.py @@ -23,6 +23,7 @@ class BaseTenantCommand(BaseCommand): over all schemata. The actual command name is expected in the class variable COMMAND_NAME of the subclass. """ + def __new__(cls, *args, **kwargs): """ Sets option_list and help dynamically. @@ -32,20 +33,30 @@ class BaseTenantCommand(BaseCommand): app_name = get_commands()[obj.COMMAND_NAME] if isinstance(app_name, BaseCommand): # If the command is already loaded, use it directly. - cmdclass = app_name + obj._original_command = app_name else: - cmdclass = load_command_class(app_name, obj.COMMAND_NAME) + obj._original_command = load_command_class(app_name, obj.COMMAND_NAME) + + # prepend the command's original help with the info about schemata + # iteration + obj.help = ( + "Calls {cmd} for all registered schemata. You can use regular " + "{cmd} options.\n\nOriginal help for {cmd}:\n\n{help}".format( + cmd=obj.COMMAND_NAME, + help=getattr(obj._original_command, 'help', 'none'), + ) + ) - # prepend the command's original help with the info about schemata iteration - obj.help = "Calls %s for all registered schemata. You can use regular %s options. "\ - "Original help for %s: %s" % (obj.COMMAND_NAME, obj.COMMAND_NAME, obj.COMMAND_NAME, - getattr(cmdclass, 'help', 'none')) return obj def add_arguments(self, parser): super(BaseTenantCommand, self).add_arguments(parser) parser.add_argument("-d", "--domain", dest="domain") - parser.add_argument("-p", "--skip-public", dest="skip_public", action="store_true", default=False) + parser.add_argument("-p", "--skip-public", dest="skip_public", + action="store_true", default=False) + # use the privately held reference to the underlying command to invoke + # the add_arguments path on this parser instance + self._original_command.add_arguments(parser) def execute_command(self, tenant, command_name, *args, **options): verbosity = int(options.get('verbosity')) @@ -71,7 +82,7 @@ class BaseTenantCommand(BaseCommand): self.execute_command(TenantMiddleware.get_tenant_by_hostname(options['domain']), self.COMMAND_NAME, *args, **options) else: for tenant in TenantMiddleware.get_tenants(): - if not(options['skip_public'] and tenant.schema_name == get_public_schema_name()): + if not (options['skip_public'] and tenant.schema_name == get_public_schema_name()): self.execute_command(tenant, self.COMMAND_NAME, *args, **options) -- 2.18.0