コード例 #1
0
    def save(self):
        """
      Save attachment.

      @return (mixed)
      @raises (Exception)
      """
        if not self.document:
            raise Exception("Attachment document is not defined!")

        docId = self.document.getId()
        docRev = self.document.getRev()

        if not docId:
            raise Exception("Attachment document _id is required!")

        if not docRev:
            raise Exception("Attachment document _rev is required!")

        if not self.fileName:
            raise Exception("Attachment file name is required!")

        # read file data
        self.readFile(False)

        headers = {}
        headers["If-Match"] = docRev
        headers["Content-Type"] = self.contentType

        database = self.document.getDatabase()
        return database.client.put(
            "%s/%s/%s" % (database.name, util.urlEncode(docId),
                          util.urlEncode(self.fileName)), None, self.data,
            headers).getBodyData()
コード例 #2
0
   def remove(self, batch = False, fullCommit = False):
      """
      Remove attachment.

      @param  (bool) batch
      @param  (bool) fullCommit
      @return (mixed)
      @raises (Exception)
      """
      if not self.document:
         raise Exception("Attachment document is not defined!")

      docId = self.document.getId()
      docRev = self.document.getRev()

      if not docId:
         raise Exception("Attachment document _id is required!")

      if not docRev:
         raise Exception("Attachment document _rev is required!")

      if not self.fileName:
         raise Exception("Attachment file name is required!")

      batch = "?batch=ok" if batch else ""

      headers = {}
      headers["If-Match"] = docRev
      if fullCommit:
         headers["X-Couch-Full-Commit"] = "true"

      database = self.document.getDatabase()
      return database.client.delete("%s/%s/%s%s" %
         (database.name, util.urlEncode(docId), util.urlEncode(self.fileName), batch),
            None, headers).getBodyData()
コード例 #3
0
    def ping(self, *args):
        """
      Ping a document attachment.

      @param  (int) *args Expected status code(s).
      @return (bool)
      @raises (Exception)
      """
        if not self.document:
            raise Exception("Attachment document is not defined!")

        docId = self.document.getId()
        docRev = self.document.getRev()

        if not docId:
            raise Exception("Attachment document _id is required!")

        if not self.fileName:
            raise Exception("Attachment file name is required!")

        query, headers = {}, {}
        if docRev:
            query["rev"] = docRev
        if self.digest:
            headers["If-None-Match"] = '"%s"' % (self.digest)

        database = self.document.getDatabase()
        response = database.client.head(
            "%s/%s/%s" % (database.name, util.urlEncode(docId),
                          util.urlEncode(self.fileName)), query, headers)

        return response.getStatusCode() in (args or [200])
コード例 #4
0
   def ping(self, *args):
      """
      Ping a document attachment.

      @param  (int) *args Expected status code(s).
      @return (bool)
      @raises (Exception)
      """
      if not self.document:
         raise Exception("Attachment document is not defined!")

      docId = self.document.getId()
      docRev = self.document.getRev()

      if not docId:
         raise Exception("Attachment document _id is required!")

      if not self.fileName:
         raise Exception("Attachment file name is required!")

      query, headers = {}, {}
      if docRev:
         query["rev"] = docRev
      if self.digest:
         headers["If-None-Match"] = '"%s"' % (self.digest)

      database = self.document.getDatabase()
      response = database.client.head("%s/%s/%s" %
         (database.name, util.urlEncode(docId), util.urlEncode(self.fileName)), query, headers)

      return response.getStatusCode() in (args or [200])
コード例 #5
0
   def save(self):
      """
      Save attachment.

      @return (mixed)
      @raises (Exception)
      """
      if not self.document:
         raise Exception("Attachment document is not defined!")

      docId = self.document.getId()
      docRev = self.document.getRev()

      if not docId:
         raise Exception("Attachment document _id is required!")

      if not docRev:
         raise Exception("Attachment document _rev is required!")

      if not self.fileName:
         raise Exception("Attachment file name is required!")

      # read file data
      self.readFile(False)

      headers = {}
      headers["If-Match"] = docRev
      headers["Content-Type"] = self.contentType

      database = self.document.getDatabase()
      return database.client.put("%s/%s/%s" %
         (database.name, util.urlEncode(docId), util.urlEncode(self.fileName)),
            None, self.data, headers).getBodyData()
コード例 #6
0
    def find(self):
        """
      Find attachment.

      @return (mixed|dict|None)
      @raises (Exception)
      """
        if not self.document:
            raise Exception("Attachment document is not defined!")

        docId = self.document.getId()
        docRev = self.document.getRev()

        if not docId:
            raise Exception("Attachment document _id is required!")

        if not self.fileName:
            raise Exception("Attachment file name is required!")

        query = {}
        if docRev:
            query["rev"] = docRev

        headers = {}
        headers["Accept"] = "*/*"
        headers["Content-Type"] = None
        if self.digest:
            headers["If-None-Match"] = '"%s"' % (self.digest)

        database = self.document.getDatabase()
        response = database.client.get(
            "%s/%s/%s" % (database.name, util.urlEncode(docId),
                          util.urlEncode(self.fileName)), query, headers)

        # check response status code
        if response.getStatusCode() in [200, 304]:
            ret = {}
            ret["content"] = response.getBody()
            ret["content_type"] = response.getHeader("Content-Type")
            ret["content_length"] = response.getHeader("Content-Length")
            md5 = response.getHeader("Content-MD5")
            if md5:
                ret["digest"] = "md5-" + md5
            else:
                ret["digest"] = "md5-" + (response.getHeader("ETag")
                                          or "").strip('"')

            return ret
コード例 #7
0
ファイル: Document.py プロジェクト: yay-couch/couch-py
   def copyTo(self, dest, destRev, batch = False, fullCommit = False):
      """
      Copy a (this) document to an existing document.

      @param  (str)  dest
      @param  (str)  destRev
      @param  (bool) batch
      @param  (bool) fullCommit
      @return (mixed)
      @raises (Exception)
      """
      if not self.id or not self.rev:
         raise Exception("Both _id & _rev fields could not be empty!")

      if not dest or not destRev:
         raise Exception("Destination & destination revision could not be empty!")

      batch = "?batch=ok" if batch else ""

      headers = {}
      headers["If-Match"] = self.rev
      headers["Destination"] = "%s?rev=%s" % (dest, destRev)
      if fullCommit:
         headers["X-Couch-Full-Commit"] = "true"

      return self.database.client.copy(self.database.name +"/"+
         util.urlEncode(self.id) + batch, None, headers).getBodyData()
コード例 #8
0
ファイル: Document.py プロジェクト: yay-couch/couch-py
    def copyTo(self, dest, destRev, batch=False, fullCommit=False):
        """
      Copy a (this) document to an existing document.

      @param  (str)  dest
      @param  (str)  destRev
      @param  (bool) batch
      @param  (bool) fullCommit
      @return (mixed)
      @raises (Exception)
      """
        if not self.id or not self.rev:
            raise Exception("Both _id & _rev fields could not be empty!")

        if not dest or not destRev:
            raise Exception(
                "Destination & destination revision could not be empty!")

        batch = "?batch=ok" if batch else ""

        headers = {}
        headers["If-Match"] = self.rev
        headers["Destination"] = "%s?rev=%s" % (dest, destRev)
        if fullCommit:
            headers["X-Couch-Full-Commit"] = "true"

        return self.database.client.copy(
            self.database.name + "/" + util.urlEncode(self.id) + batch, None,
            headers).getBodyData()
コード例 #9
0
ファイル: Document.py プロジェクト: yay-couch/couch-py
    def copy(self, dest, batch=False, fullCommit=False):
        """
      Copy a document to a destination.

      @param  (str)  dest
      @param  (bool) batch
      @param  (bool) fullCommit
      @return (mixed)
      @raises (Exception)
      """
        if not self.id:
            raise Exception("_id field could not be empty!")

        if not dest:
            raise Exception("Destination could not be empty!")

        batch = "?batch=ok" if batch else ""

        headers = {}
        headers["Destination"] = dest
        if fullCommit:
            headers["X-Couch-Full-Commit"] = "true"

        return self.database.client.copy(
            self.database.name + "/" + util.urlEncode(self.id) + batch, None,
            headers).getBodyData()
コード例 #10
0
ファイル: Document.py プロジェクト: yay-couch/couch-py
   def copy(self, dest, batch = False, fullCommit = False):
      """
      Copy a document to a destination.

      @param  (str)  dest
      @param  (bool) batch
      @param  (bool) fullCommit
      @return (mixed)
      @raises (Exception)
      """
      if not self.id:
         raise Exception("_id field could not be empty!")

      if not dest:
         raise Exception("Destination could not be empty!")

      batch = "?batch=ok" if batch else ""

      headers = {}
      headers["Destination"] = dest
      if fullCommit:
         headers["X-Couch-Full-Commit"] = "true"

      return self.database.client.copy(self.database.name +"/"+
         util.urlEncode(self.id) + batch, None, headers).getBodyData()
コード例 #11
0
   def find(self):
      """
      Find attachment.

      @return (mixed|dict|None)
      @raises (Exception)
      """
      if not self.document:
         raise Exception("Attachment document is not defined!")

      docId = self.document.getId()
      docRev = self.document.getRev()

      if not docId:
         raise Exception("Attachment document _id is required!")

      if not self.fileName:
         raise Exception("Attachment file name is required!")

      query = {}
      if docRev:
         query["rev"] = docRev

      headers = {}
      headers["Accept"] = "*/*"
      headers["Content-Type"] = None
      if self.digest:
         headers["If-None-Match"] = '"%s"' % (self.digest)

      database = self.document.getDatabase()
      response = database.client.get("%s/%s/%s" %
         (database.name, util.urlEncode(docId), util.urlEncode(self.fileName)), query, headers)

      # check response status code
      if response.getStatusCode() in [200, 304]:
         ret = {}
         ret["content"] = response.getBody()
         ret["content_type"] = response.getHeader("Content-Type")
         ret["content_length"] = response.getHeader("Content-Length")
         md5 = response.getHeader("Content-MD5")
         if md5:
            ret["digest"] = "md5-"+ md5
         else:
            ret["digest"] = "md5-"+ (response.getHeader("ETag") or "").strip('"')

         return ret
コード例 #12
0
    def remove(self, batch=False, fullCommit=False):
        """
      Remove attachment.

      @param  (bool) batch
      @param  (bool) fullCommit
      @return (mixed)
      @raises (Exception)
      """
        if not self.document:
            raise Exception("Attachment document is not defined!")

        docId = self.document.getId()
        docRev = self.document.getRev()

        if not docId:
            raise Exception("Attachment document _id is required!")

        if not docRev:
            raise Exception("Attachment document _rev is required!")

        if not self.fileName:
            raise Exception("Attachment file name is required!")

        batch = "?batch=ok" if batch else ""

        headers = {}
        headers["If-Match"] = docRev
        if fullCommit:
            headers["X-Couch-Full-Commit"] = "true"

        database = self.document.getDatabase()
        return database.client.delete(
            "%s/%s/%s%s" % (database.name, util.urlEncode(docId),
                            util.urlEncode(self.fileName), batch), None,
            headers).getBodyData()
コード例 #13
0
ファイル: Document.py プロジェクト: yay-couch/couch-py
   def find(self, query = {}):
      """
      Find a document.

      @param  (dict) query
      @return (mixed)
      @raises (Exception)
      """
      if not self.id:
         raise Exception("_id field is could not be empty!")

      query = query or {}
      if "rev" not in query and self.rev:
         query["rev"] = self.rev

      return self.database.client.get(self.database.name +"/"+
         util.urlEncode(self.id), query).getBodyData()
コード例 #14
0
ファイル: Document.py プロジェクト: yay-couch/couch-py
    def find(self, query={}):
        """
      Find a document.

      @param  (dict) query
      @return (mixed)
      @raises (Exception)
      """
        if not self.id:
            raise Exception("_id field is could not be empty!")

        query = query or {}
        if "rev" not in query and self.rev:
            query["rev"] = self.rev

        return self.database.client.get(
            self.database.name + "/" + util.urlEncode(self.id),
            query).getBodyData()
コード例 #15
0
ファイル: Document.py プロジェクト: yay-couch/couch-py
   def ping(self, *args):
      """
      Ping document.

      @param  (int) *args Expected status code(s).
      @return (bool)
      @raises (Exception)
      """
      if not self.id:
         raise Exception("_id field is could not be empty!")

      headers = {}
      if self.rev != None:
         headers["If-None-Match"] = '"%s"' % (self.rev)

      response = self.database.client.head(self.database.name +"/"+
         util.urlEncode(self.id), None, headers)

      return response.getStatusCode() in (args or [200])
コード例 #16
0
ファイル: Document.py プロジェクト: yay-couch/couch-py
    def ping(self, *args):
        """
      Ping document.

      @param  (int) *args Expected status code(s).
      @return (bool)
      @raises (Exception)
      """
        if not self.id:
            raise Exception("_id field is could not be empty!")

        headers = {}
        if self.rev != None:
            headers["If-None-Match"] = '"%s"' % (self.rev)

        response = self.database.client.head(
            self.database.name + "/" + util.urlEncode(self.id), None, headers)

        return response.getStatusCode() in (args or [200])
コード例 #17
0
ファイル: Document.py プロジェクト: yay-couch/couch-py
   def remove(self, batch = False, fullCommit = False):
      """
      Remove a document.

      @param  (bool) batch
      @param  (bool) fullCommit
      @return (mixed)
      @raises (Exception)
      """
      if not self.id and not self.rev:
         raise Exception("Both _id & _rev fields could not be empty!")

      batch = "?batch=ok" if batch else ""

      headers = {}
      headers["If-Match"] = self.rev
      if fullCommit:
         headers["X-Couch-Full-Commit"] = "true"

      return self.database.client.delete(self.database.name +"/"+
         util.urlEncode(self.id) + batch, None, headers).getBodyData()
コード例 #18
0
ファイル: Document.py プロジェクト: yay-couch/couch-py
    def save(self, batch=False, fullCommit=False):
        """
      Create or update a document.

      @param  (bool) batch
      @param  (bool) fullCommit
      @return (mixed)
      """
        batch = "?batch=ok" if batch else ""

        headers = {}
        if fullCommit:
            headers["X-Couch-Full-Commit"] = "true"
        if self.rev:
            headers["If-Match"] = self.rev

        data = self.getData()
        if self.attachments:
            data["_attachments"] = {}
            for name, attachment in self.attachments.items():
                data["_attachments"][name] = attachment.toArray()

        # insert action
        if not self.id:
            ret = self.database.client.post(self.database.name + batch, None,
                                            data, headers).getBodyData()
            if ret and ("id" in ret):
                self.setId(ret["id"])
        # update action
        else:
            ret = self.database.client.put(
                self.database.name + "/" + util.urlEncode(self.id) + batch,
                None, data, headers).getBodyData()

        # for next instant call(s)
        if ret and ("rev" in ret):
            self.setRev(ret["rev"])

        return ret
コード例 #19
0
ファイル: Document.py プロジェクト: yay-couch/couch-py
    def remove(self, batch=False, fullCommit=False):
        """
      Remove a document.

      @param  (bool) batch
      @param  (bool) fullCommit
      @return (mixed)
      @raises (Exception)
      """
        if not self.id and not self.rev:
            raise Exception("Both _id & _rev fields could not be empty!")

        batch = "?batch=ok" if batch else ""

        headers = {}
        headers["If-Match"] = self.rev
        if fullCommit:
            headers["X-Couch-Full-Commit"] = "true"

        return self.database.client.delete(
            self.database.name + "/" + util.urlEncode(self.id) + batch, None,
            headers).getBodyData()
コード例 #20
0
ファイル: Document.py プロジェクト: yay-couch/couch-py
   def save(self, batch = False, fullCommit = False):
      """
      Create or update a document.

      @param  (bool) batch
      @param  (bool) fullCommit
      @return (mixed)
      """
      batch = "?batch=ok" if batch else ""

      headers = {}
      if fullCommit:
         headers["X-Couch-Full-Commit"] = "true"
      if self.rev:
         headers["If-Match"] = self.rev

      data = self.getData()
      if self.attachments:
         data["_attachments"] = {}
         for name, attachment in self.attachments.items():
            data["_attachments"][name] = attachment.toArray()

      # insert action
      if not self.id:
         ret = self.database.client.post(self.database.name + batch, None,
            data, headers).getBodyData()
         if ret and ("id" in ret):
            self.setId(ret["id"])
      # update action
      else:
         ret = self.database.client.put(self.database.name +"/"+
            util.urlEncode(self.id) + batch, None, data, headers).getBodyData()

      # for next instant call(s)
      if ret and ("rev" in ret):
         self.setRev(ret["rev"])

      return ret