Skip to content

Instantly share code, notes, and snippets.

@dev-zetta
Created October 23, 2019 04:19
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save dev-zetta/546a672247763da200e4cb133cbdb678 to your computer and use it in GitHub Desktop.
Save dev-zetta/546a672247763da200e4cb133cbdb678 to your computer and use it in GitHub Desktop.
CouchDB connector
import urllib
import hashlib
import httplib
import simplejson
import sys
db = {'host':'localhost',
'port':5984,
'db':'backups'}
class cdb (object):
def __init__ (self, db = db):
self.host = db ['host']
self.port = db ['port']
self.db = db['db']
self.db = self.db.strip ()
if self.db [0] != "/":
self.db = "/"+self.db
if self.db [-1] != "/":
self.db = self.db + "/"
self.dbex = self.db[1:-1] in self.all_dbs ()
def req (self, reqtype, req, body=None):
headers = {"Accept": "application/json"}
conn = httplib.HTTPConnection (self.host, self.port)
conn.request (reqtype, req, body, headers)
response = conn.getresponse ()
response_read = response.read ()
return simplejson.loads (response_read)
def get_req (self, request, body = None):
return self.req ('GET', request, body)
def put_req (self, request, body = None):
return self.req ('PUT', request, body)
def del_req (self,request, body = None):
return self.req ('DELETE', request, body)
def all_dbs (self):
return self.get_req ("/_all_dbs")
def all_docs (self):
return self.get_req (self.db + "_all_docs")
def createdb (self):
if self.db in self.all_dbs ():
print "ERROR: database already exists."
return
return self.put_req (self.db)
def putdoc (self, docid, doc):
return self.put_req (self.db + docid, str (doc))
def putdoc_noid (self, doc):
uuid = self.get_req ("/_uuids")
print uuid
print uuid.keys ()
return self.putdoc (uuid ["uuids"][0], str (doc))
def getdoc (self, docid):
return self.get_req (self.db + docid)
def deldoc (self, docid):
doc = self.getdoc (docid)
revids = '/?rev='+ str (doc['_rev'])
url = self.db + docid + revids
return self.del_req (url)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment