def put_document(doc, content_type, metadata): # Generate a new sequential ID for the document query = SON([('_id', metadata['bill']['state'])]) update = SON([('$inc', SON([('seq', 1)]))]) seq = db.command(SON([('findandmodify', 'doc_ids'), ('query', query), ('update', update), ('new', True), ('upsert', True)]))['value']['seq'] id = "%sD%08d" % (metadata['bill']['state'].upper(), seq) logging.info("Saving as %s" % id) fs.put(doc, _id=id, content_type=content_type, metadata=metadata) return id
def _insert_with_id(event): query = SON([('_id', event['state'])]) update = SON([('$inc', SON([('seq', 1)]))]) seq = db.command(SON([('findandmodify', 'event_ids'), ('query', query), ('update', update), ('new', True), ('upsert', True)]))['value']['seq'] id = "%sE%08d" % (event['state'].upper(), seq) logging.info("Saving as %s" % id) event['_id'] = id db.events.save(event, safe=True) return id
def read(self, request): counts = {} # db.counts contains the output of a m/r run that generates # per-state counts of bills and bill sub-objects for count in db.counts.find(): val = count['value'] state = count['_id'] if state == 'total': val['legislators'] = db.legislators.count() val['documents'] = db.documents.files.count() else: val['legislators'] = db.legislators.find( {'roles.state': state}).count() val['documents'] = db.documents.files.find( {'metadata.bill.state': state}).count() counts[state] = val stats = db.command('dbStats') stats['counts'] = counts return stats