-
Notifications
You must be signed in to change notification settings - Fork 2
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
[3875][ADD] base_api_connection (#132)
[ADD] base_api_connection
- Loading branch information
1 parent
234aecb
commit 3aad901
Showing
13 changed files
with
644 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,58 @@ | ||
=================== | ||
Base API Connection | ||
=================== | ||
|
||
.. !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! | ||
!! This file is generated by oca-gen-addon-readme !! | ||
!! changes will be overwritten. !! | ||
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! | ||
.. |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-LGPL--3-blue.png | ||
:target: http://www.gnu.org/licenses/lgpl-3.0-standalone.html | ||
:alt: License: LGPL-3 | ||
.. |badge3| image:: https://img.shields.io/badge/github-qrtl%2Faxls--oca-lightgray.png?logo=github | ||
:target: https://github.com/qrtl/axls-oca/tree/16.0/base_api_connection | ||
:alt: qrtl/axls-oca | ||
|
||
|badge1| |badge2| |badge3| | ||
|
||
This module facilitates API connections between Odoo and other web services. It is not usable on its own; rather, it is a low-level module intended to serve as a base for others. An example of such a module is 'project_task_capture'. | ||
|
||
**Table of contents** | ||
|
||
.. contents:: | ||
:local: | ||
|
||
Configuration | ||
============= | ||
|
||
1. Go to Settings > API Connection > API Configuration. | ||
2. Create an API configuration record with 'base_url', 'header_api_key_string', 'code', and 'x_api_key'. | ||
|
||
Bug Tracker | ||
=========== | ||
|
||
Bugs are tracked on `GitHub Issues <https://github.com/qrtl/axls-oca/issues>`_. | ||
In case of trouble, please check there if your issue has already been reported. | ||
If you spotted it first, help us smashing it by providing a detailed and welcomed | ||
`feedback <https://github.com/qrtl/axls-oca/issues/new?body=module:%20base_api_connection%0Aversion:%2016.0%0A%0A**Steps%20to%20reproduce**%0A-%20...%0A%0A**Current%20behavior**%0A%0A**Expected%20behavior**>`_. | ||
|
||
Do not contact contributors directly about support or help with technical issues. | ||
|
||
Credits | ||
======= | ||
|
||
Authors | ||
~~~~~~~ | ||
|
||
* Quartile Limited | ||
|
||
Maintainers | ||
~~~~~~~~~~~ | ||
|
||
This module is part of the `qrtl/axls-oca <https://github.com/qrtl/axls-oca/tree/16.0/base_api_connection>`_ project on GitHub. | ||
|
||
You are welcome to contribute. |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1 @@ | ||
from . import models |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,16 @@ | ||
# Copyright 2023 Quartile Limited | ||
# License LGPL-3.0 or later (https://www.gnu.org/licenses/lgpl). | ||
{ | ||
"name": "Base API Connection", | ||
"version": "16.0.1.0.0", | ||
"category": "API", | ||
"website": "https://www.quartile.co", | ||
"author": "Quartile Limited, Odoo Community Association (OCA)", | ||
"license": "LGPL-3", | ||
"depends": ["base"], | ||
"data": [ | ||
"security/ir.model.access.csv", | ||
"views/api_config_views.xml", | ||
], | ||
"installable": True, | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,2 @@ | ||
from . import api_config | ||
from . import api_call_mixin |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,56 @@ | ||
# Copyright 2023 Quartile Limited | ||
# License LGPL-3.0 or later (https://www.gnu.org/licenses/lgpl). | ||
|
||
import logging | ||
|
||
import requests | ||
|
||
from odoo import _, models | ||
from odoo.exceptions import UserError | ||
|
||
_logger = logging.getLogger(__name__) | ||
|
||
|
||
class APICallMixin(models.AbstractModel): | ||
_name = "api.call.mixin" | ||
_description = "API Call Mixin" | ||
|
||
def get_api_key(self, config): | ||
return config.api_key | ||
|
||
def make_api_call( | ||
self, | ||
code, | ||
external_system="generic", | ||
endpoint=None, | ||
custom_headers=None, | ||
params=None, | ||
json=None, | ||
http_method="get", | ||
): | ||
config = self.env["api.config"].search( | ||
[("external_system", "=", external_system), ("code", "=", code)], limit=1 | ||
) | ||
if not config: | ||
raise UserError(_("API configuration not found.")) | ||
url = f"{config.base_url}/{endpoint}" | ||
headers = {"Content-Type": "application/json"} | ||
if custom_headers: | ||
headers.update(custom_headers) | ||
api_key = self.get_api_key(config) | ||
headers[config.header_api_key_string] = api_key | ||
function = getattr(requests, http_method) | ||
kwargs = {"headers": headers, "params": params} | ||
if json: | ||
kwargs["json"] = json | ||
try: | ||
response = function(url, **kwargs) | ||
response.raise_for_status() # Raises HTTPError for bad responses | ||
_logger.info( | ||
f"Successful API call to {url}. Response status code: {response.status_code}" | ||
) | ||
except requests.exceptions.HTTPError as e: | ||
raise UserError(f"HTTP Error: {str(e)}") from e | ||
except requests.exceptions.RequestException as e: | ||
raise UserError(f"Request Error: {str(e)}") from e | ||
return response |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,35 @@ | ||
# Copyright 2023 Quartile Limited | ||
# License LGPL-3.0 or later (https://www.gnu.org/licenses/lgpl). | ||
|
||
from odoo import _, api, fields, models | ||
from odoo.exceptions import ValidationError | ||
|
||
|
||
class ApiConfig(models.Model): | ||
_name = "api.config" | ||
_description = "API Configuration" | ||
|
||
name = fields.Char(required=True) | ||
code = fields.Char( | ||
required=True, | ||
help="Expected to act as an identifier of the API configuration " | ||
"record along with External System.", | ||
) | ||
base_url = fields.Char(string="URL") | ||
header_api_key_string = fields.Char( | ||
required=True, | ||
help="This string will be used as the key in the API header for the API key value.", | ||
) | ||
external_system = fields.Selection( | ||
[("generic", "Generic")], default="generic", required=True | ||
) | ||
api_key = fields.Char(string="Api Key or Token", required=True) | ||
|
||
@api.constrains("code") | ||
def _check_code(self): | ||
for record in self: | ||
existing_rec = self.search( | ||
[("code", "=", record.code), ("id", "!=", record.id)], | ||
) | ||
if existing_rec: | ||
raise ValidationError(_("Code must be unique.")) |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,2 @@ | ||
1. Go to Settings > API Connection > API Configuration. | ||
2. Create an API configuration record with 'base_url', 'header_api_key_string', 'code', and 'x_api_key'. |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1 @@ | ||
This module facilitates API connections between Odoo and other web services. It is not usable on its own; rather, it is a low-level module intended to serve as a base for others. An example of such a module is 'project_task_capture'. |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,2 @@ | ||
id,name,model_id:id,group_id:id,perm_read,perm_write,perm_create,perm_unlink | ||
access_api_config_manager,api.config,model_api_config,base.group_system,1,1,1,1 |
Oops, something went wrong.