added a flask venv
This commit is contained in:
@@ -0,0 +1,84 @@
|
||||
# coding: utf-8
|
||||
#
|
||||
# Copyright © 2010—2014 Andrey Mikhaylenko and contributors
|
||||
#
|
||||
# This file is part of Argh.
|
||||
#
|
||||
# Argh is free software under terms of the GNU Lesser
|
||||
# General Public License version 3 (LGPLv3) as published by the Free
|
||||
# Software Foundation. See the file README.rst for copying conditions.
|
||||
#
|
||||
"""
|
||||
Interaction
|
||||
~~~~~~~~~~~
|
||||
"""
|
||||
from argh.compat import text_type
|
||||
from argh.io import safe_input
|
||||
|
||||
|
||||
__all__ = ['confirm', 'safe_input']
|
||||
|
||||
|
||||
def confirm(action, default=None, skip=False):
|
||||
"""
|
||||
A shortcut for typical confirmation prompt.
|
||||
|
||||
:param action:
|
||||
|
||||
a string describing the action, e.g. "Apply changes". A question mark
|
||||
will be appended.
|
||||
|
||||
:param default:
|
||||
|
||||
`bool` or `None`. Determines what happens when user hits :kbd:`Enter`
|
||||
without typing in a choice. If `True`, default choice is "yes". If
|
||||
`False`, it is "no". If `None` the prompt keeps reappearing until user
|
||||
types in a choice (not necessarily acceptable) or until the number of
|
||||
iteration reaches the limit. Default is `None`.
|
||||
|
||||
:param skip:
|
||||
|
||||
`bool`; if `True`, no interactive prompt is used and default choice is
|
||||
returned (useful for batch mode). Default is `False`.
|
||||
|
||||
Usage::
|
||||
|
||||
def delete(key, silent=False):
|
||||
item = db.get(Item, args.key)
|
||||
if confirm('Delete '+item.title, default=True, skip=silent):
|
||||
item.delete()
|
||||
print('Item deleted.')
|
||||
else:
|
||||
print('Operation cancelled.')
|
||||
|
||||
Returns `None` on `KeyboardInterrupt` event.
|
||||
"""
|
||||
MAX_ITERATIONS = 3
|
||||
if skip:
|
||||
return default
|
||||
else:
|
||||
defaults = {
|
||||
None: ('y','n'),
|
||||
True: ('Y','n'),
|
||||
False: ('y','N'),
|
||||
}
|
||||
y, n = defaults[default]
|
||||
prompt = text_type('{action}? ({y}/{n})').format(**locals())
|
||||
choice = None
|
||||
try:
|
||||
if default is None:
|
||||
cnt = 1
|
||||
while not choice and cnt < MAX_ITERATIONS:
|
||||
choice = safe_input(prompt)
|
||||
cnt += 1
|
||||
else:
|
||||
choice = safe_input(prompt)
|
||||
except KeyboardInterrupt:
|
||||
return None
|
||||
if choice in ('yes', 'y', 'Y'):
|
||||
return True
|
||||
if choice in ('no', 'n', 'N'):
|
||||
return False
|
||||
if default is not None:
|
||||
return default
|
||||
return None
|
||||
Reference in New Issue
Block a user