Exemple #1
0
def api_file_upload():
    '''
    POST
        文件上传
        api返回json数据,格式默认如下:
        {'urls':[<url>, ...,<url>],
         'state':<'success' or 'error'>,
         'msg_type':<'s' or e'>,
         'msg':''
         }

        return_url_key: <str>, 自定义返回数据的urls的key, 默认'urls'
        return_state_key:<str>, 自定义返回数据的状态的key, 默认'state'
        return_success:<str or int>, 自定义返回数据成功的状态的值, 默认'success'
        return_error:<str or int>, 自定义返回数据错误的状态的值, 默认'error'

        prefix:<str>, 默认为“generic/”, 则会将文件放入到generic目录下
        save_temporary_url:<0 or 1>,默认为1, 如果
        :return:
    '''

    return_url_key = request.argget.all('return_url_key', "urls")
    return_state_key = request.argget.all('return_state_key', "state")
    return_success = request.argget.all('return_success', "success")
    return_error = request.argget.all('return_error', "error")
    prefix = request.argget.all('prefix', "generic/")
    save_temporary_url = request.argget.all('save_temporary_url', 1)

    data = file_upload(return_url_key=return_url_key,
                       return_state_key=return_state_key,
                       return_success=return_success,
                       return_error=return_error,
                       save_temporary_url=save_temporary_url,
                       prefix=prefix)
    return response_format(data)
def add_display_setting():
    """
    :return:
    """

    batch = request.argget.all("batch", False)
    name = request.argget.all("name")
    link = request.argget.all("link")
    link_open_new_tab = str_to_num(request.argget.all("link_open_new_tab", 1))
    link_name = request.argget.all("link_name")
    title = request.argget.all("title")
    text = request.argget.all("text", "")
    text_html = request.argget.all("text_html", "")
    code = request.argget.all("code", "")
    code_type = request.argget.all("code_type")
    ctype = request.argget.all("ctype")
    category_id = request.argget.all("category_id")
    data = {}
    category = "Default"

    if code_type == "json":
        code = json_to_pyseq(code)
    if category_id and category_id.lower() != "default":
        display_setting_category = mdbs["web"].db.category.find_one(
            {"_id": ObjectId(category_id)})
        if display_setting_category:
            category = display_setting_category["name"]
    elif not category_id or category_id.lower() == "default":
        category_id = ""

    s, r = arg_verify([(gettext("type"), ctype)],
                      only=get_config("category", "CATEGORY_TYPE").values())
    if not s:
        return r
    s, r = arg_verify([(gettext("name"), name)], required=True)
    if not s and not batch:
        return r

    # 如果有上传文件
    if request.files:
        data = file_upload(return_key=True,
                           prefix="multidisplay_setting/{}/".format(ctype))
        if data["msg_type"] != "s":
            return data

    theme_name = get_config("theme", "CURRENT_THEME_NAME")
    if not batch and mdbs["sys"].db.theme_display_setting.find_one(
        {
            "name": name,
            "type": ctype,
            "theme_name": theme_name
        }):
        type_alias = ctype
        for k, v in get_config("category", "CATEGORY_TYPE").items():
            if v == ctype:
                type_alias = k
                break
        data = {
            "msg":
            gettext('The type "{}" exists in the name "{}"').format(
                type_alias, name),
            "msg_type":
            "w",
            "custom_status":
            403
        }
    else:
        # 获取text_html使用的图片
        if text_html:
            srcs = richtext_extract_img(richtext=text_html)
        else:
            srcs = []
        text_imgs = clean_tempfile(user_id=current_user.str_id,
                                   type="image",
                                   keey_file=srcs)

        info = {
            "theme_name": theme_name,
            "category": category,
            "category_id": category_id,
            "link": link,
            "link_open_new_tab": link_open_new_tab,
            "link_name": link_name,
            "title": title,
            "text": text,
            "text_html": text_html,
            "code": code,
            "code_type": code_type,
            "switch": 0,
            "text_imgs": text_imgs,
            "type": ctype,
            "time": time.time()
        }
        if "keys" in data:
            for key in data["keys"]:
                rand_name = "{}_{}".format(name, uuid1())
                info["name"] = rand_name
                info["url"] = key
            mdbs["sys"].db.theme_display_setting.insert_one(info)
            data["msg"] = gettext("{} uploaded successfully").format(
                ctype.capitalize())
        else:
            info["name"] = name
            info["url"] = None
            mdbs["sys"].db.theme_display_setting.insert_one(info)
            data["msg"] = gettext("Added successfully").format(
                ctype.capitalize())
        data["msg_type"] = "s"
        data["custom_status"] = 201

    return data
def edit_display_setting():
    """
    :return:
    """
    display_setting_id = request.argget.all("id")
    name = request.argget.all("name")
    link = request.argget.all("link")
    link_name = request.argget.all("link_name")
    link_open_new_tab = str_to_num(request.argget.all("link_open_new_tab", 1))
    title = request.argget.all("title")
    text = request.argget.all("text", "")
    text_html = request.argget.all("text_html", "")
    code = request.argget.all("code", "")
    code_type = request.argget.all("code_type")
    switch = request.argget.all("switch")
    category_id = request.argget.all("category_id")
    s, r = arg_verify([("id", display_setting_id)], required=True)
    if not s:
        return r

    s, r = arg_verify([(gettext("name"), name)], required=True)
    if not s:
        return r

    if code_type == "json":
        code = json_to_pyseq(code)

    theme_name = get_config("theme", "CURRENT_THEME_NAME")
    old_display_setting = mdbs["sys"].db.theme_display_setting.find_one({
        "_id":
        ObjectId(display_setting_id),
        "theme_name":
        theme_name
    })

    # 如果只是更新图片, 则保存上传图片
    if request.files:
        data = file_upload(return_key=True,
                           prefix="multidisplay_setting/{}/".format(
                               old_display_setting["type"]))
        if data["msg_type"] != "s":
            return data
        else:
            # 删除旧的图片
            if "url" in old_display_setting:
                file_del(old_display_setting["url"])
            temp_url = None
            if "keys" in data:
                for key in data["keys"]:
                    temp_url = key
                if temp_url:
                    mdbs["sys"].db.theme_display_setting.update_one(
                        {
                            "_id": ObjectId(display_setting_id),
                            "theme_name": theme_name
                        }, {"$set": {
                            "url": temp_url
                        }})
                    data = {
                        "msg": gettext("Update picture successfully"),
                        "msg_type": "s",
                        "custom_status": 201
                    }
                else:
                    data = {
                        "msg": gettext("Failed to update"),
                        "msg_type": "e",
                        "custom_status": 400
                    }
            return data

    category = "Default"
    not_updated_category = False
    if category_id is None:
        # 不更新category
        not_updated_category = True
    elif category_id and category_id.lower() != "default":
        display_setting_category = mdbs["web"].db.category.find_one(
            {"_id": ObjectId(category_id)})
        if display_setting_category:
            category = display_setting_category["name"]

    elif category_id.lower() == "default":
        category_id = ""

    # 处理其他字段更新
    query = {
        "name": name,
        "type": old_display_setting["type"],
        "_id": {
            "$ne": ObjectId(display_setting_id)
        },
        "theme_name": theme_name
    }
    if mdbs["sys"].db.theme_display_setting.find_one(query):
        type_alias = old_display_setting["type"]

        for k, v in get_config("category", "CATEGORY_TYPE").items():
            if v == old_display_setting["type"]:
                type_alias = k
                break
        data = {
            "msg":
            gettext('The type "{}" exists in the name "{}"').format(
                type_alias, name),
            "msg_type":
            "w",
            "custom_status":
            403
        }
    else:
        # 获取text_html使用的图片
        old_imgs = old_display_setting.get("text_imgs", [])
        if text_html:
            srcs = richtext_extract_img(richtext=text_html)
        else:
            srcs = []

        text_imgs = clean_tempfile(user_id=current_user.str_id,
                                   type="image",
                                   old_file=old_imgs,
                                   keey_file=srcs)
        info = {
            "name": name,
            "link": link,
            "link_name": link_name,
            "link_open_new_tab": link_open_new_tab,
            "title": title,
            "text": text,
            "text_html": text_html,
            "code": code,
            "code_type": code_type,
            "text_imgs": text_imgs,
        }
        if switch is not None and switch.isdigit():
            info["switch"] = int(switch)
        if not not_updated_category:
            info["category_id"] = category_id
            info["category"] = category

        r = mdbs["sys"].db.theme_display_setting.update_one(
            {
                "_id": ObjectId(display_setting_id),
                "theme_name": theme_name
            }, {"$set": info})
        if r.modified_count:
            data = {
                "msg": gettext("Modify the success"),
                "msg_type": "s",
                "custom_status": 201
            }
        else:
            data = {
                "msg": gettext("The content is not modified"),
                "msg_type": "w",
                "custom_status": 400
            }

    return data
Exemple #4
0
def add_media(user_id=None):
    """
    :param user_id: 媒体为管理端(系统)所有时需要传入user_id = 0
    :return:
    """

    if user_id is None:
        user_id = current_user.str_id
    batch = request.argget.all("batch", False)
    name = request.argget.all("name")
    link = request.argget.all("link")
    link_open_new_tab = str_to_num(request.argget.all("link_open_new_tab", 1))
    link_name = request.argget.all("link_name")
    title = request.argget.all("title")
    text = request.argget.all("text", "")
    text_html = request.argget.all("text_html", "")
    ctype = request.argget.all("ctype")
    category_id = request.argget.all("category_id")
    data = {}
    category = "Default"

    if category_id and category_id.lower() != "default":
        media_category = mdb_web.db.category.find_one(
            {"_id": ObjectId(category_id)})
        if media_category:
            category = media_category["name"]
    elif not category_id or category_id.lower() == "default":
        category_id = ""

    s, r = arg_verify([(gettext("type"), ctype)],
                      only=get_config("category", "CATEGORY_TYPE").values())
    if not s:
        return r
    s, r = arg_verify([(gettext("name"), name)], required=True)
    if not s and not batch:
        return r

    # 如果有上传文件
    if request.files:
        data = file_upload(return_key=True,
                           prefix="multimedia/{}/".format(ctype))
        if data["msg_type"] != "s":
            return data

    if not batch and mdb_web.db.media.find_one({"name": name, "type": ctype}):
        type_alias = ctype
        for k, v in get_config("category", "CATEGORY_TYPE").items():
            if v == ctype:
                type_alias = k
                break
        data = {
            "msg":
            gettext('The type "{}" exists in the name "{}"').format(
                type_alias, name),
            "msg_type":
            "w",
            "http_status":
            403
        }
    else:
        # 获取text_html使用的图片
        text_imgs = []
        if text_html:
            srcs = richtext_extract_img(richtext=text_html)
        else:
            srcs = []
        text_imgs = clean_tempfile(user_id=current_user.str_id,
                                   type="image",
                                   keey_file=srcs)

        info = {
            "category": category,
            "category_id": category_id,
            "link": link,
            "link_open_new_tab": link_open_new_tab,
            "link_name": link_name,
            "title": title,
            "text": text,
            "text_html": text_html,
            "text_imgs": text_imgs,
            "type": ctype,
            "time": time.time(),
            "user_id": user_id
        }
        if "keys" in data:
            for key in data["keys"]:
                rand_name = "{}_{}".format(name, uuid1())
                info["name"] = rand_name
                info["url"] = key
            mdb_web.db.media.insert_one(info)
            data["msg"] = gettext("{} uploaded successfully").format(
                ctype.capitalize())
        else:
            info["name"] = name
            info["url"] = None
            mdb_web.db.media.insert_one(info)
            data["msg"] = gettext("Added successfully").format(
                ctype.capitalize())
        data["msg_type"] = "s"
        data["http_status"] = 201

    return data
Exemple #5
0
def edit_media(user_id=None):
    """
    :param user_id: 媒体为管理端(系统)所有时需要传入user_id = 0
    :return:
    """

    if user_id is None:
        user_id = current_user.str_id
    media_id = request.argget.all("id")
    name = request.argget.all("name")
    link = request.argget.all("link")
    link_name = request.argget.all("link_name")
    link_open_new_tab = str_to_num(request.argget.all("link_open_new_tab", 1))
    title = request.argget.all("title")
    text = request.argget.all("text", "")
    text_html = request.argget.all("text_html", "")
    category_id = request.argget.all("category_id")
    s, r = arg_verify([("id", media_id)], required=True)
    if not s:
        return r

    s, r = arg_verify([(gettext("name"), name)], required=True)
    if not s:
        return r

    old_media = mdb_web.db.media.find_one({"_id": ObjectId(media_id)})

    # 如果只是更新图片, 则保存上传图片
    if request.files:
        data = file_upload(return_key=True,
                           prefix="multimedia/{}/".format(old_media["type"]))
        if data["msg_type"] != "s":
            return data
        else:
            # 删除旧的图片
            file_del(old_media["url"])
            temp_url = None
            if "keys" in data:
                for key in data["keys"]:
                    temp_url = key
                if temp_url:
                    mdb_web.db.media.update_one(
                        {
                            "_id": ObjectId(media_id),
                            "user_id": user_id
                        }, {"$set": {
                            "url": temp_url
                        }})
                    data = {
                        "msg": gettext("Update picture successfully"),
                        "msg_type": "s",
                        "http_status": 201
                    }
                else:
                    data = {
                        "msg": gettext("Failed to update"),
                        "msg_type": "e",
                        "http_status": 400
                    }
            return data

    category = "Default"
    not_updated_category = False
    if category_id is None:
        # 不更新category
        not_updated_category = True
    elif category_id and category_id.lower() != "default":
        media_category = mdb_web.db.category.find_one(
            {"_id": ObjectId(category_id)})
        if media_category:
            category = media_category["name"]

    elif category_id.lower() == "default":
        category_id = ""

    # 处理其他字段更新
    query = {
        "name": name,
        "type": old_media["type"],
        "_id": {
            "$ne": ObjectId(media_id)
        }
    }
    if mdb_web.db.media.find_one(query):
        type_alias = old_media["type"]

        for k, v in get_config("category", "CATEGORY_TYPE").items():
            if v == old_media["type"]:
                type_alias = k
                break
        data = {
            "msg":
            gettext('The type "{}" exists in the name "{}"').format(
                type_alias, name),
            "msg_type":
            "w",
            "http_status":
            403
        }
    else:
        # 获取text_html使用的图片
        old_imgs = old_media.get("text_imgs", [])
        if text_html:
            srcs = richtext_extract_img(richtext=text_html)
        else:
            srcs = []

        text_imgs = clean_tempfile(user_id=current_user.str_id,
                                   type="image",
                                   old_file=old_imgs,
                                   keey_file=srcs)
        info = {
            "name": name,
            "link": link,
            "link_name": link_name,
            "link_open_new_tab": link_open_new_tab,
            "title": title,
            "text": text,
            "text_html": text_html,
            "text_imgs": text_imgs
        }

        if not not_updated_category:
            info["category_id"] = category_id
            info["category"] = category

        r = mdb_web.db.media.update_one(
            {
                "_id": ObjectId(media_id),
                "user_id": user_id
            }, {"$set": info})
        if r.modified_count:
            data = {
                "msg": gettext("Modify the success"),
                "msg_type": "s",
                "http_status": 201
            }
        else:
            data = {
                "msg": gettext("The content is not modified"),
                "msg_type": "w",
                "http_status": 400
            }

    return data