text: # Copyright 2013 OpenStack LLC.
  # 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 manilaclient import api_versions
  from manilaclient import base
  from manilaclient.openstack.common.apiclient import base as common_base
  
  RESOURCE_PATH_LEGACY = '/os-quota-class-sets'
  RESOURCE_PATH = '/quota-class-sets'
  
  
  class QuotaClassSet(common_base.Resource):
  
      @property
      def id(self):
          """Needed by base.Resource to self-refresh and be indexed."""
          return self.class_name
  
      def update(self, *args, **kwargs):
          self.manager.update(self.class_name, *args, **kwargs)
  
  
  class QuotaClassSetManager(base.ManagerWithFind):
      resource_class = QuotaClassSet
  
      @api_versions.wraps("1.0", "2.6")
      def get(self, class_name):
          return self._get(
              "%(resource_path)s/%(class_name)s" % {
                  "resource_path": RESOURCE_PATH_LEGACY,
                  "class_name": class_name},
              "quota_class_set")
  
      @api_versions.wraps("2.7")  # noqa
      def get(self, class_name):
          return self._get(
              "%(resource_path)s/%(class_name)s" % {
                  "resource_path": RESOURCE_PATH, "class_name": class_name},
              "quota_class_set")
  
      def _do_update(self, class_name, shares=None, gigabytes=None,
                     snapshots=None, snapshot_gigabytes=None,
                     share_networks=None, resource_path=RESOURCE_PATH):
          body = {
              'quota_class_set': {
                  'class_name': class_name,
                  'shares': shares,
                  'snapshots': snapshots,
                  'gigabytes': gigabytes,
                  'snapshot_gigabytes': snapshot_gigabytes,
                  'share_networks': share_networks,
              }
          }
  
          for key in list(body['quota_class_set']):
              if body['quota_class_set'][key] is None:
                  body['quota_class_set'].pop(key)
  
          self._update(
              "%(resource_path)s/%(class_name)s" % {
                  "resource_path": resource_path,
                  "class_name": class_name},
              body)
  
      @api_versions.wraps("1.0", "2.6")
      def update(self, class_name, shares=None, gigabytes=None,
                 snapshots=None, snapshot_gigabytes=None, share_networks=None):
          return self._do_update(
              class_name, shares, gigabytes, snapshots, snapshot_gigabytes,
              share_networks, RESOURCE_PATH_LEGACY)
  
      @api_versions.wraps("2.7")  # noqa
      def update(self, class_name, shares=None, gigabytes=None,
                 snapshots=None, snapshot_gigabytes=None, share_networks=None):
          return self._do_update(
              class_name, shares, gigabytes, snapshots, snapshot_gigabytes,
              share_networks, RESOURCE_PATH)
  