import basura import mimetypes, os from simplejson import dumps as tojson def request(environ, response): path = environ['PATH_INFO'] # at the root is a simple welcome if path == '/': response('200 OK') return tojson({"basura": "Welcome", "version": basura.VERSION}) # serve static files if os.path.exists(os.path.join('static/', path[1:])): path = os.path.join('static/', path[1:]) if os.path.isdir(path): response('403 Forbidden', [('Content-type','text/plain')]) return "Directory Listing Denied\n" content_type = mimetypes.guess_type(path)[0] or 'text/plain' response('200 OK', [('Content-type',content_type)]) data = open(path, 'rb') buffer = data.read() data.close() return buffer path = environ['PATH_INFO'].split('/',2) # /dbname or /dbname/ if len(path) == 2 or not path[2]: db = basura.dbexists(path[1]) if db != False: response('200 OK') return tojson({"db_name":path[1], "doc_count":len(db.keys())}) db = basura.dbexists(path[1]) # builtin view: _all_docs if db != False and path[2] == '_all_docs': rows = [] for id, doc in db.iteritems(): rows.append({"_id": id, "_rev": doc["_rev"]}) response('200 OK') return tojson({"view":"_all_docs", "rows": rows}) # simple fetch if db != False and db.has_key(path[2]): doc = db[path[2]] stat = basura.doccheck(db, path[2], environ, '200 OK') etag, lmod = basura.docstat(doc) response(stat, [('Etag', '"%s"' % etag), ('Last-Modified', lmod)]) if stat == '200 OK': return tojson(doc) return '' # not found response('404 Not Found') return tojson({"error":{"id":"not_found","reason":"missing"}})