Merge "Re-factor neutron client for 'show' methods"
diff --git a/tempest/services/network/json/network_client.py b/tempest/services/network/json/network_client.py
index 2ae9a06..29617de 100644
--- a/tempest/services/network/json/network_client.py
+++ b/tempest/services/network/json/network_client.py
@@ -95,21 +95,17 @@
 
         return _delete
 
-    def _shower(self, resource_name):
-        def _show(resource_id, **fields):
-            # fields is a dict which key is 'fields' and value is a
-            # list of field's name. An example:
-            # {'fields': ['id', 'name']}
-            plural = self.pluralize(resource_name)
-            uri = '%s/%s' % (self.get_uri(plural), resource_id)
-            if fields:
-                uri += '?' + urllib.urlencode(fields, doseq=1)
-            resp, body = self.get(uri)
-            body = self.deserialize_single(body)
-            self.expected_success(200, resp.status)
-            return service_client.ResponseBody(resp, body)
-
-        return _show
+    def _show_resource(self, uri, **fields):
+        # fields is a dict which key is 'fields' and value is a
+        # list of field's name. An example:
+        # {'fields': ['id', 'name']}
+        req_uri = self.uri_prefix + uri
+        if fields:
+            req_uri += '?' + urllib.urlencode(fields, doseq=1)
+        resp, body = self.get(req_uri)
+        body = self.deserialize_single(body)
+        self.expected_success(200, resp.status)
+        return service_client.ResponseBody(resp, body)
 
     def _create_resource(self, uri, post_data):
         req_uri = self.uri_prefix + uri
@@ -128,10 +124,9 @@
         return service_client.ResponseBody(resp, body)
 
     def __getattr__(self, name):
-        method_prefixes = ["list_", "delete_", "show_"]
+        method_prefixes = ["list_", "delete_"]
         method_functors = [self._lister,
-                           self._deleter,
-                           self._shower]
+                           self._deleter]
         for index, prefix in enumerate(method_prefixes):
             prefix_len = len(prefix)
             if name[:prefix_len] == prefix:
@@ -148,6 +143,10 @@
         post_data = {'network': kwargs}
         return self._update_resource(uri, post_data)
 
+    def show_network(self, network_id, **fields):
+        uri = '/networks/%s' % network_id
+        return self._show_resource(uri, **fields)
+
     def create_subnet(self, **kwargs):
         uri = '/subnets'
         post_data = {'subnet': kwargs}
@@ -158,6 +157,10 @@
         post_data = {'subnet': kwargs}
         return self._update_resource(uri, post_data)
 
+    def show_subnet(self, subnet_id, **fields):
+        uri = '/subnets/%s' % subnet_id
+        return self._show_resource(uri, **fields)
+
     def create_port(self, **kwargs):
         uri = '/ports'
         post_data = {'port': kwargs}
@@ -168,6 +171,10 @@
         post_data = {'port': kwargs}
         return self._update_resource(uri, post_data)
 
+    def show_port(self, port_id, **fields):
+        uri = '/ports/%s' % port_id
+        return self._show_resource(uri, **fields)
+
     def create_floatingip(self, **kwargs):
         uri = '/floatingips'
         post_data = {'floatingip': kwargs}
@@ -178,16 +185,28 @@
         post_data = {'floatingip': kwargs}
         return self._update_resource(uri, post_data)
 
+    def show_floatingip(self, floatingip_id, **fields):
+        uri = '/floatingips/%s' % floatingip_id
+        return self._show_resource(uri, **fields)
+
     def create_metering_label(self, **kwargs):
         uri = '/metering/metering-labels'
         post_data = {'metering_label': kwargs}
         return self._create_resource(uri, post_data)
 
+    def show_metering_label(self, metering_label_id, **fields):
+        uri = '/metering/metering-labels/%s' % metering_label_id
+        return self._show_resource(uri, **fields)
+
     def create_metering_label_rule(self, **kwargs):
         uri = '/metering/metering-label-rules'
         post_data = {'metering_label_rule': kwargs}
         return self._create_resource(uri, post_data)
 
+    def show_metering_label_rule(self, metering_label_rule_id, **fields):
+        uri = '/metering/metering-label-rules/%s' % metering_label_rule_id
+        return self._show_resource(uri, **fields)
+
     def create_security_group(self, **kwargs):
         uri = '/security-groups'
         post_data = {'security_group': kwargs}
@@ -198,11 +217,23 @@
         post_data = {'security_group': kwargs}
         return self._update_resource(uri, post_data)
 
+    def show_security_group(self, security_group_id, **fields):
+        uri = '/security-groups/%s' % security_group_id
+        return self._show_resource(uri, **fields)
+
     def create_security_group_rule(self, **kwargs):
         uri = '/security-group-rules'
         post_data = {'security_group_rule': kwargs}
         return self._create_resource(uri, post_data)
 
+    def show_security_group_rule(self, security_group_rule_id, **fields):
+        uri = '/security-group-rules/%s' % security_group_rule_id
+        return self._show_resource(uri, **fields)
+
+    def show_extension(self, ext_alias, **fields):
+        uri = '/extensions/%s' % ext_alias
+        return self._show_resource(uri, **fields)
+
     # Common methods that are hard to automate
     def create_bulk_network(self, names):
         network_list = [{'name': name} for name in names]
@@ -323,6 +354,10 @@
         self.expected_success(204, resp.status)
         return service_client.ResponseBody(resp, body)
 
+    def show_quotas(self, tenant_id, **fields):
+        uri = '/quotas/%s' % tenant_id
+        return self._show_resource(uri, **fields)
+
     def create_router(self, name, admin_state_up=True, **kwargs):
         post_body = {'router': kwargs}
         post_body['router']['name'] = name
@@ -372,6 +407,10 @@
         # policy is to restrict enable_snat usage to admins only.
         return self._update_router(router_id, set_enable_snat=False, **kwargs)
 
+    def show_router(self, router_id, **fields):
+        uri = '/routers/%s' % router_id
+        return self._show_resource(uri, **fields)
+
     def update_router_with_snat_gw_info(self, router_id, **kwargs):
         """Update a router passing also the enable_snat attribute.
 
@@ -440,6 +479,10 @@
         body = json.loads(body)
         return service_client.ResponseBody(resp, body)
 
+    def show_agent(self, agent_id, **fields):
+        uri = '/agents/%s' % agent_id
+        return self._show_resource(uri, **fields)
+
     def list_routers_on_l3_agent(self, agent_id):
         uri = '%s/agents/%s/l3-routers' % (self.uri_prefix, agent_id)
         resp, body = self.get(uri)