예제 #1
0
def push_item_id_list_merge(uid, raw_item_id_list):
    errorCode, push_item_list_data = model.get_online_user_push_item_list(uid)
    if False == errorCode:
        logger.error('get online user push item list Failed, uid[%s]' % uid)
        return False
    try:
        push_item_list = ItemIdList()
        if None != push_item_list_data:
            push_item_list.ParseFromString(push_item_list_data)
        else:
            logger.debug('add push item id list for new user. uid: %s' % uid)
        for item_id in raw_item_id_list:
            push_item_list.item_id.append(item_id)
        if len(push_item_list.item_id) > MAX_ITEM_ID_LIST_LENGTH:
            push_item_id_list = getattr(push_item_list, 'item_id')
            item_id_list_len = len(push_item_id_list)
            tmp_push_item_id_list = push_item_id_list[item_id_list_len - MAX_ITEM_ID_LIST_LENGTH:]
            push_item_list.ClearField('item_id')
            for item_id in tmp_push_item_id_list:
                push_item_list.item_id.append(item_id)
        if False == model.set_online_user_push_item_list(uid, push_item_list.SerializeToString()):
            logger.error('set online user push item list error.')
            return False
        return True
    except:
        logger.error('push_item_id_list_merge failed. error: %s' %  str(sys.exc_info()))
        print str(sys.exc_info())
        return False
예제 #2
0
 def fetch(self, logger):
     """update user info, return None"""
     uid = self.uid
     #offline_resource_visit_info
     try:
         errCode, kv_dict = model.get_offline_user_resource_visitinfo(uid, ResourceType.RESOURCE_TYPE_LIST)
         if not is_valid_data(errCode, kv_dict, "offline_user_resource_visitinfo", {"uid":uid, "resource_type_list":"..."}):
             pass
         for k, v in kv_dict.iteritems():
             self.offline_resource_visit_info[k] = VisitInfo()
             self.offline_resource_visit_info[k].ParseFromString(v)
     except:
         logger.error("bad offline_resource_visit_info:%s" % traceback.format_exc())
     #recent_resource_visit_info
     try:
         errCode, kv_dict = model.get_online_user_resource_visitinfo(uid, ResourceType.RESOURCE_TYPE_LIST)
         if not is_valid_data(errCode, kv_dict, "online_user_resource_visitinfo", {"uid":uid, "resource_type_list":"..."}):
             pass
         for k, v in kv_dict.iteritems():
             self.recent_resource_visit_info[k] = VisitInfo()
             self.recent_resource_visit_info[k].ParseFromString(v)
         #final_resource_visit_info
         self.final_resource_visit_info = UserInfo.merge_offline_recent_resource_visit_info(self.offline_resource_visit_info,
                 self.recent_resource_visit_info)
     except:
         logger.error("bad recent_resource_visit_info:%s" % traceback.format_exc())
         self.final_resource_visit_info = self.offline_resource_visit_info
     #pushed_item_id_list
     try:
         errCode, v = model.get_online_user_push_item_list(uid)
         if not is_valid_data(errCode, v, "online_user_push_item_list", {"uid":uid}):
             pass
         if v:
             item_id_list_proto = ItemIdList()
             item_id_list_proto.ParseFromString(v)
             self.recent_push_item_id_list = set()
             self.recent_push_item_id_list.update(item_id_list_proto.item_id)
     except:
         logger.error("bad pushed_item_id_list:%s" % traceback.format_exc())
     #pushed_feature_list
     try:
         errCode, v = model.get_online_user_feature_reason(uid)
         if not is_valid_data(errCode, v, "online_user_feature_reason", {"uid":uid}):
             pass
         if v:
             feature_list_proto = ItemFeatureList()
             feature_list_proto.ParseFromString(v)
             for u in feature_list_proto.feature:
                 self.recent_push_reason_info[u.feature_name] = u.weight
     except:
         logger.error("bad pushed_feature_list:%s" % traceback.format_exc())
     logger.debug("user_info:%s" % self)
     return None
예제 #3
0
    if False == errorCode:
        logger.error('get online user push item list Failed, uid[%s]' % uid)
        return False
    try:
        push_item_list = ItemIdList()
        if None != push_item_list_data:
            push_item_list.ParseFromString(push_item_list_data)
        else:
            logger.debug('add push item id list for new user. uid: %s' % uid)
        for item_id in raw_item_id_list:
            push_item_list.item_id.append(item_id)
        if len(push_item_list.item_id) > MAX_ITEM_ID_LIST_LENGTH:
            push_item_id_list = getattr(push_item_list, 'item_id')
            item_id_list_len = len(push_item_id_list)
            tmp_push_item_id_list = push_item_id_list[item_id_list_len - MAX_ITEM_ID_LIST_LENGTH:]
            push_item_list.ClearField('item_id')
            for item_id in tmp_push_item_id_list:
                push_item_list.item_id.append(item_id)
        if False == model.set_online_user_push_item_list(uid, push_item_list.SerializeToString()):
            logger.error('set online user push item list error.')
            return False
        return True
    except:
        logger.error('push_item_id_list_merge failed. error: %s' %  str(sys.exc_info()))
        print str(sys.exc_info())
        return False

if __name__ == '__main__':
    print push_item_id_list_merge('uid_1', ['movilitem12','newsitem2432','moviitem23'])
    print model.get_online_user_push_item_list('uid_1')