Exemple #1
0
def waterfall():
    if request.method == "GET":
        return abort(404)
    res = dict(code=1, msg=None)
    #: 依次根据ctime、filename排序
    sort = request.args.get("sort") or "desc"
    #: 符合人类习惯的page,第一页是1(程序计算需要减1)
    page = request.args.get("page") or 1
    #: 返回数据条数
    limit = request.args.get("limit") or 10
    #: 管理员账号读取所有图片数据
    is_mgr = is_true(request.args.get("is_mgr"))
    try:
        page = int(page) - 1
        limit = int(limit)
        if page < 0:
            raise ValueError
    except (ValueError, TypeError):
        res.update(code=2, msg="Parameter error")
    else:
        if g.userinfo.username:
            if is_mgr and g.is_admin:
                uk = rsp("index", "global")
            else:
                uk = rsp("index", "user", g.userinfo.username)
            pipe = g.rc.pipeline()
            for sha in g.rc.smembers(uk):
                pipe.hgetall(rsp("image", sha))
            try:
                result = pipe.execute()
            except RedisError:
                res.update(msg="Program data storage service error")
            else:
                data = []
                if result and isinstance(result, (tuple, list)):
                    for i in result:
                        i.update(
                            senders=json.loads(i["senders"]),
                            ctime=int(i["ctime"]),
                        )
                        data.append(i)
                data = sorted(data,
                              key=lambda k:
                              (k.get('ctime', 0), k.get('filename', '')),
                              reverse=False if sort == "asc" else True)
                count = len(data)
                data = ListEqualSplit(data, limit)
                pageCount = len(data)
                if page < pageCount:
                    res.update(code=0,
                               count=count,
                               data=data[page],
                               pageCount=pageCount)
                else:
                    res.update(code=3, msg="No data")
        else:
            res.update(msg="No valid username found")
    return res
Exemple #2
0
def userapp():
    """管理接口"""
    res = dict(msg=None, code=1)
    if request.method == "GET":
        # 定义参数
        sort = request.args.get("sort") or "desc"
        page = request.args.get("page") or 1
        limit = request.args.get("limit") or 10
        # 参数检查
        try:
            page = int(page)
            limit = int(limit)
            page -= 1
            if page < 0:
                raise
        except:
            res.update(code=2, msg="There are invalid parameters")
        else:
            # 从封装类中获取数据
            res.update(g.api.userapp.listUserApp())
            data = res.get("data")
            if data and isinstance(data, (list, tuple)):
                data = [i for i in sorted(data, reverse=False if sort == "asc" else True)]
                count = len(data)
                data = ListEqualSplit(data, limit)
                pageCount = len(data)
                if page < pageCount:
                    res.update(code=0, data=data[page], pageCount=pageCount, page=page, limit=limit, count=count)
                else:
                    res.update(code=3, msg="There are invalid parameters")
            else:
                res.update(code=4, msg="No data")
    elif request.method == "POST":
        name = request.form.get("name")
        description = request.form.get("description")
        app_redirect_url = request.form.get("app_redirect_url")
        res.update(g.api.userapp.createUserApp(name=name, description=description, app_redirect_url=app_redirect_url))
    elif request.method == "PUT":
        name = request.form.get("name")
        description = request.form.get("description")
        app_redirect_url = request.form.get("app_redirect_url")
        res.update(g.api.userapp.updateUserApp(name=name, description=description, app_redirect_url=app_redirect_url))
    elif request.method == "DELETE":
        name = request.form.get("name")
        res.update(g.api.userapp.deleteUserApp(name=name))
        FastPushMessage(res, "您于<i>{}</i>删除了一个SSO客户端应用:<strong>{}</strong>".format(timestamp_to_timestring(get_current_timestamp()), name))
    logger.info(res)
    return jsonify(dfr(res))
Exemple #3
0
def wx_view():
    """获取图片数据(以redis为基准)"""
    res = dict(code=-1, msg=None)
    Action = request.args.get("Action")
    # 公共函数
    _get_pics = lambda: [
        g.redis.hgetall("{}:{}".format(GLOBAL['ProcessName'], imgId))
        for imgId in list(g.redis.smembers(current_app.config["picKey"]))
    ]
    # GET请求段
    if request.method == "GET":
        if Action == "getList":
            # 获取图片列表
            sort = request.args.get("sort") or "desc"
            page = request.args.get("page") or 0
            limit = request.args.get("limit") or 10
            # 参数检查
            try:
                page = int(page)
                limit = int(limit)
            except:
                res.update(code=2, msg="Invalid page or limit")
            else:
                data = _get_pics()
                if data:
                    data = sorted(data,
                                  key=lambda k:
                                  (k.get('ctime', 0), k.get('imgUrl', 0)),
                                  reverse=False if sort == "asc" else True)
                    WX_LABEL = SYSTEM["WX_LABEL"]
                    if WX_LABEL:
                        data = [
                            i for i in data
                            if i.get("label", current_app.
                                     config["labelDefault"]) == WX_LABEL
                        ]
                    data = ListEqualSplit(data, limit)
                    pageCount = len(data)
                    if page < pageCount:
                        res.update(code=0,
                                   data=data[page],
                                   pageCount=pageCount)
                    else:
                        res.update(code=3, msg="No more")
                else:
                    res.update(code=4, msg="No data")
    return jsonify(res)
Exemple #4
0
    def blog_get_single_index(self, sort="desc", limit=None, page=0, length=5):
        "获取所有文章简单数据索引"

        res = {"msg": None, "data": [], "code": 0, "page": {}}
        LIMIT = "LIMIT " + str(limit) if limit else ""
        sql = "SELECT id,title,create_time,update_time,tag,author,catalog FROM blog_article ORDER BY id %s %s" % (
            sort, LIMIT)
        logger.api.info("query single index SQL: %s" % sql)
        try:
            page = int(page)
            blog = self.mysql_read.query(sql)
            data = ListEqualSplit(blog, length)
            length = int(length)
            res.update(statistics=len(blog))
        except Exception, e:
            logger.api.error(e, exc_info=True)
            res.update(msg="query single index fail", code=100006)
Exemple #5
0
def api_view():
    """获取图片数据(以redis为基准)"""
    res = dict(code=-1, msg=None)
    Action = request.args.get("Action")
    # GET请求段
    if request.method == "GET":
        if Action == "getList":
            # 获取图片列表
            sort = request.args.get("sort") or "desc"
            page = request.args.get("page") or 0
            length = request.args.get("length") or 10
            # 参数检查
            try:
                page = int(page)
                length = int(length)
            except:
                res.update(code=2, msg="Invalid page or length")
            else:
                data = [
                    g.redis.hgetall("{}:{}".format(GLOBAL['ProcessName'],
                                                   imgId))
                    for imgId in list(g.redis.smembers(picKey))
                ]
                if data:
                    data = [
                        i for i in
                        sorted(data,
                               key=lambda k:
                               (k.get('ctime', 0), k.get('imgUrl', 0)),
                               reverse=False if sort == "asc" else True)
                    ]
                    data = ListEqualSplit(data, length)
                    pageCount = len(data)
                    if page < pageCount:
                        res.update(code=0,
                                   data=data[page],
                                   pageCount=pageCount,
                                   page=page,
                                   length=length)
                    else:
                        res.update(code=3,
                                   msg="IndexOut with page {}".format(page))
                else:
                    res.update(code=4, msg="No data")
        elif Action == "getInfo":
            # 获取系统相关信息
            data = dict(site=g.site, imageNumber=g.redis.scard(picKey))
            res.update(data=data, code=0)
        elif Action == "getOne":
            # 获取随机一张图片
            res.update(data=g.redis.hgetall("{}:{}".format(
                GLOBAL['ProcessName'], g.redis.srandmember(picKey))),
                       code=0)
    elif request.method == "POST":
        if Action == "setSystem":
            # 更新系统配置
            data = {
                k: v
                for k, v in request.form.iteritems()
                if k in ("site_TitleSuffix", "site_RssTitle", "site_License",
                         "site_Copyright", "author_Email", "github",
                         "sys_Close", "sso_AllowedUsers", "site_UploadMax")
            }
            res.update(setSystem(g.redis, sysKey, **data))
    logger.debug(res)
    return jsonify(res)
Exemple #6
0
def waterfall():
    res = dict(code=1, msg=None)
    #: 依次根据ctime、filename排序
    sort = request.args.get("sort") or "desc"
    #: 符合人类习惯的page,第一页是1(程序计算需要减1)
    page = request.args.get("page") or 1
    #: 返回数据条数
    limit = request.args.get("limit") or 10
    #: 管理员账号读取所有图片数据
    is_mgr = is_true(request.args.get("is_mgr"))
    #: 相册,当album不为空时,近返回此相册数据,允许逗号分隔多个
    album = request.args.get("album", request.form.get("album"))
    try:
        page = int(page) - 1
        limit = int(limit)
        if page < 0:
            raise ValueError
    except (ValueError, TypeError):
        res.update(code=2, msg="Parameter error")
    else:
        if g.userinfo.username:
            if is_mgr and g.is_admin:
                uk = rsp("index", "global")
            else:
                uk = rsp("index", "user", g.userinfo.username)
            pipe = g.rc.pipeline()
            for sha in g.rc.smembers(uk):
                pipe.hgetall(rsp("image", sha))
            try:
                result = pipe.execute()
            except RedisError:
                res.update(msg="Program data storage service error")
            else:
                #: 最终返回的经过过滤、排序等处理后的数据
                data = []
                #: 该用户或管理员级别所能查看的所有相册
                albums = []
                ask_albums = parse_valid_comma(album)
                if result and isinstance(result, (tuple, list)):
                    for i in result:
                        albums.append(i.get("album"))
                        i.update(
                            senders=json.loads(i["senders"]),
                            ctime=int(i["ctime"]),
                        )
                        if ask_albums:
                            if i.get("album") in ask_albums:
                                data.append(i)
                        else:
                            data.append(i)
                data = sorted(data,
                              key=lambda k:
                              (k.get('ctime', 0), k.get('filename', '')),
                              reverse=False if sort == "asc" else True)
                count = len(data)
                data = ListEqualSplit(data, limit)
                pageCount = len(data)
                if page < pageCount:
                    res.update(
                        code=0,
                        count=count,
                        data=data[page],
                        pageCount=pageCount,
                        albums=list(set([i for i in albums if i])),
                    )
                else:
                    res.update(code=3, msg="No data")
        else:
            res.update(msg="No valid username found")
    return res
Exemple #7
0
         res.update(code=2, msg="Invalid page or limit")
     else:
         data = _get_pics()
         if data:
             data = sorted(data,
                           key=lambda k:
                           (k.get('ctime', 0), k.get('imgUrl', 0)),
                           reverse=False if sort == "asc" else True)
             if label:
                 data = [
                     i for i in data
                     if i.get("label", current_app.
                              config["labelDefault"]) == label
                 ]
             count = len(data)
             data = ListEqualSplit(data, limit)
             pageCount = len(data)
             if page < pageCount:
                 res.update(code=0,
                            data=data[page],
                            pageCount=pageCount)
             else:
                 res.update(code=3,
                            msg="IndexOut with page {}".format(page))
         else:
             res.update(code=4, msg="No data")
 elif Action == "getInfo":
     # 获取系统相关信息
     data = dict(site=g.site,
                 imageNumber=g.redis.scard(
                     current_app.config["picKey"]))