66 lines
2.2 KiB
Python
66 lines
2.2 KiB
Python
from django.core.management import call_command
|
|
from django.core.management.base import BaseCommand
|
|
from django.db import connection
|
|
|
|
|
|
class Command(BaseCommand):
|
|
help = "Runs a development server with data from the given fixture(s)."
|
|
|
|
requires_system_checks = []
|
|
|
|
def add_arguments(self, parser):
|
|
parser.add_argument(
|
|
"args",
|
|
metavar="fixture",
|
|
nargs="*",
|
|
help="Path(s) to fixtures to load before running the server.",
|
|
)
|
|
parser.add_argument(
|
|
"--noinput",
|
|
"--no-input",
|
|
action="store_false",
|
|
dest="interactive",
|
|
help="Tells Django to NOT prompt the user for input of any kind.",
|
|
)
|
|
parser.add_argument(
|
|
"--addrport",
|
|
default="",
|
|
help="Port number or ipaddr:port to run the server on.",
|
|
)
|
|
parser.add_argument(
|
|
"--ipv6",
|
|
"-6",
|
|
action="store_true",
|
|
dest="use_ipv6",
|
|
help="Tells Django to use an IPv6 address.",
|
|
)
|
|
|
|
def handle(self, *fixture_labels, **options):
|
|
verbosity = options["verbosity"]
|
|
interactive = options["interactive"]
|
|
|
|
# Create a test database.
|
|
db_name = connection.creation.create_test_db(
|
|
verbosity=verbosity, autoclobber=not interactive, serialize=False
|
|
)
|
|
|
|
# Import the fixture data into the test database.
|
|
call_command("loaddata", *fixture_labels, **{"verbosity": verbosity})
|
|
|
|
# Run the development server. Turn off auto-reloading because it causes
|
|
# a strange error -- it causes this handle() method to be called
|
|
# multiple times.
|
|
shutdown_message = (
|
|
"\nServer stopped.\nNote that the test database, %r, has not been "
|
|
"deleted. You can explore it on your own." % db_name
|
|
)
|
|
use_threading = connection.features.test_db_allows_multiple_connections
|
|
call_command(
|
|
"runserver",
|
|
addrport=options["addrport"],
|
|
shutdown_message=shutdown_message,
|
|
use_reloader=False,
|
|
use_ipv6=options["use_ipv6"],
|
|
use_threading=use_threading,
|
|
)
|