From f38cabcf8907e2812046295184966233c051e59a Mon Sep 17 00:00:00 2001 From: benjamin <benjamin@le-filament.com> Date: Fri, 23 Sep 2022 13:54:21 +0200 Subject: [PATCH] [update] delete controller and add button action --- __init__.py | 2 +- __manifest__.py | 2 +- controllers/main.py | 55 ----------------------------- {controllers => models}/__init__.py | 3 +- models/base_config_settings.py | 11 ++++++ models/ir_module_module.py | 47 ++++++++++++++++++++++++ views/base_config_view.xml | 31 ++++++++++++++++ 7 files changed, 93 insertions(+), 58 deletions(-) delete mode 100644 controllers/main.py rename {controllers => models}/__init__.py (65%) create mode 100644 models/base_config_settings.py create mode 100644 models/ir_module_module.py create mode 100644 views/base_config_view.xml diff --git a/__init__.py b/__init__.py index 87ab696..e0e3732 100644 --- a/__init__.py +++ b/__init__.py @@ -1,4 +1,4 @@ # Copyright 2021 Le Filament (https://le-filament.com) # License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html) -from . import controllers +from . import models diff --git a/__manifest__.py b/__manifest__.py index 8cafdbd..a1a762d 100644 --- a/__manifest__.py +++ b/__manifest__.py @@ -11,7 +11,7 @@ "depends": [ "base", ], - "data": [], + "data": ["views/base_config_view.xml"], "qweb": [], "installable": True, "auto_install": False, diff --git a/controllers/main.py b/controllers/main.py deleted file mode 100644 index 3b56d44..0000000 --- a/controllers/main.py +++ /dev/null @@ -1,55 +0,0 @@ -# Copyright 2022 Le Filament (https://le-filament.com) -# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html) - -import json - -from odoo import exceptions, http -from odoo.http import request - - -class ReleaseAgent(http.Controller): - # ------------------------------------------------------ - # Routes - # ------------------------------------------------------ - @http.route( - ["/get-modules"], - type="http", - auth="none", - method=["GET"], - csrf=False, - ) - def get_modules(self): - db_header = request.httprequest.headers.get("DbName", False) - if db_header and db_header == request.db: - modules = ( - request.env["ir.module.module"] - .sudo() - .search([("state", "=", "installed")]) - ) - res = modules.mapped( - lambda m: { - "name": m.name, - "author": m.author, - "latest_version": m.latest_version, - "author_type": self.get_author_type(m), - } - ) - return http.Response( - response=json.dumps(res), - headers=[("Content-Type", "application/json")], - ) - else: - return exceptions.AccessDenied() - - # ------------------------------------------------------ - # Common functions - # ------------------------------------------------------ - def get_author_type(self, module): - if "OCA" in module.author: - return "oca" - elif "FILAMENT" in module.author.upper(): - return "lefilament" - elif "Odoo S.A." in module.author: - return "odoo" - else: - return "other" diff --git a/controllers/__init__.py b/models/__init__.py similarity index 65% rename from controllers/__init__.py rename to models/__init__.py index a69de12..3f1e224 100644 --- a/controllers/__init__.py +++ b/models/__init__.py @@ -1,4 +1,5 @@ # Copyright 2022 Le Filament (https://le-filament.com) # License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html) -from . import main +from . import base_config_settings +from . import ir_module_module diff --git a/models/base_config_settings.py b/models/base_config_settings.py new file mode 100644 index 0000000..a4b090e --- /dev/null +++ b/models/base_config_settings.py @@ -0,0 +1,11 @@ +# Copyright 2022 Le Filament (https://le-filament.com) +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html) + +from odoo import models + + +class ResConfigSettings(models.TransientModel): + _inherit = "res.config.settings" + + def action_sync_modules(self): + self.env["ir.module.module"].sudo().post_modules() diff --git a/models/ir_module_module.py b/models/ir_module_module.py new file mode 100644 index 0000000..ae6fdf3 --- /dev/null +++ b/models/ir_module_module.py @@ -0,0 +1,47 @@ +# © 2022 Le Filament (<http://www.le-filament.com>) +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html). + +import requests + +from odoo import exceptions, models + + +class IrModule(models.Model): + _inherit = "ir.module.module" + + # ------------------------------------------------------ + # Common function + # ------------------------------------------------------ + def _get_modules(self): + modules = self.sudo().search([("state", "=", "installed")]) + res = modules.mapped( + lambda m: { + "name": m.name, + "author": m.author, + "latest_version": m.latest_version, + "author_type": m._get_author_type(), + } + ) + return res + + def _get_author_type(self): + self.ensure_one() + if "OCA" in self.author: + return "oca" + elif "FILAMENT" in self.author.upper(): + return "lefilament" + elif "Odoo S.A." in self.author: + return "odoo" + else: + return "other" + + def post_modules(self): + try: + requests.post( + url="https://monfil.le-filament.com/post-modules", + json=self._get_modules(), + verify=True, + timeout=10, + ) + except Exception as e: + raise exceptions.UserError(e.__str__()) diff --git a/views/base_config_view.xml b/views/base_config_view.xml new file mode 100644 index 0000000..21b18b7 --- /dev/null +++ b/views/base_config_view.xml @@ -0,0 +1,31 @@ +<?xml version="1.0" encoding="utf-8" ?> +<!-- Copyright 2015 Antiun Ingenieria S.L. - Antonio Espinosa + License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html). --> +<odoo> + <record id="res_config_lefilament_agent_view_form" model="ir.ui.view"> + <field name="name">Add module synchro config parameter</field> + <field name="model">res.config.settings</field> + <field name="inherit_id" ref="base_setup.res_config_settings_view_form" /> + <field name="arch" type="xml"> + <xpath expr="//div[@id='companies']" position='after'> + <h2>Synchronisation des modules</h2> + <div class="row mt16 o_settings_container" name="partner_names_order"> + <div class="col-xs-12 col-md-6 o_setting_box"> + <div class="o_setting_right_pane"> + <p class="text-muted"> + Synchronisation des modules vers le serveur du Filament pour la gestion des releases + </p> + <button + name="action_sync_modules" + string="Synchroniser les modules" + class="btn-info" + type="object" + help="Synchronise les modules vers le serveur du Filament" + /> + </div> + </div> + </div> + </xpath> + </field> + </record> +</odoo> -- GitLab