Skip to content
Extraits de code Groupes Projets
Valider 35ea161a rédigé par Benjamin - Le Filament's avatar Benjamin - Le Filament
Parcourir les fichiers

[FIX] json serialization & add route link

parent 750f83ce
Branches
Aucune étiquette associée trouvée
Aucune requête de fusion associée trouvée
......@@ -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
......@@ -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
# ------------------------------------------------------
......
......@@ -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" />
......
0% Chargement en cours ou .
You are about to add 0 people to the discussion. Proceed with caution.
Veuillez vous inscrire ou vous pour commenter