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)})
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)})
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)})
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)})
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)})
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)})
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)})
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)})
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)})
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)})
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)})
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)})
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)})
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)})
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)})
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)})
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)})
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)})
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)})
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)})