Skip to content

Commit 06953ab

Browse files
committed
deprecate the use of --router, use --database instead
1 parent e0a8da7 commit 06953ab

File tree

12 files changed

+157
-100
lines changed

12 files changed

+157
-100
lines changed

django_extensions/management/commands/drop_test_database.py

Lines changed: 16 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,17 @@
11
# -*- coding: utf-8 -*-
2+
import os
23
import logging
4+
import warnings
35

46
from django.conf import settings
57
from django.core.management.base import BaseCommand, CommandError
8+
from django.db import DEFAULT_DB_ALIAS
69
from django.db.backends.base.creation import TEST_DATABASE_PREFIX
710
from six.moves import input
811

912
from django_extensions.management.mysql import parse_mysql_cnf
1013
from django_extensions.management.utils import signalcommand
14+
from django_extensions.utils.deprecation import RemovedInNextVersionWarning
1115

1216

1317
class Command(BaseCommand):
@@ -32,17 +36,25 @@ def add_arguments(self, parser):
3236
help='Use another database name then defined in settings.py'
3337
)
3438
parser.add_argument(
35-
'-R', '--router', action='store', dest='router', default='default',
39+
'-R', '--router', action='store', dest='router', default=DEFAULT_DB_ALIAS,
3640
help='Use this router-database other then defined in settings.py'
3741
)
42+
parser.add_argument(
43+
'--database', default=DEFAULT_DB_ALIAS,
44+
help='Nominates a database to run command for. Defaults to the "%s" database.' % DEFAULT_DB_ALIAS,
45+
)
3846

3947
@signalcommand
4048
def handle(self, *args, **options):
4149
"""Drop test database for this project."""
42-
router = options['router']
43-
dbinfo = settings.DATABASES.get(router)
50+
database = options['database']
51+
if options['router'] != DEFAULT_DB_ALIAS:
52+
warnings.warn("--router is deprecated. You should use --database.", RemovedInNextVersionWarning, stacklevel=2)
53+
database = options['router']
54+
55+
dbinfo = settings.DATABASES.get(database)
4456
if dbinfo is None:
45-
raise CommandError("Unknown database router %s" % router)
57+
raise CommandError("Unknown database %s" % database)
4658

4759
engine = dbinfo.get('ENGINE').split('.')[-1]
4860

@@ -84,7 +96,6 @@ def handle(self, *args, **options):
8496
return
8597

8698
if engine in ('sqlite3', 'spatialite'):
87-
import os
8899
try:
89100
logging.info("Unlinking %s database" % engine)
90101
if os.path.isfile(database_name):

django_extensions/management/commands/reset_db.py

Lines changed: 15 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -6,14 +6,17 @@
66
"""
77
import os
88
import logging
9+
import warnings
910

1011
from django.conf import settings
1112
from django.core.management.base import BaseCommand, CommandError
13+
from django.db import DEFAULT_DB_ALIAS
1214
from six.moves import input
1315

1416
from django_extensions.settings import SQLITE_ENGINES, POSTGRESQL_ENGINES, MYSQL_ENGINES
1517
from django_extensions.management.mysql import parse_mysql_cnf
1618
from django_extensions.management.utils import signalcommand
19+
from django_extensions.utils.deprecation import RemovedInNextVersionWarning
1720

1821

1922
class Command(BaseCommand):
@@ -48,9 +51,13 @@ def add_arguments(self, parser):
4851
help='Use another database name than defined in settings.py'
4952
)
5053
parser.add_argument(
51-
'-R', '--router', action='store', dest='router', default='default',
54+
'-R', '--router', action='store', dest='router', default=DEFAULT_DB_ALIAS,
5255
help='Use this router-database other than defined in settings.py'
5356
)
57+
parser.add_argument(
58+
'--database', default=DEFAULT_DB_ALIAS,
59+
help='Nominates a database to run command for. Defaults to the "%s" database.' % DEFAULT_DB_ALIAS,
60+
)
5461
parser.add_argument(
5562
'-c', '--close-sessions', action='store_true', dest='close_sessions', default=False,
5663
help='Close database connections before dropping database (PostgreSQL only)'
@@ -64,10 +71,14 @@ def handle(self, *args, **options):
6471
Note: Transaction wrappers are in reverse as a work around for
6572
autocommit, anybody know how to do this the right way?
6673
"""
67-
router = options['router']
68-
dbinfo = settings.DATABASES.get(router)
74+
database = options['database']
75+
if options['router'] != DEFAULT_DB_ALIAS:
76+
warnings.warn("--router is deprecated. You should use --database.", RemovedInNextVersionWarning, stacklevel=2)
77+
database = options['router']
78+
79+
dbinfo = settings.DATABASES.get(database)
6980
if dbinfo is None:
70-
raise CommandError("Unknown database router %s" % router)
81+
raise CommandError("Unknown database %s" % database)
7182

7283
engine = dbinfo.get('ENGINE')
7384

django_extensions/management/commands/reset_schema.py

Lines changed: 18 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -5,11 +5,16 @@
55
schema while there are active connections.
66
"""
77

8+
import warnings
9+
810
from django.core.management import BaseCommand, CommandError
11+
from django.db import DEFAULT_DB_ALIAS
912
from django.db import connections
1013
from django.conf import settings
1114
from six.moves import input
1215

16+
from django_extensions.utils.deprecation import RemovedInNextVersionWarning
17+
1318

1419
class Command(BaseCommand):
1520
"""`reset_schema` command implementation."""
@@ -24,19 +29,27 @@ def add_arguments(self, parser):
2429
help='Tells Django to NOT prompt the user for input of any kind.'
2530
)
2631
parser.add_argument(
27-
'-R', '--router', action='store', dest='router', default='default',
32+
'-R', '--router', action='store', dest='router', default=DEFAULT_DB_ALIAS,
2833
help='Use this router-database instead of the one defined in settings.py'
2934
)
35+
parser.add_argument(
36+
'--database', default=DEFAULT_DB_ALIAS,
37+
help='Nominates a database to run command for. Defaults to the "%s" database.' % DEFAULT_DB_ALIAS,
38+
)
3039
parser.add_argument(
3140
'-S', '--schema', action='store', dest='schema', default='public',
3241
help='Drop this schema instead of "public"'
3342
)
3443

3544
def handle(self, *args, **options):
36-
router = options['router']
37-
dbinfo = settings.DATABASES.get(router)
45+
database = options['database']
46+
if options['router'] != DEFAULT_DB_ALIAS:
47+
warnings.warn("--router is deprecated. You should use --database.", RemovedInNextVersionWarning, stacklevel=2)
48+
database = options['router']
49+
50+
dbinfo = settings.DATABASES.get(database)
3851
if dbinfo is None:
39-
raise CommandError("Unknown database router %s" % router)
52+
raise CommandError("Unknown database %s" % database)
4053

4154
engine = dbinfo.get('ENGINE').split('.')[-1]
4255
if engine not in ('postgresql', 'postgresql_psycopg2', 'postgis'):
@@ -60,6 +73,6 @@ def handle(self, *args, **options):
6073
if confirm != 'yes':
6174
print("Reset cancelled.")
6275
return
63-
with connections[router].cursor() as cursor:
76+
with connections[database].cursor() as cursor:
6477
cursor.execute("DROP SCHEMA {} CASCADE".format(schema))
6578
cursor.execute("CREATE SCHEMA {}".format(schema))

django_extensions/management/commands/sqlcreate.py

Lines changed: 17 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,40 +1,51 @@
11
# -*- coding: utf-8 -*-
22
import socket
33
import sys
4+
import warnings
45

56
from django.conf import settings
67
from django.core.management.base import BaseCommand, CommandError
8+
from django.db import DEFAULT_DB_ALIAS
79

810
from django_extensions.management.utils import signalcommand
11+
from django_extensions.utils.deprecation import RemovedInNextVersionWarning
912

1013

1114
class Command(BaseCommand):
1215
help = """Generates the SQL to create your database for you, as specified in settings.py
1316
The envisioned use case is something like this:
1417
15-
./manage.py sqlcreate [--router=<routername>] | mysql -u <db_administrator> -p
16-
./manage.py sqlcreate [--router=<routername>] | psql -U <db_administrator> -W"""
18+
./manage.py sqlcreate [--database=<databasename>] | mysql -u <db_administrator> -p
19+
./manage.py sqlcreate [--database=<databasname>] | psql -U <db_administrator> -W"""
1720

1821
requires_system_checks = False
1922
can_import_settings = True
2023

2124
def add_arguments(self, parser):
2225
super().add_arguments(parser)
2326
parser.add_argument(
24-
'-R', '--router', action='store', dest='router', default='default',
27+
'-R', '--router', action='store', dest='router', default=DEFAULT_DB_ALIAS,
2528
help='Use this router-database other then defined in settings.py'
2629
)
30+
parser.add_argument(
31+
'--database', default=DEFAULT_DB_ALIAS,
32+
help='Nominates a database to run command for. Defaults to the "%s" database.' % DEFAULT_DB_ALIAS,
33+
)
2734
parser.add_argument(
2835
'-D', '--drop', action='store_true', dest='drop', default=False,
2936
help='If given, includes commands to drop any existing user and database.'
3037
)
3138

3239
@signalcommand
3340
def handle(self, *args, **options):
34-
router = options['router']
35-
dbinfo = settings.DATABASES.get(router)
41+
database = options['database']
42+
if options['router'] != DEFAULT_DB_ALIAS:
43+
warnings.warn("--router is deprecated. You should use --database.", RemovedInNextVersionWarning, stacklevel=2)
44+
database = options['router']
45+
46+
dbinfo = settings.DATABASES.get(database)
3647
if dbinfo is None:
37-
raise CommandError("Unknown database router %s" % router)
48+
raise CommandError("Unknown database %s" % database)
3849

3950
engine = dbinfo.get('ENGINE').split('.')[-1]
4051
dbuser = dbinfo.get('USER')
@@ -56,7 +67,6 @@ def handle(self, *args, **options):
5667
print("GRANT ALL PRIVILEGES ON %s.* to '%s'@'%s' identified by '%s';" % (
5768
dbname, dbuser, dbclient, dbpass
5869
))
59-
6070
elif engine in ('postgresql', 'postgresql_psycopg2', 'postgis'):
6171
if options['drop']:
6272
print("DROP DATABASE IF EXISTS %s;" % (dbname,))
@@ -65,10 +75,8 @@ def handle(self, *args, **options):
6575
print("CREATE USER %s WITH ENCRYPTED PASSWORD '%s' CREATEDB;" % (dbuser, dbpass))
6676
print("CREATE DATABASE %s WITH ENCODING 'UTF-8' OWNER \"%s\";" % (dbname, dbuser))
6777
print("GRANT ALL PRIVILEGES ON DATABASE %s TO %s;" % (dbname, dbuser))
68-
6978
elif engine == 'sqlite3':
7079
sys.stderr.write("-- manage.py syncdb will automatically create a sqlite3 database file.\n")
71-
7280
else:
7381
# CREATE DATABASE is not SQL standard, but seems to be supported by most.
7482
sys.stderr.write("-- Don't know how to handle '%s' falling back to SQL.\n" % engine)

django_extensions/management/commands/sqldsn.py

Lines changed: 48 additions & 34 deletions
Original file line numberDiff line numberDiff line change
@@ -6,25 +6,30 @@
66
"""
77

88
import sys
9+
import warnings
10+
911
from django.conf import settings
1012
from django.core.management.base import BaseCommand, CommandError
1113
from django.core.management.color import color_style
14+
from django.db import DEFAULT_DB_ALIAS
15+
from django_extensions.utils.deprecation import RemovedInNextVersionWarning
1216

1317

1418
class Command(BaseCommand):
15-
help = """Prints DSN on stdout, as specified in settings.py
16-
17-
./manage.py sqldsn [--router=<routername>] [--style=pgpass]"""
18-
19+
help = "Prints DSN on stdout, as specified in settings.py"
1920
requires_system_checks = False
2021
can_import_settings = True
2122

2223
def add_arguments(self, parser):
2324
super().add_arguments(parser)
2425
parser.add_argument(
2526
'-R', '--router', action='store',
26-
dest='router', default='default',
27-
help='Use this router-database other then default'
27+
dest='router', default=DEFAULT_DB_ALIAS,
28+
help='Use this router-database other then default (deprecated: use --database instead)'
29+
)
30+
parser.add_argument(
31+
'--database', default=DEFAULT_DB_ALIAS,
32+
help='Nominates a database to run command for. Defaults to the "%s" database.' % DEFAULT_DB_ALIAS,
2833
)
2934
parser.add_argument(
3035
'-s', '--style', action='store',
@@ -44,25 +49,28 @@ def add_arguments(self, parser):
4449

4550
def handle(self, *args, **options):
4651
self.style = color_style()
47-
all_routers = options['all']
52+
all_databases = options['all']
4853

49-
if all_routers:
50-
routers = settings.DATABASES.keys()
54+
if all_databases:
55+
databases = settings.DATABASES.keys()
5156
else:
52-
routers = [options['router']]
57+
databases = [options['database']]
58+
if options['router'] != DEFAULT_DB_ALIAS:
59+
warnings.warn("--router is deprecated. You should use --database.", RemovedInNextVersionWarning, stacklevel=2)
60+
databases = [options['router']]
5361

54-
for i, router in enumerate(routers):
62+
for i, database in enumerate(databases):
5563
if i != 0:
5664
sys.stdout.write("\n")
57-
self.show_dsn(router, options)
65+
self.show_dsn(database, options)
5866

59-
def show_dsn(self, router, options):
60-
dbinfo = settings.DATABASES.get(router)
67+
def show_dsn(self, database, options):
68+
dbinfo = settings.DATABASES.get(database)
6169
quiet = options['quiet']
6270
dsn_style = options['style']
6371

6472
if dbinfo is None:
65-
raise CommandError("Unknown database router %s" % router)
73+
raise CommandError("Unknown database %s" % database)
6674

6775
engine = engine = dbinfo.get('ENGINE')
6876
if 'psqlextra' not in engine:
@@ -86,7 +94,7 @@ def show_dsn(self, router, options):
8694
dsn.append(self.style.ERROR('Unknown database, can''t generate DSN'))
8795

8896
if not quiet:
89-
sys.stdout.write(self.style.SQL_TABLE("DSN for router '%s' with engine '%s':\n" % (router, engine)))
97+
sys.stdout.write(self.style.SQL_TABLE("DSN for database '%s' with engine '%s':\n" % (database, engine)))
9098

9199
for output in dsn:
92100
sys.stdout.write("{}\n".format(output))
@@ -112,32 +120,38 @@ def _postgresql(self, dbhost, dbport, dbname, dbuser, dbpass, dsn_style=None):
112120
if dbport is not None:
113121
dsnstr += " port='{1}'"
114122

115-
dsn.append(dsnstr.format(dbhost,
116-
dbport,
117-
dbname,
118-
dbuser,
119-
dbpass,))
120-
121-
if dsn_style == 'all' or dsn_style == 'kwargs':
123+
dsn.append(dsnstr.format(
124+
dbhost,
125+
dbport,
126+
dbname,
127+
dbuser,
128+
dbpass,
129+
))
130+
131+
if dsn_style in ('all', 'kwargs'):
122132
dsnstr = "host='{0}', database='{2}', user='{3}', password='{4}'"
123133
if dbport is not None:
124134
dsnstr += ", port='{1}'"
125135

126-
dsn.append(dsnstr.format(dbhost,
127-
dbport,
128-
dbname,
129-
dbuser,
130-
dbpass))
131-
132-
if dsn_style == 'all' or dsn_style == 'uri':
136+
dsn.append(dsnstr.format(
137+
dbhost,
138+
dbport,
139+
dbname,
140+
dbuser,
141+
dbpass,
142+
))
143+
144+
if dsn_style in ('all', 'uri'):
133145
dsnstr = "postgresql://{user}:{password}@{host}/{name}"
134146

135147
dsn.append(dsnstr.format(
136148
host="{host}:{port}".format(host=dbhost, port=dbport) if dbport else dbhost, # noqa
137-
name=dbname, user=dbuser, password=dbpass))
149+
name=dbname,
150+
user=dbuser,
151+
password=dbpass,
152+
))
138153

139-
if dsn_style == 'all' or dsn_style == 'pgpass':
140-
dsn.append(':'.join(map(str, filter(
141-
None, [dbhost, dbport, dbname, dbuser, dbpass]))))
154+
if dsn_style in ('all', 'pgpass'):
155+
dsn.append(':'.join(map(str, filter(None, [dbhost, dbport, dbname, dbuser, dbpass]))))
142156

143157
return dsn

0 commit comments

Comments
 (0)