From c52b2aaf77a269b4926ca31a0a171ca5210dc895 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Tue, 23 Apr 2024 20:05:53 +0200 Subject: [PATCH] Format Python code with Black (#2252) Co-authored-by: tituspijean <8769166+tituspijean@users.noreply.github.com> --- tools/app_generator/app.py | 368 +++++++++++++++++++++++-------------- 1 file changed, 228 insertions(+), 140 deletions(-) diff --git a/tools/app_generator/app.py b/tools/app_generator/app.py index 95aa4041..d3fb9c9e 100644 --- a/tools/app_generator/app.py +++ b/tools/app_generator/app.py @@ -39,7 +39,7 @@ from wtforms.validators import ( from flask_babel import Babel from flask_babel import gettext, lazy_gettext -from flask import redirect, request, make_response # Language swap by redirecting +from flask import redirect, request, make_response # Language swap by redirecting # Markdown to HTML - for debugging purposes from misaka import Markdown, HtmlRenderer @@ -63,32 +63,34 @@ cors = CORS(app) environment = j2.Environment(loader=j2.FileSystemLoader("templates/")) # Handle translations -BABEL_TRANSLATION_DIRECTORIES='translations' +BABEL_TRANSLATION_DIRECTORIES = "translations" babel = Babel() -LANGUAGES = { - 'en': gettext('English'), - 'fr': gettext('French') -} +LANGUAGES = {"en": gettext("English"), "fr": gettext("French")} + @app.context_processor def inject_conf_var(): return dict(AVAILABLE_LANGUAGES=LANGUAGES) + def configure(app): babel.init_app(app, locale_selector=get_locale) - app.config['LANGUAGES'] = LANGUAGES + app.config["LANGUAGES"] = LANGUAGES + + def get_locale(): - print(request.accept_languages.best_match(app.config['LANGUAGES'].keys())) - print(request.cookies.get('lang', 'en')) - #return 'en' # to test - #return 'fr' - if request.args.get('language'): - print(request.args.get('language')) - session['language'] = request.args.get('language') - return request.cookies.get('lang', 'en') - #return request.accept_languages.best_match(app.config['LANGUAGES'].keys()) # The result is based on the Accept-Language header. For testing purposes, you can directly return a language code, for example: return ‘de’ + print(request.accept_languages.best_match(app.config["LANGUAGES"].keys())) + print(request.cookies.get("lang", "en")) + # return 'en' # to test + # return 'fr' + if request.args.get("language"): + print(request.args.get("language")) + session["language"] = request.args.get("language") + return request.cookies.get("lang", "en") + # return request.accept_languages.best_match(app.config['LANGUAGES'].keys()) # The result is based on the Accept-Language header. For testing purposes, you can directly return a language code, for example: return ‘de’ + configure(app) @@ -119,22 +121,22 @@ def markdown_file_to_html_string(file): ### Forms + # Language selector. Not used (in GeneratorForm) until it's fixed or superseeded. # Use it in the HTML with {{ form_field(main_form.generator_language) }} class Translations(FlaskForm): generator_language = SelectField( - gettext("Select language"), - choices=[('none', "")]+[language for language in LANGUAGES.items()], - default=['en'], - id = 'selectLanguage' + gettext("Select language"), + choices=[("none", "")] + [language for language in LANGUAGES.items()], + default=["en"], + id="selectLanguage", ) + class GeneralInfos(FlaskForm): app_id = StringField( - Markup( - lazy_gettext("Application identifier (id)") - ), + Markup(lazy_gettext("Application identifier (id)")), description=lazy_gettext("Small caps and without spaces"), validators=[DataRequired(), Regexp("[a-z_1-9]+.*(? \ -Do not give the software name at the beginning, as it will be integrated an 'Overview' subpart''')), - validators=[Optional()], - render_kw={ - "class": "form-control", - "spellcheck": "false", - }, + Markup( + lazy_gettext( + """Type the content of DESCRIPTION.md file.
\ +Do not give the software name at the beginning, as it will be integrated an 'Overview' subpart""" + ) + ), + validators=[Optional()], + render_kw={ + "class": "form-control", + "spellcheck": "false", + }, ) disclaimer = TextAreaField( - lazy_gettext("Type the DISCLAIMER.md file content, which list warnings and attention points."), - validators=[Optional()], - render_kw={ - "class": "form-control", - "spellcheck": "false", - }, + lazy_gettext( + "Type the DISCLAIMER.md file content, which list warnings and attention points." + ), + validators=[Optional()], + render_kw={ + "class": "form-control", + "spellcheck": "false", + }, ) pre_install = TextAreaField( - lazy_gettext("Type the PRE_INSTALL.md file content"), - validators=[Optional()], - render_kw={ - "class": "form-control", - "spellcheck": "false", - }, + lazy_gettext("Type the PRE_INSTALL.md file content"), + validators=[Optional()], + render_kw={ + "class": "form-control", + "spellcheck": "false", + }, ) post_install = TextAreaField( - lazy_gettext("Type the POST_INSTALL.md file content"), - validators=[Optional()], - render_kw={ - "class": "form-control", - "spellcheck": "false", - }, + lazy_gettext("Type the POST_INSTALL.md file content"), + validators=[Optional()], + render_kw={ + "class": "form-control", + "spellcheck": "false", + }, ) pre_upgrade = TextAreaField( - lazy_gettext("Type the PRE_UPGRADE.md file content"), - validators=[Optional()], - render_kw={ - "class": "form-control", - "spellcheck": "false", - }, + lazy_gettext("Type the PRE_UPGRADE.md file content"), + validators=[Optional()], + render_kw={ + "class": "form-control", + "spellcheck": "false", + }, ) post_upgrade = TextAreaField( - lazy_gettext("Type the POST_UPGRADE.md file content"), - validators=[Optional()], - render_kw={ - "class": "form-control", - "spellcheck": "false", - }, + lazy_gettext("Type the POST_UPGRADE.md file content"), + validators=[Optional()], + render_kw={ + "class": "form-control", + "spellcheck": "false", + }, ) admin = TextAreaField( - lazy_gettext("Type the ADMIN.md file content"), - validators=[Optional()], - render_kw={ - "class": "form-control", - "spellcheck": "false", - }, + lazy_gettext("Type the ADMIN.md file content"), + validators=[Optional()], + render_kw={ + "class": "form-control", + "spellcheck": "false", + }, ) + class MoreAdvanced(FlaskForm): enable_change_url = BooleanField( lazy_gettext("Handle app install URL change (change_url script)"), default=True, render_kw={ - "title": lazy_gettext("Should changing the app URL be allowed ? (change_url change)") + "title": lazy_gettext( + "Should changing the app URL be allowed ? (change_url change)" + ) }, ) @@ -559,16 +607,22 @@ class MoreAdvanced(FlaskForm): lazy_gettext("Use logrotate for the app logs"), default=True, render_kw={ - "title": lazy_gettext("If the app generates logs, this option permit to handle their archival. Recommended.") + "title": lazy_gettext( + "If the app generates logs, this option permit to handle their archival. Recommended." + ) }, ) # TODO : specify custom log file # custom_log_file = "/var/log/$app/$app.log" "/var/log/nginx/${domain}-error.log" use_fail2ban = BooleanField( - lazy_gettext("Protect the application against brute force attacks (via fail2ban)"), + lazy_gettext( + "Protect the application against brute force attacks (via fail2ban)" + ), default=False, render_kw={ - "title": lazy_gettext("If the app generates failed connexions logs, this option allows to automatically banish the related IP after a certain number of failed password tries. Recommended.") + "title": lazy_gettext( + "If the app generates failed connexions logs, this option allows to automatically banish the related IP after a certain number of failed password tries. Recommended." + ) }, ) use_cron = BooleanField( @@ -592,14 +646,24 @@ class MoreAdvanced(FlaskForm): render_kw={ "placeholder": lazy_gettext("A regular expression"), "class": "form-control", - "title": lazy_gettext("Regular expression to check in the log file to activate failban (search for a line that indicates a credentials error)."), + "title": lazy_gettext( + "Regular expression to check in the log file to activate failban (search for a line that indicates a credentials error)." + ), }, ) ## Main form class GeneratorForm( - GeneralInfos, IntegrationInfos, UpstreamInfos, InstallQuestions, Ressources, SpecificTechnology, AppConfig, Documentation, MoreAdvanced + GeneralInfos, + IntegrationInfos, + UpstreamInfos, + InstallQuestions, + Ressources, + SpecificTechnology, + AppConfig, + Documentation, + MoreAdvanced, ): class Meta: @@ -607,17 +671,28 @@ class GeneratorForm( generator_mode = SelectField( lazy_gettext("Generator mode"), - description=lazy_gettext("In tutorial version, the generated app will contain additionnal comments to ease the understanding. In steamlined version, the generated app will only contain the necessary minimum."), - choices=[("simple", lazy_gettext("Streamlined version")), ("tutorial", lazy_gettext("Tutorial version"))], + description=lazy_gettext( + "In tutorial version, the generated app will contain additionnal comments to ease the understanding. In steamlined version, the generated app will only contain the necessary minimum." + ), + choices=[ + ("simple", lazy_gettext("Streamlined version")), + ("tutorial", lazy_gettext("Tutorial version")), + ], default="true", validators=[DataRequired()], ) submit_preview = SubmitField(lazy_gettext("Previsualise")) submit_download = SubmitField(lazy_gettext("Download the .zip")) - submit_demo = SubmitField(lazy_gettext('Fill with demo values'), render_kw={"onclick": "fillFormWithDefaultValues()", - "title": lazy_gettext("Generate a complete and functionnal minimalistic app that you can iterate from") - }) + submit_demo = SubmitField( + lazy_gettext("Fill with demo values"), + render_kw={ + "onclick": "fillFormWithDefaultValues()", + "title": lazy_gettext( + "Generate a complete and functionnal minimalistic app that you can iterate from" + ), + }, + ) #### Web pages @@ -627,7 +702,6 @@ def main_form_route(): main_form = GeneratorForm() app_files = [] - if request.method == "POST": if not main_form.validate_on_submit(): @@ -635,13 +709,16 @@ def main_form_route(): print(main_form.errors) return render_template( - "index.html", main_form=main_form, generator_info=GENERATOR_DICT, generated_files={} + "index.html", + main_form=main_form, + generator_info=GENERATOR_DICT, + generated_files={}, ) if main_form.submit_preview.data: submit_mode = "preview" elif main_form.submit_demo.data: - submit_mode = "demo" # TODO : for now this always trigger a preview. Not sure if that's an issue + submit_mode = "demo" # TODO : for now this always trigger a preview. Not sure if that's an issue else: submit_mode = "download" @@ -652,15 +729,15 @@ def main_form_route(): self.content = None app_files = [ - AppFile("manifest", "manifest.toml"), - AppFile("tests", "tests.toml"), # TODO test this + AppFile("manifest", "manifest.toml"), + AppFile("tests", "tests.toml"), # TODO test this AppFile("_common.sh", "scripts/_common.sh"), - AppFile("install", "scripts/install"), - AppFile("remove", "scripts/remove"), - AppFile("backup", "scripts/backup"), - AppFile("restore", "scripts/restore"), - AppFile("upgrade", "scripts/upgrade"), - AppFile("nginx", "conf/nginx.conf"), + AppFile("install", "scripts/install"), + AppFile("remove", "scripts/remove"), + AppFile("backup", "scripts/backup"), + AppFile("restore", "scripts/restore"), + AppFile("upgrade", "scripts/upgrade"), + AppFile("nginx", "conf/nginx.conf"), ] if main_form.enable_change_url.data: @@ -671,7 +748,7 @@ def main_form_route(): # TODO : buggy, tries to open php.j2 # if main_form.main_technology.data == "php": - # app_files.append(AppFile("php", "conf/extra_php-fpm.conf")) + # app_files.append(AppFile("php", "conf/extra_php-fpm.conf")) if main_form.description.data: app_files.append(AppFile("DESCRIPTION", "docs/DESCRIPTION.md")) @@ -697,13 +774,17 @@ def main_form_route(): template_dir = os.path.dirname(__file__) + "/templates/" for app_file in app_files: template = open(template_dir + app_file.id + ".j2").read() - app_file.content = render_template_string(template, data=dict(request.form | GENERATOR_DICT)) - app_file.content = re.sub(r'\n\s+$', '\n', app_file.content, flags=re.M) - app_file.content = re.sub(r'\n{3,}', '\n\n', app_file.content, flags=re.M) + app_file.content = render_template_string( + template, data=dict(request.form | GENERATOR_DICT) + ) + app_file.content = re.sub(r"\n\s+$", "\n", app_file.content, flags=re.M) + app_file.content = re.sub(r"\n{3,}", "\n\n", app_file.content, flags=re.M) print(main_form.use_custom_config_file.data) if main_form.use_custom_config_file.data: - app_files.append(AppFile("appconf", "conf/" + main_form.custom_config_file.data)) + app_files.append( + AppFile("appconf", "conf/" + main_form.custom_config_file.data) + ) app_files[-1].content = main_form.custom_config_file_content.data print(main_form.custom_config_file.data) print(main_form.custom_config_file_content.data) @@ -719,19 +800,26 @@ def main_form_route(): zf.writestr(app_file.destination_path, app_file.content) f.seek(0) # Send the zip file to the user - return send_file(f, as_attachment=True, download_name=request.form["app_id"] + ".zip") + return send_file( + f, as_attachment=True, download_name=request.form["app_id"] + ".zip" + ) return render_template( - "index.html", main_form=main_form, generator_info=GENERATOR_DICT, generated_files=app_files, + "index.html", + main_form=main_form, + generator_info=GENERATOR_DICT, + generated_files=app_files, ) + # Localisation -@app.route('/language/') +@app.route("/language/") def set_language(language=None): - response = make_response(redirect(request.referrer or '/')) - response.set_cookie('lang', language) + response = make_response(redirect(request.referrer or "/")) + response.set_cookie("lang", language) return response + #### Running the web server if __name__ == "__main__": app.run(debug=True)