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()
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()
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])
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])
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()
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
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()
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()
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()
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()
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
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()
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()
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()
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])
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])
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()
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
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()
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