コード例 #1
0
ファイル: user.py プロジェクト: usersource/anno
    def list_favorite_apps(cls, user_key):
        # We are using "query" on key for getting anno data instead of "get" or "get_multi"
        # Getting anno using "query" is more memory efficient than using "get" or "get_multi",
        # we don't know why.
        # Getting anno using "query" also create index for this.

        from model.userannostate import UserAnnoState
        from model.anno import Anno

        userannostate_list = UserAnnoState.list_by_user(user_key, 50)
        anno_key_list = [ userannostate.anno for userannostate in userannostate_list if userannostate.anno is not None ]

        if len(anno_key_list):
            anno_list = Anno.query(ndb.AND(Anno.key.IN(anno_key_list),
                                           Anno.app != None)
                                   )\
                            .fetch(projection=[Anno.app])
            app_key_list = [ anno.app for anno in anno_list ]
            app_key_list = sorted(app_key_list, key=app_key_list.count, reverse=True)
            unique_app_key_list = []
            [ unique_app_key_list.append(app_key) for app_key in app_key_list if app_key not in unique_app_key_list ]
            app_list = ndb.get_multi(unique_app_key_list)
        else:
            app_list = []

        favorite_apps_list = []
        for app in app_list:
            if app:
                app_message = UserFavoriteApp(name=app.name, icon_url=(app.icon_url or ""), version=(app.version or ""))
                favorite_apps_list.append(app_message)

        return favorite_apps_list
コード例 #2
0
ファイル: anno.py プロジェクト: usersource/anno
    def query_my_anno(cls, limit, curs, user):
        if user:
            from model.userannostate import UserAnnoState
            userannostate_list = UserAnnoState.list_by_user(user_key=user.key)
            anno_id_list = [ userannostate.anno.id() for userannostate in userannostate_list ]

            anno_message_list = []
            more = False
            if len(anno_id_list):
                query = cls.query(cls.anno_id.IN(anno_id_list)).order(-cls.last_update_time, cls.key)
                anno_list, next_curs, more = query.fetch_page(limit, start_cursor=curs)
                anno_message_list = [ anno.to_response_message(user) for anno in anno_list if anno is not None ]

            if more:
                return AnnoListMessage(anno_list=anno_message_list, cursor=next_curs.urlsafe(), has_more=more)
            else:
                return AnnoListMessage(anno_list=anno_message_list, has_more=more)
        else:
            return AnnoListMessage(anno_list=[])