def __init__(self, *args, **kwargs): emitter_format = kwargs.pop("emitter_format", "json") super(RESTHandler, self).__init__(*args, **kwargs) self.emitter_class, ct = Emitter.get(emitter_format) self.set_header("Content-Type", ct)
def default(self, o): if isinstance(o, ObjectId): return str(o) else: return super(MongoJSONEncoder, self).default(o) class MongoJSONEmitter(Emitter): def render(self, request): return simplejson.dumps(self.data, cls=MongoJSONEncoder, ensure_ascii=False, indent=4) Emitter.register('json', MongoJSONEmitter, 'application/json; charset=utf-8') class MongoCollectionHandler(RESTHandler): def retrieve(self, db, collection): db = self.application.connection[db] #TODO: Encontrar una forma mejor de hacer esto Esto es re peligros estoy evaluando lo que viene en la query criteria = db.eval(self.get_argument('criteria', '{}')) fields = db.eval(self.get_argument('fields', 'null')) skip = int(db.eval(self.get_argument('skip', '0'))) limit = int(db.eval(self.get_argument('limit', '0'))) col = db[collection] data = list(col.find(criteria, fields, skip, limit)) self.write(data)
from pymongo.objectid import ObjectId, InvalidId import simplejson class MongoJSONEncoder(DateTimeAwareJSONEncoder): def default(self, o): if isinstance(o, ObjectId): return str(o) else: return super(MongoJSONEncoder, self).default(o) class MongoJSONEmitter(Emitter): def render(self, request): return simplejson.dumps(self.data, cls=MongoJSONEncoder, ensure_ascii=False, indent=4) Emitter.register('json', MongoJSONEmitter, 'application/json; charset=utf-8') class MongoCollectionHandler(RESTHandler): def retrieve(self, db, collection): db = self.application.connection[db] #TODO: Encontrar una forma mejor de hacer esto Esto es re peligros estoy evaluando lo que viene en la query criteria = db.eval(self.get_argument('criteria', '{}')) fields = db.eval(self.get_argument('fields', 'null')) skip = int(db.eval(self.get_argument('skip', '0'))) limit = int(db.eval(self.get_argument('limit', '0'))) col = db[collection] data = list(col.find(criteria, fields, skip, limit)) self.write(data)
def __init__(self, *args, **kwargs): emitter_format = kwargs.pop('emitter_format', 'json') super(RESTHandler, self).__init__(*args, **kwargs) self.emitter_class, ct = Emitter.get(emitter_format) self.set_header('Content-Type', ct)