From 5ca8b9c2e1ad3b9eeaac5c482d62af48eb4acc8e Mon Sep 17 00:00:00 2001 From: Florian Mounier Date: Mon, 15 Dec 2025 17:03:57 +0100 Subject: [PATCH 1/5] [ADD] fastapi_endpoint_context --- fastapi_endpoint_context/README.rst | 103 ++++ fastapi_endpoint_context/__init__.py | 1 + fastapi_endpoint_context/__manifest__.py | 17 + fastapi_endpoint_context/dependencies.py | 28 ++ fastapi_endpoint_context/models/__init__.py | 1 + .../models/fastapi_endpoint.py | 25 + .../readme/CONTRIBUTORS.md | 1 + .../readme/DESCRIPTION.md | 9 + fastapi_endpoint_context/readme/USAGE.md | 3 + .../static/description/index.html | 441 ++++++++++++++++++ fastapi_endpoint_context/tests/__init__.py | 1 + .../tests/test_fastapi_endpoint_context.py | 51 ++ 12 files changed, 681 insertions(+) create mode 100644 fastapi_endpoint_context/README.rst create mode 100644 fastapi_endpoint_context/__init__.py create mode 100644 fastapi_endpoint_context/__manifest__.py create mode 100644 fastapi_endpoint_context/dependencies.py create mode 100644 fastapi_endpoint_context/models/__init__.py create mode 100644 fastapi_endpoint_context/models/fastapi_endpoint.py create mode 100644 fastapi_endpoint_context/readme/CONTRIBUTORS.md create mode 100644 fastapi_endpoint_context/readme/DESCRIPTION.md create mode 100644 fastapi_endpoint_context/readme/USAGE.md create mode 100644 fastapi_endpoint_context/static/description/index.html create mode 100644 fastapi_endpoint_context/tests/__init__.py create mode 100644 fastapi_endpoint_context/tests/test_fastapi_endpoint_context.py diff --git a/fastapi_endpoint_context/README.rst b/fastapi_endpoint_context/README.rst new file mode 100644 index 000000000..73bf620d4 --- /dev/null +++ b/fastapi_endpoint_context/README.rst @@ -0,0 +1,103 @@ +======================== +fastapi_endpoint_context +======================== + +.. + !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + !! This file is generated by oca-gen-addon-readme !! + !! changes will be overwritten. !! + !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + !! source digest: sha256:088fe199709796fff2a016b1442b64d18d60b0aee7af68c52ad5a15f2137da50 + !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + +.. |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%2Frest--framework-lightgray.png?logo=github + :target: https://github.com/OCA/rest-framework/tree/16.0/fastapi_endpoint_context + :alt: OCA/rest-framework +.. |badge4| image:: https://img.shields.io/badge/weblate-Translate%20me-F47D42.png + :target: https://translation.odoo-community.org/projects/rest-framework-16-0/rest-framework-16-0-fastapi_endpoint_context + :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/rest-framework&target_branch=16.0 + :alt: Try me on Runboat + +|badge1| |badge2| |badge3| |badge4| |badge5| + +This module provides an overridable request context for FastAPI +endpoints. + +It allows to customize the behavior of requests deep in the odoo call +stack according to the current request context without having to +override routers that may come from external modules. + +This context contains by default the current endpoint app and id, +respectively accessible via +``self.env.context.get('fastapi_endpoint_app')`` and +``self.env.context.get('fastapi_endpoint_id')``. + +**Table of contents** + +.. contents:: + :local: + +Usage +===== + +odoo_env dependency is automatically overridden to include FastAPI +endpoint context values. + +You can override the ``fastapi.endpoint``->\ ``_get_app_context()`` +method to add custom values to the context for your applications. + +Bug Tracker +=========== + +Bugs are tracked on `GitHub 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 `_. + +Do not contact contributors directly about support or help with technical issues. + +Credits +======= + +Authors +------- + +* Akretion + +Contributors +------------ + +- Florian Mounier florian.mounier@akretion.com + +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. + +.. |maintainer-paradoxxxzero| image:: https://github.com/paradoxxxzero.png?size=40px + :target: https://github.com/paradoxxxzero + :alt: paradoxxxzero + +Current `maintainer `__: + +|maintainer-paradoxxxzero| + +This module is part of the `OCA/rest-framework `_ project on GitHub. + +You are welcome to contribute. To learn how please visit https://odoo-community.org/page/Contribute. diff --git a/fastapi_endpoint_context/__init__.py b/fastapi_endpoint_context/__init__.py new file mode 100644 index 000000000..0650744f6 --- /dev/null +++ b/fastapi_endpoint_context/__init__.py @@ -0,0 +1 @@ +from . import models diff --git a/fastapi_endpoint_context/__manifest__.py b/fastapi_endpoint_context/__manifest__.py new file mode 100644 index 000000000..efa4a77b4 --- /dev/null +++ b/fastapi_endpoint_context/__manifest__.py @@ -0,0 +1,17 @@ +# Copyright 2025 Akretion (http://www.akretion.com). +# @author Florian Mounier +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). + +{ + "name": "fastapi_endpoint_context", + "version": "16.0.1.0.0", + "author": "Akretion, Odoo Community Association (OCA)", + "summary": "Provides an overridable request context for FastAPI endpoints", + "depends": ["fastapi"], + "website": "https://github.com/OCA/rest-framework", + "data": [], + "maintainers": ["paradoxxxzero"], + "demo": [], + "installable": True, + "license": "AGPL-3", +} diff --git a/fastapi_endpoint_context/dependencies.py b/fastapi_endpoint_context/dependencies.py new file mode 100644 index 000000000..5060ed2b3 --- /dev/null +++ b/fastapi_endpoint_context/dependencies.py @@ -0,0 +1,28 @@ +# Copyright 2025 Akretion (http://www.akretion.com). +# @author Florian Mounier +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). + +from typing import Annotated + +from odoo.api import Environment + +from odoo.addons.fastapi import context, dependencies + +from fastapi import Depends + + +def odoo_env_with_context( + company_id: Annotated[int | None, Depends(dependencies.company_id)], + fastapi_endpoint_id: Annotated[int, Depends(dependencies.fastapi_endpoint_id)], +) -> Environment: + # Add a per endpoint customizable odoo environment context + env = context.odoo_env_ctx.get() + endpoint = env["fastapi.endpoint"].browse(fastapi_endpoint_id) + env = env( + context=dict( + env.context, + **endpoint._get_app_context(), + **({"allow_company_ids": [company_id]} if company_id else {}), + ) + ) + yield env diff --git a/fastapi_endpoint_context/models/__init__.py b/fastapi_endpoint_context/models/__init__.py new file mode 100644 index 000000000..b825fab92 --- /dev/null +++ b/fastapi_endpoint_context/models/__init__.py @@ -0,0 +1 @@ +from . import fastapi_endpoint diff --git a/fastapi_endpoint_context/models/fastapi_endpoint.py b/fastapi_endpoint_context/models/fastapi_endpoint.py new file mode 100644 index 000000000..1368c362b --- /dev/null +++ b/fastapi_endpoint_context/models/fastapi_endpoint.py @@ -0,0 +1,25 @@ +# Copyright 2025 Akretion (http://www.akretion.com). +# @author Florian Mounier +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). + +from odoo import models + +from odoo.addons.fastapi import dependencies + +from ..dependencies import odoo_env_with_context + + +class FastapiEndpoint(models.Model): + _inherit = "fastapi.endpoint" + + def _get_app_context(self): + """Add the fastapi app and endpoint id to the odoo env context""" + return { + "fastapi_app": self.app, + "fastapi_endpoint_id": self.id, + } + + def _get_app_dependencies_overrides(self): + res = super()._get_app_dependencies_overrides() + res.update({dependencies.odoo_env: odoo_env_with_context}) + return res diff --git a/fastapi_endpoint_context/readme/CONTRIBUTORS.md b/fastapi_endpoint_context/readme/CONTRIBUTORS.md new file mode 100644 index 000000000..328a37da8 --- /dev/null +++ b/fastapi_endpoint_context/readme/CONTRIBUTORS.md @@ -0,0 +1 @@ +- Florian Mounier diff --git a/fastapi_endpoint_context/readme/DESCRIPTION.md b/fastapi_endpoint_context/readme/DESCRIPTION.md new file mode 100644 index 000000000..a672fd672 --- /dev/null +++ b/fastapi_endpoint_context/readme/DESCRIPTION.md @@ -0,0 +1,9 @@ +This module provides an overridable request context for FastAPI endpoints. + +It allows to customize the behavior of requests deep in the odoo call stack +according to the current request context without having to override routers +that may come from external modules. + +This context contains by default the current endpoint app and id, respectively +accessible via `self.env.context.get('fastapi_endpoint_app')` and +`self.env.context.get('fastapi_endpoint_id')`. diff --git a/fastapi_endpoint_context/readme/USAGE.md b/fastapi_endpoint_context/readme/USAGE.md new file mode 100644 index 000000000..7368214f2 --- /dev/null +++ b/fastapi_endpoint_context/readme/USAGE.md @@ -0,0 +1,3 @@ +odoo_env dependency is automatically overridden to include FastAPI endpoint context values. + +You can override the `fastapi.endpoint`->`_get_app_context()` method to add custom values to the context for your applications. diff --git a/fastapi_endpoint_context/static/description/index.html b/fastapi_endpoint_context/static/description/index.html new file mode 100644 index 000000000..94bd842d1 --- /dev/null +++ b/fastapi_endpoint_context/static/description/index.html @@ -0,0 +1,441 @@ + + + + + +fastapi_endpoint_context + + + +
+

fastapi_endpoint_context

+ + +

Beta License: AGPL-3 OCA/rest-framework Translate me on Weblate Try me on Runboat

+

This module provides an overridable request context for FastAPI +endpoints.

+

It allows to customize the behavior of requests deep in the odoo call +stack according to the current request context without having to +override routers that may come from external modules.

+

This context contains by default the current endpoint app and id, +respectively accessible via +self.env.context.get('fastapi_endpoint_app') and +self.env.context.get('fastapi_endpoint_id').

+

Table of contents

+ +
+

Usage

+

odoo_env dependency is automatically overridden to include FastAPI +endpoint context values.

+

You can override the fastapi.endpoint->_get_app_context() +method to add custom values to the context for your applications.

+
+
+

Bug Tracker

+

Bugs are tracked on GitHub 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.

+

Do not contact contributors directly about support or help with technical issues.

+
+
+

Credits

+
+

Authors

+
    +
  • Akretion
  • +
+
+ +
+

Maintainers

+

This module is maintained by the OCA.

+ +Odoo Community Association + +

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.

+

Current maintainer:

+

paradoxxxzero

+

This module is part of the OCA/rest-framework project on GitHub.

+

You are welcome to contribute. To learn how please visit https://odoo-community.org/page/Contribute.

+
+
+
+ + diff --git a/fastapi_endpoint_context/tests/__init__.py b/fastapi_endpoint_context/tests/__init__.py new file mode 100644 index 000000000..4758f65e6 --- /dev/null +++ b/fastapi_endpoint_context/tests/__init__.py @@ -0,0 +1 @@ +from . import test_fastapi_endpoint_context diff --git a/fastapi_endpoint_context/tests/test_fastapi_endpoint_context.py b/fastapi_endpoint_context/tests/test_fastapi_endpoint_context.py new file mode 100644 index 000000000..6488a94d2 --- /dev/null +++ b/fastapi_endpoint_context/tests/test_fastapi_endpoint_context.py @@ -0,0 +1,51 @@ +# Copyright 2025 Akretion (http://www.akretion.com). +# @author Florian Mounier +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). + +from typing import Annotated + +from requests import Response + +from odoo.api import Environment + +from odoo.addons.fastapi.dependencies import odoo_env +from odoo.addons.fastapi.routers import demo_router +from odoo.addons.fastapi.tests.common import FastAPITransactionCase + +from fastapi import Depends, status + + +# Extend the demo router to have an endpoint that returns the odoo env context +@demo_router.get("/demo/context") +async def get_context(env: Annotated[Environment, Depends(odoo_env)]) -> dict: + """Returns the odoo env context""" + return env.context + + +class FastAPIEndpointContextCase(FastAPITransactionCase): + @classmethod + def setUpClass(cls) -> None: + super().setUpClass() + cls.default_fastapi_router = demo_router + cls.default_fastapi_running_user = cls.env.ref("fastapi.my_demo_app_user") + cls.endpoint = cls.env.ref("fastapi.fastapi_endpoint_demo") + cls.default_fastapi_app = cls.endpoint._get_app() + cls.default_fastapi_dependency_overrides = { + k: v + for k, v in cls.default_fastapi_app.dependency_overrides.items() + if k.__name__ != "authenticated_partner_impl" + } + cls.default_fastapi_authenticated_partner = cls.env["res.partner"].create( + {"name": "FastAPI Demo"} + ) + + def test_context(self) -> None: + with self._create_test_client() as test_client: + response: Response = test_client.get("/demo/context") + self.assertEqual(response.status_code, status.HTTP_200_OK) + ctx = response.json() + self.assertEqual( + ctx.get("fastapi_endpoint_id"), + self.env.ref("fastapi.fastapi_endpoint_demo").id, + ) + self.assertEqual(ctx.get("fastapi_app"), "demo") From 9cfea0bb1bb4a913d2e3309e308e796287b6d27c Mon Sep 17 00:00:00 2001 From: oca-ci Date: Tue, 3 Feb 2026 15:30:43 +0000 Subject: [PATCH 2/5] [UPD] Update fastapi_endpoint_context.pot --- .../i18n/fastapi_endpoint_context.pot | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) create mode 100644 fastapi_endpoint_context/i18n/fastapi_endpoint_context.pot diff --git a/fastapi_endpoint_context/i18n/fastapi_endpoint_context.pot b/fastapi_endpoint_context/i18n/fastapi_endpoint_context.pot new file mode 100644 index 000000000..81308ca6e --- /dev/null +++ b/fastapi_endpoint_context/i18n/fastapi_endpoint_context.pot @@ -0,0 +1,19 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * fastapi_endpoint_context +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 16.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: fastapi_endpoint_context +#: model:ir.model,name:fastapi_endpoint_context.model_fastapi_endpoint +msgid "FastAPI Endpoint" +msgstr "" From c7d0c98553dc7f02f64a299995800012e2a47fa4 Mon Sep 17 00:00:00 2001 From: OCA-git-bot Date: Tue, 3 Feb 2026 15:57:02 +0000 Subject: [PATCH 3/5] [BOT] post-merge updates --- .../static/description/icon.png | Bin 0 -> 10254 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 fastapi_endpoint_context/static/description/icon.png diff --git a/fastapi_endpoint_context/static/description/icon.png b/fastapi_endpoint_context/static/description/icon.png new file mode 100644 index 0000000000000000000000000000000000000000..1dcc49c24f364e9adf0afbc6fc0bac6dbecdeb11 GIT binary patch literal 10254 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 Date: Tue, 3 Feb 2026 18:06:43 +0100 Subject: [PATCH 4/5] [IMP] fastapi_endpoint_context: pre-commit auto fixes --- fastapi_endpoint_context/pyproject.toml | 3 +++ 1 file changed, 3 insertions(+) create mode 100644 fastapi_endpoint_context/pyproject.toml diff --git a/fastapi_endpoint_context/pyproject.toml b/fastapi_endpoint_context/pyproject.toml new file mode 100644 index 000000000..4231d0ccc --- /dev/null +++ b/fastapi_endpoint_context/pyproject.toml @@ -0,0 +1,3 @@ +[build-system] +requires = ["whool"] +build-backend = "whool.buildapi" From d2a5ee90ff958214a2ea19fd7e70c85f81186f6c Mon Sep 17 00:00:00 2001 From: Florian Mounier Date: Tue, 3 Feb 2026 18:14:54 +0100 Subject: [PATCH 5/5] [MIG] fastapi_endpoint_context --- fastapi_endpoint_context/README.rst | 10 +++++----- fastapi_endpoint_context/__manifest__.py | 3 +-- fastapi_endpoint_context/static/description/index.html | 6 +++--- 3 files changed, 9 insertions(+), 10 deletions(-) diff --git a/fastapi_endpoint_context/README.rst b/fastapi_endpoint_context/README.rst index 73bf620d4..21bb1337f 100644 --- a/fastapi_endpoint_context/README.rst +++ b/fastapi_endpoint_context/README.rst @@ -17,13 +17,13 @@ fastapi_endpoint_context :target: http://www.gnu.org/licenses/agpl-3.0-standalone.html :alt: License: AGPL-3 .. |badge3| image:: https://img.shields.io/badge/github-OCA%2Frest--framework-lightgray.png?logo=github - :target: https://github.com/OCA/rest-framework/tree/16.0/fastapi_endpoint_context + :target: https://github.com/OCA/rest-framework/tree/18.0/fastapi_endpoint_context :alt: OCA/rest-framework .. |badge4| image:: https://img.shields.io/badge/weblate-Translate%20me-F47D42.png - :target: https://translation.odoo-community.org/projects/rest-framework-16-0/rest-framework-16-0-fastapi_endpoint_context + :target: https://translation.odoo-community.org/projects/rest-framework-18-0/rest-framework-18-0-fastapi_endpoint_context :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/rest-framework&target_branch=16.0 + :target: https://runboat.odoo-community.org/builds?repo=OCA/rest-framework&target_branch=18.0 :alt: Try me on Runboat |badge1| |badge2| |badge3| |badge4| |badge5| @@ -60,7 +60,7 @@ Bug Tracker Bugs are tracked on `GitHub 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 `_. +`feedback `_. Do not contact contributors directly about support or help with technical issues. @@ -98,6 +98,6 @@ Current `maintainer `__: |maintainer-paradoxxxzero| -This module is part of the `OCA/rest-framework `_ project on GitHub. +This module is part of the `OCA/rest-framework `_ project on GitHub. You are welcome to contribute. To learn how please visit https://odoo-community.org/page/Contribute. diff --git a/fastapi_endpoint_context/__manifest__.py b/fastapi_endpoint_context/__manifest__.py index efa4a77b4..dc2a1e138 100644 --- a/fastapi_endpoint_context/__manifest__.py +++ b/fastapi_endpoint_context/__manifest__.py @@ -4,14 +4,13 @@ { "name": "fastapi_endpoint_context", - "version": "16.0.1.0.0", + "version": "18.0.1.0.0", "author": "Akretion, Odoo Community Association (OCA)", "summary": "Provides an overridable request context for FastAPI endpoints", "depends": ["fastapi"], "website": "https://github.com/OCA/rest-framework", "data": [], "maintainers": ["paradoxxxzero"], - "demo": [], "installable": True, "license": "AGPL-3", } diff --git a/fastapi_endpoint_context/static/description/index.html b/fastapi_endpoint_context/static/description/index.html index 94bd842d1..53cfd57c7 100644 --- a/fastapi_endpoint_context/static/description/index.html +++ b/fastapi_endpoint_context/static/description/index.html @@ -369,7 +369,7 @@

fastapi_endpoint_context

!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !! source digest: sha256:088fe199709796fff2a016b1442b64d18d60b0aee7af68c52ad5a15f2137da50 !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! --> -

Beta License: AGPL-3 OCA/rest-framework Translate me on Weblate Try me on Runboat

+

Beta License: AGPL-3 OCA/rest-framework Translate me on Weblate Try me on Runboat

This module provides an overridable request context for FastAPI endpoints.

It allows to customize the behavior of requests deep in the odoo call @@ -404,7 +404,7 @@

Bug Tracker

Bugs are tracked on GitHub 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.

+feedback.

Do not contact contributors directly about support or help with technical issues.

@@ -432,7 +432,7 @@

Maintainers

promote its widespread use.

Current maintainer:

paradoxxxzero

-

This module is part of the OCA/rest-framework project on GitHub.

+

This module is part of the OCA/rest-framework project on GitHub.

You are welcome to contribute. To learn how please visit https://odoo-community.org/page/Contribute.