diff --git a/controllers/endpoint.py b/controllers/endpoint.py index d87c4dc6c425bf4679797bc7ce475b25f52aed43..c551e83b1d15057a8876410b073dee4e7e600a57 100644 --- a/controllers/endpoint.py +++ b/controllers/endpoint.py @@ -2,10 +2,10 @@ # License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html). import json -from datetime import date, datetime from odoo import http from odoo.http import request +from odoo.tools import json_default from .exceptions import RouteException @@ -94,24 +94,17 @@ class RouteApi(http.Controller): .search(exposition_domain) .read(field_name) ) - - has_date_field = False - for field in field_exposed.field_id: - if field.ttype in ["date", "datetime"]: - has_date_field = True - # Date processing - if has_date_field: - for r in result: - for k, v in r.items(): - if type(v) == datetime or type(v) == date: - r[k] = str(v) + data = json.dumps( + {"count": len(result), "data": result}, + default=json_default + ) + response = http.Response( + response=data, + headers=[("Content-Type", "application/json")], + ) except Exception as e: raise RouteException( description=f"Route {exposition_record.name}: {e}.", status_code=500 ) - response = http.Response( - response=json.dumps({"count": len(result), "data": result}), - headers=[("Content-Type", "application/json")], - ) return response diff --git a/models/route_exposition.py b/models/route_exposition.py index cdb0c16a30101d9cb25f255aea388ff1f636f9e1..3f869c3dc57ec52bfb40d03e28457c10849a1704 100644 --- a/models/route_exposition.py +++ b/models/route_exposition.py @@ -32,8 +32,9 @@ class RouteExposition(models.Model): ) active = fields.Boolean(default=True) route_name = fields.Char( - readonly=True, store=True, compute="_compute_route_name", tracking=1 + string="Endpoint", readonly=True, store=True, compute="_compute_route_name", tracking=1 ) + route_link = fields.Char(string="Lien", compute="_compute_route_link") domain = fields.Text("Domaine") ip_address = fields.Char( string="Adresse IP distante", help="The IP address of the authorised emitter" @@ -70,16 +71,16 @@ class RouteExposition(models.Model): # ------------------------------------------------------ # Compute # ------------------------------------------------------ - @api.depends("name") + @api.depends("name", "model_id") def _compute_route_name(self): for exposition in self: - if exposition.name: + if exposition.name and exposition.model_id: route_name = exposition.name.replace("'", "_").replace(" ", "_").lower() if not re.match(r"^[a-z_-]+$", route_name): raise ValidationError( _( - "The route name cannot be generated, " - "removed any special character" + "La route ne peut pas être générée, " + "supprimer les caractères spéciaux" ) ) else: @@ -87,6 +88,10 @@ class RouteExposition(models.Model): else: exposition.route_name = "" + def _compute_route_link(self): + for exposition in self: + exposition.route_link = f"{exposition.get_base_url()}/{exposition.model_id.model}/api/{exposition.route_name}" + # ------------------------------------------------------ # Actions # ------------------------------------------------------ diff --git a/views/route_exposition_views.xml b/views/route_exposition_views.xml index d5f2682d9359f23d87ead9ede865e5dab5a9e888..20a25f97b21f7035fc57feeddef772aaaf6552e4 100644 --- a/views/route_exposition_views.xml +++ b/views/route_exposition_views.xml @@ -20,6 +20,7 @@ <field name="domain" /> <field name="active_test" /> <field name="route_name" /> + <field name="route_link" widget="CopyClipboardChar" /> </group> <group> <field name="description" />