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 3, 2024
1 parent 7457280 commit 919b821
Show file tree
Hide file tree
Showing 4 changed files with 168 additions and 113 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)
226 changes: 129 additions & 97 deletions 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 @@ -98,102 +100,132 @@ def get_default(self, envvar):

def get_args_parser():
"""Return a parser for command line options."""
parser = argparse.ArgumentParser(
description='Marabunta: Migrating ants for Odoo')
parser.add_argument('--migration-file', '-f',
action=EnvDefault,
envvar='MARABUNTA_MIGRATION_FILE',
required=True,
help='The yaml file containing the migration steps')
parser.add_argument('--database', '-d',
action=EnvDefault,
envvar='MARABUNTA_DATABASE',
required=True,
help="Odoo's database")
parser.add_argument('--db-user', '-u',
action=EnvDefault,
envvar='MARABUNTA_DB_USER',
required=True,
help="Odoo's database user")
parser.add_argument('--db-password', '-w',
action=EnvDefault,
envvar='MARABUNTA_DB_PASSWORD',
required=False,
help="Odoo's database password")
parser.add_argument('--db-port', '-p',
type=int,
default=os.environ.get('MARABUNTA_DB_PORT', 5432),
help="Odoo's database port")
parser.add_argument('--db-host', '-H',
default=os.environ.get('MARABUNTA_DB_HOST',
None),
help="Odoo's database host")
parser.add_argument('--mode',
action=EnvDefault,
envvar='MARABUNTA_MODE',
required=False,
help="Specify the mode in which we run the migration,"
"such as 'sample' or 'full'. Additional operations "
"of this mode will be executed after the main "
"operations and the addons list of this mode "
"will be merged with the main addons list.")
parser.add_argument('--allow-serie',
action=BoolEnvDefault,
required=False,
envvar='MARABUNTA_ALLOW_SERIE',
help='Allow to run more than 1 version upgrade at a '
'time.')
parser.add_argument('--force-version',
required=False,
default=os.environ.get('MARABUNTA_FORCE_VERSION'),
help='Force upgrade of a version, even if it has '
'already been applied.')
parser = argparse.ArgumentParser(description="Marabunta: Migrating ants for Odoo")
parser.add_argument(
"--migration-file",
"-f",
action=EnvDefault,
envvar="MARABUNTA_MIGRATION_FILE",
required=True,
help="The yaml file containing the migration steps",
)
parser.add_argument(
"--database",
"-d",
action=EnvDefault,
envvar="MARABUNTA_DATABASE",
required=True,
help="Odoo's database",
)
parser.add_argument(
"--db-user",
"-u",
action=EnvDefault,
envvar="MARABUNTA_DB_USER",
required=True,
help="Odoo's database user",
)
parser.add_argument(
"--db-password",
"-w",
action=EnvDefault,
envvar="MARABUNTA_DB_PASSWORD",
required=False,
help="Odoo's database password",
)
parser.add_argument(
"--db-port",
"-p",
type=int,
default=os.environ.get("MARABUNTA_DB_PORT", 5432),
help="Odoo's database port",
)
parser.add_argument(
"--db-host",
"-H",
default=os.environ.get("MARABUNTA_DB_HOST", None),
help="Odoo's database host",
)
parser.add_argument(
"--mode",
action=EnvDefault,
envvar="MARABUNTA_MODE",
required=False,
help="Specify the mode in which we run the migration,"
"such as 'sample' or 'full'. Additional operations "
"of this mode will be executed after the main "
"operations and the addons list of this mode "
"will be merged with the main addons list.",
)
parser.add_argument(
"--allow-serie",
action=BoolEnvDefault,
required=False,
envvar="MARABUNTA_ALLOW_SERIE",
help="Allow to run more than 1 version upgrade at a " "time.",
)
parser.add_argument(
"--force-version",
required=False,
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',
description='Configuration related to the internal web server, '
'used to publish a maintenance page during the migration.',
)
group.add_argument('--web-host',
required=False,
default=os.environ.get('MARABUNTA_WEB_HOST', '0.0.0.0'),
help='Host for the web server')
group.add_argument('--web-port',
type=int,
required=False,
default=os.environ.get('MARABUNTA_WEB_PORT', 8069),
help='Port for the web server')
group.add_argument('--web-resp-status',
type=int,
required=False,
default=os.environ.get(
'MARABUNTA_WEB_RESP_STATUS', 503
),
help='Response HTTP status code of the web server')
group.add_argument('--web-resp-retry-after',
type=int,
required=False,
default=os.environ.get(
'MARABUNTA_WEB_RESP_RETRY_AFTER', 300
),
help=(
'"Retry-After" header value (in seconds) of '
'response delivered by the web server')
)
group.add_argument('--web-custom-html',
required=False,
default=os.environ.get(
'MARABUNTA_WEB_CUSTOM_HTML'
),
help='Path to a custom html file to publish')
group.add_argument('--web-healthcheck-path',
required=False,
default=os.environ.get(
'MARABUNTA_WEB_HEALTHCHECK_PATH'
),
help=(
'URL Path used for health checks HTTP requests. '
'Such monitoring requests will return HTTP 200 '
'status code instead of the default 503.'
))
title="Web",
description="Configuration related to the internal web server, "
"used to publish a maintenance page during the migration.",
)
group.add_argument(
"--web-host",
required=False,
default=os.environ.get("MARABUNTA_WEB_HOST", "0.0.0.0"),
help="Host for the web server",
)
group.add_argument(
"--web-port",
type=int,
required=False,
default=os.environ.get("MARABUNTA_WEB_PORT", 8069),
help="Port for the web server",
)
group.add_argument(
"--web-resp-status",
type=int,
required=False,
default=os.environ.get("MARABUNTA_WEB_RESP_STATUS", 503),
help="Response HTTP status code of the web server",
)
group.add_argument(
"--web-resp-retry-after",
type=int,
required=False,
default=os.environ.get("MARABUNTA_WEB_RESP_RETRY_AFTER", 300),
help=(
'"Retry-After" header value (in seconds) of '
"response delivered by the web server"
),
)
group.add_argument(
"--web-custom-html",
required=False,
default=os.environ.get("MARABUNTA_WEB_CUSTOM_HTML"),
help="Path to a custom html file to publish",
)
group.add_argument(
"--web-healthcheck-path",
required=False,
default=os.environ.get("MARABUNTA_WEB_HEALTHCHECK_PATH"),
help=(
"URL Path used for health checks HTTP requests. "
"Such monitoring requests will return HTTP 200 "
"status code instead of the default 503."
),
)
return parser
24 changes: 11 additions & 13 deletions marabunta/model.py
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,6 @@


class Migration(object):

def __init__(self, versions, options):
self._versions = versions
self.options = options
Expand All @@ -27,7 +26,6 @@ def versions(self):


class MigrationOption(object):

def __init__(self, install_command=None, install_args=None, backup=None):
"""Options block in a migration.
Expand All @@ -38,13 +36,12 @@ def __init__(self, install_command=None, install_args=None, backup=None):
:param backup: Backup options
:type backup: Dict
"""
self.install_command = install_command or u'odoo'
self.install_args = install_args or u''
self.install_command = install_command or "odoo"
self.install_args = install_args or ""
self.backup = backup


class MigrationBackupOption(object):

def __init__(self, command, ignore_if, stop_on_failure=True):
"""Backup option in migration.
Expand Down Expand Up @@ -92,15 +89,14 @@ def command_operation(self, config):
def ignore_if_operation(self):
if self._ignore_if is None or self._ignore_if is False:
# if ignore_if parameter was not specified - always backup
return SilentOperation('false', shell=True)
return SilentOperation("false", shell=True)
elif self._ignore_if is True:
# if it is specifically True
return SilentOperation('true', shell=True)
return SilentOperation("true", shell=True)
return SilentOperation(self._ignore_if, shell=True)


class Version(object):

def __init__(self, number, options):
"""Base class for a migration version.
Expand All @@ -112,13 +108,12 @@ def __init__(self, number, options):
try:
MarabuntaVersion().parse(number)
except ValueError:
raise ConfigurationError(
u'{} is not a valid version'.format(number)
)
raise ConfigurationError("{} is not a valid version".format(number))
self.number = number
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 +205,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,17 +247,20 @@ 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:
exclude_addons = set()
install_command = self.options.install_command
install_args = self.options.install_args[:] or []
install_args += [u'--workers=0', u'--stop-after-init', u'--no-xmlrpc']
if self.override_translations:
install_args += [u'--i18n-override']

to_install = self.to_install - exclude_addons
if to_install:
Expand Down
Loading

0 comments on commit 919b821

Please sign in to comment.