[UPD] script pycharm: improve pycharm configuration management

- support default configuration
This commit is contained in:
Mathieu Benoit 2023-12-02 14:09:50 -05:00
parent 87730b5221
commit 8632c1501d
2 changed files with 191 additions and 144 deletions

View file

@ -1,27 +1,31 @@
name,script_path,parameters,folder name,script_path,parameters,folder,default
run,./odoo/odoo-bin,--limit-time-real 999999 -c config.conf,run run,./odoo/odoo-bin,--limit-time-real 999999 -c config.conf,run,True
run_parallel_test,./script/test/run_parallel_test.py,,test 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,./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 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_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,./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_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,./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_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,./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_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_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_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_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_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_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_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_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,./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_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_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_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_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_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 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 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,

1 name script_path parameters folder default
2 run ./odoo/odoo-bin --limit-time-real 999999 -c config.conf run True
3 run_parallel_test ./script/test/run_parallel_test.py test
4 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
5 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
6 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
7 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
8 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
9 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
10 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
11 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
12 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
13 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
14 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
15 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
16 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
17 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
18 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
19 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
20 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
21 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
22 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
23 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
24 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
25 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
26 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
27 create demo internal ./script/code_generator/new_project.py -m demo_internal -d addons/TechnoLibre_odoo-code-generator-template new cg project
28 run_robotlibre ./odoo/odoo-bin --limit-time-real 999999 -c config.conf -d robotlibre robotlibre
29 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
30 run_robotlibre_generate ./script/code_generator/new_project.py -f -d ./addons/ERPLibre_erplibre_addons -m erplibre_devops robotlibre
31

View file

@ -65,10 +65,22 @@ def get_config():
action="store_true", action="store_true",
help="Initialize minimum configuration for Pycharm.", help="Initialize minimum configuration for Pycharm.",
) )
parser.add_argument(
"--overwrite",
action="store_true",
help="Remove old data and replace it.",
)
args = parser.parse_args() 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 args.configuration = True
if args.overwrite:
args.init = True
else: else:
args.configuration = False args.configuration = False
@ -78,6 +90,7 @@ def get_config():
def main(): def main():
has_execute = False has_execute = False
config = get_config() config = get_config()
_logger.info(f"Work on directory {os.getcwd()}")
# TODO modifier vcs.xml pour le mapping des répertoires git # 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): 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: with open(file_name) as xml:
xml_as_string = xml.read() xml_as_string = xml.read()
dct_project_xml = xmltodict.parse(xml_as_string) 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) xml.write(xml_format)
_logger.info(f"File {file_name} has been write.") _logger.info(f"File {file_name} has been write.")
subprocess.call( subprocess.call(
"prettier --tab-width 2 --print-width 999999 --write" f"script/maintenance/prettier_xml.sh '{file_name}'",
f" '{file_name}'",
shell=True, shell=True,
) )
else: else:
@ -150,6 +163,28 @@ def add_configuration(dct_xml, file_name, config):
not bool(lst_component), not bool(lst_component),
f"Missing 'project/component' into {file_name}", 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 = [ dct_component = [
a for a in lst_component if a.get("@name") == "RunManager" 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 # Create it
dct_component = { dct_component = {
"@name": "RunManager", "@name": "RunManager",
"@selected": "Python.pycharm_configuration", # "@selected": "Python.pycharm_configuration",
"recent_temporary": { # "recent_temporary": {
"list": { # "list": {
"item": {"@itemvalue": "Python.pycharm_configuration"} # "item": {"@itemvalue": "Python.pycharm_configuration"}
} # }
}, # },
"configuration": [], "configuration": [],
"list": {"item": []}, "list": {"item": []},
} }
@ -219,13 +254,20 @@ def add_configuration(dct_xml, file_name, config):
for conf in lst_configuration: for conf in lst_configuration:
print(f"\t{conf}") print(f"\t{conf}")
if config.init: last_default = None
if os.path.isfile(PATH_DEFAULT_CONFIGURATION): 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: with open(PATH_DEFAULT_CONFIGURATION) as txt:
for default_conf in csv.DictReader(txt): for default_conf in csv.DictReader(txt):
conf_name = default_conf.get("name") conf_name = default_conf.get("name")
conf_folder = default_conf.get("folder") conf_folder = default_conf.get("folder")
conf_script_path = default_conf.get("script_path") 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_replace = (
conf_script_path conf_script_path
if not conf_script_path.startswith("./") if not conf_script_path.startswith("./")
@ -233,13 +275,14 @@ def add_configuration(dct_xml, file_name, config):
) )
conf_parameter = default_conf.get("parameters") conf_parameter = default_conf.get("parameters")
s_unique_key = ( s_unique_key = (
f"d {conf_folder} s" f"d {conf_folder} s {conf_script_path} p {conf_parameter}"
f" {conf_script_path} p"
f" {conf_parameter}"
) )
if s_unique_key not in lst_unique_configuration: if (
config.overwrite
or s_unique_key not in lst_unique_configuration
):
# add it! # add it!
if conf_name in lst_configuration: if not config.overwrite and conf_name in lst_configuration:
_logger.error( _logger.error(
f"Cannot add configuration name '{conf_name}'," f"Cannot add configuration name '{conf_name}',"
" already exist. Delete it manually." " already exist. Delete it manually."
@ -247,7 +290,7 @@ def add_configuration(dct_xml, file_name, config):
else: else:
has_change = True has_change = True
lst_xml_configuration_name.append( lst_xml_configuration_name.append(
{"@itemvalue": f"Python.conf_name"} {"@itemvalue": f"Python.{conf_name}"}
) )
conf_full = { conf_full = {
"@name": conf_name, "@name": conf_name,
@ -262,9 +305,7 @@ def add_configuration(dct_xml, file_name, config):
{"@name": "PARENT_ENVS", "@value": "true"}, {"@name": "PARENT_ENVS", "@value": "true"},
{ {
"@name": "SDK_HOME", "@name": "SDK_HOME",
"@value": ( "@value": "$PROJECT_DIR$/.venv/bin/python",
"$PROJECT_DIR$/.venv/bin/python"
),
}, },
{ {
"@name": "WORKING_DIRECTORY", "@name": "WORKING_DIRECTORY",
@ -324,11 +365,13 @@ def add_configuration(dct_xml, file_name, config):
conf_full["@folderName"] = conf_folder conf_full["@folderName"] = conf_folder
lst_configuration_full.insert(0, conf_full) lst_configuration_full.insert(0, conf_full)
else: else:
_logger.info( _logger.info(f"Configuration already exist: '{s_unique_key}'")
f"Configuration already exist: '{s_unique_key}'"
) if last_default:
else: dct_component["@selected"] = last_default
_logger.error(f"Cannot read file '{PATH_DEFAULT_CONFIGURATION}'") dct_component["recent_temporary"] = {
"list": {"item": {"@itemvalue": last_default}}
}
return has_change return has_change