/usr/share/pyshared/cobbler/couch.py is in python-cobbler 2.2.2-0ubuntu33.
This file is owned by root:root, with mode 0o644.
The actual contents of the file can be viewed below.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 | import httplib, simplejson # http://cheeseshop.python.org/pypi/simplejson
# Here only used for prettyprinting
def prettyPrint(s):
"""Prettyprints the json response of an HTTPResponse object"""
# HTTPResponse instance -> Python object -> str
print simplejson.dumps(simplejson.loads(s.read()), sort_keys=True, indent=4)
class Couch:
"""Basic wrapper class for operations on a couchDB"""
def __init__(self, host, port=5984, options=None):
self.host = host
self.port = port
def connect(self):
return httplib.HTTPConnection(self.host, self.port) # No close()
# Database operations
def createDb(self, dbName):
"""Creates a new database on the server"""
r = self.put(''.join(['/',dbName,'/']), "")
return r.read()
def deleteDb(self, dbName):
"""Deletes the database on the server"""
r = self.delete(''.join(['/',dbName,'/']))
return r.read()
def listDb(self):
"""List the databases on the server"""
r = self.get('/_all_dbs')
return r.read()
def infoDb(self, dbName):
"""Returns info about the couchDB"""
r = self.get(''.join(['/', dbName, '/']))
return r.read()
# Document operations
def listDoc(self, dbName):
"""List all documents in a given database"""
r = self.get(''.join(['/', dbName, '/', '_all_docs']))
return r.read()
def openDoc(self, dbName, docId):
"""Open a document in a given database"""
r = self.get(''.join(['/', dbName, '/', docId,]))
return r.read()
def saveDoc(self, dbName, body, docId=None):
"""Save/create a document to/in a given database"""
if docId:
r = self.put(''.join(['/', dbName, '/', docId]), body)
else:
r = self.post(''.join(['/', dbName, '/']), body)
return r.read()
def deleteDoc(self, dbName, docId):
# XXX Crashed if resource is non-existent; not so for DELETE on db. Bug?
# XXX Does not work any more, on has to specify an revid
# Either do html head to get the recten revid or provide it as parameter
r = self.delete(''.join(['/', dbName, '/', docId]))
return r.read()
# Basic http methods
def get(self, uri):
c = self.connect()
headers = {"Accept": "application/json"}
c.request("GET", uri, None, headers)
return c.getresponse()
def post(self, uri, body):
c = self.connect()
headers = {"Content-type": "application/json"}
c.request('POST', uri, body, headers)
return c.getresponse()
def put(self, uri, body):
c = self.connect()
if len(body) > 0:
headers = {"Content-type": "application/json"}
c.request("PUT", uri, body, headers)
else:
c.request("PUT", uri, body)
return c.getresponse()
def delete(self, uri):
c = self.connect()
c.request("DELETE", uri)
return c.getresponse()
|