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)
Пример #2
0
 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']
Пример #3
0
 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
Пример #4
0
 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
Пример #6
0
    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))
Пример #7
0
 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
Пример #8
0
 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
Пример #9
0
 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
Пример #10
0
 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
Пример #12
0
 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
Пример #13
0
 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
Пример #14
0
    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'})
Пример #15
0
    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']}})
Пример #16
0
 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))
Пример #17
0
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
Пример #18
0
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
Пример #19
0
 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)
Пример #20
0
    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
Пример #21
0
    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)
Пример #22
0
 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)
Пример #23
0
 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
Пример #24
0
    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 )
Пример #25
0


    # 苹果支付下单
    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()
Пример #26
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
Пример #27
0
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 )
Пример #28
0
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
Пример #29
0
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'])
Пример #30
0
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