# Path: muranoclient/common/base.py
# def getid(obj):
#     def __init__(self, api):
#     def _list(self, url, response_key=None, obj_class=None,
#               data=None, headers=None):
#     def _delete(self, url, headers=None):
#     def _update(self, url, data, response_key=None, return_raw=False,
#                 headers=None, method='PUT', content_type='application/json'):
#     def _create(self, url, data=None, response_key=None,
#                 return_raw=False, headers=None):
#     def _get(self, url, response_key=None, return_raw=False, headers=None):
#     def list(self):
#     def find(self, **kwargs):
#     def findall(self, **kwargs):
#     def __init__(self, manager, info, loaded=False):
#     def _add_details(self, info):
#     def __setstate__(self, d):
#     def __getattr__(self, k):
#     def __repr__(self):
#     def get(self):
#     def __eq__(self, other):
#     def __ne__(self, other):
#     def is_loaded(self):
#     def set_loaded(self, val):
#     def to_dict(self):
# class Manager(object):
# class ManagerWithFind(Manager, metaclass=abc.ABCMeta):
# class Resource(object):


import functools
import posixpath
from muranoclient.common import base
        path = args[2] if len(args) >= 3 else kwargs['path']

        # path formally is just absolute unix path
        if not posixpath.isabs(path):
            raise ValueError("Parameter 'path' should start with '/'")

        args = list(args)
        if len(args) >= 3:
            args[2] = args[2][1:]
        else:
            kwargs['path'] = kwargs['path'][1:]

        return f(*args, **kwargs)

    return f_normalize_path


class Service(base.Resource):
    def __repr__(self):
        return '<Service %s>' % self._info

    def data(self, **kwargs):
        return self.manager.data(self, **kwargs)

    def _add_details(self, info):
        if isinstance(info, dict):
            for k, v in info.items():
                setattr(self, k, v)



# Path: muranoclient/common/base.py
# def getid(obj):
#     def __init__(self, api):
#     def _list(self, url, response_key=None, obj_class=None,
#               data=None, headers=None):
#     def _delete(self, url, headers=None):
#     def _update(self, url, data, response_key=None, return_raw=False,
#                 headers=None, method='PUT', content_type='application/json'):
#     def _create(self, url, data=None, response_key=None,
#                 return_raw=False, headers=None):
#     def _get(self, url, response_key=None, return_raw=False, headers=None):
#     def list(self):
#     def find(self, **kwargs):
#     def findall(self, **kwargs):
#     def __init__(self, manager, info, loaded=False):
#     def _add_details(self, info):
#     def __setstate__(self, d):
#     def __getattr__(self, k):
#     def __repr__(self):
#     def get(self):
#     def __eq__(self, other):
#     def __ne__(self, other):
#     def is_loaded(self):
#     def set_loaded(self, val):
#     def to_dict(self):
# class Manager(object):
# class ManagerWithFind(Manager, metaclass=abc.ABCMeta):
# class Resource(object):


# Path: muranoclient/v1/services.py
import functools
import posixpath
from muranoclient.common import base

        path = args[2] if len(args) >= 3 else kwargs['path']

        # path formally is just absolute unix path
        if not posixpath.isabs(path):
            raise ValueError("Parameter 'path' should start with '/'")

        args = list(args)
        if len(args) >= 3:
            args[2] = args[2][1:]
        else:
            kwargs['path'] = kwargs['path'][1:]

        return f(*args, **kwargs)

    return f_normalize_path


class Service(base.Resource):
    def __repr__(self):
        return '<Service %s>' % self._info

    def data(self, **kwargs):
        return self.manager.data(self, **kwargs)

    def _add_details(self, info):
        if isinstance(info, dict):
            for k, v in info.items():
                setattr(self, k, v)



class ServiceManager(base.Manager):