def delete(self, className, objectId): if not objectId: self.write(ERR_PARA.message) return if BaseConfig.deleteClass.count(className) <= 0: self.write(ERR_USER_PERMISSION.message) return try: ObjectId(objectId) except Exception: self.write(ERR_OBJECTID_MIS.message) return classHelper = ClassHelper(className) obj = classHelper.find_one({"_id": objectId}) if not obj: self.write(ERR_OBJECTID_MIS.message) return mo = MeObject(className, obj, False) mo.overLoadGet = False acl = MeACL(mo['acl']) if not acl.deleteAccess(self.user): self.write(ERR_USER_PERMISSION.message) return else: classHelper.delete(objectId) self.write(ERR_SUCCESS.message)
def getId(self, className, query): classHelper = ClassHelper(className) result = classHelper.find_one(query,keys={"_id":1,"acl":1}) acl = MeACL(result['acl']) if not acl.readAccess(self.user): return None return result['_id']
def getFile(self, fileId): fileHelper = ClassHelper('File') obj = fileHelper.get(fileId) # fileUrl = "http://"+obj['bucket']+".oss-cn-beijing.aliyuncs.com/"+obj['name'] fileUrl = "http://" + self.request.host + "/1.0/file/download/" + obj[ '_id'] return fileUrl
def deleteMediaFace(self, mediaId): mediaHelper = ClassHelper("Media") media = mediaHelper.find_one(query={"_id": mediaId}, keys={"faces": 1}) tran = [] if media: for face in media['faces']: tran.append({ 'destClass': 'Face', 'query': { '_id': face }, 'action': { '@set': { 'status': 0 } } }) result = mediaHelper.update(mediaId, {"$set": { 'status': 0 }}, transaction=tran) if result: self.write(ERR_SUCCESS.message) else: self.write(ERR_INVALID.message) else: self.write(ERR_PATH_PERMISSION.message)
def __init__(self, classname): self.classname = classname if not self.blacklistAuth: blacklistAuthHelper = ClassHelper("BlacklistAuth") items = blacklistAuthHelper.find({}) if items: self.blacklistAuth = items
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 getJson(self, className, query): classHelper = ClassHelper(className) result = classHelper.find_one(query) mo = MeObject(className, result, False) mo.overLoadGet = False acl = MeACL(mo['acl']) if not acl.readAccess(self.user): return None return mo
def get(self, oid, child=False): from helper.ClassHelper import ClassHelper classHelper = ClassHelper(self.className) obj = classHelper.get(oid) # if obj == None: # return False # self.copySelf(obj, child) # self.dirty.clear() return obj
def __init__(self, className, method, userId): self.className = className self.method = method self.userId = userId if not self.autoMessage: autoMessageClassHelper = ClassHelper("AutoMessage") items = autoMessageClassHelper.find({}) for item in items: self.autoMessage[(item['classname'], item['method'])] = item
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 filterAuTH(self, userId, obj): for auth in self.blacklistAuth: if self.classname == auth['classname']: classHelper = ClassHelper("Blacklist") item = classHelper.find_one({ 'user': obj[auth['foreign']], "blacker": userId }) if item: log.warn("user %s black blacker %s", obj[auth['foreign']], userId) return None return obj
def getList(self, className, query): classHelper = ClassHelper(className) result = classHelper.find(query) objects = [] for obj in result: mo = MeObject(className, obj, False) mo.overLoadGet = False acl = MeACL(mo['acl']) if not acl.readAccess(self.user): continue objects.append(mo) if len(objects) == 0: return None return objects
def getCountUser(self, userId, isUser=1): item = profile(userId, isUser) obj = copy.deepcopy(item) item['assignersCount'] = item.get('assigners', 0) item['followersCount'] = item.get('followers', 0) item['imageCount'] = item.get('medias', 0) faceHelper = ClassHelper('Face') toClaimCount = faceHelper.query_count({ 'assign.user': userId, 'assign.status': 0 }) or 0 item['toClaimCount'] = toClaimCount if item['assignersCount'] and item['followersCount'] and item[ 'imageCount'] and item['toClaimCount']: return item return obj
def pushMessage(self, good, owner_income_show, uploader_income_show): ''' author:arther ''' log.debug('good:%s', good) def callback(response): log.info('Push:%s', response.body) self.finish() pushUrl = BaseConfig.pushUrl face = ClassHelper('Face').get(good['goods']) if face: if self.user['_id'] != face['assign']['user']: ##ownedBought 购买了我主页的照片 排除掉照片主人购买自身主页照片的情况 ownedBoughtPushData = { 'userid': face['assign']['user'], 'action': 'ownedBought', 'otherid': self.user['_id'], 'extra': owner_income_show } client = tornado.httpclient.AsyncHTTPClient() client.fetch(pushUrl, callback=callback, method="POST", body=json.dumps(ownedBoughtPushData), headers={'X-MeCloud-Debug': '1'}) ##assignedBought 购买了我共享的照片 assignedBoughtPushData = { 'userid': face['assign']['assigner'], 'action': 'assignedBought', 'otherid': self.user['_id'], 'extra': uploader_income_show } client = tornado.httpclient.AsyncHTTPClient() client.fetch(pushUrl, callback=callback, method="POST", body=json.dumps(assignedBoughtPushData), headers={'X-MeCloud-Debug': '1'})
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 get(self, classname=None): # 查看钱包余额 if classname not in ['wallet']: self.write(ERR_PATH_PERMISSION.message) return query = { 'user': self.user['_id'] } obj = { 'user': self.user['_id'].decode(), 'balance': 0, 'income': 0 } if not self.check_field('Wallet', obj): return walletHelper = ClassHelper("Wallet") objects = walletHelper.findCreate(query, obj) self.filter_field(objects) self.write(json.dumps(objects, cls=MeEncoder))
def get_specific_count(userid): ''' :param userid: :return:{} followers 粉丝 followees 关注的人 uploaders 贡献的照片数量 medias 拥有的照片数量 faces 拥有的脸的数量 assigners 有多少人贡献照片 ''' l = ['followers', 'followees', 'uploaders', 'medias', 'faces', 'assigners'] result = {} for i in l: result[i] = 0 stat_unique_helper = ClassHelper('StatCount') query = { '$or': [{ 'name': l[0] + '_' + userid }, { 'name': l[1] + '_' + userid }, { 'name': l[2] + '_' + userid }, { 'name': l[3] + '_' + userid }, { 'name': l[4] + '_' + userid }, { 'name': l[5] + '_' + userid }] } objs = stat_unique_helper.find(query) # print 'objs:', objs if objs: for obj in objs: for i in l: if obj['name'] == i + '_' + userid: result[i] = obj['count'] break # print 'result:', result return result
def orderCallback(oId, userId, status, order): ''' 根据支付结果更新订单的状态 :param oId:RechargeFlow Id :param userId:用户Id :param status: 支付是否成功,1为成功,3为等待验证 :param order:第三方平台返回订单信息,包括错误码 :return: ''' log.debug('oId:%s, userId:%s, status:%d, order:%s', oId, userId, status, order) ###更新充值流水记录 orderHelper = ClassHelper("RechargeFlow") rechargeFlow = orderHelper.get(oId) walletHelper = ClassHelper("Wallet") walletInfo = walletHelper.find_one({"user": userId}) if status == 1: # 充值成功,更新钱包 rechargeFlow_action = { 'destClass': 'RechargeFlow', 'query': { "_id": oId }, 'action': { "@set": { "status": status, "order": order } } } if not walletInfo: # 未找到钱包直接创建 wallet = {"user": userId, 'balance': rechargeFlow['amount']} walletInfo = walletHelper.create(wallet, transaction=[rechargeFlow_action]) else: wallet = {"$inc": {'balance': rechargeFlow['amount']}} walletInfo = walletHelper.update(walletInfo['_id'], wallet, transaction=[rechargeFlow_action]) return walletInfo else: rechargeFlow = orderHelper.update( oId, {"$set": { "status": status, "order": order }}) return rechargeFlow
def getUser(self, userId, isUser=-1): if isUser == 1: userHelper = ClassHelper("UserInfo") obj = userHelper.find_one({'user': userId}) or {} else: obj = ClassHelper("BackupUser").get(userId) or {} if not obj: userHelper = ClassHelper("UserInfo") obj = userHelper.find_one({'user': userId}) or {} return self.filter_field(obj)
def save(self): from helper.ClassHelper import ClassHelper classHelper = ClassHelper(self.className) if self.objectId == None: if self.dirty.has_key('_sid'): self.dirty['_id'] = ObjectId(self.dirty['_sid']) del (self.dirty['_sid']) obj = classHelper.create(self.dirty) if obj == None: return False self.objectId = obj['_id'] else: obj = classHelper.update(self.objectId, self.dirty) if obj == None: return False for k in obj: dict.__setitem__(self, k, obj[k]) self.dirty.clear() return True
def get(self, userId, count, isuser=1): faceHelper = ClassHelper('FaceRecommend') isExistBackupUser = False field_name = 'user' if int(isuser) == 0: field_name = 'backupUser' isExistBackupUser = True oid = self.get_argument('objectId', None) if oid: query = {field_name: userId, 'read': {'$exists': False}, 'backupUser': {'$exists': isExistBackupUser}, '_id': {'$lt': oid}} else: query = {field_name: userId, 'read': {'$exists': False}, 'backupUser': {'$exists': isExistBackupUser}} sort = {'_id': -1} fs = faceHelper.find(query, sort=sort, limit=int(count)) faces = [] for face in fs: if face.has_key('createAt'): del (face['createAt']) del (face['updateAt']) del (face['acl']) if face.has_key('backupUser'): face['user'] = face['backupUser'] del (face['backupUser']) face['mosaic'] = 5 faces.append(face) result = deepcopy(ERR_SUCCESS.message) result['data'] = faces result['count'] = faceHelper.query_count({'user': userId}) result['unread'] = faceHelper.query_count({'user': userId, 'read': {'$exists': False}}) print result self.write(result)
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 getFace(self, faceId): faceHelper = ClassHelper("Face") obj = faceHelper.find_one(query={"_id": faceId}, keys={ "rect": 1, "possible.score": 1, "file": 1 }) or {} item = {} item['faceId'] = faceId item['rect'] = obj['rect'] item['file'] = obj['file'] item['score'] = obj['possible'][0]['score'] # user = {} # if obj: # if "uploader" in obj: # user = self.getUser(obj['uploader'],1) # elif "backupUser" in obj: # user = self.getUser(obj['backupUser'], 0) # else: # pass # user = self.filter_field(user) # obj = self.filter_field(obj) return item
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 createAppleAppOrder(self): ''' 添加充值记录 :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 classHelper = ClassHelper("CoinSetting") coinSetting = classHelper.get(obj['id']) try: if coinSetting and coinSetting['status'] == 1: item = {} item['user'] = self.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()
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
class FollowerHandler(BaseHandler): # def __init__(self): # super(FollowerHandler, self).__init__() @tornado.web.authenticated def get(self, userId, count, isuser=1): faceHelper = ClassHelper('FaceRecommend') isExistBackupUser = False field_name = 'user' if int(isuser) == 0: field_name = 'backupUser' isExistBackupUser = True oid = self.get_argument('objectId', None) if oid: query = {field_name: userId, 'read': {'$exists': False}, 'backupUser': {'$exists': isExistBackupUser}, '_id': {'$lt': oid}} else: query = {field_name: userId, 'read': {'$exists': False}, 'backupUser': {'$exists': isExistBackupUser}} sort = {'_id': -1} fs = faceHelper.find(query, sort=sort, limit=int(count)) faces = [] for face in fs: if face.has_key('createAt'): del (face['createAt']) del (face['updateAt']) del (face['acl']) if face.has_key('backupUser'): face['user'] = face['backupUser'] del (face['backupUser']) face['mosaic'] = 5 faces.append(face) result = deepcopy(ERR_SUCCESS.message) result['data'] = faces result['count'] = faceHelper.query_count({'user': userId}) result['unread'] = faceHelper.query_count({'user': userId, 'read': {'$exists': False}}) print result self.write(result) @tornado.web.authenticated 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 if action == 'follow': if is_user and not followed: try: # 计数 newFans_ +1 ClassHelper('StatCount').updateOne({'name': 'newFans_' + followee}, {"$inc": {'count': 1}}, upsert=True) except Exception, e: print e self.write( ERR_DB_OPERATION.message ) return self.pushMessage( followee, userId )
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 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