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