예제 #1
0
def release(app, version):
    try:
        valid_auth_code()

        valid_app_owner(app)

        beta = frappe.get_value('IOT Application Version', {
            "app": app,
            "version": version
        }, "beta")
        if beta == 0:
            frappe.response.update({
                "ok": False,
                "data": "version_already_released"
            })
        else:
            # Currently we change the beta flag directly
            doc_name = frappe.get_value('IOT Application Version', {
                "app": app,
                "version": version
            }, "name")
            doc = frappe.get_doc('IOT Application Version', doc_name)
            doc.set('beta', 0)
            doc.save(ignore_permissions=True)
            frappe.response.update({"ok": True, "data": as_dict(doc)})

    except Exception as ex:
        frappe.response.update({"ok": False, "error": str(ex)})
예제 #2
0
def read(name):
    try:
        valid_auth_code()
        device = frappe.get_doc('IOT Device', name)
        if not device.has_permission("read"):
            throw("has_no_permission")

        frappe.response.update({"ok": True, "data": as_dict(device)})
    except Exception as ex:
        frappe.response.update({"ok": False, "error": str(ex)})
예제 #3
0
def read(name):
    try:
        valid_auth_code()
        doc = frappe.get_doc("IOT Device Share", name)
        if doc.has_permission("write"):
            throw("has_no_permission")

        frappe.response.update({"ok": True, "data": as_dict(doc)})
    except Exception as ex:
        frappe.response.update({"ok": False, "error": str(ex)})
예제 #4
0
def list():
    try:
        valid_auth_code()

        data = []
        doc = frappe.get_doc("IOT Application Favorites", frappe.session.user)
        for d in doc.favorites:
            data.append(as_dict(frappe.get_doc("IOT Application", d.app)))

        frappe.response.update({"ok": True, "data": data})
    except Exception as ex:
        frappe.response.update({"ok": False, "error": str(ex)})
예제 #5
0
def create():
    try:
        valid_auth_code()
        data = get_post_json_data()
        data.update({
            "doctype": "IOT Application Conf",
            "developer": frappe.session.user
        })

        doc = frappe.get_doc(data).insert()

        frappe.response.update({"ok": True, "data": as_dict(doc)})
    except Exception as ex:
        frappe.response.update({"ok": False, "error": str(ex)})
예제 #6
0
def list(conf):
    try:
        valid_auth_code()
        version_list = []
        for d in frappe.get_all("IOT Application Conf Version",
                                "name", {"conf": conf},
                                order_by="version desc"):
            version_list.append(
                as_dict(frappe.get_doc("IOT Application Conf Version",
                                       d.name)))

        frappe.response.update({"ok": True, "data": version_list})
    except Exception as ex:
        frappe.response.update({"ok": False, "error": str(ex)})
예제 #7
0
def list(conf_type='Template'):
    try:
        valid_auth_code()
        apps = []
        filters = {"developer": frappe.session.user, "type": conf_type}
        for d in frappe.get_all("IOT Application Conf",
                                "name",
                                filters=filters,
                                order_by="modified desc"):
            apps.append(as_dict(frappe.get_doc("IOT Application Conf",
                                               d.name)))

        frappe.response.update({"ok": True, "data": apps})
    except Exception as ex:
        frappe.response.update({"ok": False, "error": str(ex)})
예제 #8
0
def update(name, title, comment):
    try:
        if frappe.request.method != "POST":
            throw("method_must_be_post")
        comment = str(comment).replace('\n', '<br>')

        doc = update_doc("IOT Application Comment", {
            "name": name,
            "title": title,
            "comment": comment
        })

        frappe.response.update({"ok": True, "data": as_dict(doc)})
    except Exception as ex:
        frappe.response.update({"ok": False, "error": str(ex)})
예제 #9
0
def list(app):
    try:
        apps = []
        filters = {"app": app}
        for d in frappe.get_all("IOT Application Comment",
                                "name",
                                filters=filters,
                                order_by="modified desc"):
            apps.append(
                as_dict(frappe.get_doc("IOT Application Comment", d.name),
                        keep_owner=True))

        frappe.response.update({"ok": True, "data": apps})
    except Exception as ex:
        frappe.response.update({"ok": False, "error": str(ex)})
예제 #10
0
def create(app, title, comment, reply_to):
    try:
        if frappe.request.method != "POST":
            throw("method_must_be_post")
        comment = str(comment).replace('\n', '<br>')

        doc = frappe.get_doc({
            "doctype": "IOT Application Comment",
            "app": app,
            "reply_to": reply_to,
            "title": title,
            "comment": comment,
        }).insert()

        frappe.response.update({"ok": True, "data": as_dict(doc)})
    except Exception as ex:
        frappe.response.update({"ok": False, "error": str(ex)})
예제 #11
0
def list():
    try:
        valid_auth_code()
        apps = []
        filters = {"owner": frappe.session.user}
        for d in frappe.get_all("Cloud Company Requisition",
                                "name",
                                filters=filters,
                                order_by="modified desc"):
            apps.append(
                as_dict(frappe.get_doc("Cloud Company Requisition", d.name),
                        keep_owner=True,
                        keep_docstatus=True))

        frappe.response.update({"ok": True, "data": apps})
    except Exception as ex:
        frappe.response.update({"ok": False, "error": str(ex)})
예제 #12
0
def list(name, version=None, developer=None):
    try:
        filters = {"fork_from": name}
        if version:
            filters.update({"fork_version": version})
        if developer:
            filters.update({"developer": developer})

        apps = []
        for d in frappe.get_all("IOT Application",
                                "name",
                                filters=filters,
                                order_by="modified desc"):
            apps.append(as_dict(frappe.get_doc("IOT Application", d.name)))

        frappe.response.update({"ok": True, "data": apps})
    except Exception as ex:
        frappe.response.update({"ok": False, "error": str(ex)})
예제 #13
0
def create(conf, version, data, comment):
    try:
        valid_auth_code()
        if frappe.request.method != "POST":
            throw("method_must_be_post")

        valid_conf_owner(conf)

        doc = frappe.get_doc({
            "doctype": "IOT Application Conf Version",
            "conf": conf,
            "version": version,
            "data": data,
            "comment": comment
        }).insert()

        frappe.response.update({"ok": True, "data": as_dict(doc)})
    except Exception as ex:
        frappe.response.update({"ok": False, "error": str(ex)})
예제 #14
0
def create():
    try:
        if frappe.request.method != "POST":
            throw("method_must_be_post")

        if 'Company Admin' not in frappe.get_roles():
            throw("not_company_admin")

        data = get_post_json_data()
        data.update({
            "doctype": "IOT User Application",
            "owner": frappe.session.user,
            "public": 0
        })

        doc = frappe.get_doc(data).insert()

        frappe.response.update({"ok": True, "data": as_dict(doc)})
    except Exception as ex:
        frappe.response.update({"ok": False, "error": str(ex)})
예제 #15
0
def list(app, beta=1, start_version=0):
    try:
        valid_auth_code()
        version_list = []
        filters = {"app": app}
        if int(beta) == 0:
            filters.update({"beta": 0})
        if int(start_version) > 0:
            filters.update({"version": ['>=', int(start_version)]})

        for d in frappe.get_all("IOT Application Version",
                                "name",
                                filters,
                                order_by="version desc"):
            version_list.append(
                as_dict(frappe.get_doc("IOT Application Version", d.name)))

        frappe.response.update({"ok": True, "data": version_list})
    except Exception as ex:
        frappe.response.update({"ok": False, "error": str(ex)})
예제 #16
0
def list():
    try:
        valid_auth_code()
        apps = []
        filters = {"developer": frappe.session.user}
        for d in frappe.get_all("IOT Application",
                                "name",
                                filters=filters,
                                order_by="modified desc"):
            apps.append(
                as_dict(frappe.get_doc("IOT Application", d.name),
                        include_tags=True))

        for app in apps:
            app.installed = frappe.get_value("IOT Application Counter",
                                             app.name, "installed") or 0

        frappe.response.update({"ok": True, "data": apps})
    except Exception as ex:
        frappe.response.update({"ok": False, "error": str(ex)})
예제 #17
0
def list():
    try:
        if 'Company Admin' not in frappe.get_roles():
            throw("not_company_admin")

        companies = list_admin_companies(frappe.session.user)
        apps = []
        for d in frappe.get_all("IOT User Application", "name"):
            user = frappe.get_value("IOT User Application", d[0], "on_behalf")
            if not user:
                continue
            company = frappe.get_value("Cloud Employee", user, "company")
            if not company:
                continue
            if company in companies:
                apps.append(
                    as_dict(frappe.get_doc("IOT User Application", d.name)))

        frappe.response.update({"ok": True, "data": apps})
    except Exception as ex:
        frappe.response.update({"ok": False, "error": str(ex)})
예제 #18
0
def create(name, version=0, pre_conf=None):
    try:
        if frappe.request.method != "POST":
            throw("method_must_be_post")

        version = int(version)
        if version == 0:
            version = get_latest_version(name, beta=1)

        if not frappe.get_value('IOT Application Version', {
                "app": name,
                "version": version
        }, "name"):
            throw("version_not_exists")

        doc = frappe.get_doc("IOT Application", name)
        forked_doc = doc.fork(frappe.session.user, version, pre_conf)

        copy_forked_app_files(name, forked_doc.name, version)

        frappe.response.update({"ok": True, "data": as_dict(forked_doc)})
    except Exception as ex:
        frappe.response.update({"ok": False, "error": str(ex)})
예제 #19
0
def create():
    try:
        valid_auth_code()

        data = get_post_json_data()
        data.update({"doctype": "IOT Device Share"})

        if not frappe.has_permission(
                doctype="IOT Device", doc=data.get("device"), ptype='write'):
            throw("has_no_permission")
        ''' TODO: Change the permission implementation'''
        for d in frappe.db.get_values("IOT Device Share", {
                "device": data.get("device"),
                "share_to": frappe.session.user
        }, "name"):
            end_time = frappe.get_value("IOT Device Share", d[0], "end_time")
            if time_diff_in_seconds(end_time, get_datetime()) > 0:
                throw("cannot_share_the_shared_device")

        doc = frappe.get_doc(data).insert()

        frappe.response.update({"ok": True, "data": as_dict(doc)})
    except Exception as ex:
        frappe.response.update({"ok": False, "error": str(ex)})
예제 #20
0
def create():
    try:
        valid_auth_code()
        if frappe.request.method != "POST":
            throw("method_must_be_post")

        version = int(frappe.form_dict.version)
        app = frappe.form_dict.app
        comment = frappe.form_dict.comment or "Unknown comment"

        valid_app_owner(app)

        if not version:
            throw("version_not_found")

        if not app:
            throw("application_not_found")

        if not frappe.request.files:
            throw("file_not_found")

        if frappe.get_value("IOT Application Version", {
                "app": app,
                "version": version
        }, "name"):
            throw("version_duplicated")

        f = frappe.request.files[
            'app_file']  # 从表单的file字段获取文件,app_file为该表单的name值
        fname = secure_filename(repr(f.filename))

        if f and allowed_file(fname):  # 判断是否是允许上传的文件类型
            file_dir = get_app_release_path(app)

            ext = fname.rsplit('.', 1)[1].lower()  # 获取文件后缀
            ext_wanted = frappe.get_value("IOT Application", app, "app_ext")
            if ext != ext_wanted and ext_wanted != "tar.gz":
                throw("extension_incorrect")

            new_filename = os.path.join(file_dir,
                                        str(version) + '.' +
                                        ext_wanted)  # 修改了上传的文件名
            f.save(new_filename)  # 保存文件到upload目录
            '''
			Check version file (and automatically correct it?) Only for user application
			'''
            if ext_wanted == 'zip':
                from app_center.editor import editor_revert, editor_worksapce_version, zip_application
                editor_revert(app, version, False)
                got_ver = editor_worksapce_version(app)
                if got_ver != version:
                    os.remove(new_filename)
                    new_filename = zip_application(app, version)

            data = {
                "doctype": "IOT Application Version",
                "app": app,
                "version": version,
                "beta": 1,
                "comment": comment,
            }

            doc = None
            try:
                doc = frappe.get_doc(data).insert()
                os.system("md5sum " + new_filename + " > " + new_filename +
                          ".md5")
            except Exception as ex:
                from app_center.appmgr import remove_version_file
                remove_version_file(app, version)
                throw("creation_failed")

            copy_to_latest(app, version)

            frappe.response.update({"ok": True, "data": as_dict(doc)})
        else:
            throw("file_not_allowed!")
    except Exception as ex:
        frappe.response.update({"ok": False, "error": str(ex)})