# HG changeset patch # User Vincent Hatakeyama <vincent.hatakeyama@xcg-consulting.fr> # Date 1686656965 -7200 # Tue Jun 13 13:49:25 2023 +0200 # Node ID 9b320eba62ddd458efa952d1515ca9c82ac78eb5 # Parent 16bc9b532862fd256f2c7cd8fe578d91de270d86 ✨ global configuration file in TOML with a couple of keys diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -53,7 +53,7 @@ image: $TEMP_IMAGE script: - python3 -m pip install mypy types-PyYAML types-psycopg2 types-python-dateutil - types-requests build twine + types-toml types-requests build twine - mypy odoo_scripts tests rules: - if: $CI_COMMIT_TAG == null diff --git a/NEWS.rst b/NEWS.rst --- a/NEWS.rst +++ b/NEWS.rst @@ -2,6 +2,11 @@ History ======= +20.5.0 +------ + +Allow setting db_user, db_password, log_handler and pythondevmode in a global settings file (${XDG_CONFIG_HOME-$HOME/.config}/odoo_scripts/config.toml). Configuration can be done by odoo_type too. + 20.4.0 ------ diff --git a/odoo_scripts/config.py b/odoo_scripts/config.py --- a/odoo_scripts/config.py +++ b/odoo_scripts/config.py @@ -10,6 +10,16 @@ from glob import glob from typing import Any, Dict, List, Optional, Union +try: + # Python 3.11+ + from tomllib import loads as tomllib_loads + + _tomllib: bool = True +except ImportError: + from toml import loads as toml_loads + + _tomllib = False + SECTION = "odoo_scripts" OTHER_SOURCES_KEY = "other_sources" ODOO_7 = "odoo7" @@ -66,6 +76,21 @@ section: Union[configparser.SectionProxy, dict] = ( config_parser[SECTION] if SECTION in config_parser else {} ) + self._global_setup: Dict = {} + global_setup_path = os.path.join( + os.environ.get( + "XDG_CONFIG_HOME", os.path.join(os.environ["HOME"], ".config") + ), + "odoo_scripts", + "config.toml", + ) + if os.path.exists(global_setup_path): + with open(global_setup_path, "r") as f: + global_setup_str = f.read() + if _tomllib: + self._global_setup = dict(tomllib_loads(global_setup_str)) + else: + self._global_setup = dict(toml_loads(global_setup_str)) # read expanded configurations information expanded_info: defaultdict[Any, Dict] = defaultdict(dict) @@ -201,8 +226,6 @@ self.duplicate_repo: str self.marabunta_migration_file: str for key in ( - "db_user", - "db_password", "load-language", "duplicate_repo", "marabunta_migration_file", @@ -274,6 +297,33 @@ ) else: _logger.warning("Unexpected odoo_type: %s", self.odoo_type) + for key in ( + "db_user", + "db_password", + ): + option_value: Optional[str] = None + if key in section: + option_value = section[key] + else: + if key in self._global_setup: + option_value = self._global_setup[key] + if hasattr(self, "odoo_type") and key in self._global_setup.get( + self.odoo_type, {} + ): + option_value = self._global_setup[self.odoo_type][key] + setattr(self, key_format(key), option_value) + self.log_handler: List[str] + self.pythondevmode: bool + for key, default_value in (("log-handler", []), ("pythondevmode", True)): + any_value: Any = default_value + if key in self._global_setup: + any_value = self._global_setup[key] + if hasattr(self, "odoo_type") and key in self._global_setup.get( + self.odoo_type, {} + ): + any_value = self._global_setup[self.odoo_type][key] + setattr(self, key_format(key), any_value) + self.postgresql_version: str read_expanded("postgresql_version", "9.6") self.start_py3o: bool = section.get("start_py3o", "no") in ("yes", "true") diff --git a/odoo_scripts/docker_dev_start.py b/odoo_scripts/docker_dev_start.py --- a/odoo_scripts/docker_dev_start.py +++ b/odoo_scripts/docker_dev_start.py @@ -54,9 +54,9 @@ _logger = logging.getLogger(__name__) -__version__ = "3.12.1" +__version__ = "3.13.0" __date__ = "2017-08-11" -__updated__ = "2023-05-15" +__updated__ = "2023-06-13" def __parser(project_name: str) -> ArgumentParser: @@ -397,12 +397,20 @@ help="marabunta force version argument (see marabunta documentation)", ) - parser.add_argument( + pythondevmode_group = parser.add_mutually_exclusive_group() + pythondevmode_group.add_argument( + "--pythondevmode", + help="Set PYTHONDEVMODE", + action="store_true", + default=False, + dest="force_python_dev_mode", + ) + pythondevmode_group.add_argument( "--no-pythondevmode", help="Do not set PYTHONDEVMODE", - action="store_false", - default=True, - dest="python_dev_mode", + action="store_true", + default=False, + dest="force_no_python_dev_mode", ) # workers options @@ -485,7 +493,8 @@ marabunta_db_user = nmspc.marabunta_db_user marabunta_db_password = nmspc.marabunta_db_password marabunta_force_version = nmspc.marabunta_force_version - python_dev_mode = nmspc.python_dev_mode + force_python_dev_mode = nmspc.force_python_dev_mode + force_no_python_dev_mode = nmspc.force_no_python_dev_mode workers = nmspc.workers # XXX should that variable be called multi_workers? longpolling = workers > 0 @@ -621,7 +630,7 @@ arg.append("--log-level") arg.append(nmspc.log_level) if nmspc.log_handler: - for lh in nmspc.log_handler: + for lh in nmspc.log_handler + config.log_handler: arg.append("--log-handler") arg.append(lh) if nmspc.LOAD_LANGUAGE: @@ -1196,7 +1205,9 @@ arg.append(f"--dev={','.join(set(dev_opts))}") if odoo_type in (ODOO_8,): arg.append("--auto-reload") - if python_dev_mode: + if force_python_dev_mode or ( + config.pythondevmode and not force_no_python_dev_mode + ): options["environment"]["PYTHONDEVMODE"] = 1 if test_tags: diff --git a/pyproject.toml b/pyproject.toml --- a/pyproject.toml +++ b/pyproject.toml @@ -22,6 +22,7 @@ "PyYAML", "importlib_metadata; python_version<'3.8'", "python-hglib", + "toml; python_version<='3.10'", ] [project.optional-dependencies]