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))