1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82
|
# -*- coding: utf-8 -*-
import socket
from django.conf import settings
from django.core.management.base import BaseCommand, CommandError
from django.apps import apps
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 not apps.is_installed("django.contrib.sites"):
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)
|