def test_interface_feature_hot_item_list(self):
     db_featurename_list = ['carttifh_feature_name_香港', 'carttifh_feature_name_喜剧', 'carttifh_feature_name_3', 'carttifh_feature_name_4']
     self.assertEqual(False, cache_models.set_cache_offline_feature_hot_item_list('tifh_feature_name_1', None))
     prefer_res = {}
     for featurename in db_featurename_list:
         #featurename = unicode(featurename, 'utf8')
         prefer_res[featurename] = 'data_db_%s' % featurename
         self.assertEqual(True, db_models_update.set_db_offline_feature_hot_item_list(featurename, DataDef.get_resource_type_from_feature_name(featurename),  prefer_res[featurename]))
     cache_featurename_list = ['carttifh_feature_name_香港', 'carttifh_feature_name_喜剧', 'carttifh_feature_name_5', 'carttifh_feature_name_6']
     for featurename in cache_featurename_list:
         #featurename = unicode(featurename, 'utf8')
         prefer_res[featurename] = 'data_cache_%s' % featurename
         self.assertEqual(True, cache_models.set_cache_offline_feature_hot_item_list(featurename,  prefer_res[featurename]))
     featurename_list = ['carttifh_feature_name_香港', 'carttifh_feature_name_喜剧', 'carttifh_feature_name_3', 'carttifh_feature_name_4', 'carttifh_feature_name_5', 'carttifh_feature_name_6', 'nvoltifh_feature_name_7']
     res = model_interface.get_offline_feature_hot_item_list(featurename_list)
     #print 'prefer_res: %s' % prefer_res
     #print 'real_res: %s' % res[1]
     self.assertEqual(False, res[0])
     self.assertEqual(prefer_res, res[1])
     res = cache_models.get_cache_offline_feature_hot_item_list(featurename_list)
     #print 'prefer_res: %s' % prefer_res
     #print 'real_res: %s' % res[1]
     self.assertEqual(True, res[0])
     #for k,v in res[1].items():
     #    if v == DataDef.CACHE_DEFAULT_NONE_VALUE:
     #        res[1].pop(k)
     self.assertEqual(prefer_res, res[1])
    def test_update_feature_hot_item_list(self):
        features = ['novl1', 'novl2', 'novl3']
        prefer_res = {}
        for feature in features:
            prefer_res[feature] = 'hot_item_list_%s_cache' % feature
            self.assertEqual( True, cache_models.set_cache_offline_feature_hot_item_list(feature, prefer_res[feature]))
        res = cache_models.get_cache_offline_feature_hot_item_list(features)
        self.assertEqual(True, res[0])
        self.assertEqual(prefer_res, res[1])

        db_features = ['novl3', 'novl4', 'novl5']
        update_prefer_res = {}
        for feature in db_features:
            update_prefer_res[feature] = 'hot_item_list_%s_db' % feature
            self.assertEqual( True, db_models_update.set_db_offline_feature_hot_item_list(feature, DataDef.get_resource_type_from_feature_name(feature), update_prefer_res[feature]))
        self.assertEqual(True, cache_update_process.cache_update_offline_feature_hot_item_list(['novl']))
        res = cache_models.get_cache_offline_feature_hot_item_list(db_features)
        self.assertEqual(True, res[0])
        self.assertEqual(update_prefer_res, res[1])
    def test_cache_update_all_together(self):
        uid = 'db_uid'
        resource_type = 'movi'
        item_id = 'db_item_id'
        feature_name = 'db_feature_name'
        self.assertEqual(True, db_models_update.set_db_offline_user_resource_visitinfo(uid, resource_type, 'db_visit_info_data'))
        self.assertEqual(True, db_models_update.set_db_offline_user_feature_list(uid, resource_type, 'db_feature_list_data'))
        self.assertEqual(True, db_models_update.set_db_offline_user_recommend_item_list(uid, resource_type, 'db_user_recommend_item_list'))
        self.assertEqual(True, db_models_update.set_db_offline_item_features(item_id, resource_type, 'db_item_features_data'))
        self.assertEqual(True, db_models_update.set_db_offline_item_recommend_item_list(item_id, resource_type, 'db_item_id_list_data'))
        self.assertEqual(True, db_models_update.set_db_offline_feature_hot_item_list(feature_name, resource_type, 'db_hot_item_list_data'))
        self.assertEqual(True, db_models_update.set_db_offline_global_hot_feature_list(resource_type, 'db_hot_feature_list_data'))
        self.assertEqual(True, db_models_update.set_db_offline_item_id_new_to_old(resource_type, item_id, 'db_old_item_id_data'))

        cache_uid = 'cache_uid'
        cache_item_id = 'cache_item_id'
        cache_feature_name = 'cache_feature_name'
        self.assertEqual(True, cache_models.set_cache_online_user_resource_visitinfo(cache_uid, resource_type, 'on_cache_visit_info_data'))
        self.assertEqual(True, cache_models.set_cache_offline_user_resource_visitinfo(cache_uid, resource_type, 'cache_visit_info_data'))
        self.assertEqual(True, cache_models.set_cache_online_user_feature_list(cache_uid, resource_type, 'on_cache_feature_list_data'))
        self.assertEqual(True, cache_models.set_cache_offline_user_feature_list(cache_uid, resource_type, 'cache_feature_list_data'))
        self.assertEqual(True, cache_models.set_cache_online_user_feature_reason(cache_uid, 'cache_feature_list_data'))
        self.assertEqual(True, cache_models.set_cache_online_user_favor_item_list(cache_uid, resource_type, 'cache_item_id_list_data'))
        self.assertEqual(True, cache_models.set_cache_offline_user_recommend_item_list(cache_uid, resource_type, 'cache_feature_name_item_id_list_data'))
        self.assertEqual(True, cache_models.set_cache_online_user_push_item_list(cache_uid, 'cache_item_id_list_data'))
        self.assertEqual(True, cache_models.set_cache_offline_item_recommend_item_list(cache_item_id, 'cache_item_id_list_data'))
        self.assertEqual(True, cache_models.set_cache_offline_item_features(cache_item_id, 'cache_item_feature_list_data'))
        self.assertEqual(True, cache_models.set_cache_offline_feature_hot_item_list(cache_feature_name, 'cache_item_id_list_data'))
        self.assertEqual(True, cache_models.set_cache_offline_global_hot_feature_list(resource_type, 'cache_item_feature_list_data'))
        self.assertEqual(True, cache_models.set_cache_offline_item_id_new_to_old(cache_item_id, 'cache_old_item_id_data'))
        import cache_update_process
        all_resource_type_list = ['movi', 'news']
        common_resource_type_list = ['movi']
        self.assertEqual(True, cache_update_process.cache_update_all_together(all_resource_type_list, common_resource_type_list))
        self.assertEqual((True, {}), cache_models.get_cache_online_user_resource_visitinfo(cache_uid, [resource_type]))
        self.assertEqual((True, {resource_type:'db_visit_info_data'}), cache_models.get_cache_offline_user_resource_visitinfo(uid, [resource_type]))
        self.assertEqual((True, {}), cache_models.get_cache_online_user_feature_list(cache_uid, [resource_type]))
        self.assertEqual((True, {resource_type:'db_feature_list_data'}), cache_models.get_cache_offline_user_feature_list(uid, [resource_type]))
        self.assertEqual((True, None), cache_models.get_cache_online_user_feature_reason(cache_uid))
        self.assertEqual((True, {}), cache_models.get_cache_online_user_favor_item_list(cache_uid, [resource_type]))
        self.assertEqual((True, 'cache_item_id_list_data'), cache_models.get_cache_online_user_push_item_list(cache_uid))
        self.assertEqual((True,{resource_type:'db_user_recommend_item_list'}), cache_models.get_cache_offline_user_recommend_item_list(uid, [resource_type]))
        self.assertEqual((True,{item_id:'db_item_id_list_data'}), cache_models.get_cache_offline_item_recommend_item_list([item_id]))
        self.assertEqual((True,{item_id:'db_item_features_data'}), cache_models.get_cache_offline_item_features([item_id]))
        self.assertEqual((True,{feature_name:'db_hot_item_list_data'}), cache_models.get_cache_offline_feature_hot_item_list([feature_name]))
        self.assertEqual((True,{resource_type:'db_hot_feature_list_data'}), cache_models.get_cache_offline_global_hot_feature_list([resource_type]))
        self.assertEqual((True,{item_id:'db_old_item_id_data'}), cache_models.get_cache_offline_item_id_new_to_old([item_id]))
def get_offline_feature_hot_item_list(feature_names):
    #logger.debug('get_offline_feature_hot_item_list, feature_names: %s' % feature_names)
    cache_errorCode, cache_res = cache_models.get_cache_offline_feature_hot_item_list(feature_names)
    return_none_keys = get_return_none_keys(cache_res, feature_names)
    db_errorCode = True
    db_res = {}
    if len(return_none_keys) > 0:
        logger.warning('get_offline_feature_hot_item_list, cache has return none key: %s' % return_none_keys)
        db_errorCode, db_res = db_models.get_db_offline_feature_hot_item_list(return_none_keys)
        #logger.debug('db_Code: %s, db_res:%s' % (db_errorCode, db_res))
        for key , data in db_res.items():
            cache_models.set_cache_offline_feature_hot_item_list(key, data)
            logger.debug('get_offline_feature_hot_item_list, set cache feature_names[%s]' % key)
        if True == db_errorCode:
            for key in [x for x in return_none_keys if x not in db_res.keys()]:
                cache_models.set_cache_offline_feature_hot_item_list(key, DataDef.CACHE_DEFAULT_NONE_VALUE, DataDef.CACHE_NONE_EXPIRE_SECONDS)
                logger.debug('get_offline_feature_hot_item_list, set cache item_id[%s] None Value' % key)
    return (cache_errorCode and db_errorCode, merge_db_cache_result(cache_res, db_res))