示例#1
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']}})
示例#2
0
 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
示例#4
0
    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)
示例#5
0
 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))
示例#7
0
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)
示例#10
0
    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
示例#13
0
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))
示例#15
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)
示例#16
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 )
示例#17
0
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
示例#19
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 {}
示例#25
0
    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"])
示例#27
0
                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