Skip to content

Commit

Permalink
refactor --debug option parsing
Browse files Browse the repository at this point in the history
  • Loading branch information
mogproject committed Jan 13, 2015
1 parent 61977af commit 31f1581
Show file tree
Hide file tree
Showing 3 changed files with 24 additions and 23 deletions.
5 changes: 3 additions & 2 deletions src/artifactcli/argparser.py
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
from optparse import OptionParser
import logging

VERSION = 'artifact-cli %s' % __import__('artifactcli').__version__
USAGE = """
Expand Down Expand Up @@ -56,7 +57,7 @@ def get_parser():
help='Amazon S3 region name (default: us-east-1)'
)
parser.add_option(
'--debug', action='store_true', dest='debug', default=False,
help='enables debug level logging'
'--debug', action='store_const', dest='log_level', const=logging.DEBUG, default=logging.INFO,
help='set log level to DEBUG'
)
return parser
20 changes: 10 additions & 10 deletions src/artifactcli/settings.py
Original file line number Diff line number Diff line change
Expand Up @@ -14,14 +14,13 @@ class Settings(CaseClass):
"""
parser = argparser.get_parser()

def __init__(self, log_level=logging.INFO, operation=None, options=None, repo=None):
super(Settings, self).__init__(['log_level', 'operation', 'options', 'repo'])
def __init__(self, operation=None, options=None, repo=None):
super(Settings, self).__init__(['operation', 'options', 'repo'])

# fallback operation
operation = operation or HelpOperation(self.parser)

# set parameters
self.log_level = logging.DEBUG if options and options['debug'] else log_level
self.operation = operation
self.repo = repo
self.options = options
Expand All @@ -30,7 +29,8 @@ def configure_logging(self):
"""
Setup logging settings
"""
logging.basicConfig(level=self.log_level, format='[%(levelname)s] %(message)s')
level = self.options.log_level if self.options else logging.INFO
logging.basicConfig(level=level, format='[%(levelname)s] %(message)s')
return self

def parse_args(self, argv):
Expand All @@ -47,19 +47,19 @@ def parse_args(self, argv):
except AssertionError:
return self

return Settings(self.log_level, operation, opt_dict, self.repo)
return Settings(operation, opt_dict, self.repo)

def load_config(self):
"""
Load configuration file and set repo
"""
if self.options is None:
return Settings(self.log_level)
return Settings()

group_id = self.operation.group_id
if not group_id:
logging.error('Failed to load config: group id is not set in operation')
return Settings(self.log_level)
return Settings()

access_key = self.options['access_key']
secret_key = self.options['secret_key']
Expand All @@ -80,7 +80,7 @@ def load_config(self):
region = r if region is None else region
except IOError:
logging.error('Failed to open configuration file: %s' % config)
return Settings(self.log_level)
return Settings()

for x, arg, opt in [
(access_key, 'access_key', '--access'),
Expand All @@ -90,12 +90,12 @@ def load_config(self):
if x is None:
logging.error('Oops! "%s" setting is missing.' % arg)
logging.error('Use "%s" option or write configuration file: %s' % (opt, config))
return Settings(self.log_level)
return Settings()

# set repository driver
driver = S3Driver(access_key, secret_key, bucket, group_id, region)
repo = Repository(driver, group_id)
return Settings(self.log_level, self.operation, self.options, repo)
return Settings(self.operation, self.options, repo)

@classmethod
def _read_aws_config(cls, fp, group_id):
Expand Down
22 changes: 11 additions & 11 deletions tests/artifactcli/test_settings.py
Original file line number Diff line number Diff line change
Expand Up @@ -11,10 +11,12 @@

class TestSettings(unittest.TestCase):
def setUp(self):
self.default_opts = {'access_key': None, 'force': False, 'bucket': None, 'region': None, 'debug': False,
'print_only': False, 'secret_key': None, 'config': '~/.artifact-cli', 'output': None}
self.full_opts = {'access_key': 'ACCESS_KEY', 'force': True, 'bucket': 'BUCKET', 'region': None, 'debug': True,
'print_only': True, 'secret_key': 'SECRET_KEY', 'config': 'xxx', 'output': None}
self.default_opts = {'access_key': None, 'force': False, 'bucket': None, 'region': None,
'log_level': logging.INFO, 'print_only': False, 'secret_key': None,
'config': '~/.artifact-cli', 'output': None}
self.full_opts = {'access_key': 'ACCESS_KEY', 'force': True, 'bucket': 'BUCKET', 'region': None,
'log_level': logging.DEBUG, 'print_only': True, 'secret_key': 'SECRET_KEY',
'config': 'xxx', 'output': None}

def _updated_opts(self, updates):
d = copy(self.default_opts)
Expand All @@ -23,7 +25,6 @@ def _updated_opts(self, updates):

def test_parse_args_empty(self):
self.assertEqual(Settings().parse_args(['art']), Settings())
self.assertEqual(Settings().log_level, logging.INFO)

def test_parse_args_list(self):
s = Settings().parse_args(['art', 'list', 'gid'])
Expand All @@ -34,7 +35,6 @@ def test_parse_args_list_full(self):
['art', 'list', 'gid', '--config', 'xxx', '--check', '--force', '--access', 'ACCESS_KEY', '--secret',
'SECRET_KEY', '--bucket', 'BUCKET', '--debug'])
self.assertEqual(s, Settings(operation=ListOperation('gid', []), options=self.full_opts))
self.assertEqual(s.log_level, logging.DEBUG)

def test_parse_args_list_error(self):
self.assertEqual(Settings().parse_args(['art', 'list']), Settings())
Expand Down Expand Up @@ -102,23 +102,23 @@ def test_parse_args_info_full(self):
o = self._updated_opts({
'access_key': 'ACCESS_KEY', 'force': True, 'bucket': 'BUCKET',
'print_only': True, 'secret_key': 'SECRET_KEY', 'config': 'xxx',
'output': 'text', 'debug': True})
'output': 'text', 'log_level': logging.DEBUG})
self.assertEqual(s, Settings(operation=InfoOperation('gid', ['xxx', '123'], 'text'), options=o))

s = Settings().parse_args(
['art', 'info', 'gid', 'xxx', 'latest', '--config', 'xxx', '--check', '--force', '--access',
'ACCESS_KEY', '--secret', 'SECRET_KEY', '--bucket', 'BUCKET', '--debug'])
o = self._updated_opts({
'access_key': 'ACCESS_KEY', 'force': True, 'bucket': 'BUCKET',
'print_only': True, 'secret_key': 'SECRET_KEY', 'config': 'xxx', 'output': None, 'debug': True})
'access_key': 'ACCESS_KEY', 'force': True, 'bucket': 'BUCKET', 'print_only': True,
'secret_key': 'SECRET_KEY', 'config': 'xxx', 'output': None, 'log_level': logging.DEBUG})
self.assertEqual(s, Settings(operation=InfoOperation('gid', ['xxx', 'latest'], None), options=o))

s = Settings().parse_args(
['art', 'info', 'gid', 'xxx', 'latest', '--config', 'xxx', '--check', '--force', '--access',
'ACCESS_KEY', '--secret', 'SECRET_KEY', '--bucket', 'BUCKET', '--output', 'json', '--debug'])
o = self._updated_opts({
'access_key': 'ACCESS_KEY', 'force': True, 'bucket': 'BUCKET',
'print_only': True, 'secret_key': 'SECRET_KEY', 'config': 'xxx', 'output': 'json', 'debug': True})
'access_key': 'ACCESS_KEY', 'force': True, 'bucket': 'BUCKET', 'print_only': True,
'secret_key': 'SECRET_KEY', 'config': 'xxx', 'output': 'json', 'log_level': logging.DEBUG})
self.assertEqual(s, Settings(operation=InfoOperation('gid', ['xxx', 'latest'], 'json'), options=o))

def test_parse_args_info_error(self):
Expand Down

0 comments on commit 31f1581

Please sign in to comment.