Skip to content

Commit

Permalink
UPD Add new option to version - override_translation to be able to ov…
Browse files Browse the repository at this point in the history
…erride i18n translations
  • Loading branch information
StephaneMangin committed Sep 4, 2024
1 parent 7457280 commit 9d6dac5
Show file tree
Hide file tree
Showing 6 changed files with 75 additions and 33 deletions.
3 changes: 2 additions & 1 deletion AUTHORS.rst
Original file line number Diff line number Diff line change
Expand Up @@ -11,4 +11,5 @@ Contributors
- Simone Orsi (Camptocamp)
- Iván Todorovitch (Camptocamp)
- Yannick Vaucher (Camptocamp)
- Alexandre Fayolle (Camptocamp)
- Alexandre Fayolle (Camptocamp)
- Stéphane Mangin (Camptocamp)
6 changes: 6 additions & 0 deletions HISTORY.rst
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,12 @@ Unreleased

**Improvements**

* I18N overwrite option

Migration allows using a `override_translations` version's option in order to
allow usage of Odoo parameter `--i18n-overwrite`.
Command option is `MARABUNTA_OVERRIDE_TRANSLATIONS`

**Build**

* Depend on psycopg2 rather than psycopg2-binary
Expand Down
57 changes: 30 additions & 27 deletions README.rst
Original file line number Diff line number Diff line change
Expand Up @@ -36,33 +36,35 @@ Although the first marabunta version must be **setup** for the initial setup of

Options
=======
+-------------------+----------+---------------------------+-------------------------------------------------------------------+
| option | shortcut | envvar | purpose |
+===================+==========+===========================+===================================================================+
| --migration-file | -f | MARABUNTA_MIGRATION_FILE | Definition file for the migration. |
+-------------------+----------+---------------------------+-------------------------------------------------------------------+
| --database | -d | MARABUNTA_DATABASE | Database we want to run the migration on. |
+-------------------+----------+---------------------------+-------------------------------------------------------------------+
| --db-user | -u | MARABUNTA_DB_USER | Database user. |
+-------------------+----------+---------------------------+-------------------------------------------------------------------+
| --db-password | -w | MARABUNTA_DB_PASSWORD | Database password. |
+-------------------+----------+---------------------------+-------------------------------------------------------------------+
| --db-port | -p | MARABUNTA_DB_PORT | Database port (defaults to 5432). |
+-------------------+----------+---------------------------+-------------------------------------------------------------------+
| --db-host | -H | MARABUNTA_DB_HOST | Database port (defaults to None). |
+-------------------+----------+---------------------------+-------------------------------------------------------------------+
| --mode | | MARABUNTA_MODE | Mode marabunta runs in for different envs. |
+-------------------+----------+---------------------------+-------------------------------------------------------------------+
| --allow-serie | | MARABUNTA_ALLOW_SERIE | Allow multiple versions to be upgraded at once. |
+-------------------+----------+---------------------------+-------------------------------------------------------------------+
| --force-version | | MARABUNTA_FORCE_VERSION | Force the upgrade to a version no matter what. |
+-------------------+----------+---------------------------+-------------------------------------------------------------------+
| --web-host | | MARABUNTA_WEB_HOST | Interface to bind for the maintenance page. (defaults to 0.0.0.0).|
+-------------------+----------+---------------------------+-------------------------------------------------------------------+
| --web-port | | MARABUNTA_WEB_PORT | Port for the maintenance page. (defaults to 8069). |
+-------------------+----------+---------------------------+-------------------------------------------------------------------+
| --web-custom-html | | MARABUNTA_WEB_CUSTOM_HTML | Path to custom maintenance html page to serve. |
+-------------------+----------+---------------------------+-------------------------------------------------------------------+
+-------------------------+----------+---------------------------------+-------------------------------------------------------------------+
| option | shortcut | envvar | purpose |
+=========================+==========+=================================+===================================================================+
| --migration-file | -f | MARABUNTA_MIGRATION_FILE | Definition file for the migration. |
+-------------------------+----------+---------------------------------+-------------------------------------------------------------------+
| --database | -d | MARABUNTA_DATABASE | Database we want to run the migration on. |
+-------------------------+----------+---------------------------------+-------------------------------------------------------------------+
| --db-user | -u | MARABUNTA_DB_USER | Database user. |
+-------------------------+----------+---------------------------------+-------------------------------------------------------------------+
| --db-password | -w | MARABUNTA_DB_PASSWORD | Database password. |
+-------------------------+----------+---------------------------------+-------------------------------------------------------------------+
| --db-port | -p | MARABUNTA_DB_PORT | Database port (defaults to 5432). |
+-------------------------+----------+---------------------------------+-------------------------------------------------------------------+
| --db-host | -H | MARABUNTA_DB_HOST | Database port (defaults to None). |
+-------------------------+----------+---------------------------------+-------------------------------------------------------------------+
| --mode | | MARABUNTA_MODE | Mode marabunta runs in for different envs. |
+-------------------------+----------+---------------------------------+-------------------------------------------------------------------+
| --allow-serie | | MARABUNTA_ALLOW_SERIE | Allow multiple versions to be upgraded at once. |
+-------------------------+----------+---------------------------------+-------------------------------------------------------------------+
| --force-version | | MARABUNTA_FORCE_VERSION | Force the upgrade to a version no matter what. |
+-------------------------+----------+---------------------------------+-------------------------------------------------------------------+
| --override-translations | | MARABUNTA_OVERRIDE_TRANSLATIONS | Force translations override |
+-------------------------+----------+---------------------------------+-------------------------------------------------------------------+
| --web-host | | MARABUNTA_WEB_HOST | Interface to bind for the maintenance page. (defaults to 0.0.0.0).|
+-------------------------+----------+---------------------------------+-------------------------------------------------------------------+
| --web-port | | MARABUNTA_WEB_PORT | Port for the maintenance page. (defaults to 8069). |
+-------------------------+----------+---------------------------------+-------------------------------------------------------------------+
| --web-custom-html | | MARABUNTA_WEB_CUSTOM_HTML | Path to custom maintenance html page to serve. |
+-------------------------+----------+---------------------------------+-------------------------------------------------------------------+

YAML layout & Example
=====================
Expand Down Expand Up @@ -119,6 +121,7 @@ Here is an Example migration file::

- version: 0.0.4
backup: false
override_translations: true
addons:
upgrade:
- popeye
Expand Down
8 changes: 7 additions & 1 deletion marabunta/config.py
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,6 @@


class Config(object):

def __init__(self,
migration_file,
database,
Expand All @@ -18,6 +17,7 @@ def __init__(self,
mode=None,
allow_serie=False,
force_version=None,
override_translations=False,
web_host='localhost',
web_port=8069,
web_resp_status=503,
Expand All @@ -35,6 +35,7 @@ def __init__(self,
self.force_version = force_version
if force_version and not allow_serie:
self.allow_serie = True
self.override_translations = override_translations
self.web_host = web_host
self.web_port = web_port
self.web_resp_status = web_resp_status
Expand All @@ -60,6 +61,7 @@ def from_parse_args(cls, args):
mode=args.mode,
allow_serie=args.allow_serie,
force_version=args.force_version,
override_translations=args.override_translations,
web_host=args.web_host,
web_port=args.web_port,
web_resp_status=args.web_resp_status,
Expand Down Expand Up @@ -148,6 +150,10 @@ def get_args_parser():
default=os.environ.get('MARABUNTA_FORCE_VERSION'),
help='Force upgrade of a version, even if it has '
'already been applied.')
parser.add_argument("--override-translations",
required=False,
default=os.environ.get("MARABUNTA_OVERRIDE_TRANSLATIONS"),
help="Force override of translations.")

group = parser.add_argument_group(
title='Web',
Expand Down
10 changes: 8 additions & 2 deletions marabunta/model.py
Original file line number Diff line number Diff line change
Expand Up @@ -119,6 +119,7 @@ def __init__(self, number, options):
self._version_modes = {}
self.options = options
self.backup = False
self.override_translations = False

def is_processed(self, db_versions):
"""Check if version is already applied in the database.
Expand Down Expand Up @@ -210,7 +211,7 @@ def upgrade_addons_operation(self, addons_state, mode=None):
to_install = addons_list - installed
to_upgrade = installed & addons_list

return UpgradeAddonsOperation(self.options, to_install, to_upgrade)
return UpgradeAddonsOperation(self.options, to_install, to_upgrade, self.override_translations)

def remove_addons_operation(self):
raise NotImplementedError
Expand Down Expand Up @@ -252,10 +253,11 @@ def add_remove_addons(self, addons):

class UpgradeAddonsOperation(object):

def __init__(self, options, to_install, to_upgrade):
def __init__(self, options, to_install, to_upgrade, override_translations=False):
self.options = options
self.to_install = set(to_install)
self.to_upgrade = set(to_upgrade)
self.override_translations = override_translations

def operation(self, exclude_addons=None):
if exclude_addons is None:
Expand All @@ -273,6 +275,10 @@ def operation(self, exclude_addons=None):
install_args += [u'-u', u','.join(to_upgrade)]

if to_install or to_upgrade:
# if we don't have addons to install or upgrade, an issue will
# be raised by Odoo if we add the `--i18n-overwrite` flag
if self.override_translations:
install_args += [u'--i18n-overwrite']
return Operation([install_command] + install_args)
else:
return Operation('')
Expand Down
24 changes: 22 additions & 2 deletions marabunta/parser.py
Original file line number Diff line number Diff line change
Expand Up @@ -71,6 +71,7 @@
- version: 0.0.4
backup: false
override_translations: true
addons:
upgrade:
- popeye
Expand Down Expand Up @@ -198,10 +199,26 @@ def _parse_backup(self, version, backup=True, mode=None):
raise ParseError(u"'backup' key must be a boolean", YAML_EXAMPLE)
version.backup = backup

def _parse_override_translations(self, version, parsed_version):
override_translations = parsed_version.get('override_translations')
if override_translations not in (True, False, None):
raise ParseError(
"'override_translations' key must be a boolean", YAML_EXAMPLE
)
version.override_translations = override_translations

def _parse_version(self, parsed_version, options):
self.check_dict_expected_keys(
{'version', 'operations', 'addons', 'modes', 'backup'},
parsed_version, 'versions',
{
"version",
"operations",
"addons",
"modes",
"backup",
"override_translations",
},
parsed_version,
"versions",
)
number = parsed_version.get('version')
version = Version(number, options)
Expand Down Expand Up @@ -237,4 +254,7 @@ def _parse_version(self, parsed_version, options):
backup = True
self._parse_backup(version, backup)

# If translations needs to be overridden
self._parse_override_translations(version, parsed_version)

return version

0 comments on commit 9d6dac5

Please sign in to comment.