Skip to content

Commit f1f48c5

Browse files
committed
Merge pull request #63 from Kinto/with-bucket-and-collection
Make argparse `collection` and `bucket` options optional.
2 parents 4e2cf29 + 982c9df commit f1f48c5

File tree

3 files changed

+70
-27
lines changed

3 files changed

+70
-27
lines changed

CHANGELOG.rst

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,15 @@ This document describes changes between each past release.
77
3.2.0 (unreleased)
88
==================
99

10-
- Nothing changed yet.
10+
**Breaking changes**
11+
12+
- The ``cli_utils.set_parser_server_options()`` was renamed
13+
``cli_utils.add_parser_options()`` (#63)
14+
15+
**New features**
16+
17+
- The ``cli_utils`` can now handle option bucket and collection
18+
parameters. (#63)
1119

1220

1321
3.1.0 (2016-02-16)

kinto_client/cli_utils.py

Lines changed: 18 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -21,8 +21,8 @@ def create_client_from_args(args):
2121
"""Return a client from parser args."""
2222
return Client(server_url=args.server,
2323
auth=args.auth,
24-
bucket=args.bucket,
25-
collection=args.collection)
24+
bucket=getattr(args, 'bucket', None),
25+
collection=getattr(args, 'collection', None))
2626

2727

2828
class AuthAction(argparse.Action):
@@ -32,12 +32,14 @@ def __call__(self, parser, namespace, values, option_string=None):
3232
setattr(namespace, self.dest, get_auth(values))
3333

3434

35-
def set_parser_server_options(parser=None,
36-
default_server=None,
37-
default_auth=None,
38-
default_bucket=None,
39-
default_collection=None,
40-
**kwargs):
35+
def add_parser_options(parser=None,
36+
default_server=None,
37+
default_auth=None,
38+
default_bucket=None,
39+
default_collection=None,
40+
include_bucket=True,
41+
include_collection=True,
42+
**kwargs):
4143

4244
if parser is None:
4345
parser = argparse.ArgumentParser(**kwargs)
@@ -50,13 +52,15 @@ def set_parser_server_options(parser=None,
5052
help='BasicAuth token:my-secret',
5153
type=str, default=default_auth, action=AuthAction)
5254

53-
parser.add_argument('-b', '--bucket',
54-
help='Bucket name.',
55-
type=str, default=default_bucket)
55+
if include_bucket:
56+
parser.add_argument('-b', '--bucket',
57+
help='Bucket name.',
58+
type=str, default=default_bucket)
5659

57-
parser.add_argument('-c', '--collection',
58-
help='Collection name.',
59-
type=str, default=default_collection)
60+
if include_collection:
61+
parser.add_argument('-c', '--collection',
62+
help='Collection name.',
63+
type=str, default=default_collection)
6064

6165
# Defaults
6266
parser.add_argument('-v', '--verbose', action='store_const',

kinto_client/tests/test_cli_utils.py

Lines changed: 43 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -23,23 +23,37 @@ def assert_option_strings(self, parser, *option_strings_list):
2323
for action in parser._actions]), \
2424
"%s not found" % option_strings
2525

26-
def test_set_parser_server_options_create_a_parser_if_needed(self):
27-
parser = cli_utils.set_parser_server_options()
26+
def test_add_parser_options_create_a_parser_if_needed(self):
27+
parser = cli_utils.add_parser_options()
2828
self.assert_option_strings(parser, *ALL_PARAMETERS)
2929
assert len(parser._actions) == 8
3030

31-
def test_set_parser_server_options_adds_arguments_on_existing_parser(self):
31+
def test_add_parser_options_adds_arguments_on_existing_parser(self):
3232
parser = argparse.ArgumentParser(prog="importer")
3333
parser.add_argument('-t', '--type', help='File type',
3434
type=str, default='xml')
3535

36-
parser = cli_utils.set_parser_server_options(parser)
36+
parser = cli_utils.add_parser_options(parser)
3737
self.assert_option_strings(parser, ['-t', '--type'],
3838
*ALL_PARAMETERS)
3939
assert len(parser._actions) == 9
4040

41+
def test_add_parser_options_can_ignore_bucket_and_collection(self):
42+
parser = cli_utils.add_parser_options(
43+
include_bucket=False, include_collection=False)
44+
parameters = [
45+
['-h', '--help'],
46+
['-s', '--server'],
47+
['-a', '--auth'],
48+
['-v', '--verbose'],
49+
['-q', '--quiet'],
50+
['-D', '--debug'],
51+
]
52+
self.assert_option_strings(parser, *parameters)
53+
assert len(parser._actions) == 6
54+
4155
def test_can_change_default_values(self):
42-
parser = cli_utils.set_parser_server_options(
56+
parser = cli_utils.add_parser_options(
4357
default_server="https://firefox.settings.services.mozilla.com/",
4458
default_bucket="blocklists",
4559
default_collection="certificates",
@@ -71,7 +85,7 @@ def test_get_auth_can_split_user_and_password(self):
7185
assert password == "password"
7286

7387
def test_get_auth_is_called_by_argparse(self):
74-
parser = cli_utils.set_parser_server_options(
88+
parser = cli_utils.add_parser_options(
7589
default_server="https://firefox.settings.services.mozilla.com/",
7690
default_bucket="blocklists",
7791
default_collection="certificates")
@@ -81,21 +95,38 @@ def test_get_auth_is_called_by_argparse(self):
8195

8296
class ClientFromArgsTest(unittest.TestCase):
8397

84-
def setUp(self):
85-
parser = cli_utils.set_parser_server_options(
98+
@mock.patch('kinto_client.cli_utils.Client')
99+
def test_create_client_from_args_build_a_client(self, mocked_client):
100+
parser = cli_utils.add_parser_options(
86101
default_server="https://firefox.settings.services.mozilla.com/",
87102
default_bucket="blocklists",
88103
default_collection="certificates",
89104
default_auth=('user', 'password')
90105
)
91106

92-
self.args = parser.parse_args([])
107+
args = parser.parse_args([])
93108

94-
@mock.patch('kinto_client.cli_utils.Client')
95-
def test_create_client_from_args_build_a_client(self, mocked_client):
96-
cli_utils.create_client_from_args(self.args)
109+
cli_utils.create_client_from_args(args)
97110
mocked_client.assert_called_with(
98111
server_url='https://firefox.settings.services.mozilla.com/',
99112
auth=('user', 'password'),
100113
bucket='blocklists',
101114
collection='certificates')
115+
116+
@mock.patch('kinto_client.cli_utils.Client')
117+
def test_create_client_from_args_default_bucket_and_collection_to_none(
118+
self, mocked_client):
119+
parser = cli_utils.add_parser_options(
120+
default_server="https://firefox.settings.services.mozilla.com/",
121+
default_auth=('user', 'password'),
122+
include_bucket=False, include_collection=False
123+
)
124+
125+
args = parser.parse_args([])
126+
127+
cli_utils.create_client_from_args(args)
128+
mocked_client.assert_called_with(
129+
server_url='https://firefox.settings.services.mozilla.com/',
130+
auth=('user', 'password'),
131+
bucket=None,
132+
collection=None)

0 commit comments

Comments
 (0)