Make end date optional for list-entities command

Change-Id: I2e1969d4922f4922ece2a7a63aa38949848e52dc
This commit is contained in:
Frédéric Guillot 2017-06-02 11:31:37 -04:00
parent 24c953399d
commit 8344d16ec9
6 changed files with 42 additions and 7 deletions

View File

@ -25,12 +25,12 @@ class ListEntityCommand(Lister):
parser = super().get_parser(prog_name)
parser.add_argument('tenant_id', help='Tenant ID')
parser.add_argument('start', help='Start Date')
parser.add_argument('end', help='End Date')
parser.add_argument('--end', help='End Date')
return parser
def take_action(self, parsed_args):
start = parser.parse(parsed_args.start)
end = parser.parse(parsed_args.end)
end = parser.parse(parsed_args.end) if parsed_args.end else None
entities = self.app.get_client().get_tenant_entities(parsed_args.tenant_id, start, end)
return self.columns, self._format_rows(entities)

View File

@ -86,7 +86,7 @@ class AlmanachApp(app.App):
help='Keystone V3 URL (Env: OS_AUTH_URL).')
parser.add_argument('--os-region-name',
default=os.environ.get('`'),
default=os.environ.get('OS_REGION_NAME'),
help='OpenStack region name (Env: OS_REGION_NAME).')
parser.add_argument('--os-password',

View File

@ -47,3 +47,17 @@ class TestListEntityCommand(base.TestCase):
self.client.get_tenant_entities.assert_called_once_with(self.args.tenant_id,
datetime.datetime(2017, 1, 1, 0, 0),
datetime.datetime(2017, 1, 30, 0, 0))
def test_execute_command_without_end_date(self):
self.args.tenant_id = 'some uuid'
self.args.start = '2017-01-01'
self.client.get_tenant_entities.return_value = [{'entity_id': 'some uuid', 'project_id': 'tenant id'}]
expected = (('Entity ID', 'Type', 'Name', 'Start', 'End', 'Properties'),
[('some uuid', None, None, None, None, None)])
self.assertEqual(expected, self.command.take_action(self.args))
self.client.get_tenant_entities.assert_called_once_with(self.args.tenant_id,
datetime.datetime(2017, 1, 1, 0, 0),
None)

View File

@ -76,6 +76,23 @@ class TestClient(base.TestCase):
params=params,
headers=self.headers)
@mock.patch('requests.get')
def test_get_tenant_entities_without_end_date(self, requests):
expected = [mock.Mock()]
requests.return_value = self.response
self.response.json.return_value = expected
self.response.status_code = 200
start = datetime.now()
params = dict(start=start.strftime(Client.DATE_FORMAT_QS))
self.assertEqual(expected, self.client.get_tenant_entities('my_tenant_id', start))
requests.assert_called_once_with('{}{}'.format(self.url, '/v1/project/my_tenant_id/entities'),
params=params,
headers=self.headers)
@mock.patch('requests.get')
def test_get_entity(self, requests):
expected = [mock.Mock()]

View File

@ -253,7 +253,7 @@ class Client(HttpClient):
url = '{}/{}/entity/{}'.format(self.url, self.api_version, entity_id)
return self._get(url)
def get_tenant_entities(self, tenant_id, start, end):
def get_tenant_entities(self, tenant_id, start, end=None):
"""List instances and volumes for a tenant.
:arg str tenant_id: Tenant UUID
@ -263,7 +263,11 @@ class Client(HttpClient):
:rtype: list
"""
url = '{}/{}/project/{}/entities'.format(self.url, self.api_version, tenant_id)
params = {'start': self._format_qs_datetime(start), 'end': self._format_qs_datetime(end)}
params = {'start': self._format_qs_datetime(start)}
if end:
params['end'] = self._format_qs_datetime(end)
return self._get(url, params)
def update_instance_entity(self, instance_id, **kwargs):

View File

@ -48,7 +48,7 @@ Usage: :code:`almanach endpoint`
Get Tenant Entities
-------------------
Usage: :code:`almanach list-entities <tenant_id> <start> <end>`
Usage: :code:`almanach list-entities <tenant_id> <start> --end <end>`
.. code:: bash
@ -66,7 +66,7 @@ Arguments:
* :code:`tenant_id`: Tenant ID (UUID)
* :code:`start`: Start date (ISO8601 format)
* :code:`end`: End date (ISO8601 format)
* :code:`end`: End date (ISO8601 format), optional
Get one Entity
--------------