"""
建议1：即使有createtime，也使用_id进行排序或者时间检索。这个函数用来体现如何使用mongo的_id进行检索和删除
建议2（上线）：删除mongoDB-client,不应使用list应使用迭代器
建议3（上线）：json库覆盖默认cls避免序列化异常

"""
import datetime
import time
import traceback

from bson import ObjectId

from base.utils import mongo_helper


def aic_spider_delete():
    try:
        table_name_list = ["aic_news_detail", "aic_news_none"]
        object_id = object_id_from_datetime(span_days=-7)
        for table_name in table_name_list:
            filter = {
                "_id": {"$lt": object_id}
            }
            items = mongo_helper.query_list_new(table=table_name, filter=filter, limit=100000)
            for i, item in enumerate(items):
                try:
                    print(i)
                    print(f"正在删除{item['_id']},{item.get('spider_time')},{item.get('kind')}")
                    mongo_helper.delete_one(table_name, {"_id": item["_id"]})
                    print(f"成功删除{item['_id']}")
                except:
                    print(f"删除失败{item['_id']}")
                    traceback.print_exc()
    except:
        traceback.print_exc()


def object_id_from_datetime(from_datetime=None, span_days=0, span_hours=0, span_minutes=0, span_seconds=0,
                            span_weeks=0):
    '''根据时间手动生成一个objectid，此id不作为存储使用'''
    if not from_datetime:
        from_datetime = datetime.datetime.now()
    from_datetime = from_datetime + datetime.timedelta(days=span_days, hours=span_hours, minutes=span_minutes,
                                                       weeks=span_weeks)
    from_datetime = from_datetime + datetime.timedelta(days=0, hours=-8, minutes=0,
                                                       weeks=0)
    return ObjectId.from_datetime(generation_time=from_datetime)


def run_mondel_timer():
    while True:
        try:
            aic_spider_delete()
            time.sleep(60)
        except:
            traceback.print_exc()


if __name__ == '__main__':
    run_mondel_timer()
