Skip to content

[19.0] endpoint, endpoint_route_handler: some commits (forward port) - #192

Open
MiquelRForgeFlow wants to merge 6 commits into
OCA:19.0from
ForgeFlow:19.0-fw-port-18.0
Open

MiquelRForgeFlow wants to merge 6 commits into
OCA:19.0from
ForgeFlow:19.0-fw-port-18.0

Conversation

@OCA-git-bot

Copy link
Copy Markdown
Contributor

Hi @simahawk,
some modules you are maintaining are being modified, check this out!

@OCA-git-bot OCA-git-bot added series:19.0 mod:endpoint Module endpoint mod:endpoint_route_handler Module endpoint_route_handler labels Oct 27, 2026
@simahawk

Copy link
Copy Markdown
Contributor

can you pls check the tests?

BTW I'm about to merge this #178 -> you might want to review it and include it here

yankinmax and others added 6 commits October 30, 2026 10:47
A rule can now provide a `generator` instead of a `handler`.
The generator is called when the routing map is built
and yields any number of `(url, endpoint)` pairs.

This allows to register a single row for many routes computed
from the code (eg: all the endpoints exposed by a set of services)
without having to update the endpoint_route table
every time a new route is added.

Generators can be model methods (preferred, extensible via inheritance)
or python classes (same lookup as handlers).

A failing generator is logged and skipped
so that it does not break the whole routing map.

Add `utils.make_endpoint` helper to build endpoints
with the routing keys required by Odoo.

Based on OCA#170 (routing map w/o bound request).
When the routing map is built, check each custom route (stored or
generated) against the routes already loaded: standard controllers and
other custom routes.

A route w/ the same URL and overlapping methods (no methods = any)
was silently shadowed (werkzeug matches the first rule only).
Now it's skipped and an error is logged w/ both owners.
The same URL w/ different methods is still fine.
`endpoint_hash` was computed w/ the builtin `hash()`, which is randomized
per process for strings: the same route got a different hash after
a restart, so `unique(endpoint_hash)` only caught duplicates computed
in the same process.

Use a md5 of the routing impacting values instead (`utils.stable_hash`).

The migration (end of the update, once all modules are loaded)
forcedly registers again the routes in sync of all the consumer models:
rows are dropped and created w/ the new hash. Records not in sync
w/ the registry get their new hash when they are synced.

Consumer models now include indirect ones (eg: `endpoint.endpoint`
via `endpoint.mixin`, `edi.endpoint`): they were missing, hence routes
were not checked for uniqueness across them either.
A post_install HttpCase makes Odoo pregenerate all the assets bundles
before running the post_install tests. If you install the dependencies
with --skip-auto-install, only `web` is installed, and
`web.assets_frontend` does not compile without `html_editor`: the SCSS
error is logged as a warning and checklog fails.

Keep TestGeneratorHttp at_install, like the other HttpCase of the repo.
@MiquelRForgeFlow

Copy link
Copy Markdown
Author

@simahawk this is ready

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

mod:endpoint_route_handler Module endpoint_route_handler mod:endpoint Module endpoint series:19.0

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants