1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374 |
- # -*- coding: utf-8 -*-
- import socket
- from django.conf import settings
- from django.core.management.base import BaseCommand, CommandError
- from django_extensions.management.utils import signalcommand
- class Command(BaseCommand):
- help = "Set parameters of the default django.contrib.sites Site"
- def add_arguments(self, parser):
- super().add_arguments(parser)
- parser.add_argument(
- '--name', dest='site_name', default=None,
- help='Use this as site name.'
- )
- parser.add_argument(
- '--domain', dest='site_domain', default=None,
- help='Use this as site domain.'
- )
- parser.add_argument(
- '--system-fqdn', dest='set_as_system_fqdn', default=False,
- action="store_true",
- help='Use the systems FQDN (Fully Qualified Domain Name) as name '
- 'and domain. Can be used in combination with --name'
- )
- @signalcommand
- def handle(self, *args, **options):
- if 'django.contrib.sites' not in settings.INSTALLED_APPS:
- raise CommandError('The sites framework is not installed.')
- from django.contrib.sites.models import Site
- try:
- site = Site.objects.get(pk=settings.SITE_ID)
- except Site.DoesNotExist:
- raise CommandError("Default site with pk=%s does not exist" %
- settings.SITE_ID)
- else:
- name = options["site_name"]
- domain = options["site_domain"]
- set_as_system_fqdn = options["set_as_system_fqdn"]
- if all([domain, set_as_system_fqdn]):
- raise CommandError(
- "The set_as_system_fqdn cannot be used with domain option.") # noqa
- if set_as_system_fqdn:
- domain = socket.getfqdn()
- if not domain:
- raise CommandError("Cannot find systems FQDN")
- if name is None:
- name = domain
- update_kwargs = {}
- if name and name != site.name:
- update_kwargs["name"] = name
- if domain and domain != site.domain:
- update_kwargs["domain"] = domain
- if update_kwargs:
- Site.objects.filter(
- pk=settings.SITE_ID).update(**update_kwargs)
- site = Site.objects.get(pk=settings.SITE_ID)
- print("Updated default site. You might need to restart django as sites are cached aggressively.")
- else:
- print("Nothing to update (need --name, --domain and/or --system-fqdn)")
- print("Default Site:")
- print("\tid = %s" % site.id)
- print("\tname = %s" % site.name)
- print("\tdomain = %s" % site.domain)
|