def follow(user, followee, is_user=True): if not user or not followee: log.err( "FollowHelper-->follow userId:%s, followeeId %s", user, followee) return if is_user: fieldname = "followee" else: fieldname = "backupFollowee" # 查找followee是否关注user, 如果关注则需要添加双向关注关系 followHelper = ClassHelper(FollowHelper.classame) effect=1 if is_user: result = followHelper.find_one({'user': followee, fieldname: user, 'effect': {'$gte': 1}}) if not result: effect = 1 else: effect = 2 # 添加feed记录,第一次关注才添加 # followRecord = followHelper.find_one({'user': user, fieldname: followee, 'effect': {'$ne': 0}}) # if not followRecord: # addFeedRecord(user, 'follow', followRecord['_id']) #TODO: 这里事务的管理不太严格,应该关注和粉丝统一起来 # 添加我的关注 followee_action = {'destClass':'StatCount', 'query': {'name': 'followees_'+user}, 'action':{'@inc':{'count':1}}} follower_action = {'destClass':'StatCount', 'query': {'name': 'followers_'+followee}, 'action':{'@inc':{'count': 1}} } actions = [follower_action, followee_action] followHelper.updateOne({'user': user, fieldname: followee}, {'$set': {'effect': effect}}, transactions=actions, upsert=True) # 添加followee也是user的粉丝,则需要处理followee的双向关注,否则只添加粉丝数量 if effect==2: followHelper.updateOne({'user': followee, fieldname: user}, {"$set": {'effect': effect,'updateAt':result['updateAt']}})
def completeAppleAppOrder(self): try: obj = json.loads(self.request.body) except Exception, e: log.err("JSON Error:[%d/%s] , error:%s", len(self.request.body), self.request.body, str(e)) self.write(ERR_INVALID.message) return
def post(self, className): try: obj = json.loads(self.request.body) obj = self.check_field(className, obj) if not obj: return except Exception, e: log.err("JSON Error:%s , error:%s", self.request.body, str(e)) self.write(ERR_INVALID.message) return
def getFollowees(user, lastTime=None, count=10, skipNum=0): if not user: log.err( "FollowHelper-->getFollowees userId is None") return None #sortDict = {"_sid": 1} #query = {'user':user, "_sid": {"$gt": start}, 'effect':{'$gte':1}} #followHelper = ClassHelper( FollowHelper.classame ) #return followHelper.find( query, sort=sortDict, limit=count) return FollowHelper.find_list("Followee", user, lastTime, count, skipNum)
def charge(self): ''' obj = {'id':Goods_id:True,'chargeFlowId':ChargeFlow_id:False} chargeFlowId是在重新发起支付时需要传递 :return: ''' try: obj = json.loads(self.request.body) except Exception, e: log.err("JSON Error:[%d/%s] , error:%s", len(self.request.body), self.request.body, str(e)) self.write(ERR_INVALID.message) return
def put(self,action=None): if action == "update": try: obj = json.loads(self.request.body) except Exception, e: log.err("JSON Error:[%d/%s] , error:%s", len(self.request.body), self.request.body, str(e)) self.write(ERR_INVALID.message) return classHelper = ClassHelper("User") # 只返回了更新时间 data = classHelper.update(self.user['_id'], obj) # 默认返回整个对象 self.write(json.dumps(data, cls=MeEncoder))
def init_tree(conf_path): global conf_tree for fpath in glob.glob(join(conf_path, '**/*.yml'), recursive=True): f = open(fpath, 'r') branch = yaml.load(f) for key in branch.keys(): if key in conf_tree: err('Error loading "%s": env "%s" is already loaded' % (fpath, key)) conf_tree = {**conf_tree, **branch} return conf_tree
def loginWithoutPwd(self): obj = json.loads(self.request.body) if not checkKeys(obj, ['username']): self.write(ERR_PARA.message) return user = MeUser(self.appName, obj) userHelper = ClassHelper('develop', 'User') userInfo = userHelper.get(self.appInfo['user']) # library授权 if userInfo['type'] == 2: if user['bundleId']: log.info("Library User[%s] Auth. bundleId[%s]", user['username'], user['bundleId']); elif user['package']: log.info("Library User[%s] Auth. package[%s]", user['username'], user['package']); log.info('auth app[%s]', self.appInfo['appName']); # 普通授权失败 elif user['bundleId'] != None: if (not self.appInfo.has_key('bundleId')) or self.appInfo['bundleId'] != user['bundleId']: log.err('[%s] bundleId[%s] not match. LoginWithoutPwd Error.', self.appInfo['appName'], user['bundleId']) self.write(ERR_UNAUTHORIZED.message) return log.info('auth app[%s]', self.appInfo['appName']); elif user['package']: if (not self.appInfo.has_key('package')) or self.appInfo['package'] != user['package']: log.err('[%s] package[%s] not match. LoginWithoutPwd Error.', self.appInfo['appName'], user['package']) self.write(ERR_UNAUTHORIZED.message) return log.info('auth app[%s]', self.appInfo['appName']); else: log.err("loginWithoutPwd Error: Invalid. %s", self.request.body) self.write(ERR_UNAUTHORIZED.message) return # 检查数量限制 # userHelper = ClassHelper(self.appDb, "User") # userUpper = self.appInfo['userUpper'] # # userUpper=0表示无数量限制 # if userUpper>0: # if userHelper.count() > userUpper: # log.err('[%s] over user count limit', self.appInfo['appName']); # self.write(ERR_USER_PERMISSION.message) try: user.loginWithoutPwd() log.info('LoginWithoutPwd: %s', user['username']) self.set_secure_cookie("u", user['username']) user['authen'] = userInfo['authen']; self.write(json.dumps(user, cls=MeEncoder)) # 登录日志 loginLog = MeObject(self.appName, 'LoginLog') loginLog['username'] = user['username'] if hasattr(self, 'client_ip'): loginLog['ip'] = self.client_ip; loginLog.save() except Exception, e: log.err("LoginWithoutPwd Error: %s Error:%s", self.request.body, str(e)) self.write(str(e))
def post(self, action=None): if action == 'signup': self.signup() elif action == 'login': self.login() elif action == 'modifyPwd': self.modifyPwd() elif action == 'update': pass # elif action=='loginWithoutPwd': # self.loginWithoutPwd() else: log.err("userHandler path error %s", action) self.write(ERR_PATH_PERMISSION.message)
def getFollowers(user, lastTime=None, count=10, is_user=True,skipNum=0): if not user: log.err("FollowHelper-->getFollowers userId is None") return None #if is_user: # fieldname = "followee" #else: # fieldname = "backupFollowee" #followHelper = ClassHelper(FollowHelper.classame) #sortDict = {"_sid": 1} #query = {fieldname:user, "_sid": {"$gt": start}, 'effect':{'$gte':1}} #return followHelper.find(query, sort=sortDict, limit=count) return FollowHelper.find_list( "Follower", user, lastTime, count, is_user, skipNum)
def put(self, className, objectId): if not objectId: self.write(ERR_OBJECTID_MIS.message) return try: try: ObjectId(objectId) except Exception: self.write(ERR_OBJECTID_MIS.message) return obj = json.loads(self.request.body) except Exception, e: log.err("JSON Error:[%d/%s] , error:%s", len(self.request.body), self.request.body, str(e)) self.write(ERR_INVALID.message) return
def put(self, className, objectId=None): if not objectId and not self.request.arguments.has_key('where'): self.write(ERR_OBJECTID_MIS.message) return try: if objectId: try: ObjectId(objectId) except Exception: self.write(ERR_OBJECTID_MIS.message) return obj = json.loads(self.request.body) except Exception, e: log.err("JSON Error:[%d/%s] , error:%s", len(self.request.body), self.request.body, str(e)) self.write(ERR_INVALID.message) return
def get_faces_from_media_id(media_id): """ 根据图片id计算出其中的人脸的特征向量 通过http请求 :param media_id: :return: """ url = FEATURE_URL % media_id res = requests.get(url) data = json.loads(res.text) error_msg = data.get('errMsg') if error_msg: log.err('media %s calculate error: %s' % (media_id, error_msg)) return [] faces = data['facer'] if not faces: log.info('media without faces: %s' % media_id) return faces
def create_core(self, obj): log.debug('[%s] create object start: %s' % (self.className, obj)) embed = None for key in obj.keys(): # 如果是pointer类型,则递归处理对象 if isinstance( obj[key], dict) and obj[key].has_key('_type') and obj[key][ '_type'] == 'pointer' and obj[key].has_key('_content'): # 创建对应的classhelper c = ClassHelper(obj[key]['_class'], self.appName) # 用于保存递归对象,递归对象内容不存到父对象 embed = {} embed[key] = deepcopy(obj[key]) # 如果存在_id,则递归update if obj[key].has_key('_id'): o = c.update_core(obj[key]['_id'], obj[key]['_content']) else: o = c.create_core(obj[key]['_content']) # 删除_content,使得父对象存储pointer对象 ''' TODO 此处无法保存updateAt和createAt返回客户端 ''' del obj[key]['_content'] obj[key]['_id'] = o[0]['_id'] print "Key:" + key print "O: " + str(o) print "embed1: " + str(embed) embed[key]['_id'] = o[0]['_id'] # 将递归对象拼接起来 if o[1] != None: if embed[key]['_content'].has_key('$set'): del embed[key]['_content']['$set'] # 内部还有递归的情况,同级可能有多个递归对象 for embed_key in o[1].keys(): embed[key]['_content'][embed_key] = o[1][embed_key] else: embed[key]['_content'] = o[0] print "embed2: " + str(embed) obj['updateAt'] = datetime.now() obj['createAt'] = obj['updateAt'] try: if obj.has_key("_id"): obj["_sid"] = MongoDb.toId(obj['_id']) except Exception, e: log.err("Error:%s", str(e))
def sentMessage(self, obj): item = self.autoMessage.get((self.className, self.method), None) if not item: return userClassHelper = ClassHelper("UserInfo") userInfo = userClassHelper.find_one({"user": self.userId}, {'nickName': 1}) if not userInfo: return obj.update(userInfo) title = item['title'].format(**obj) template = item['template'].format(**obj) # TODO pushData = {"userid": obj['to'], "title": title, "text": template} log.info("Push Data:%s", json.dumps(pushData)) try: res = requests.post(self.pushUrl, data=json.dumps(pushData), headers={'X-MeCloud-Debug': '1'}) print res.text except Exception, ex: log.err("Push Err:%s", ex)
def unfollow(user, followee, is_user=True): if not user or not followee: log.err( "FollowHelper-->unfollow userId:%s, followeeId %s", user, followee) return; if is_user: fieldname = "followee" else: fieldname = "backupFollowee" followHelper = ClassHelper(FollowHelper.classame) result = followHelper.find_one({'user': followee, 'followee': user, 'effect': {'$gte': 2}}) if result: #双向关注,需要处理followee的双向关注effect和粉丝数量 followHelper.updateOne( {'user': followee, fieldname: user}, {"$set": {'effect': 1,'updateAt':result['updateAt']}} ) # 取消我的关注 followee_action = {'destClass': 'StatCount', 'query': {'name': 'followees_' + user}, 'action': {'@inc': {'count': -1}}} follower_action = {'destClass': 'StatCount', 'query': {'name': 'followers_' + followee}, 'action': {'@inc': {'count': -1}}} actions = [follower_action, followee_action] followHelper.updateOne( {'user': user, fieldname: followee}, {"$set": {'effect': 0}}, transactions=actions, upsert=True )
def start_face_cal(): """ 开始计算人脸向量 :return: """ media_helper = ClassHelper('Media') client = RedisDb.get_connection(dbid=1) redis_key = _build_media_redis_key() while client.llen(redis_key): media_id = client.lpop(redis_key) media = media_helper.get(media_id) if not media: log.err('media not found: %s' % media_id) continue faces = get_faces_from_media_id(media_id) face_ids = [] for face_info in faces: face_info['media'] = media_id face = create_face_db(face_info) face_ids.append(face['_id']) # 没有获取到的话就不更新了 if face_ids: media_helper.update(media_id, {'$set': {'faces': face_ids}}) log.info('media face calculate finish: %s' % media_id)
def delete(key, dbid=0): try: return RedisDb.get_connection(dbid).delete(key) except Exception, e: log.err("redis delete operation fail , error:%s", str(e)) return 0
def post(self, action=None, followee=None, isuser=1): userId = self.get_current_user() if not userId: log.err("follow error,user not exist!") self.write(ERR_USER_NOTFOUND.message) return if not followee: log.err("request param error") self.write(ERR_NOPARA.message) return is_user = True if int(isuser) == 0: is_user = False # 查找用户是否存在 if is_user == True: userHelper = ClassHelper( "User" ) else: userHelper = ClassHelper( "BackupUser" ) findUser = userHelper.find_one( {'_sid': followee} ) if not findUser: log.err( "%s error,followee not exist!",action) self.write( ERR_USER_NOTFOUND.message ) return blackHelper = ClassHelper( "Blacklist" ) if action == 'follow': blacked = blackHelper.find_one( {'user': userId, 'blacker': followee} ) isblacked = blackHelper.find_one( {'user': followee, 'blacker': userId} ) if blacked: self.write( ERR_BLACKED_PERMISSION.message ) return if isblacked: self.write( ERR_BEBLACKED_PERMISSION.message ) return if is_user: fieldname = "followee" else: fieldname = "backupFollowee" followHelper = ClassHelper("Followee") try: if action == 'follow': # 关注 # 判断是否已经关注过 followed = followHelper.find_one( {'user': userId, fieldname: followee, 'effect': {'$gte': 0}} ) if followed and followed['effect']>=1: self.write( ERR_SUCCESS.message ) return FollowHelper.follow(userId, followee, is_user) fr = followHelper.find_one( {'user': userId, fieldname: followee, 'effect': {'$gte': 1}}, {'acl': 0, 'createAt': 0, '_sid': 0} ) fr['relationStatus']=fr['effect'] del fr['effect'] del fr['_id'] if fr.has_key('backupFollowee'): del fr['backupFollowee'] fr['isUser'] = 0 else: del fr['followee'] fr['isUser'] = 1 successInfo = deepcopy( ERR_SUCCESS ) successInfo.message["data"] = fr self.write( json.dumps( successInfo.message, cls=MeEncoder ) ) elif action == 'unfollow': # 取消关注 # 之前未关注过或者已经取消关注,直接返回 unfollowed = followHelper.find_one( {'user': userId, fieldname: followee, 'effect': {'$gte': 1}} ) if not unfollowed: self.write( ERR_SUCCESS.message ) return FollowHelper.unfollow(userId, followee, is_user) fr = followHelper.find_one( {'user': userId, fieldname: followee, 'effect': {'$gte': 0}}, {'acl': 0, 'createAt': 0, '_sid': 0} ) fr['relationStatus'] = fr['effect'] del fr['effect'] del fr['_id'] if fr.has_key( 'backupFollowee' ): del fr['backupFollowee'] fr['isUser'] = 0 else: del fr['followee'] fr['isUser'] = 1 successInfo = deepcopy( ERR_SUCCESS ) successInfo.message["data"] = fr self.write( json.dumps( successInfo.message, cls=MeEncoder ) ) else: print "action error: " + action self.write( ERR_PATH_PERMISSION.message ) return except Exception, e: log.err("FollowerHandler-->action:%s in post() error, %s", action, e) self.write(ERR_DB_OPERATION.message) return
def get_follow_ount(userId, isUser=1): ''' # 粉丝数:Followee (backup)followee, 照片数(认领的照片):Face assign.user,贡献者个数:Face assign.assigner uploader :param userId: 注册用户Id :return: ''' # classHelper = ClassHelper( 'StatCount' ) # try: # if is_mine: # result = classHelper.find( {'name': { # '$in': ['albumMost_' + userId, 'albumAnimal_' + userId, 'albumBaby_' + userId, # 'albumChowhound_' + userId, 'followers_' + userId, 'medias_' + userId, 'followees_' + userId, # 'uploaders_' + userId, 'faces_' + userId, 'assigners_' + userId]}}, {"_id": 0} ) # else: # result = classHelper.find( {'name': { # '$in': ['followers_' + userId, 'medias_' + userId, 'followees_' + userId, 'assigners_' + userId]}}, # {"_id": 0} ) # except Exception, e: # log.err( "%s find StatCount error", userId ) # if result: # return result # else: # return None # obj = {} try: followeeHelper = ClassHelper('Followee') faceHelper = ClassHelper('Face') if isUser: # 关注数 followeesCount = followeeHelper.query_count({ 'user': userId, "effect": { "$gt": 0 } }) or 0 obj['followees'] = followeesCount mediasCount = faceHelper.query_count({ 'assign.user': userId, 'assign.status': 1 }) or 0 obj['medias'] = mediasCount # 粉丝数 followersCount = followeeHelper.query_count({ 'followee': userId, "effect": { "$gt": 0 } }) or 0 obj['followers'] = followersCount else: mediaHelper = ClassHelper('Media') mediasCount = mediaHelper.query_count({'backupUser': userId}) obj['medias'] = mediasCount # 粉丝数 followersCount = followeeHelper.query_count({ 'backupFollowee': userId, "effect": { "$gt": 0 } }) or 0 obj['followers'] = followersCount # 贡献者数 assignersCount = faceHelper.distinct( { 'assign.user': userId, 'assign.status': 1 }, "assign.assigner") or [] obj['assigners'] = len(assignersCount.cursor) except Exception, ex: log.err(ex.message) return None
def getIFCCount(userId=None, backupUser=None, keys=None): ''' # 粉丝数:Followee (backup)followee, 照片数(认领的照片):Face assign.user,贡献者个数:Face assign.assigner uploader :param userId: 注册用户Id :param backupUser: 非注册用户Id :param keys: 查询某一个Count :return: ''' uid = userId or backupUser isUser = bool(userId) condition = { 'imageCount': { 'classname': 'Face', 'key': 'imageCount', 'condition': { 'assign.status': 1, 'assign.user': uid }, 'method': 1 }, 'fansCount': { 'classname': 'Followee', 'key': 'fansCount', 'condition': { 'followee': uid, 'effect': 1 }, 'method': 1 }, 'contributeCount': { 'classname': 'Face', 'distinct': 'assign.assigner', 'key': 'contributeCount', 'condition': { 'assign.status': 1, 'assign.user': uid }, 'method': 2 } } where = [] if not keys: if isUser: keys = {'imageCount': 1, 'fansCount': 1, 'contributeCount': 1} else: keys = {'fansCount': 1} for key in keys: where.append(condition[key]) result = {} for item in where: # 获取三种个数 className = item['classname'] query = item["condition"] try: if item['method'] == 1: classHelper = ClassHelper(className) result[item['key']] = classHelper.query_count(query) elif item['method'] == 2: classHelper = ClassHelper(className) obj = classHelper.distinct(query, item['distinct']) result[item['key']] = len(obj) except Exception, e: log.err("%s param error", item['key'])
def incrby(key, amount=1, dbid=0): try: return RedisDb.get_connection(dbid).incr(key, amount) except Exception, e: log.err( "redis incrby operation fail , error:%s", str(e)) return None
def expire(key, expireSeconds, dbid=0): try: return RedisDb.get_connection(dbid).expire(key, expireSeconds) except Exception, e: log.err("redis expire operation fail , error:%s", str(e)) return False
def hgetall(key, dbid=0): try: return RedisDb.get_connection(dbid).hgetall(key) except Exception, e: log.err("redis hgetall operation fail , error:%s", str(e)) return {}
def get(self, action=None): ''' # where 条件格式:[{ "condition": { "user": "******" }, "key": "xxx", "method": "count/id/list/jsonObject", "classname": "xxx" }, { "condition": { "user": "******" }, "key": "xxx", "method": "count/id/list/jsonObject", "classname": "xxx", "distinct":"" }] #返回数据格式:{"a":11,"b":10} ''' # if action == "albumConfig": # if self.request.arguments.has_key('where'): # query = eval(self.get_argument('where')) # query['settingId'] = 7 # classHelper = ClassHelper("VersionControl") # objs = classHelper.find_one(query,keys={'albumConfig':1}) # albumConfig = objs.get('albumConfig',None) # if albumConfig: # albumConfig.sort(key=lambda k: (k['weight']), reverse=False) # items = [] # classHelper = ClassHelper("StatCount") # for i,cfig in enumerate(albumConfig): # count = classHelper.find_one({'name':cfig['type']+ "_" +self.user['_id']}) or {} # count = count.get('count',0) # item = { # 'title':cfig['title'], # 'authorize':cfig['authorize'], # 'type':cfig['type'], # 'count':count # } # items.append(item) # if i >= 5: # break # data = copy.deepcopy(ERR_SUCCESS) # data.message['data'] = items # self.write(json.dumps(data.message,cls=MeEncoder)) # else: # self.write(ERR_PATH_PERMISSION.message) # # else: # self.write(ERR_PATH_PERMISSION.message) if action == "albumConfig": if self.request.arguments.has_key('where'): query = eval(self.get_argument('where')) query['settingId'] = 7 classHelper = ClassHelper("VersionControl") objs = classHelper.find_one(query, keys={'albumConfig': 1}) albumConfig = objs.get('albumConfig', None) if albumConfig: albumConfig.sort(key=lambda k: (k['weight']), reverse=False) items = [] classHelper = ClassHelper("StatCount") for i, cfig in enumerate(albumConfig): count = classHelper.find_one({'name': cfig['type'] + "_" + self.user['_id']}) or {} count = count.get('count', 0) item = { 'title': cfig['title'], 'authorize': cfig['authorize'], 'type': cfig['type'], 'count': count } items.append(item) if i >= 5: break data = copy.deepcopy(ERR_SUCCESS) data.message['data'] = items self.write(json.dumps(data.message, cls=MeEncoder)) else: self.write(ERR_PATH_PERMISSION.message) else: self.write(ERR_PATH_PERMISSION.message) elif self.request.arguments.has_key('where'): where = eval(self.get_argument('where')) result = {} for item in where: className = item['classname'] if className == 'User': continue query = item["condition"] try: if query.has_key('_id'): ObjectId(query['_id']) # if query.has_key('$or'): # for item in query['$or']: # if "_id" in item: # item["_id"] = ObjectId(item["_id"]) except Exception: self.write(ERR_OBJECTID_MIS.message) return try: if item['method'] == 1: result[item['key']] = self.getCount(className, query) elif item['method'] == 2: result[item['key']] = self.getId(className, query) elif item['method'] == 3: result[item['key']] = self.getList(className, query) elif item['method'] == 4: result[item['key']] = self.getJson(className, query) elif item['method'] == 5: result[item['key']] = self.getDistinct(className, query, item['distinct']) except Exception,e: log.err("%s param error", item['key']) self.write(json.dumps(result,cls=MeEncoder))
@tornado.web.authenticated def put(self,action=None): if action == "update": try: obj = json.loads(self.request.body) except Exception, e: log.err("JSON Error:[%d/%s] , error:%s", len(self.request.body), self.request.body, str(e)) self.write(ERR_INVALID.message) return classHelper = ClassHelper("User") # 只返回了更新时间 data = classHelper.update(self.user['_id'], obj) # 默认返回整个对象 self.write(json.dumps(data, cls=MeEncoder)) else: log.err("userHandler path error %s", action) self.write(ERR_PATH_PERMISSION.message) ### 注册接口 def signup(self): obj = self.check_field("User",self.jsonBody) if not obj: return user = MeUser(obj) if user['username'] == None or user['password'] == None: self.write(ERR_PARA.message) return try: user.signup() del (user['password']) self.setUserCookie(user["_id"])
item['recharge'] = coinSetting['price'] item['amount'] = coinSetting['amount'] + coinSetting['free'] item['os'] = coinSetting['os'] item['platform'] = coinSetting['platform'] try: item['channel'] = self.request.headers.get("X-MeCloud-Channel", None) item['version'] = self.request.headers.get("X-MeCloud-Client", None) except: pass item['orderNo'] = self.createOrderNo() item['status'] = 0 classHelper = ClassHelper("RechargeFlow") reObj = classHelper.create(item) self.write(json.dumps({'_id': reObj['_id'], 'appleId': coinSetting['appleId']}, cls=MeEncoder)) else: log.err("user %s appleRecharge error", self.user['_id']) self.write(ERR_PARA.message) except Exception, ex: log.err("user %s appleRecharge error:%s", self.user['_id'], ex) self.write(ERR_PARA.message) # 苹果支付状态上传服务器 def completeAppleAppOrder(self): try: obj = json.loads(self.request.body) except Exception, e: log.err("JSON Error:[%d/%s] , error:%s", len(self.request.body), self.request.body, str(e)) self.write(ERR_INVALID.message) return try: certificate = obj.get('certificate', None)
def setex(key, value, expireSeconds, dbid=0): try: return RedisDb.get_connection(dbid).setex(key, value, expireSeconds) except Exception, e: log.err("redis setex operation fail , error:%s", str(e)) return False
def profile(userId, isUser=1): # isUser:1真实用户,0backupUser obj = { 'followees': 0, 'relationStatus': 0, 'blackStatus': 0, 'isUser': isUser # 1为user,0为backupUser } try: followeeHelper = ClassHelper('Followee') faceHelper = ClassHelper('Face') if isUser: userInfoHelper = ClassHelper('UserInfo') item = userInfoHelper.find_one({"user": userId}) obj['user'] = item['user'] # 关注数 followeesCount = followeeHelper.query_count({ 'user': userId, "effect": { "$gt": 0 } }) or 0 obj['followees'] = followeesCount # 照片数 mediasCount = faceHelper.query_count({ 'assign.user': userId, 'assign.status': 1 }) or 0 obj['medias'] = mediasCount # 粉丝数 followersCount = followeeHelper.query_count({ 'followee': userId, "effect": { "$gt": 0 } }) or 0 obj['followers'] = followersCount else: backupUserHelper = ClassHelper('BackupUser') item = backupUserHelper.find_one({"_id": userId}) # 照片数 mediaHelper = ClassHelper('Media') mediasCount = mediaHelper.query_count({'backupUser': userId}) # 粉丝数 followersCount = followeeHelper.query_count({ 'backupFollowee': userId, "effect": { "$gt": 0 } }) or 0 obj['followers'] = followersCount obj['medias'] = mediasCount obj['user'] = item['_id'] if item: obj["nickname"] = item.get("nickName", None) obj["avatar"] = item.get("editAvatar", None) or item.get( "avatar", None) obj["age"] = item.get("age", 0) obj["address"] = item.get("address", None) obj["gender"] = item.get("gender", None) rect = item.get("editRect", None) or item.get("rect", None) if rect: rect = [int(i) for i in rect] obj['rect'] = rect obj["_id"] = item['_id'] # 贡献者数 assignersCount = faceHelper.distinct( { 'assign.user': userId, 'assign.status': 1 }, "assign.assigner") or [] obj['assigners'] = len(assignersCount.cursor) except Exception, ex: log.err(ex.message) return ERR_INVALID.message
def hget(key, field, dbid=0): try: return RedisDb.get_connection(dbid).hget(key, field) except Exception, e: log.err("redis hget operation fail , error:%s", str(e)) return None