Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[MIG] openupgrade_framework v17 #4427

Merged
merged 40 commits into from
May 23, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
40 commits
Select commit Hold shift + click to select a range
01c01ab
[INIT] Full refactor of the OpenUpgrade project
legalsylvain Nov 1, 2020
39ccc6a
[DEL] openupgrade_records -> server-tools/14.0
StefanRijnhart Nov 29, 2020
112bfd6
[RFR] OpenUpgrade framework patches
StefanRijnhart Dec 6, 2020
5a31219
[UPD] README.rst
OCA-git-bot Jan 20, 2021
cc45490
[ADD] icon.png
OCA-git-bot Jan 20, 2021
de2ba9e
[FIX] _logger.warn -> _logger.warning
MiquelRForgeFlow Mar 25, 2021
ceccdbd
[FIX] doc: base must be included in --load parameter
MiquelRForgeFlow Mar 25, 2021
933c1e6
[UPD] README.rst
OCA-git-bot Mar 25, 2021
d1565e0
[FIX] base: Don't fail uninstalling when missing models
MiquelRForgeFlow Apr 8, 2021
928df6a
[FIX] openupgrade_framework: _drop_column was in wrong class
MiquelRForgeFlow Apr 12, 2021
11c9a9a
[DOC] add banner file, to make this module more visible on the app st…
legalsylvain Jun 10, 2021
1991ffb
[UPD] README.rst
OCA-git-bot Jun 10, 2021
bbb6ec2
[FIX] Don't break on missing model in selection _process_ondelete
StefanRijnhart Jul 7, 2021
7289a5a
[REF] Add maintainers
legalsylvain Aug 4, 2021
087e6e7
[UPD] README.rst
OCA-git-bot Aug 5, 2021
f6840fa
[IMP] openupgrade_framework: avoid AttributeError in view validation
MiquelRForgeFlow Oct 4, 2021
217c2c0
[MIG][15.0] openupgrade_framework
legalsylvain Nov 15, 2021
ac84229
[REF] adapt framework, due to renaming handle_view_error into _raise_…
legalsylvain Nov 15, 2021
5b8e420
fixup! [WIP][15.0] base module
legalsylvain Nov 15, 2021
d671a8d
fixup! fixup! [WIP][15.0] base module
legalsylvain Nov 15, 2021
aedc5d9
Update method _postprocess_view of ir_ui_view by removing the input a…
jcdrubay May 10, 2022
addb5d0
[MIG] remove the odoo_patch on function _postprocess_view which becam…
jcdrubay May 11, 2022
27eb2fd
Adjustements for code style
jcdrubay May 12, 2022
592e21a
[UPD] README.rst
OCA-git-bot May 18, 2022
74750bd
[OU-FIX] Migration scripts were not run during install
StefanRijnhart Feb 27, 2022
68504d9
[IMP] openupgrade_framework: to not crash, simply not deactivating the
royle-vietnam Jul 11, 2022
b01a09e
[IMP] openupgrade_framework: add environ parameter to force demo
MiquelRForgeFlow Jun 20, 2022
dfe5faf
[UPD] README.rst
OCA-git-bot Jul 18, 2022
20cae73
[IMP] base: override to not raise an exception
royle-vietnam May 14, 2022
1d61789
[FIX] openupgrade_framework: Proper module dependency resolution
pedrobaeza Jul 24, 2022
77347d2
[FIX] framework: monkeypatch needs to patch original method
MiquelRForgeFlow Sep 13, 2022
bfa51db
[FIX] framework: monkeypatch needs to patch original method (fixup)
MiquelRForgeFlow Sep 14, 2022
145a58a
[MIG] openupgrade_framework v16
hbrunn Jan 10, 2023
8bd324e
[ADD] implement tests of migrations
hbrunn Jan 17, 2023
8bce360
[FIX] Add openupgradelib dependencies in manifest files
legalsylvain Mar 27, 2023
21f9860
[UPD] README.rst
OCA-git-bot Sep 3, 2023
4683efb
[OU-FIX] don't fail when there's an unknown field in a view
hbrunn Dec 22, 2023
776ab19
[IMP] openupgrade_framework: pre-commit auto fixes and enable
royle-vietnam May 14, 2024
1bd694a
[FIX] odoo_patch: don't raise or log exceptions in view validation
royle-vietnam May 14, 2024
52de874
[MIG] openupgrade_framework v17
duong77476-viindoo May 22, 2024
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
11 changes: 7 additions & 4 deletions .github/workflows/test.yml
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,8 @@ name: Test OpenUpgrade migration

on:
push:
branches: ["18.0*"]
branches: ["17.0*"]
pull_request:

jobs:
test:
Expand Down Expand Up @@ -90,9 +91,11 @@ jobs:
pip install asn1crypto
- name: Test data
run: |
for snippet in openupgrade/openupgrade_scripts/scripts/*/*/tests/data*.py; do
odoo-old/odoo-bin shell -d $DB < $snippet
done
if test -n "$(ls openupgrade/openupgrade_scripts/scripts/*/*/tests/data*.py 2> /dev/null)"; then
for snippet in openupgrade/openupgrade_scripts/scripts/*/*/tests/data*.py; do
odoo-old/odoo-bin shell -d $DB < $snippet
done
fi
- name: OpenUpgrade test
run: |
# select modules and perform the upgrade
Expand Down
1 change: 1 addition & 0 deletions build_openupgrade_docs
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,7 @@ DOC_PARTS="7.0/openerp/openupgrade/doc/source/modules50-60.rst
14.0/docsource/modules130-140.rst
15.0/docsource/modules140-150.rst
16.0/docsource/modules150-160.rst
17.0/docsource/modules160-170.rst
"
OUTPUT_DIR=${OUTPUT_DIR:-$DOC_BUILD_DIR}

Expand Down
205 changes: 205 additions & 0 deletions openupgrade_framework/README.rst
Original file line number Diff line number Diff line change
@@ -0,0 +1,205 @@
=====================
Openupgrade Framework
=====================

..
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
!! This file is generated by oca-gen-addon-readme !!
!! changes will be overwritten. !!
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
!! source digest: sha256:06d77ecf97625ec075fa31dde7f8f41bcf849fa13af0598f8c1de397348f2dfd
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

.. |badge1| image:: https://img.shields.io/badge/maturity-Beta-yellow.png
:target: https://odoo-community.org/page/development-status
:alt: Beta
.. |badge2| image:: https://img.shields.io/badge/licence-AGPL--3-blue.png
:target: http://www.gnu.org/licenses/agpl-3.0-standalone.html
:alt: License: AGPL-3
.. |badge3| image:: https://img.shields.io/badge/github-OCA%2FOpenUpgrade-lightgray.png?logo=github
:target: https://github.com/OCA/OpenUpgrade/tree/17.0/openupgrade_framework
:alt: OCA/OpenUpgrade
.. |badge4| image:: https://img.shields.io/badge/weblate-Translate%20me-F47D42.png
:target: https://translation.odoo-community.org/projects/OpenUpgrade-17-0/OpenUpgrade-17-0-openupgrade_framework
:alt: Translate me on Weblate
.. |badge5| image:: https://img.shields.io/badge/runboat-Try%20me-875A7B.png
:target: https://runboat.odoo-community.org/builds?repo=OCA/OpenUpgrade&target_branch=17.0
:alt: Try me on Runboat

|badge1| |badge2| |badge3| |badge4| |badge5|

This module is a technical module that contains a number of monkeypatches
to improve the behaviour of Odoo when migrating your database using the
OpenUpgrade migration scripts:

* Prevent dropping columns or tables in the database when fields or models
are obsoleted in the Odoo data model of the target release. After the
migration, you can review and delete unused database tables and columns
using `database_cleanup`. See
https://odoo-community.org/shop/product/database-cleanup-918
* When data records are deleted during the migration (such as views or other
system records), this is done in a secure mode. If the deletion fails because
of some unforeseen dependency, the deletion will be cancelled and a message
is logged, after which the migration continues.
* Prevent a number of log messages that do not apply when using OpenUpgrade.
* Suppress log messages about failed view validation, which are to be expected
during a migration.
* Run migration scripts for modules that are installed as new dependencies
of upgraded modules (when there are such scripts for those particular
modules)
* Production databases generated with demo data, will be transformed to
non-demo ones. If you want to avoid that, you have to pass through the
environment variable OPENUPGRADE_USE_DEMO, the value "yes".

For detailed documentation see:

* https://github.com/OCA/OpenUpgrade/
* https://oca.github.io/OpenUpgrade

**Table of contents**

.. contents::
:local:

Installation
============

This module does not need to be installed on a database.
It simply needs to be available via your ``addons-path``.

Configuration
=============

* call your odoo instance with the option ``--load=base,web,openupgrade_framework``

or

* add the key to your configuration file:

.. code-block:: shell

[options]
server_wide_modules = web,openupgrade_framework

When you load the module in either way of these ways, and you have the
`openupgrade_scripts` module in your addons path available, the
`--upgrade-path` option of Odoo will be set automatically to the location
of the OpenUpgrade migration scripts.

Development
===========

The `odoo_patch` folder contains python files in a tree that mimicks the
folder tree of the Odoo project. It contains a number of monkey patches
to improve the migration of an Odoo database between two major versions.

So far, we are able to make everything work without overwriting large blocks
of code, but if larger patches need to be added, please use the method
described below:

To see the patches added, you can use ``meld`` tools:

``meld PATH_TO_ODOO_FOLDER/odoo/ PATH_TO_OPENUPGRADE_FRAMEWORK_MODULE/odoo_patch``


To make more easy the diff analysis :

* Make sure the python files has the same path as the original one.

* Keep the same indentation as the original file. (using ``if True:`` if required)

* Add the following two lines at the beginning of your file, to avoid flake8 / pylint
errors

.. code-block:: python

# flake8: noqa
# pylint: skip-file

* When you want to change the code. add the following tags:

For an addition:

.. code-block:: python

# <OpenUpgrade:ADD>
some code...
# </OpenUpgrade>

For a change:

.. code-block:: python

# <OpenUpgrade:CHANGE>
some code...
# </OpenUpgrade>

For a removal:

.. code-block:: python

# <OpenUpgrade:REMOVE>
# Comment the code, instead of removing it.
# </OpenUpgrade>

Bug Tracker
===========

Bugs are tracked on `GitHub Issues <https://github.com/OCA/OpenUpgrade/issues>`_.
In case of trouble, please check there if your issue has already been reported.
If you spotted it first, help us to smash it by providing a detailed and welcomed
`feedback <https://github.com/OCA/OpenUpgrade/issues/new?body=module:%20openupgrade_framework%0Aversion:%2017.0%0A%0A**Steps%20to%20reproduce**%0A-%20...%0A%0A**Current%20behavior**%0A%0A**Expected%20behavior**>`_.

Do not contact contributors directly about support or help with technical issues.

Credits
=======

Authors
~~~~~~~

* Therp BV
* Opener B.V.
* GRAP

Contributors
~~~~~~~~~~~~

* Stefan Rijnhart <[email protected]>
* Sylvain LE GAL <https://twitter.com/legalsylvain>

Other credits
~~~~~~~~~~~~~

Many developers have contributed to the OpenUpgrade framework in its previous
incarnation. Their original contributions may no longer needed, or they are
no longer recognizable in their current form but OpenUpgrade would not have
existed at this point without them.

Maintainers
~~~~~~~~~~~

This module is maintained by the OCA.

.. image:: https://odoo-community.org/logo.png
:alt: Odoo Community Association
:target: https://odoo-community.org

OCA, or the Odoo Community Association, is a nonprofit organization whose
mission is to support the collaborative development of Odoo features and
promote its widespread use.

.. |maintainer-legalsylvain| image:: https://github.com/legalsylvain.png?size=40px
:target: https://github.com/legalsylvain
:alt: legalsylvain
.. |maintainer-StefanRijnhart| image:: https://github.com/StefanRijnhart.png?size=40px
:target: https://github.com/StefanRijnhart
:alt: StefanRijnhart

Current `maintainers <https://odoo-community.org/page/maintainer-role>`__:

|maintainer-legalsylvain| |maintainer-StefanRijnhart|

This module is part of the `OCA/OpenUpgrade <https://github.com/OCA/OpenUpgrade/tree/17.0/openupgrade_framework>`_ project on GitHub.

You are welcome to contribute. To learn how please visit https://odoo-community.org/page/Contribute.
16 changes: 16 additions & 0 deletions openupgrade_framework/__init__.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
import logging
import os

from odoo.modules import get_module_path
from odoo.tools import config

from . import odoo_patch

if not config.get("upgrade_path"):
path = get_module_path("openupgrade_scripts", display_warning=False)
if path:
logging.getLogger(__name__).info(
"Setting upgrade_path to the scripts directory inside the module "
"location of openupgrade_scripts"
)
config["upgrade_path"] = os.path.join(path, "scripts")
18 changes: 18 additions & 0 deletions openupgrade_framework/__manifest__.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
# Copyright Odoo Community Association (OCA)
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).
{
"name": "Openupgrade Framework",
"summary": """Module to integrate in the server_wide_modules
option to make upgrades between two major revisions.""",
"author": "Odoo Community Association (OCA), Therp BV, Opener B.V., GRAP, "
"Hunki Enterprises BV",
"maintainers": ["legalsylvain", "StefanRijnhart", "hbrunn"],
"website": "https://github.com/OCA/OpenUpgrade",
"category": "Migration",
"version": "17.0.1.0.0",
"license": "AGPL-3",
"depends": ["base"],
"images": ["static/description/banner.jpg"],
"external_dependencies": {"python": ["openupgradelib"]},
"installable": True,
}
1 change: 1 addition & 0 deletions openupgrade_framework/odoo_patch/__init__.py
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
from . import odoo
1 change: 1 addition & 0 deletions openupgrade_framework/odoo_patch/odoo/__init__.py
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
from . import addons, api, models, modules
1 change: 1 addition & 0 deletions openupgrade_framework/odoo_patch/odoo/addons/__init__.py
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
from . import base
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
from . import models
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
from . import ir_model
from . import ir_ui_view
Original file line number Diff line number Diff line change
@@ -0,0 +1,89 @@
# Copyright Odoo Community Association (OCA)
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).
from openupgradelib import openupgrade

from odoo import api, models

from odoo.addons.base.models.ir_model import (
IrModel,
IrModelData,
IrModelFields,
IrModelRelation,
IrModelSelection,
)


def _drop_table(self):
"""Never drop tables"""
for model in self:
if self.env.get(model.model) is not None:
openupgrade.message(
self.env.cr,
"Unknown",
False,
False,
"Not dropping the table or view of model %s",
model.model,
)


IrModel._drop_table = _drop_table


def _drop_column(self):
"""Never drop columns"""
for field in self:
if field.name in models.MAGIC_COLUMNS:
continue
openupgrade.message(
self.env.cr,
"Unknown",
False,
False,
"Not dropping the column of field %s of model %s",
field.name,
field.model,
)
continue


IrModelFields._drop_column = _drop_column


@api.model
def _module_data_uninstall(self, modules_to_remove):
"""To pass context, that the patch in __getitem__ of api.Environment uses"""
patched_self = self.with_context(**{"missing_model": True})
return IrModelData._module_data_uninstall._original_method(
patched_self, modules_to_remove
)


_module_data_uninstall._original_method = IrModelData._module_data_uninstall
IrModelData._module_data_uninstall = _module_data_uninstall


def _module_data_uninstall(self):
"""Don't delete many2many relation tables. Only unlink the
ir.model.relation record itself.
"""
self.unlink()


IrModelRelation._module_data_uninstall = _module_data_uninstall


def _process_ondelete(self):
"""Don't break on missing models when deleting their selection fields"""
to_process = self.browse([])
for selection in self:
try:
self.env[selection.field_id.model] # pylint: disable=pointless-statement
to_process += selection
except KeyError:
continue
return IrModelSelection._process_ondelete._original_method(to_process)


_process_ondelete._original_method = IrModelSelection._process_ondelete
IrModelSelection._process_ondelete = _process_ondelete
Loading
Loading