text: # Copyright 2014 OpenStack Foundation
  # All Rights Reserved.
  #
  #    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.
  
  from oslo_serialization import jsonutils as json
  from six.moves.urllib import parse as urllib
  
  from tempest.common import service_client
  
  
  class AlarmingClient(service_client.ServiceClient):
  
      version = '2'
      uri_prefix = "v2"
  
      def deserialize(self, body):
          return json.loads(body.replace("\n", ""))
  
      def serialize(self, body):
          return json.dumps(body)
  
      def list_alarms(self, query=None):
          uri = '%s/alarms' % self.uri_prefix
          uri_dict = {}
          if query:
              uri_dict = {'q.field': query[0],
                          'q.op': query[1],
                          'q.value': query[2]}
          if uri_dict:
              uri += "?%s" % urllib.urlencode(uri_dict)
          resp, body = self.get(uri)
          self.expected_success(200, resp.status)
          body = self.deserialize(body)
          return service_client.ResponseBodyList(resp, body)
  
      def show_alarm(self, alarm_id):
          uri = '%s/alarms/%s' % (self.uri_prefix, alarm_id)
          resp, body = self.get(uri)
          self.expected_success(200, resp.status)
          body = self.deserialize(body)
          return service_client.ResponseBody(resp, body)
  
      def show_alarm_history(self, alarm_id):
          uri = "%s/alarms/%s/history" % (self.uri_prefix, alarm_id)
          resp, body = self.get(uri)
          self.expected_success(200, resp.status)
          body = self.deserialize(body)
          return service_client.ResponseBodyList(resp, body)
  
      def delete_alarm(self, alarm_id):
          uri = "%s/alarms/%s" % (self.uri_prefix, alarm_id)
          resp, body = self.delete(uri)
          self.expected_success(204, resp.status)
          if body:
              body = self.deserialize(body)
          return service_client.ResponseBody(resp, body)
  
      def create_alarm(self, **kwargs):
          uri = "%s/alarms" % self.uri_prefix
          body = self.serialize(kwargs)
          resp, body = self.post(uri, body)
          self.expected_success(201, resp.status)
          body = self.deserialize(body)
          return service_client.ResponseBody(resp, body)
  
      def update_alarm(self, alarm_id, **kwargs):
          uri = "%s/alarms/%s" % (self.uri_prefix, alarm_id)
          body = self.serialize(kwargs)
          resp, body = self.put(uri, body)
          self.expected_success(200, resp.status)
          body = self.deserialize(body)
          return service_client.ResponseBody(resp, body)
  
      def show_alarm_state(self, alarm_id):
          uri = "%s/alarms/%s/state" % (self.uri_prefix, alarm_id)
          resp, body = self.get(uri)
          self.expected_success(200, resp.status)
          body = self.deserialize(body)
          return service_client.ResponseBodyData(resp, body)
  
      def alarm_set_state(self, alarm_id, state):
          uri = "%s/alarms/%s/state" % (self.uri_prefix, alarm_id)
          body = self.serialize(state)
          resp, body = self.put(uri, body)
          self.expected_success(200, resp.status)
          body = self.deserialize(body)
          return service_client.ResponseBodyData(resp, body)
  