Skip to content

Commit 1bd7fe7

Browse files
committed
More incompatible changes:
* command.handle() is now simply command() * short help is '-?'. '-h' is used for --host too often. * Server options '-d' and '-r' are no longer toggles for debugging/reloading. Instead, '-d' forces debugging on and '-D' forces it off, no matter what the default said. * The command.prompt_* compatibility methods have beeen removed. (They were already heavily deprecated.)
1 parent bfc6074 commit 1bd7fe7

File tree

3 files changed

+45
-54
lines changed

3 files changed

+45
-54
lines changed

flask_script/__init__.py

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66
import sys
77
import types
88
import warnings
9+
from gettext import gettext as _
910

1011
import argparse
1112

@@ -33,6 +34,9 @@
3334
except ImportError:
3435
ARGCOMPLETE_IMPORTED = False
3536

37+
def add_help(parser):
38+
parser.add_argument('-?', '--help',
39+
action='help', default=argparse.SUPPRESS, help=_('show this help message and exit'))
3640

3741
class Manager(object):
3842
"""
@@ -163,7 +167,9 @@ def create_parser(self, prog, func_stack=(), parents=None):
163167

164168
parser = argparse.ArgumentParser(prog=prog, usage=self.usage,
165169
description=self.description,
166-
parents=[options_parser])
170+
parents=[options_parser],
171+
add_help=False)
172+
add_help(parser)
167173

168174
self._patch_argparser(parser)
169175

@@ -178,7 +184,8 @@ def create_parser(self, prog, func_stack=(), parents=None):
178184

179185
subparser = subparsers.add_parser(name, usage=usage, help=help,
180186
description=description,
181-
parents=[command_parser], add_help=False)
187+
parents=[command_parser],
188+
add_help=False)
182189

183190
if isinstance(command, Manager):
184191
self._patch_argparser(subparser)

flask_script/commands.py

Lines changed: 28 additions & 44 deletions
Original file line numberDiff line numberDiff line change
@@ -165,7 +165,10 @@ def get_options(self):
165165
def create_parser(self, *args, **kwargs):
166166

167167
func_stack = kwargs.pop('func_stack',())
168-
parser = argparse.ArgumentParser(*args, add_help=self.add_help, **kwargs)
168+
parser = argparse.ArgumentParser(*args, add_help=False, **kwargs)
169+
if self.add_help:
170+
from flask_script import add_help
171+
add_help(parser)
169172

170173
for option in self.get_options():
171174
if isinstance(option, Group):
@@ -190,17 +193,8 @@ def create_parser(self, *args, **kwargs):
190193

191194
def __call__(self, app=None, *args, **kwargs):
192195
"""
193-
Compatibility code so that we can pass outselves to argparse
194-
as `func_handle`, above.
195-
The call to handle() is not replaced, so older code can still
196-
override it.
197-
"""
198-
return self.handle(app, *args, **kwargs)
199-
200-
def handle(self, app, *args, **kwargs):
201-
"""
202-
Handles the command with given app. Default behaviour is to call within
203-
a test request context.
196+
Handles the command with the given app.
197+
Default behaviour is to call ``self.run`` within a test request context.
204198
"""
205199
with app.test_request_context():
206200
return self.run(*args, **kwargs)
@@ -212,34 +206,6 @@ def run(self):
212206
"""
213207
raise NotImplementedError
214208

215-
def prompt(self, name, default=None):
216-
warnings.warn_explicit(
217-
"Command.prompt is deprecated, use prompt() function instead")
218-
219-
prompt(name, default)
220-
221-
def prompt_pass(self, name, default=None):
222-
warnings.warn_explicit(
223-
"Command.prompt_pass is deprecated, use prompt_pass() function "
224-
"instead")
225-
226-
prompt_pass(name, default)
227-
228-
def prompt_bool(self, name, default=False):
229-
warnings.warn_explicit(
230-
"Command.prompt_bool is deprecated, use prompt_bool() function "
231-
"instead")
232-
233-
prompt_bool(name, default)
234-
235-
def prompt_choices(self, name, choices, default=None):
236-
warnings.warn_explicit(
237-
"Command.choices is deprecated, use prompt_choices() function "
238-
"instead")
239-
240-
prompt_choices(name, choices, default)
241-
242-
243209
class Shell(Command):
244210
"""
245211
Runs a Python shell inside Flask application context.
@@ -365,7 +331,7 @@ def __init__(self, host='127.0.0.1', port=5000, use_debugger=True,
365331
def get_options(self):
366332

367333
options = (
368-
Option('-t', '--host',
334+
Option('-h', '--host',
369335
dest='host',
370336
default=self.host),
371337

@@ -391,7 +357,11 @@ def get_options(self):
391357
)
392358

393359
if self.use_debugger:
394-
options += (Option('-d', '--no-debug',
360+
options += (Option('-d', '--debug',
361+
action='store_true',
362+
dest='use_debugger',
363+
help="(no-op for compatibility)"),)
364+
options += (Option('-D', '--no-debug',
395365
action='store_false',
396366
dest='use_debugger',
397367
default=self.use_debugger),)
@@ -401,9 +371,17 @@ def get_options(self):
401371
action='store_true',
402372
dest='use_debugger',
403373
default=self.use_debugger),)
374+
options += (Option('-D', '--no-debug',
375+
action='store_false',
376+
dest='use_debugger',
377+
help="(no-op for compatibility)"),)
404378

405379
if self.use_reloader:
406-
options += (Option('-r', '--no-reload',
380+
options += (Option('-r', '--reload',
381+
action='store_true',
382+
dest='use_reloader',
383+
help="(no-op for compatibility)"),)
384+
options += (Option('-R', '--no-reload',
407385
action='store_false',
408386
dest='use_reloader',
409387
default=self.use_reloader),)
@@ -413,10 +391,14 @@ def get_options(self):
413391
action='store_true',
414392
dest='use_reloader',
415393
default=self.use_reloader),)
394+
options += (Option('-R', '--no-reload',
395+
action='store_false',
396+
dest='use_reloader',
397+
help="(no-op for compatibility)"),)
416398

417399
return options
418400

419-
def handle(self, app, host, port, use_debugger, use_reloader,
401+
def __call__(self, app, host, port, use_debugger, use_reloader,
420402
threaded, processes, passthrough_errors):
421403
# we don't need to run the server in request context
422404
# so just run it directly
@@ -514,3 +496,5 @@ def run(self, url, order):
514496

515497
for row in rows:
516498
print(str_template % row[:column_length])
499+
500+

tests.py

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -315,7 +315,7 @@ def hello(name='fred'):
315315
out, err = capsys.readouterr()
316316
assert 'hello joe' in out
317317

318-
code = run('manage.py hello -h', manager.run)
318+
code = run('manage.py hello -?', manager.run)
319319
out, err = capsys.readouterr()
320320
assert 'Prints your name' in out
321321

@@ -346,7 +346,7 @@ def verify(verified=False):
346346
out, err = capsys.readouterr()
347347
assert 'NO' in out
348348

349-
code = run('manage.py verify -h', manager.run)
349+
code = run('manage.py verify -?', manager.run)
350350
out, err = capsys.readouterr()
351351
assert 'Checks if verified' in out
352352

@@ -387,7 +387,7 @@ def hello(name):
387387
out, err = capsys.readouterr()
388388
assert 'hello joe' in out
389389

390-
code = run('manage.py hello -h', manager.run)
390+
code = run('manage.py hello -?', manager.run)
391391
out, err = capsys.readouterr()
392392
assert 'Your name' in out
393393

@@ -741,7 +741,7 @@ def test_manager_usage_with_submanager(self, capsys):
741741
manager = Manager(self.app)
742742
manager.add_command('sub_manager', sub_manager)
743743

744-
code = run('manage.py -h', manager.run)
744+
code = run('manage.py -?', manager.run)
745745
out, err = capsys.readouterr()
746746
assert code == 0
747747
assert 'Example sub-manager' in out
@@ -756,7 +756,7 @@ def test_submanager_usage_and_help_and_description(self, capsys):
756756
manager = Manager(self.app)
757757
manager.add_command('sub_manager', sub_manager)
758758

759-
code = run('manage.py -h', manager.run)
759+
code = run('manage.py -?', manager.run)
760760
out, err = capsys.readouterr()
761761
assert code == 0
762762
assert 'sub_manager [--foo]' not in out
@@ -771,18 +771,18 @@ def test_submanager_usage_and_help_and_description(self, capsys):
771771
assert 'longer desc for submanager' in out
772772
assert 'simple command' in out
773773

774-
code = run('manage.py sub_manager -h', manager.run)
774+
code = run('manage.py sub_manager -?', manager.run)
775775
out, err = capsys.readouterr()
776776
assert code == 0
777777
assert 'sub_manager [--foo]' in out
778778
assert 'shorter desc for submanager' not in out
779779
assert 'longer desc for submanager' in out
780780
assert 'simple command' in out
781781

782-
code = run('manage.py sub_manager simple -h', manager.run)
782+
code = run('manage.py sub_manager simple -?', manager.run)
783783
out, err = capsys.readouterr()
784784
assert code == 0
785-
assert 'sub_manager [--foo] simple [-h]' in out
785+
assert 'sub_manager [--foo] simple [-?]' in out
786786
assert 'simple command' in out
787787

788788
def test_submanager_has_no_default_commands(self):

0 commit comments

Comments
 (0)