# Path: freezer_api/api/common/resource.py
# class BaseResource(object):
#     def json_body(req):
# 
# Path: freezer_api/common/exceptions.py
# class FreezerAPIException(falcon.HTTPError):
# class BadDataFormat(FreezerAPIException):
# class DocumentExists(FreezerAPIException):
# class StorageEngineError(FreezerAPIException):
# class DocumentNotFound(FreezerAPIException):
# class AccessForbidden(FreezerAPIException):
# class MethodNotImplemented(FreezerAPIException):
#     def __init__(self, message=''):
#     def handle(ex, req, resp, params):
#     def handle(ex, req, resp, params):
#     def handle(ex, req, resp, params):
#     def handle(ex, req, resp, params):
#     def handle(ex, req, resp, params):
#     def handle(ex, req, resp, params):
#     def handle(ex, req, resp, params):
# 
# Path: freezer_api/policy.py
# DEFAULT_POLICY_FILE = 'policy.yaml'
# ENFORCER = None
#         ENFORCER = policy.Enforcer(conf)
# def setup_policy(conf):
# def enforce(rule):
#     def decorator(func):
#         def handler(*args, **kwargs):


import falcon
from freezer_api.api.common import resource
from freezer_api.common import exceptions as freezer_api_exc
from freezer_api import policy
        if not doc:
            raise freezer_api_exc.BadDataFormat(
                message='Missing request body')
        user_id = req.get_header('X-User-ID')
        client_id = self.db.add_client(
            project_id=project_id, user_id=user_id, doc=doc)
        resp.status = falcon.HTTP_201
        resp.body = {'client_id': client_id}


class ClientsResource(resource.BaseResource):
    """
    Handler for endpoint: /v2/{project_id}/clients/{client_id}
    """
    def __init__(self, storage_driver):
        self.db = storage_driver

    @policy.enforce('clients:get')
    def on_get(self, req, resp, project_id, client_id):
        # GET /v1/clients(?limit,offset)
        # search in body
        user_id = req.get_header('X-User-ID') or ''
        obj = self.db.get_client(project_id=project_id,
                                 user_id=user_id,
                                 client_id=client_id)
        if obj:
            resp.body = obj[0]
        else:
            resp.status = falcon.HTTP_404


# Path: freezer_api/api/common/resource.py
# class BaseResource(object):
#     def json_body(req):
# 
# Path: freezer_api/common/exceptions.py
# class FreezerAPIException(falcon.HTTPError):
# class BadDataFormat(FreezerAPIException):
# class DocumentExists(FreezerAPIException):
# class StorageEngineError(FreezerAPIException):
# class DocumentNotFound(FreezerAPIException):
# class AccessForbidden(FreezerAPIException):
# class MethodNotImplemented(FreezerAPIException):
#     def __init__(self, message=''):
#     def handle(ex, req, resp, params):
#     def handle(ex, req, resp, params):
#     def handle(ex, req, resp, params):
#     def handle(ex, req, resp, params):
#     def handle(ex, req, resp, params):
#     def handle(ex, req, resp, params):
#     def handle(ex, req, resp, params):
# 
# Path: freezer_api/policy.py
# DEFAULT_POLICY_FILE = 'policy.yaml'
# ENFORCER = None
#         ENFORCER = policy.Enforcer(conf)
# def setup_policy(conf):
# def enforce(rule):
#     def decorator(func):
#         def handler(*args, **kwargs):


# Path: freezer_api/api/v2/clients.py
import falcon
from freezer_api.api.common import resource
from freezer_api.common import exceptions as freezer_api_exc
from freezer_api import policy

        if not doc:
            raise freezer_api_exc.BadDataFormat(
                message='Missing request body')
        user_id = req.get_header('X-User-ID')
        client_id = self.db.add_client(
            project_id=project_id, user_id=user_id, doc=doc)
        resp.status = falcon.HTTP_201
        resp.body = {'client_id': client_id}


class ClientsResource(resource.BaseResource):
    """
    Handler for endpoint: /v2/{project_id}/clients/{client_id}
    """
    def __init__(self, storage_driver):
        self.db = storage_driver

    @policy.enforce('clients:get')
    def on_get(self, req, resp, project_id, client_id):
        # GET /v1/clients(?limit,offset)
        # search in body
        user_id = req.get_header('X-User-ID') or ''
        obj = self.db.get_client(project_id=project_id,
                                 user_id=user_id,
                                 client_id=client_id)
        if obj:
            resp.body = obj[0]
        else:
            resp.status = falcon.HTTP_404


    @policy.enforce('clients:delete')