def app_update():
    if request.method == api.post:
        # Init Resource Manager
        res_man = ResourceManager(config.RES_PATH, config.TEMP_PATH)

        try:
            app_helper.validate_app_fields(request.form, check_id=True)
            parsed_theme = theme_helper.get_theme_from_data(request.form)
            theme_helper.validate_theme_fields(parsed_theme)
            index = request.form[app_helper.FIELD_ID]
        except BaseError as e:
            traceback.print_exc()
            error_response = e.generate_error()
            logging.error(error_response)
            return error_response
        except Exception as e:
            traceback.print_exc()
            error_response = BaseError.generate_base_error(data=e.args)
            logging.error(msg=error_response)
            return error_response

        try:
            # Variables for database
            app_db = ApplicationRepository(config.DATA_URL)
            theme_db = theme_rep.ThemeRepository(config.DATA_URL)

            # Theme
            theme = theme_helper.parse_theme(
                sort_dict(parsed_theme))  # Dict -> Sort dict -> Theme

            # Application
            old_app = app_db.get_app_by_id(index)  # App from index
            old_bundle = old_app.bundle  # old sku

            result = app_helper.generate_app_json(request.form,
                                                  theme.hash)  # Form -> JSON
            application = app_helper.parse_app_by_json(result)  # JSON -> App
            application.id = index

            # Commit DB
            app_db.update_app(application)  # Update app in DB
            theme_db.update_theme(theme)  # Update theme in DB
        except Exception as e:
            return DataBaseError(subcode=DataBaseError.duplicate_code,
                                 data=e.args).generate_error()

        try:
            res_man.update_app_res(request.files, old_bundle,
                                   application.bundle)  # Update Res
            ResourceManager.create_app_icon(request.files, config.STATIC_PATH,
                                            application.bundle)
            return redirect(merge(api.get_app_info_num, index))
        except BaseError as e:
            traceback.print_exc()
            error_response = e.generate_error()
            logging.error(error_response)
            return error_response

    return redirect(api.get_app_list)
Пример #2
0
def driver_app_update():
    if request.method == api.post:
        # Init Resource Manager
        res_man = ResourceManager(config.RES_PATH, config.TEMP_PATH)

        try:
            from backend.model.helper import app_helper
            index = request.form[app_helper.FIELD_ID]
        except BaseError as e:
            traceback.print_exc()
            error_response = e.generate_error()
            logging.error(error_response)
            return error_response
        except Exception as e:
            traceback.print_exc()
            error_response = BaseError.generate_base_error(data=e.args)
            logging.error(msg=error_response)
            return error_response

        try:
            # Variables for database
            app_db = DriverApplicationRepository(config.DATA_URL)

            # Application
            old_app = app_db.get_app_by_id(index)  # App from index
            old_bundle = old_app.bundle  # old sku

            print(f"form {request.form}")
            result = driver_app_helper.generate_app_json(
                request.form)  # Form -> JSON
            print(f"result {result}")
            application = driver_app_helper.parse_app_by_json(
                result)  # JSON -> App
            application.id = index

            # Commit DB
            app_db.update_app(application)  # Update app in DB
        except Exception as e:
            return DataBaseError(subcode=DataBaseError.duplicate_code,
                                 data=e.args).generate_error()

        try:
            res_man.update_app_res(request.files, old_bundle,
                                   application.bundle)  # Update Res
            ResourceManager.create_app_icon(request.files, config.STATIC_PATH,
                                            application.bundle)
            return redirect(f"/driver_app_info/{index}")
        except BaseError as e:
            traceback.print_exc()
            error_response = e.generate_error()
            logging.error(error_response)
            return error_response

    return redirect(api.get_app_list)