Skip to content

Commit 4a76ac0

Browse files
JaeHyuckSasarahboyce
authored andcommitted
Fixed #35429 -- Added argparse choices to --database options.
1 parent 962215d commit 4a76ac0

File tree

16 files changed

+49
-4
lines changed

16 files changed

+49
-4
lines changed

django/contrib/auth/management/commands/changepassword.py

+2-1
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44
from django.contrib.auth.password_validation import validate_password
55
from django.core.exceptions import ValidationError
66
from django.core.management.base import BaseCommand, CommandError
7-
from django.db import DEFAULT_DB_ALIAS
7+
from django.db import DEFAULT_DB_ALIAS, connections
88

99
UserModel = get_user_model()
1010

@@ -32,6 +32,7 @@ def add_arguments(self, parser):
3232
parser.add_argument(
3333
"--database",
3434
default=DEFAULT_DB_ALIAS,
35+
choices=tuple(connections),
3536
help='Specifies the database to use. Default is "default".',
3637
)
3738

django/contrib/auth/management/commands/createsuperuser.py

+2-1
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@
1111
from django.contrib.auth.password_validation import validate_password
1212
from django.core import exceptions
1313
from django.core.management.base import BaseCommand, CommandError
14-
from django.db import DEFAULT_DB_ALIAS
14+
from django.db import DEFAULT_DB_ALIAS, connections
1515
from django.utils.functional import cached_property
1616
from django.utils.text import capfirst
1717

@@ -56,6 +56,7 @@ def add_arguments(self, parser):
5656
parser.add_argument(
5757
"--database",
5858
default=DEFAULT_DB_ALIAS,
59+
choices=tuple(connections),
5960
help='Specifies the database to use. Default is "default".',
6061
)
6162
for field_name in self.UserModel.REQUIRED_FIELDS:

django/contrib/contenttypes/management/commands/remove_stale_contenttypes.py

+2-1
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
from django.apps import apps
44
from django.contrib.contenttypes.models import ContentType
55
from django.core.management import BaseCommand
6-
from django.db import DEFAULT_DB_ALIAS, router
6+
from django.db import DEFAULT_DB_ALIAS, connections, router
77
from django.db.models.deletion import Collector
88

99

@@ -21,6 +21,7 @@ def add_arguments(self, parser):
2121
parser.add_argument(
2222
"--database",
2323
default=DEFAULT_DB_ALIAS,
24+
choices=tuple(connections),
2425
help='Nominates the database to use. Defaults to the "default" database.',
2526
)
2627
parser.add_argument(

django/core/management/commands/check.py

+2
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22
from django.core import checks
33
from django.core.checks.registry import registry
44
from django.core.management.base import BaseCommand, CommandError
5+
from django.db import connections
56

67

78
class Command(BaseCommand):
@@ -43,6 +44,7 @@ def add_arguments(self, parser):
4344
parser.add_argument(
4445
"--database",
4546
action="append",
47+
choices=tuple(connections),
4648
dest="databases",
4749
help="Run database related checks against these aliases.",
4850
)

django/core/management/commands/createcachetable.py

+1
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,7 @@ def add_arguments(self, parser):
3030
parser.add_argument(
3131
"--database",
3232
default=DEFAULT_DB_ALIAS,
33+
choices=tuple(connections),
3334
help="Nominates a database onto which the cache tables will be "
3435
'installed. Defaults to the "default" database.',
3536
)

django/core/management/commands/dbshell.py

+1
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@ def add_arguments(self, parser):
1616
parser.add_argument(
1717
"--database",
1818
default=DEFAULT_DB_ALIAS,
19+
choices=tuple(connections),
1920
help=(
2021
"Nominates a database onto which to open a shell. Defaults to the "
2122
'"default" database.'

django/core/management/commands/dumpdata.py

+2-1
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66
from django.core import serializers
77
from django.core.management.base import BaseCommand, CommandError
88
from django.core.management.utils import parse_apps_and_model_labels
9-
from django.db import DEFAULT_DB_ALIAS, router
9+
from django.db import DEFAULT_DB_ALIAS, connections, router
1010

1111
try:
1212
import bz2
@@ -56,6 +56,7 @@ def add_arguments(self, parser):
5656
parser.add_argument(
5757
"--database",
5858
default=DEFAULT_DB_ALIAS,
59+
choices=tuple(connections),
5960
help="Nominates a specific database to dump fixtures from. "
6061
'Defaults to the "default" database.',
6162
)

django/core/management/commands/flush.py

+1
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,7 @@ def add_arguments(self, parser):
2525
parser.add_argument(
2626
"--database",
2727
default=DEFAULT_DB_ALIAS,
28+
choices=tuple(connections),
2829
help='Nominates a database to flush. Defaults to the "default" database.',
2930
)
3031

django/core/management/commands/inspectdb.py

+1
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,7 @@ def add_arguments(self, parser):
2525
parser.add_argument(
2626
"--database",
2727
default=DEFAULT_DB_ALIAS,
28+
choices=tuple(connections),
2829
help=(
2930
'Nominates a database to introspect. Defaults to using the "default" '
3031
"database."

django/core/management/commands/loaddata.py

+1
Original file line numberDiff line numberDiff line change
@@ -55,6 +55,7 @@ def add_arguments(self, parser):
5555
parser.add_argument(
5656
"--database",
5757
default=DEFAULT_DB_ALIAS,
58+
choices=tuple(connections),
5859
help=(
5960
"Nominates a specific database to load fixtures into. Defaults to the "
6061
'"default" database.'

django/core/management/commands/migrate.py

+1
Original file line numberDiff line numberDiff line change
@@ -47,6 +47,7 @@ def add_arguments(self, parser):
4747
parser.add_argument(
4848
"--database",
4949
default=DEFAULT_DB_ALIAS,
50+
choices=tuple(connections),
5051
help=(
5152
'Nominates a database to synchronize. Defaults to the "default" '
5253
"database."

django/core/management/commands/showmigrations.py

+1
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@ def add_arguments(self, parser):
1919
parser.add_argument(
2020
"--database",
2121
default=DEFAULT_DB_ALIAS,
22+
choices=tuple(connections),
2223
help=(
2324
"Nominates a database to show migrations for. Defaults to the "
2425
'"default" database.'

django/core/management/commands/sqlflush.py

+1
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@ def add_arguments(self, parser):
1616
parser.add_argument(
1717
"--database",
1818
default=DEFAULT_DB_ALIAS,
19+
choices=tuple(connections),
1920
help=(
2021
'Nominates a database to print the SQL for. Defaults to the "default" '
2122
"database."

django/core/management/commands/sqlmigrate.py

+1
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@ def add_arguments(self, parser):
1919
parser.add_argument(
2020
"--database",
2121
default=DEFAULT_DB_ALIAS,
22+
choices=tuple(connections),
2223
help=(
2324
'Nominates a database to create SQL for. Defaults to the "default" '
2425
"database."

django/core/management/commands/sqlsequencereset.py

+1
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@ def add_arguments(self, parser):
1414
parser.add_argument(
1515
"--database",
1616
default=DEFAULT_DB_ALIAS,
17+
choices=tuple(connections),
1718
help=(
1819
'Nominates a database to print the SQL for. Defaults to the "default" '
1920
"database."

tests/admin_scripts/tests.py

+29
Original file line numberDiff line numberDiff line change
@@ -2301,6 +2301,35 @@ def test_precedence(self):
23012301
self.assertEqual(out.getvalue().strip(), "simple_app")
23022302

23032303

2304+
class CommandDBOptionChoiceTests(SimpleTestCase):
2305+
def test_invalid_choice_db_option(self):
2306+
expected_error = (
2307+
"Error: argument --database: invalid choice: "
2308+
"'deflaut' (choose from 'default', 'other')"
2309+
)
2310+
args = [
2311+
"changepassword",
2312+
"createsuperuser",
2313+
"remove_stale_contenttypes",
2314+
"check",
2315+
"createcachetable",
2316+
"dbshell",
2317+
"flush",
2318+
"dumpdata",
2319+
"inspectdb",
2320+
"loaddata",
2321+
"showmigrations",
2322+
"sqlflush",
2323+
"sqlmigrate",
2324+
"sqlsequencereset",
2325+
"migrate",
2326+
]
2327+
2328+
for arg in args:
2329+
with self.assertRaisesMessage(CommandError, expected_error):
2330+
call_command(arg, "--database", "deflaut", verbosity=0)
2331+
2332+
23042333
class ArgumentOrder(AdminScriptTestCase):
23052334
"""Tests for 2-stage argument parsing scheme.
23062335

0 commit comments

Comments
 (0)