示例#1
0
    def __init__(self, doc, dbs, update_delay=DEFAULT_UPDATE_DELAY, 
            noatomic=False):
        super(CouchappEventHandler, self).__init__()

        self.update_delay = update_delay
        self.doc = doc
        self.dbs = dbs
        self.noatomic = noatomic
        self.last_update = None

        ignorefile = os.path.join(doc.docdir, '.couchappignore')
        if os.path.exists(ignorefile):
            with open(ignorefile, 'r') as f:
                self.ignores = json.loads(remove_comments(f.read()))
        else:
            self.ignores = []
    def __init__(self,
                 doc,
                 dbs,
                 update_delay=DEFAULT_UPDATE_DELAY,
                 noatomic=False):
        super(CouchappEventHandler, self).__init__()

        self.update_delay = update_delay
        self.doc = doc
        self.dbs = dbs
        self.noatomic = noatomic
        self.last_update = None

        ignorefile = os.path.join(doc.docdir, '.couchappignore')
        if os.path.exists(ignorefile):
            with open(ignorefile, 'r') as f:
                self.ignores = json.loads(remove_comments(f.read()))
        else:
            self.ignores = []
示例#3
0
    def request(self, method, path=None, payload=None, headers=None, **params):
        """ Perform HTTP call to the couchdb server and manage 
        JSON conversions, support GET, POST, PUT and DELETE.
        
        Usage example, get infos of a couchdb server on 
        http://127.0.0.1:5984 :


            import couchdbkit.CouchdbResource
            resource = couchdbkit.CouchdbResource()
            infos = resource.request('GET')

        @param method: str, the HTTP action to be performed: 
            'GET', 'HEAD', 'POST', 'PUT', or 'DELETE'
        @param path: str or list, path to add to the uri
        @param data: str or string or any object that could be
            converted to JSON.
        @param headers: dict, optional headers that will
            be added to HTTP request.
        @param raw: boolean, response return a Response object
        @param params: Optional parameterss added to the request. 
            Parameterss are for example the parameters for a view. See 
            `CouchDB View API reference 
            <http://wiki.apache.org/couchdb/HTTP_view_API>`_ for example.
        
        @return: tuple (data, resp), where resp is an `httplib2.Response` 
            object and data a python object (often a dict).
        """
        
        headers = headers or {}
        headers.setdefault('Accept', 'application/json')
        headers.setdefault('User-Agent', USER_AGENT)

        try:
            return Resource.request(self, method, path=path,
                             payload=payload, headers=headers, **params)           
        except ResourceError, e:
            msg = getattr(e, 'msg', '')
            if e.response and msg:
                if e.response.headers.get('content-type') == 'application/json':
                    try:
                        msg = json.loads(str(msg))
                    except ValueError:
                        pass
                    
            if type(msg) is dict:
                error = msg.get('reason')
            else:
                error = msg

            if e.status_int == 404:
                raise ResourceNotFound(error, http_code=404,
                        response=e.response)

            elif e.status_int == 409:
                raise ResourceConflict(error, http_code=409,
                        response=e.response)
            elif e.status_int == 412:
                raise PreconditionFailed(error, http_code=412,
                        response=e.response)
                        
            elif e.status_int in (401, 403):
                raise Unauthorized(e)
            else:
                raise RequestFailed(str(e))
示例#4
0
 def json_body(self):
     try:
         return json.loads(self.body_string())
     except ValueError:
         return self.body
示例#5
0
    def request(self,
                method,
                path=None,
                payload=None,
                headers=None,
                params_dict=None,
                **params):
        """ Perform HTTP call to the couchdb server and manage
        JSON conversions, support GET, POST, PUT and DELETE.

        Usage example, get infos of a couchdb server on
        http://127.0.0.1:5984 :


            import couchdbkit.CouchdbResource
            resource = couchdbkit.CouchdbResource()
            infos = resource.request('GET')

        @param method: str, the HTTP action to be performed:
            'GET', 'HEAD', 'POST', 'PUT', or 'DELETE'
        @param path: str or list, path to add to the uri
        @param data: str or string or any object that could be
            converted to JSON.
        @param headers: dict, optional headers that will
            be added to HTTP request.
        @param raw: boolean, response return a Response object
        @param params: Optional parameterss added to the request.
            Parameterss are for example the parameters for a view. See
            `CouchDB View API reference
            <http://wiki.apache.org/couchdb/HTTP_view_API>`_ for example.

        @return: tuple (data, resp), where resp is an `httplib2.Response`
            object and data a python object (often a dict).
        """

        headers = headers or {}
        headers.setdefault('Accept', 'application/json')
        headers.setdefault('User-Agent', USER_AGENT)

        logger.debug("Resource uri: %s" % self.initial['uri'])
        logger.debug("Request: %s %s" % (method, path))
        logger.debug("Headers: %s" % str(headers))
        logger.debug("Params: %s" % str(params))

        try:
            return Resource.request(self,
                                    method,
                                    path=path,
                                    payload=payload,
                                    headers=headers,
                                    **params)
        except ResourceError, e:
            msg = getattr(e, 'msg', '')
            if e.response and msg:
                if e.response.headers.get('content-type') == \
                        'application/json':
                    try:
                        msg = json.loads(str(msg))
                    except ValueError:
                        pass

            if type(msg) is dict:
                error = msg.get('reason')
            else:
                error = msg

            if e.status_int == 404:
                raise ResourceNotFound(error,
                                       http_code=404,
                                       response=e.response)

            elif e.status_int == 409:
                raise ResourceConflict(error,
                                       http_code=409,
                                       response=e.response)
            elif e.status_int == 412:
                raise PreconditionFailed(error,
                                         http_code=412,
                                         response=e.response)

            elif e.status_int in (401, 403):
                raise Unauthorized(e)
            else:
                raise RequestFailed(str(e))
示例#6
0
 def json_body(self):
     try:
         return json.loads(self.body_string())
     except ValueError:
         return self.body