Adding Inventory class.

Inventory will be access point for all sub entities to create an
intuitive API for python developers to use when trying to access
inventory entities (cells, hosts, etc).

Change-Id: Icea217103c735ad53f029dac9cfd405281a1a715
This commit is contained in:
Chris Spencer 2016-08-04 08:51:02 -07:00
parent d4f0c1ccb8
commit 561a6c5b9c
4 changed files with 87 additions and 1 deletions

View File

@ -12,8 +12,10 @@
# License for the specific language governing permissions and limitations
# under the License.
"""Tests for `cratonclient` module."""
import mock
from cratonclient.tests import base
from cratonclient.v1 import client
class TestCratonclient(base.TestCase):
@ -22,3 +24,13 @@ class TestCratonclient(base.TestCase):
def test_something(self):
"""Do nothing."""
pass
@mock.patch('cratonclient.v1.inventory.Inventory')
def test_client_creates_inventory(self, mock_inventory):
"""Verify that Craton client creates Inventory."""
session = mock.Mock()
url = 'https://10.1.1.8080'
region_id = 1
craton = client.Client(session, url)
craton.inventory(region_id)
mock_inventory.assert_called_once_with(session, url + '/v1', region_id)

View File

@ -0,0 +1,31 @@
# Licensed under the Apache License, Version 2.0 (the "License"); you may
# not use this file except in compliance with the License. You may obtain
# a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
# License for the specific language governing permissions and limitations
# under the License.
"""Tests for `cratonclient.v1.inventory` module."""
import mock
from cratonclient.tests import base
from cratonclient.v1 import inventory
class TestInventory(base.TestCase):
"""Test our craton inventory api class."""
@mock.patch('cratonclient.v1.hosts.HostManager')
def test_inventory_creates_host_manager(self, mock_hostmanager):
"""Verify Inventory class creates HostManager."""
session = mock.Mock()
url = 'https://10.1.1.0:8080/'
region_id = 1,
inventory.Inventory(session, url, region_id)
mock_hostmanager.assert_called_once_with(session, url)

View File

@ -13,6 +13,7 @@
# under the License.
"""Top-level client for version 1 of Craton's API."""
from cratonclient.v1 import hosts
from cratonclient.v1 import inventory
from cratonclient.v1 import regions
@ -37,6 +38,13 @@ class Client(object):
self._url += '/v1'
manager_kwargs = {'session': self._session, 'url': url}
# TODO(cmspence):remove self.hosts
self.hosts = hosts.HostManager(**manager_kwargs)
self.regions = regions.RegionManager(**manager_kwargs)
# TODO(cmspence):self.projects, self.users
def inventory(self, region_id):
"""Retrieve inventory for a given region."""
return inventory.Inventory(self._session,
self._url,
region_id)

View File

@ -0,0 +1,35 @@
# -*- coding: utf-8 -*-
# Licensed under the Apache License, Version 2.0 (the "License"); you may
# not use this file except in compliance with the License. You may obtain
# a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
# License for the specific language governing permissions and limitations
# under the License.
"""Top-level client for version 1 of Craton's API."""
from cratonclient.v1 import hosts
class Inventory(object):
"""Representation of the viewable inventory."""
def __init__(self, session, url, region_id):
"""Initialize our client object with our session and url.
:param session:
Initialized Session object.
:type session:
cratonclient.session.Session
:param str url:
The URL that points us to the craton instance. For example,
'https://10.1.1.0:8080/'.
"""
# TODO(cmspence): self.region = self.regions.get(region=region_id)
self.hosts = hosts.HostManager(session, url)
# TODO(cmspence): self.users, self.projects, self.workflows