Download raw (3.2 KB)
# -*- coding: utf-8 -*- import bobo import webob import jinja2 import re import pymongo as mongo from bson import objectid template_env = jinja2.Environment(loader=jinja2.PackageLoader('disputio', 'templates')) def get_collection(name = None): if name is None: name = 'disputio' cn = mongo.Connection() db = cn.RCE col = db[name] return col @bobo.query('') def base(bobo_request): return bobo.redirect(bobo_request.url+'/') @bobo.query('/') def root(reponame = None): template = template_env.get_template('index.html') return template.render({'page':'root'}) @bobo.post('/add') def add(bobo_request): doc = {} for k in bobo_request.POST: doc[k] = bobo_request.POST[k] col = get_collection() col.insert(doc) return bobo.redirect('/') def r_to_doc(r, keys): doc = {} for k in keys: if k == '_id': doc[k] = str(r[k]) else: if r.has_key(k): doc[k] = r.get(k) else: doc[k] = '' return doc def document_sort_date(a,b): da = a.get('_id').generation_time db = b.get('_id').generation_time if da < db: return 1 elif db < da: return -1 return 0 @bobo.query('/docs') def docs(): col = get_collection() res_ = col.find() res = [] for r in res_: if len(r.keys()) > 1: res.append(r) res.sort(document_sort_date) ids = [] for r in res[0:24]: d = {} d['id'] = str(r.get('_id')) d['time'] = r.get('_id').generation_time.isoformat() filt_keys = [] for k in r.keys(): if k != '_id': filt_keys.append(k) d['keys'] = filt_keys if r.has_key('title'): d['title'] = r['title'] ids.append(d) template = template_env.get_template('docs.html') return template.render({'ids':ids}) @bobo.query('/value_of') def value_of(bobo_request): key = None if 'key' in bobo_request.GET: key = bobo_request.GET['key'] if 'key' in bobo_request.POST: key = bobo_request.POST['key'] oid = None if 'oid' in bobo_request.GET: oid = bobo_request.GET['oid'] if 'oid' in bobo_request.POST: oid = bobo_request.POST['oid'] if key is None: return 'Cannot find a key in the request' col = get_collection() res = col.find({'_id':objectid.ObjectId(oid)}) if res.count() == 0: return '' doc = res[0] if doc.has_key(key): return unicode(doc.get(key)) return '' @bobo.query('/:key/:value') def bykey(key, value): col = get_collection() pat = {key:value} if key == 'id' or key == '_id': pat = {'_id':objectid.ObjectId(value)} res = col.find(pat) keys_ = {} for r in res: for k in r.iterkeys(): keys_[k] = 1 keys = keys_.keys() resource = [] res.rewind() for r in res: resource.append(r_to_doc(r, keys)) template = template_env.get_template('find.html') return template.render({'key':key, 'value':value, 'keys':keys, 'resource':resource}) @bobo.query('/regex/:key/:value') def byregex(key, value): col = get_collection() pat = {key:{'$regex':value}} res = col.find(pat) keys_ = {} for r in res: for k in r.iterkeys(): keys_[k] = 1 keys = keys_.keys() resource = [] res.rewind() for r in res: resource.append(r_to_doc(r, keys)) print('KEYS: %s'%keys) print('R: %s'%resource) template = template_env.get_template('find.html') return template.render({'key':key, 'value':value, 'keys':keys, 'resource':resource})