diff --git a/conf/pycharm_default_configuration.csv b/conf/pycharm_default_configuration.csv index 7df43d0..79675da 100644 --- a/conf/pycharm_default_configuration.csv +++ b/conf/pycharm_default_configuration.csv @@ -1,27 +1,31 @@ -name,script_path,parameters,folder -run,./odoo/odoo-bin,--limit-time-real 999999 -c config.conf,run -run_parallel_test,./script/test/run_parallel_test.py,,test -cg_cg,./odoo/odoo-bin,--limit-time-real 999999 --no-http -c config.conf --stop-after-init --dev cg -d code_generator -i code_generator_code_generator,code_generator -cg_cg_template,./odoo/odoo-bin,--limit-time-real 999999 --no-http -c config.conf --stop-after-init --dev cg -d template -i code_generator_template_code_generator,code_generator_template -code_generator_auto_backup,./odoo/odoo-bin,--limit-time-real 999999 --no-http -c config.conf --stop-after-init --dev cg -d code_generator -i code_generator_auto_backup,code_generator -code_generator_demo,./odoo/odoo-bin,--limit-time-real 999999 --no-http -c config.conf --stop-after-init --dev cg -d code_generator -i code_generator_demo,code_generator -code_generator_demo_export_helpdesk,./odoo/odoo-bin,--limit-time-real 999999 --no-http -c config.conf --stop-after-init --dev cg -d code_generator -i code_generator_demo_export_helpdesk,code_generator -code_generator_demo_export_website,./odoo/odoo-bin,--limit-time-real 999999 --no-http -c config.conf --stop-after-init --dev cg -d code_generator -i code_generator_demo_export_website,code_generator -code_generator_demo_export_website_attachments,./odoo/odoo-bin,--limit-time-real 999999 --no-http -c config.conf --stop-after-init --dev cg -d code_generator -i code_generator_demo_export_website_attachments,code_generator -code_generator_demo_internal,./odoo/odoo-bin,--limit-time-real 999999 --no-http -c config.conf --stop-after-init --dev cg -d code_generator -i code_generator_demo_internal,code_generator -code_generator_demo_internal_inherit,./odoo/odoo-bin,--limit-time-real 999999 --no-http -c config.conf --stop-after-init --dev cg -d code_generator -i code_generator_demo_internal_inherit,code_generator -code_generator_demo_mariadb_sql_example_1,./odoo/odoo-bin,--limit-time-real 999999 --no-http -c config.conf --stop-after-init --dev cg -d code_generator -i code_generator_demo_mariadb_sql_example_1,code_generator -code_generator_demo_portal,./odoo/odoo-bin,--limit-time-real 999999 --no-http -c config.conf --stop-after-init --dev cg -d code_generator -i code_generator_demo_portal,code_generator -code_generator_demo_theme_website,./odoo/odoo-bin,--limit-time-real 999999 --no-http -c config.conf --stop-after-init --dev cg -d code_generator -i code_generator_demo_theme_website,code_generator -code_generator_demo_website_leaflet,./odoo/odoo-bin,--limit-time-real 999999 --no-http -c config.conf --stop-after-init --dev cg -d code_generator -i code_generator_demo_website_leaflet,code_generator -code_generator_demo_website_multiple_snippet,./odoo/odoo-bin,--limit-time-real 999999 --no-http -c config.conf --stop-after-init --dev cg -d code_generator -i code_generator_demo_website_multiple_snippet,code_generator -code_generator_demo_website_snippet,./odoo/odoo-bin,--limit-time-real 999999 --no-http -c config.conf --stop-after-init --dev cg -d code_generator -i code_generator_demo_website_snippet,code_generator -code_generator_migrator_demo_mariadb_sql_example_1,./odoo/odoo-bin,--limit-time-real 999999 --no-http -c config.conf --stop-after-init --dev cg -d code_generator -i code_generator_migrator_demo_mariadb_sql_example_1,code_generator_migrator -code_generator_template_demo_internal,./odoo/odoo-bin,--limit-time-real 999999 --no-http -c config.conf --stop-after-init --dev cg -d template -i code_generator_template_demo_internal,code_generator_template -code_generator_template_demo_internal_inherit,./odoo/odoo-bin,--limit-time-real 999999 --no-http -c config.conf --stop-after-init --dev cg -d template -i code_generator_template_demo_internal_inherit,code_generator_template -code_generator_template_demo_mariadb_sql_example_1,./odoo/odoo-bin,--limit-time-real 999999 --no-http -c config.conf --stop-after-init --dev cg -d template -i code_generator_template_demo_mariadb_sql_example_1,code_generator_template -code_generator_template_demo_portal,./odoo/odoo-bin,--limit-time-real 999999 --no-http -c config.conf --stop-after-init --dev cg -d template -i code_generator_template_demo_portal,code_generator_template -code_generator_template_demo_sysadmin_cron,./odoo/odoo-bin,--limit-time-real 999999 --no-http -c config.conf --stop-after-init --dev cg -d template -i code_generator_template_demo_sysadmin_cron,code_generator_template -code_generator_template_demo_website_multiple_snippet,./odoo/odoo-bin,--limit-time-real 999999 --no-http -c config.conf --stop-after-init --dev cg -d template -i code_generator_template_demo_website_multiple_snippet,code_generator_template -code_generator_template_demo_website_snippet,./odoo/odoo-bin,--limit-time-real 999999 --no-http -c config.conf --stop-after-init --dev cg -d template -i code_generator_template_demo_website_snippet,code_generator_template -create demo internal,./script/code_generator/new_project.py,-m demo_internal -d addons/TechnoLibre_odoo-code-generator-template,new cg project +name,script_path,parameters,folder,default +run,./odoo/odoo-bin,--limit-time-real 999999 -c config.conf,run,True +run_parallel_test,./script/test/run_parallel_test.py,,test, +cg_cg,./odoo/odoo-bin,--limit-time-real 999999 --no-http -c config.conf --stop-after-init --dev cg -d code_generator -i code_generator_code_generator,code_generator, +cg_cg_template,./odoo/odoo-bin,--limit-time-real 999999 --no-http -c config.conf --stop-after-init --dev cg -d template -i code_generator_template_code_generator,code_generator_template, +code_generator_auto_backup,./odoo/odoo-bin,--limit-time-real 999999 --no-http -c config.conf --stop-after-init --dev cg -d code_generator -i code_generator_auto_backup,code_generator, +code_generator_demo,./odoo/odoo-bin,--limit-time-real 999999 --no-http -c config.conf --stop-after-init --dev cg -d code_generator -i code_generator_demo,code_generator, +code_generator_demo_export_helpdesk,./odoo/odoo-bin,--limit-time-real 999999 --no-http -c config.conf --stop-after-init --dev cg -d code_generator -i code_generator_demo_export_helpdesk,code_generator, +code_generator_demo_export_website,./odoo/odoo-bin,--limit-time-real 999999 --no-http -c config.conf --stop-after-init --dev cg -d code_generator -i code_generator_demo_export_website,code_generator, +code_generator_demo_export_website_attachments,./odoo/odoo-bin,--limit-time-real 999999 --no-http -c config.conf --stop-after-init --dev cg -d code_generator -i code_generator_demo_export_website_attachments,code_generator, +code_generator_demo_internal,./odoo/odoo-bin,--limit-time-real 999999 --no-http -c config.conf --stop-after-init --dev cg -d code_generator -i code_generator_demo_internal,code_generator, +code_generator_demo_internal_inherit,./odoo/odoo-bin,--limit-time-real 999999 --no-http -c config.conf --stop-after-init --dev cg -d code_generator -i code_generator_demo_internal_inherit,code_generator, +code_generator_demo_mariadb_sql_example_1,./odoo/odoo-bin,--limit-time-real 999999 --no-http -c config.conf --stop-after-init --dev cg -d code_generator -i code_generator_demo_mariadb_sql_example_1,code_generator, +code_generator_demo_portal,./odoo/odoo-bin,--limit-time-real 999999 --no-http -c config.conf --stop-after-init --dev cg -d code_generator -i code_generator_demo_portal,code_generator, +code_generator_demo_theme_website,./odoo/odoo-bin,--limit-time-real 999999 --no-http -c config.conf --stop-after-init --dev cg -d code_generator -i code_generator_demo_theme_website,code_generator, +code_generator_demo_website_leaflet,./odoo/odoo-bin,--limit-time-real 999999 --no-http -c config.conf --stop-after-init --dev cg -d code_generator -i code_generator_demo_website_leaflet,code_generator, +code_generator_demo_website_multiple_snippet,./odoo/odoo-bin,--limit-time-real 999999 --no-http -c config.conf --stop-after-init --dev cg -d code_generator -i code_generator_demo_website_multiple_snippet,code_generator, +code_generator_demo_website_snippet,./odoo/odoo-bin,--limit-time-real 999999 --no-http -c config.conf --stop-after-init --dev cg -d code_generator -i code_generator_demo_website_snippet,code_generator, +code_generator_migrator_demo_mariadb_sql_example_1,./odoo/odoo-bin,--limit-time-real 999999 --no-http -c config.conf --stop-after-init --dev cg -d code_generator -i code_generator_migrator_demo_mariadb_sql_example_1,code_generator_migrator, +code_generator_template_demo_internal,./odoo/odoo-bin,--limit-time-real 999999 --no-http -c config.conf --stop-after-init --dev cg -d template -i code_generator_template_demo_internal,code_generator_template, +code_generator_template_demo_internal_inherit,./odoo/odoo-bin,--limit-time-real 999999 --no-http -c config.conf --stop-after-init --dev cg -d template -i code_generator_template_demo_internal_inherit,code_generator_template, +code_generator_template_demo_mariadb_sql_example_1,./odoo/odoo-bin,--limit-time-real 999999 --no-http -c config.conf --stop-after-init --dev cg -d template -i code_generator_template_demo_mariadb_sql_example_1,code_generator_template, +code_generator_template_demo_portal,./odoo/odoo-bin,--limit-time-real 999999 --no-http -c config.conf --stop-after-init --dev cg -d template -i code_generator_template_demo_portal,code_generator_template, +code_generator_template_demo_sysadmin_cron,./odoo/odoo-bin,--limit-time-real 999999 --no-http -c config.conf --stop-after-init --dev cg -d template -i code_generator_template_demo_sysadmin_cron,code_generator_template, +code_generator_template_demo_website_multiple_snippet,./odoo/odoo-bin,--limit-time-real 999999 --no-http -c config.conf --stop-after-init --dev cg -d template -i code_generator_template_demo_website_multiple_snippet,code_generator_template, +code_generator_template_demo_website_snippet,./odoo/odoo-bin,--limit-time-real 999999 --no-http -c config.conf --stop-after-init --dev cg -d template -i code_generator_template_demo_website_snippet,code_generator_template, +create demo internal,./script/code_generator/new_project.py,-m demo_internal -d addons/TechnoLibre_odoo-code-generator-template,new cg project, +run_robotlibre,./odoo/odoo-bin,--limit-time-real 999999 -c config.conf -d robotlibre,robotlibre, +run_robotlibre_update,./odoo/odoo-bin,--limit-time-real 999999 --no-http --stop-after-init --dev cg -d robotlibre -i erplibre_devops -u erplibre_devops,robotlibre, +run_robotlibre_generate,./script/code_generator/new_project.py,-f -d ./addons/ERPLibre_erplibre_addons -m erplibre_devops,robotlibre, + diff --git a/script/ide/pycharm_configuration.py b/script/ide/pycharm_configuration.py index 119492a..d5d22bb 100755 --- a/script/ide/pycharm_configuration.py +++ b/script/ide/pycharm_configuration.py @@ -38,7 +38,7 @@ def get_config(): parser = argparse.ArgumentParser( formatter_class=argparse.RawDescriptionHelpFormatter, description="""\ - Manipulate configuration for your IDE Pycharm about ERPLibre. + Manipulate configuration for your IDE Pycharm about ERPLibre. This script manage only Python configuration, other configuration will be ignore. """, epilog="""\ @@ -65,10 +65,22 @@ def get_config(): action="store_true", help="Initialize minimum configuration for Pycharm.", ) + parser.add_argument( + "--overwrite", + action="store_true", + help="Remove old data and replace it.", + ) args = parser.parse_args() - if args.init or args.list_configuration or args.list_configuration_full: + if ( + args.init + or args.list_configuration + or args.list_configuration_full + or args.overwrite + ): args.configuration = True + if args.overwrite: + args.init = True else: args.configuration = False @@ -78,6 +90,7 @@ def get_config(): def main(): has_execute = False config = get_config() + _logger.info(f"Work on directory {os.getcwd()}") # TODO modifier vcs.xml pour le mapping des répertoires git @@ -120,6 +133,7 @@ def main(): def read_xml_and_execute(file_name, cb, name, config): + _logger.info(f"Pycharm configuration on file {file_name}") with open(file_name) as xml: xml_as_string = xml.read() dct_project_xml = xmltodict.parse(xml_as_string) @@ -133,8 +147,7 @@ def read_xml_and_execute(file_name, cb, name, config): xml.write(xml_format) _logger.info(f"File {file_name} has been write.") subprocess.call( - "prettier --tab-width 2 --print-width 999999 --write" - f" '{file_name}'", + f"script/maintenance/prettier_xml.sh '{file_name}'", shell=True, ) else: @@ -150,6 +163,28 @@ def add_configuration(dct_xml, file_name, config): not bool(lst_component), f"Missing 'project/component' into {file_name}", ) + # Add python configuration + dct_component_py_conf = [ + a + for a in lst_component + if a.get("@name") == "PyConsoleOptionsProvider" + ] + if dct_component_py_conf: + # TODO check and force value + pass + else: + lst_component.append( + { + "@name": "PyConsoleOptionsProvider", + "option": { + "@name": "myShowDebugConsoleByDefault", + "@value": "false", + }, + } + ) + has_change = True + + # Add configuration dct_component = [ a for a in lst_component if a.get("@name") == "RunManager" ] @@ -157,12 +192,12 @@ def add_configuration(dct_xml, file_name, config): # Create it dct_component = { "@name": "RunManager", - "@selected": "Python.pycharm_configuration", - "recent_temporary": { - "list": { - "item": {"@itemvalue": "Python.pycharm_configuration"} - } - }, + # "@selected": "Python.pycharm_configuration", + # "recent_temporary": { + # "list": { + # "item": {"@itemvalue": "Python.pycharm_configuration"} + # } + # }, "configuration": [], "list": {"item": []}, } @@ -219,116 +254,124 @@ def add_configuration(dct_xml, file_name, config): for conf in lst_configuration: print(f"\t{conf}") - if config.init: - if os.path.isfile(PATH_DEFAULT_CONFIGURATION): - with open(PATH_DEFAULT_CONFIGURATION) as txt: - for default_conf in csv.DictReader(txt): - conf_name = default_conf.get("name") - conf_folder = default_conf.get("folder") - conf_script_path = default_conf.get("script_path") - conf_script_path_replace = ( - conf_script_path - if not conf_script_path.startswith("./") - else f"$PROJECT_DIR${conf_script_path[1:]}" + last_default = None + if not config.init: + return has_change + if not os.path.isfile(PATH_DEFAULT_CONFIGURATION): + _logger.error(f"Cannot read file '{PATH_DEFAULT_CONFIGURATION}'") + return has_change + with open(PATH_DEFAULT_CONFIGURATION) as txt: + for default_conf in csv.DictReader(txt): + conf_name = default_conf.get("name") + conf_folder = default_conf.get("folder") + conf_script_path = default_conf.get("script_path") + conf_default = bool(default_conf.get("default")) + if conf_default: + last_default = f"Python.{conf_name}" + conf_script_path_replace = ( + conf_script_path + if not conf_script_path.startswith("./") + else f"$PROJECT_DIR${conf_script_path[1:]}" + ) + conf_parameter = default_conf.get("parameters") + s_unique_key = ( + f"d {conf_folder} s {conf_script_path} p {conf_parameter}" + ) + if ( + config.overwrite + or s_unique_key not in lst_unique_configuration + ): + # add it! + if not config.overwrite and conf_name in lst_configuration: + _logger.error( + f"Cannot add configuration name '{conf_name}'," + " already exist. Delete it manually." ) - conf_parameter = default_conf.get("parameters") - s_unique_key = ( - f"d {conf_folder} s" - f" {conf_script_path} p" - f" {conf_parameter}" + else: + has_change = True + lst_xml_configuration_name.append( + {"@itemvalue": f"Python.{conf_name}"} ) - if s_unique_key not in lst_unique_configuration: - # add it! - if conf_name in lst_configuration: - _logger.error( - f"Cannot add configuration name '{conf_name}'," - " already exist. Delete it manually." - ) - else: - has_change = True - lst_xml_configuration_name.append( - {"@itemvalue": f"Python.conf_name"} - ) - conf_full = { - "@name": conf_name, - "@type": "PythonConfigurationType", - "@factoryName": "Python", - "module": {"@name": PROJECT_NAME}, - "option": [ - { - "@name": "INTERPRETER_OPTIONS", - "@value": "", - }, - {"@name": "PARENT_ENVS", "@value": "true"}, - { - "@name": "SDK_HOME", - "@value": ( - "$PROJECT_DIR$/.venv/bin/python" - ), - }, - { - "@name": "WORKING_DIRECTORY", - "@value": "$PROJECT_DIR$", - }, - { - "@name": "IS_MODULE_SDK", - "@value": "false", - }, - { - "@name": "ADD_CONTENT_ROOTS", - "@value": "true", - }, - { - "@name": "ADD_SOURCE_ROOTS", - "@value": "true", - }, - { - "@name": "SCRIPT_NAME", - "@value": conf_script_path_replace, - }, - { - "@name": "PARAMETERS", - "@value": conf_parameter, - }, - { - "@name": "SHOW_COMMAND_LINE", - "@value": "false", - }, - { - "@name": "EMULATE_TERMINAL", - "@value": "false", - }, - { - "@name": "MODULE_MODE", - "@value": "false", - }, - { - "@name": "REDIRECT_INPUT", - "@value": "false", - }, - {"@name": "INPUT_FILE", "@value": ""}, - ], - "envs": { - "env": { - "@name": "PYTHONUNBUFFERED", - "@value": "1", - } - }, - "EXTENSION": { - "@ID": "PythonCoverageRunConfigurationExtension", - "@runner": "coverage.py", - }, - "method": {"@v": "2"}, + conf_full = { + "@name": conf_name, + "@type": "PythonConfigurationType", + "@factoryName": "Python", + "module": {"@name": PROJECT_NAME}, + "option": [ + { + "@name": "INTERPRETER_OPTIONS", + "@value": "", + }, + {"@name": "PARENT_ENVS", "@value": "true"}, + { + "@name": "SDK_HOME", + "@value": "$PROJECT_DIR$/.venv/bin/python", + }, + { + "@name": "WORKING_DIRECTORY", + "@value": "$PROJECT_DIR$", + }, + { + "@name": "IS_MODULE_SDK", + "@value": "false", + }, + { + "@name": "ADD_CONTENT_ROOTS", + "@value": "true", + }, + { + "@name": "ADD_SOURCE_ROOTS", + "@value": "true", + }, + { + "@name": "SCRIPT_NAME", + "@value": conf_script_path_replace, + }, + { + "@name": "PARAMETERS", + "@value": conf_parameter, + }, + { + "@name": "SHOW_COMMAND_LINE", + "@value": "false", + }, + { + "@name": "EMULATE_TERMINAL", + "@value": "false", + }, + { + "@name": "MODULE_MODE", + "@value": "false", + }, + { + "@name": "REDIRECT_INPUT", + "@value": "false", + }, + {"@name": "INPUT_FILE", "@value": ""}, + ], + "envs": { + "env": { + "@name": "PYTHONUNBUFFERED", + "@value": "1", } - if conf_folder: - conf_full["@folderName"] = conf_folder - lst_configuration_full.insert(0, conf_full) - else: - _logger.info( - f"Configuration already exist: '{s_unique_key}'" - ) - else: - _logger.error(f"Cannot read file '{PATH_DEFAULT_CONFIGURATION}'") + }, + "EXTENSION": { + "@ID": "PythonCoverageRunConfigurationExtension", + "@runner": "coverage.py", + }, + "method": {"@v": "2"}, + } + if conf_folder: + conf_full["@folderName"] = conf_folder + lst_configuration_full.insert(0, conf_full) + else: + _logger.info(f"Configuration already exist: '{s_unique_key}'") + + if last_default: + dct_component["@selected"] = last_default + dct_component["recent_temporary"] = { + "list": {"item": {"@itemvalue": last_default}} + } return has_change