Adds update-item, query, scan. Refactoring
This commit is contained in:
parent
2a13f76441
commit
6459ed5df1
|
@ -124,7 +124,7 @@ def get_item_properties(item, fields, mixed_case_fields=[], formatters={}):
|
|||
else:
|
||||
field_name = field.lower().replace(' ', '_')
|
||||
if not hasattr(item, field_name) and isinstance(item, dict):
|
||||
data = item[field_name]
|
||||
data = item.get(field_name)
|
||||
else:
|
||||
data = getattr(item, field_name, '')
|
||||
if data is None:
|
||||
|
|
|
@ -382,7 +382,10 @@ class CreateCommand(MagnetoDBCommand, show.ShowOne):
|
|||
|
||||
def _get_resource(self, data):
|
||||
for path in self.resource_path:
|
||||
data = data[path]
|
||||
if path in data:
|
||||
data = data[path]
|
||||
else:
|
||||
return {}
|
||||
return data
|
||||
|
||||
def get_data(self, parsed_args):
|
||||
|
@ -393,7 +396,7 @@ class CreateCommand(MagnetoDBCommand, show.ShowOne):
|
|||
self.values_specs)
|
||||
body = self.args2body(parsed_args)
|
||||
obj_creator = getattr(magnetodb_client, self.method)
|
||||
if parsed_args.name:
|
||||
if getattr(parsed_args, 'name', None):
|
||||
data = obj_creator(parsed_args.name, body)
|
||||
else:
|
||||
data = obj_creator(body)
|
||||
|
@ -409,49 +412,39 @@ class CreateCommand(MagnetoDBCommand, show.ShowOne):
|
|||
return zip(*sorted(resource.iteritems()))
|
||||
|
||||
|
||||
class UpdateCommand(MagnetoDBCommand):
|
||||
class UpdateCommand(MagnetoDBCommand, show.ShowOne):
|
||||
"""Update resource's information
|
||||
"""
|
||||
|
||||
api = 'keyvalue'
|
||||
resource = None
|
||||
log = None
|
||||
allow_names = True
|
||||
|
||||
def get_parser(self, prog_name):
|
||||
parser = super(UpdateCommand, self).get_parser(prog_name)
|
||||
parser.add_argument(
|
||||
'id', metavar=self.resource.upper(),
|
||||
help=_('ID or name of %s to update') % self.resource)
|
||||
return parser
|
||||
def _get_resource(self, data):
|
||||
for path in self.resource_path:
|
||||
if path in data:
|
||||
data = data[path]
|
||||
else:
|
||||
return {}
|
||||
return data
|
||||
|
||||
def run(self, parsed_args):
|
||||
self.log.debug('run(%s)', parsed_args)
|
||||
magnetodb_client = self.get_client()
|
||||
_extra_values = parse_args_to_dict(self.values_specs)
|
||||
_merge_args(self, parsed_args, _extra_values,
|
||||
self.values_specs)
|
||||
body = self.args2body(parsed_args)
|
||||
if self.resource in body:
|
||||
body[self.resource].update(_extra_values)
|
||||
obj_updator = getattr(magnetodb_client, self.method)
|
||||
data = obj_updator(parsed_args.name, body)
|
||||
|
||||
resource = self._get_resource(data)
|
||||
self.format_output_data(resource)
|
||||
|
||||
if resource:
|
||||
print((_('Updated %(resource)s: %(name)s') %
|
||||
{'name': parsed_args.name, 'resource': self.resource}),
|
||||
file=self.app.stdout)
|
||||
else:
|
||||
body[self.resource] = _extra_values
|
||||
if not body[self.resource]:
|
||||
raise exceptions.CommandError(
|
||||
_("Must specify new values to update %s") % self.resource)
|
||||
if self.allow_names:
|
||||
_id = find_resourceid_by_name_or_id(
|
||||
magnetodb_client, self.resource, parsed_args.id)
|
||||
else:
|
||||
_id = find_resourceid_by_id(
|
||||
magnetodb_client, self.resource, parsed_args.id)
|
||||
obj_updator = getattr(magnetodb_client,
|
||||
"update_%s" % self.resource)
|
||||
obj_updator(_id, body)
|
||||
print((_('Updated %(resource)s: %(id)s') %
|
||||
{'id': parsed_args.id, 'resource': self.resource}),
|
||||
file=self.app.stdout)
|
||||
return
|
||||
resource = {'': ''}
|
||||
return zip(*sorted(resource.iteritems()))
|
||||
|
||||
|
||||
class DeleteCommand(MagnetoDBCommand):
|
||||
|
@ -474,8 +467,7 @@ class DeleteCommand(MagnetoDBCommand):
|
|||
def run(self, parsed_args):
|
||||
self.log.debug('run(%s)', parsed_args)
|
||||
magnetodb_client = self.get_client()
|
||||
obj_deleter = getattr(magnetodb_client,
|
||||
"delete_%s" % self.resource)
|
||||
obj_deleter = getattr(magnetodb_client, self.method)
|
||||
_name = parsed_args.name
|
||||
obj_deleter(_name)
|
||||
print((_('Deleted %(resource)s: %(name)s')
|
||||
|
@ -516,7 +508,7 @@ class ListCommand(MagnetoDBCommand, lister.Lister):
|
|||
search_opts.update({'verbose': 'True'})
|
||||
return search_opts
|
||||
|
||||
def call_server(self, magnetodb_client, search_opts, parsed_args):
|
||||
def call_server(self, magnetodb_client, search_opts, parsed_args, body):
|
||||
obj_lister = getattr(magnetodb_client, self.method)
|
||||
data = obj_lister(**search_opts)
|
||||
return data
|
||||
|
@ -536,6 +528,7 @@ class ListCommand(MagnetoDBCommand, lister.Lister):
|
|||
self.values_specs)
|
||||
search_opts = self.args2search_opts(parsed_args)
|
||||
search_opts.update(_extra_values)
|
||||
body = self.args2body(parsed_args)
|
||||
if self.pagination_support:
|
||||
page_size = parsed_args.page_size
|
||||
if page_size:
|
||||
|
@ -552,7 +545,8 @@ class ListCommand(MagnetoDBCommand, lister.Lister):
|
|||
dirs = dirs[:len(keys)]
|
||||
if dirs:
|
||||
search_opts.update({'sort_dir': dirs})
|
||||
data = self.call_server(magnetodb_client, search_opts, parsed_args)
|
||||
data = self.call_server(magnetodb_client, search_opts, parsed_args,
|
||||
body)
|
||||
resource = self._get_resource(data)
|
||||
return resource
|
||||
|
||||
|
@ -603,7 +597,10 @@ class ShowCommand(MagnetoDBCommand, show.ShowOne):
|
|||
|
||||
def _get_resource(self, data, parsed_args):
|
||||
for path in self.resource_path:
|
||||
data = data[path]
|
||||
if path in data:
|
||||
data = data[path]
|
||||
else:
|
||||
return {}
|
||||
return data
|
||||
|
||||
def get_data(self, parsed_args):
|
||||
|
|
|
@ -63,15 +63,14 @@ class PutItem(magnetodbv1.CreateCommand):
|
|||
"""Puts item to a given table."""
|
||||
|
||||
resource = 'item'
|
||||
resource_path = ()
|
||||
resource_path = ('attributes',)
|
||||
method = 'put_item'
|
||||
log = logging.getLogger(__name__ + '.PutItem')
|
||||
|
||||
def add_known_arguments(self, parser):
|
||||
help_str = _('Name of table to put item in')
|
||||
parser.add_argument(
|
||||
'name', metavar='TABLE_NAME',
|
||||
help=help_str)
|
||||
help=_('Name of table to put item in'))
|
||||
parser.add_argument(
|
||||
'--request-file', metavar='FILE', dest='request_file_name',
|
||||
help=_('File that contains item description to put in table'))
|
||||
|
@ -90,13 +89,71 @@ class DeleteItem(magnetodbv1.CreateCommand):
|
|||
log = logging.getLogger(__name__ + '.DeleteItem')
|
||||
|
||||
def add_known_arguments(self, parser):
|
||||
help_str = _('Name of table to delete item from')
|
||||
parser.add_argument(
|
||||
'name', metavar='TABLE_NAME',
|
||||
help=help_str)
|
||||
help=_('Name of table to delete item from'))
|
||||
parser.add_argument(
|
||||
'--request-file', metavar='FILE', dest='request_file_name',
|
||||
help=_('File that contains item key description'))
|
||||
|
||||
def args2body(self, parsed_args):
|
||||
return utils.get_file_contents(parsed_args.request_file_name)
|
||||
|
||||
|
||||
class UpdateItem(magnetodbv1.UpdateCommand):
|
||||
"""Updates item in a given table."""
|
||||
|
||||
log = logging.getLogger(__name__ + '.UpdateItem')
|
||||
method = 'update_item'
|
||||
resource_path = ('attributes',)
|
||||
resource = 'item'
|
||||
|
||||
# NOTE(aostapenko) Update item is not supported on server side
|
||||
# remove this method in future
|
||||
def run(self, parsed_args):
|
||||
print("Update item is not supported now on server side")
|
||||
|
||||
def add_known_arguments(self, parser):
|
||||
parser.add_argument(
|
||||
'name', metavar='TABLE_NAME',
|
||||
help=_('Name of table to update item'))
|
||||
parser.add_argument(
|
||||
'--request-file', metavar='FILE', dest='request_file_name',
|
||||
help=_('File that contains item update description'))
|
||||
|
||||
def args2body(self, parsed_args):
|
||||
return utils.get_file_contents(parsed_args.request_file_name)
|
||||
|
||||
|
||||
class Query(magnetodbv1.ListCommand):
|
||||
"""Query table that belong to a given tenant."""
|
||||
|
||||
resource = 'item'
|
||||
resource_path = ('item',)
|
||||
method = 'query'
|
||||
log = logging.getLogger(__name__ + '.Query')
|
||||
|
||||
def add_known_arguments(self, parser):
|
||||
parser.add_argument(
|
||||
'name', metavar='TABLE_NAME',
|
||||
help=_('Name of table to query'))
|
||||
parser.add_argument(
|
||||
'--request-file', metavar='FILE', dest='request_file_name',
|
||||
help=_('File that contains query request description'))
|
||||
|
||||
def args2body(self, parsed_args):
|
||||
return utils.get_file_contents(parsed_args.request_file_name)
|
||||
|
||||
def call_server(self, magnetodb_client, search_opts, parsed_args, body):
|
||||
obj_lister = getattr(magnetodb_client, self.method)
|
||||
data = obj_lister(parsed_args.name, body, **search_opts)
|
||||
return data
|
||||
|
||||
|
||||
class Scan(Query):
|
||||
"""Scan table that belong to a given tenant."""
|
||||
|
||||
resource = 'item'
|
||||
resource_path = ('item',)
|
||||
method = 'scan'
|
||||
log = logging.getLogger(__name__ + '.Scan')
|
||||
|
|
|
@ -146,3 +146,4 @@ class DeleteTable(magnetodbv1.DeleteCommand):
|
|||
|
||||
log = logging.getLogger(__name__ + '.DeleteTable')
|
||||
resource = 'table'
|
||||
method = 'delete_table'
|
||||
|
|
|
@ -79,6 +79,9 @@ COMMAND_V1 = {
|
|||
'item-put': item.PutItem,
|
||||
'item-get': item.GetItem,
|
||||
'item-delete': item.DeleteItem,
|
||||
'item-update': item.UpdateItem,
|
||||
'query': item.Query,
|
||||
'scan': item.Scan,
|
||||
}
|
||||
|
||||
COMMANDS = {'1': COMMAND_V1}
|
||||
|
|
Loading…
Reference in New Issue