-
Notifications
You must be signed in to change notification settings - Fork 1
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Merge pull request #1197 from OCA/14.0
Syncing from upstream OCA/web (14.0)
- Loading branch information
Showing
17 changed files
with
723 additions
and
1 deletion.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1 +1 @@ | ||
14.0.20231127.0 | ||
14.0.20240112.0 |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1 @@ | ||
../../../../web_assets_warmup |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,6 @@ | ||
import setuptools | ||
|
||
setuptools.setup( | ||
setup_requires=['setuptools-odoo'], | ||
odoo_addon=True, | ||
) |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,85 @@ | ||
================================ | ||
Generate assets when Odoo starts | ||
================================ | ||
|
||
.. | ||
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! | ||
!! This file is generated by oca-gen-addon-readme !! | ||
!! changes will be overwritten. !! | ||
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! | ||
!! source digest: sha256:358b7dda724b89b5345f039e82740006a3fd671e7f0dfb824dc67af6ae97a4df | ||
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! | ||
.. |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%2Fweb-lightgray.png?logo=github | ||
:target: https://github.com/OCA/web/tree/14.0/web_assets_warmup | ||
:alt: OCA/web | ||
.. |badge4| image:: https://img.shields.io/badge/weblate-Translate%20me-F47D42.png | ||
:target: https://translation.odoo-community.org/projects/web-14-0/web-14-0-web_assets_warmup | ||
: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/web&target_branch=14.0 | ||
:alt: Try me on Runboat | ||
|
||
|badge1| |badge2| |badge3| |badge4| |badge5| | ||
|
||
Ensure that assets are generated and stored in the DB when Odoo starts | ||
|
||
If the assets from the database are not up-to-date, they are regenerated by | ||
Odoo when we print a report, but to do so Odoo forces the commit, so if an | ||
exception occurs after (or during) the report rendering, it let the database in | ||
a broken state (picking have been validated in this case). | ||
|
||
To prevent this issue, we need to ensure that the assets are well-generated | ||
when Odoo starts, not when the report is printed. | ||
|
||
**Table of contents** | ||
|
||
.. contents:: | ||
:local: | ||
|
||
Bug Tracker | ||
=========== | ||
|
||
Bugs are tracked on `GitHub Issues <https://github.com/OCA/web/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/web/issues/new?body=module:%20web_assets_warmup%0Aversion:%2014.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 | ||
~~~~~~~ | ||
|
||
* Camptocamp | ||
|
||
Contributors | ||
~~~~~~~~~~~~ | ||
|
||
* Sébastien Alix <[email protected]> | ||
* Michael Tietz (MT Software) <[email protected]> | ||
|
||
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. | ||
|
||
This module is part of the `OCA/web <https://github.com/OCA/web/tree/14.0/web_assets_warmup>`_ project on GitHub. | ||
|
||
You are welcome to contribute. To learn how please visit https://odoo-community.org/page/Contribute. |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,2 @@ | ||
from . import models | ||
from .hooks import post_load_hook |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,17 @@ | ||
# Copyright 2020 Camptocamp SA | ||
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl) | ||
{ | ||
"name": "Generate assets when Odoo starts", | ||
"summary": "Ensure that assets are generated when Odoo starts.", | ||
"version": "14.0.1.0.0", | ||
"category": "Hidden", | ||
"author": "Camptocamp, Odoo Community Association (OCA)", | ||
"license": "AGPL-3", | ||
"depends": [ | ||
"web", | ||
], | ||
"website": "https://github.com/OCA/web", | ||
"data": ["data/ir_cron.xml"], | ||
"post_load": "post_load_hook", | ||
"installable": True, | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,22 @@ | ||
<?xml version="1.0" encoding="utf-8" ?> | ||
<!-- Copyright 2020 Camptocamp SA | ||
License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). --> | ||
<odoo noupdate="1"> | ||
|
||
<record model="ir.cron" id="cron_generate_assets"> | ||
<field name='name'>Generate report assets</field> | ||
<field name='interval_number'>1</field> | ||
<field name='interval_type'>months</field> | ||
<field name="numbercall">-1</field> | ||
<field name="active" eval="True" /> | ||
<field name="doall" eval="False" /> | ||
<field | ||
name="nextcall" | ||
eval="(datetime.now() + timedelta(minutes=1)).strftime('%Y-%m-%d %H:%M:00')" | ||
/> | ||
<field name="model_id" ref="base.model_ir_actions_report" /> | ||
<field name="state">code</field> | ||
<field name="code">model.cron_generate_assets()</field> | ||
</record> | ||
|
||
</odoo> |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,70 @@ | ||
# Copyright 2020 Camptocamp SA | ||
# Copyright 2023 Michael Tietz (MT Software) <[email protected]> | ||
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl) | ||
|
||
import logging | ||
import os | ||
|
||
import psycopg2 | ||
|
||
from odoo import fields, registry | ||
|
||
logger = logging.getLogger(__name__) | ||
|
||
|
||
def active_cron_assets(): | ||
"""Plan the next execution of the cron responsible to generate assets.""" | ||
if os.environ.get("RUNNING_ENV") == "dev": | ||
return | ||
dbname = os.environ.get("DB_NAME") | ||
reg = registry(dbname) | ||
with reg.cursor() as cr: | ||
cron_module, cron_ref = "web_assets_warmup", "cron_generate_assets" | ||
query = """ | ||
SELECT model, res_id | ||
FROM ir_model_data | ||
WHERE module=%s | ||
AND name=%s; | ||
""" | ||
args = (cron_module, cron_ref) | ||
cr.execute(query, args) | ||
row = cr.fetchone() | ||
# post_load hook is called before the update of the module so the | ||
# ir_cron record doesn't exist on first install | ||
if row: | ||
model, res_id = row | ||
if model != "ir.cron": | ||
return | ||
# if there is already someone doing the same or already being executed | ||
# we can skip the update of ir_cron | ||
try: | ||
with cr.savepoint(): | ||
cr.execute( | ||
"SELECT * FROM ir_cron WHERE id = %s FOR UPDATE NOWAIT;", | ||
(res_id,), | ||
) | ||
query = """ | ||
UPDATE ir_cron | ||
SET active=true, nextcall=%s, priority=%s | ||
WHERE id=%s | ||
""" | ||
nextcall = fields.Datetime.to_string(fields.Datetime.now()) | ||
args = (nextcall, -99, res_id) | ||
cr.execute(query, args) | ||
logger.info( | ||
"Cron '%s.%s' planned for execution at %s", | ||
cron_module, | ||
cron_ref, | ||
nextcall, | ||
) | ||
except psycopg2.OperationalError as e: | ||
if e.pgcode == "55P03": | ||
logger.info( | ||
"Cron '%s.%s' is currently being executed or updated", | ||
cron_module, | ||
cron_ref, | ||
) | ||
|
||
|
||
def post_load_hook(): | ||
active_cron_assets() |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,41 @@ | ||
# Translation of Odoo Server. | ||
# This file contains the translation of the following modules: | ||
# * web_assets_warmup | ||
# | ||
msgid "" | ||
msgstr "" | ||
"Project-Id-Version: Odoo Server 14.0\n" | ||
"Report-Msgid-Bugs-To: \n" | ||
"Last-Translator: \n" | ||
"Language-Team: \n" | ||
"MIME-Version: 1.0\n" | ||
"Content-Type: text/plain; charset=UTF-8\n" | ||
"Content-Transfer-Encoding: \n" | ||
"Plural-Forms: \n" | ||
|
||
#. module: web_assets_warmup | ||
#: model:ir.model.fields,field_description:web_assets_warmup.field_ir_actions_report__display_name | ||
msgid "Display Name" | ||
msgstr "" | ||
|
||
#. module: web_assets_warmup | ||
#: model:ir.actions.server,name:web_assets_warmup.cron_generate_assets_ir_actions_server | ||
#: model:ir.cron,cron_name:web_assets_warmup.cron_generate_assets | ||
#: model:ir.cron,name:web_assets_warmup.cron_generate_assets | ||
msgid "Generate report assets" | ||
msgstr "" | ||
|
||
#. module: web_assets_warmup | ||
#: model:ir.model.fields,field_description:web_assets_warmup.field_ir_actions_report__id | ||
msgid "ID" | ||
msgstr "" | ||
|
||
#. module: web_assets_warmup | ||
#: model:ir.model.fields,field_description:web_assets_warmup.field_ir_actions_report____last_update | ||
msgid "Last Modified on" | ||
msgstr "" | ||
|
||
#. module: web_assets_warmup | ||
#: model:ir.model,name:web_assets_warmup.model_ir_actions_report | ||
msgid "Report Action" | ||
msgstr "" |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1 @@ | ||
from . import ir_actions_report |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,37 @@ | ||
# Copyright 2020 Camptocamp SA | ||
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl) | ||
|
||
import logging | ||
|
||
from odoo import api, models | ||
|
||
logger = logging.getLogger(__name__) | ||
|
||
|
||
class IrActionsReport(models.Model): | ||
_inherit = "ir.actions.report" | ||
|
||
@api.model | ||
def cron_generate_assets(self): | ||
"""Ensure that the assets are well-generated in the database.""" | ||
logger.info("Ensure that assets are generated and stored in the database...") | ||
# Call `_get_asset_nodes` as done when printing a report based on | ||
# `web.report_layout` template (used by `web.html_container`) | ||
options = { | ||
"commit_assetsbundle": False, | ||
"debug": False, | ||
"inherit_branding": False, | ||
"dev_mode": False, | ||
"caller_template": "web.html_container", | ||
} | ||
assets_template_ids = [ | ||
"web.report_assets_common", | ||
"web.assets_common", | ||
"web.report_assets_pdf", | ||
] | ||
for xml_id in assets_template_ids: | ||
self.env["ir.qweb"]._get_asset_nodes( | ||
xmlid=xml_id, options=options, css=True, js=True | ||
) | ||
logger.info("Ensure that assets are generated and stored in the database: done") | ||
return True |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,2 @@ | ||
* Sébastien Alix <[email protected]> | ||
* Michael Tietz (MT Software) <[email protected]> |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,9 @@ | ||
Ensure that assets are generated and stored in the DB when Odoo starts | ||
|
||
If the assets from the database are not up-to-date, they are regenerated by | ||
Odoo when we print a report, but to do so Odoo forces the commit, so if an | ||
exception occurs after (or during) the report rendering, it let the database in | ||
a broken state (picking have been validated in this case). | ||
|
||
To prevent this issue, we need to ensure that the assets are well-generated | ||
when Odoo starts, not when the report is printed. |
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Oops, something went wrong.