Exemple #1
0
class MongoDAO(object):
    def __init__(self, config):
        mongo_uri = config.get('section', 'mongo.uri')
        self.client = MongoClient(mongo_uri)
        db_start_index = mongo_uri.rfind('/') + 1
        db_end_index = mongo_uri.find('?', db_start_index)
        db_str = mongo_uri[
            db_start_index:] if db_end_index == -1 else mongo_uri[
                db_start_index:db_end_index]
        db = self.client[db_str]
        self.collection = db[config.get('section', 'purge.collection')]

        # naive
        utc_now = datetime.utcnow()
        utc_then = utc_now - timedelta(
            days=int(config.get('section', 'purge.days.threshold')))

        purge_query = config.get('section', 'purge.query')
        purge_query = purge_query.replace('purge.days.threshold',
                                          utc_then.strftime(fmt))

        self.query = json.loads(purge_query, object_hook=date_hook)
        logger.info('query = %s', self.query)

    def __enter__(self):
        return self

    def __exit__(self, type, value, traceback):
        self.client.Close()

    def do_delete(self):
        return self.collection.find_one_and_delete(self.query)

    def do_find(self):
        logger.debug("Query : " + json.dumps(self.query, default=date_handler))
        e = self.collection.find(self.query).sort(
            "_pub", pymongo.ASCENDING).limit(1).explain()
        logger.debug("Query Plan : " + json.dumps(e, default=date_handler))