Base External System

base_external_system
REPOSITORY
REPOSITORYOCA/server-backend
GIT
GIThttps://github.com/OCA/server-backend.git
GIT FOLDER
GIT FOLDERhttps://github.com/OCA/server-backend/tree/18.0/base_external_system
VERSION
VERSION 1.0.0
CATEGORY
CATEGORYBase
LICENSE
LICENSELGPL-3
APPLICATION
APPLICATIONNo
AUTO-INSTALLABLE
AUTO-INSTALLABLENo
AUTHORS
AUTHORSOdoo Community Association (OCA), Therp BV, LasLabs
MAINTAINERS
MAINTAINERSOdoo Community Association (OCA), Therp BV, LasLabs
COMMITTERS
COMMITTERSRonald Portier, Weblate, OCA-git-bot, oca-ci, Andrii9090-tecnativa
WEBSITE
WEBSITEhttps://github.com/OCA/server-backend
LAST TRACKING UPDATE
LAST TRACKING UPDATE2026-07-06 19:30:19
ODOO DEPENDENCIES
ODOO DEPENDENCIES odoo/odoo:
    - base
PYTHON DEPENDENCIES
PYTHON DEPENDENCIES Not have
SYSTEM DEPENDENCIES
SYSTEM DEPENDENCIES Not have
DESCRIPTION
DESCRIPTION
This module provides an interface/adapter mechanism for the definition
of remote systems.

Note that this module stores everything in plain text. In the interest
of security, it is recommended you use another module (such as keychain
or red_october to encrypt things like the password and private key).
This is not done here in order to not force a specific security method.

Code Analysis

Views touched (3)
XML IDNameModelTypeStatus
external_system_view_form external.system.view.form external.system form New
external_system_view_list external.system.view.list external.system list New
external_system_view_search external.system.view.search external.system search New
Models touched (3)

New fields (14)
  • company_ids Many2many → res.company
    comodel_name='res.company' default=<expr> help='Access to this system is restricted to these companies.' required=True string='Companies'
  • fingerprint Text
    help='This is the fingerprint that is advertised by this system in order to validate its identity.'
  • host Char
    help='This is the domain or IP address that the system can be reached at.'
  • ignore_fingerprint Boolean
    default=True help='Set this to `True` in order to ignore an invalid/unknown fingerprint from the system.'
  • name Char
    help='This is the canonical (humanized) name for the system.' required=True
  • password Char
    help='This is the password that is used for authenticating to this system, if applicable.'
  • port Integer
    help='This is the port number that the system is listening on.'
  • private_key Text
    help='This is the private key that is used for authenticating to this system, if applicable.'
  • private_key_password Text
    help='This is the password to unlock the private key that was provided for this sytem.'
  • private_key_thumbprint Text
    help='The thumbprint generated by AAD when you upload your public cert'
  • remote_path Char
    help='Restrict to this directory path on the remote, if applicable.'
  • scheme Char
    help='This is the protocol used to communicate with the system.'
  • system_type Selection
    required=True selection=<expr>
  • username Char
    help='This is the username that is used for authenticating to this system, if applicable.'
Public methods (3)
  • action_test_connection(self)
    Test the connection to the external system. Any unexpected exception will be transformed into a ValidationError. A ValidationError will also be raised if no client is returned.
  • check_fingerprint_ignore_fingerprint(self)
    @api.constrains('fingerprint', 'ignore_fingerprint')
    Do not allow a blank fingerprint if not set to ignore.
  • client(self)
    @contextmanager
    Client object usable as a context manager to include destruction. Yields the result from ``external_get_client``, then calls ``external_destroy_client`` to cleanup the client. Yields: mixed: An object representing the client connection to the remote system.

New fields (0)

No new fields.

Public methods (3)
  • external_destroy_client(self, client)
    @api.model
    Perform any logic necessary to destroy the client connection. Args: client (mixed): The client that was returned by ``external_get_client``.
  • external_get_client(self)
    @api.model
    Return a usable client representing the remote system.
  • get_system(self)
    Get system from environment.

New fields (0)

No new fields.

Public methods (5)
  • del_previous_dir(self)
    Get system from environment.
  • external_destroy_client(self, client)
    @api.model
    Perform any logic necessary to destroy the client connection.
  • external_get_client(self)
    @api.model
    Return a usable client representing the remote system.
  • get_previous_dir(self)
    Get previous_dir from adapter_memory.
  • set_previous_dir(self, value)
    Store previous_dir in adapter_memor.
REPOSITORY
REPOSITORYOCA/server-backend
GIT
GIThttps://github.com/OCA/server-backend.git
GIT FOLDER
GIT FOLDERhttps://github.com/OCA/server-backend/tree/16.0/base_external_system
VERSION
VERSION 1.0.0
CATEGORY
CATEGORYBase
LICENSE
LICENSELGPL-3
APPLICATION
APPLICATIONNo
AUTO-INSTALLABLE
AUTO-INSTALLABLENo
AUTHORS
AUTHORSOdoo Community Association (OCA), LasLabs
MAINTAINERS
MAINTAINERSOdoo Community Association (OCA), LasLabs
COMMITTERS
COMMITTERSWeblate, OCA-git-bot, oca-ci, ntsirintanis
WEBSITE
WEBSITEhttps://github.com/OCA/server-backend
LAST TRACKING UPDATE
LAST TRACKING UPDATE2026-07-06 00:54:00
ODOO DEPENDENCIES
ODOO DEPENDENCIES odoo/odoo:
    - base
PYTHON DEPENDENCIES
PYTHON DEPENDENCIES Not have
SYSTEM DEPENDENCIES
SYSTEM DEPENDENCIES Not have
DESCRIPTION
DESCRIPTION

Code Analysis

Views touched (3)
XML IDNameModelTypeStatus
external_system_view_form external.system.view.form external.system form New
external_system_view_search external.system.view.search external.system search New
external_system_view_tree external.system.view.tree external.system tree New
Models touched (3)

New fields (13)
  • company_ids Many2many → res.company
    comodel_name='res.company' default=<expr> help='Access to this system is restricted to these companies.' required=True string='Companies'
  • fingerprint Text
    help='This is the fingerprint that is advertised by this system in order to validate its identity.'
  • host Char
    help='This is the domain or IP address that the system can be reached at.'
  • ignore_fingerprint Boolean
    default=True help='Set this to `True` in order to ignore an invalid/unknown fingerprint from the system.'
  • interface Reference
    help='This is the interface that this system represents. It is created automatically upon creation of the external system.' readonly=True selection='_get_system_types'
  • name Char
    help='This is the canonical (humanized) name for the system.' required=True
  • password Char
    help='This is the password that is used for authenticating to this system, if applicable.'
  • port Integer
    help='This is the port number that the system is listening on.'
  • private_key Text
    help='This is the private key that is used for authenticating to this system, if applicable.'
  • private_key_password Text
    help='This is the password to unlock the private key that was provided for this sytem.'
  • remote_path Char
    help='Restrict to this directory path on the remote, if applicable.'
  • system_type Selection
    required=True selection='_get_system_types'
  • username Char
    help='This is the username that is used for authenticating to this system, if applicable.'
Public methods (4)
  • action_test_connection(self)
    Test the connection to the external system.
  • check_fingerprint_ignore_fingerprint(self)
    @api.constrains('fingerprint', 'ignore_fingerprint')
    Do not allow a blank fingerprint if not set to ignore.
  • client(self)
    @contextmanager
    Client object usable as a context manager to include destruction. Yields the result from ``external_get_client``, then calls ``external_destroy_client`` to cleanup the client. Yields: mixed: An object representing the client connection to the remote system.
  • create(self, vals_list)
    @api.model_create_multi
    Create the interface for the record and assign to ``interface``.

New fields (1)
  • system_id Many2one → external.system
    comodel_name='external.system' ondelete='cascade' required=True string='System'
Public methods (5)
  • client(self)
    @contextmanager
    Client object usable as a context manager to include destruction. Yields the result from ``external_get_client``, then calls ``external_destroy_client`` to cleanup the client. Yields: mixed: An object representing the client connection to the remote system.
  • create(self, vals_list)
    @api.model_create_multi
  • external_destroy_client(self, client)
    Perform any logic necessary to destroy the client connection. Args: client (mixed): The client that was returned by ``external_get_client``.
  • external_get_client(self)
    Return a usable client representing the remote system.
  • external_test_connection(self)
    Adapters should override this method, then call super if valid. If the connection is invalid, adapters should raise an instance of ``odoo.ValidationError``. Raises: odoo.exceptions.UserError: In the event of a good connection.

New fields (0)

No new fields.

Public methods (2)
  • external_destroy_client(self, client)
    Perform any logic necessary to destroy the client connection. Args: client (mixed): The client that was returned by ``external_get_client``.
  • external_get_client(self)
    Return a usable client representing the remote system.
REPOSITORY
REPOSITORYOCA/server-backend
GIT
GIThttps://github.com/OCA/server-backend.git
GIT FOLDER
GIT FOLDERhttps://github.com/OCA/server-backend/tree/15.0/base_external_system
VERSION
VERSION 1.0.0
CATEGORY
CATEGORYBase
LICENSE
LICENSELGPL-3
APPLICATION
APPLICATIONNo
AUTO-INSTALLABLE
AUTO-INSTALLABLENo
AUTHORS
AUTHORSOdoo Community Association (OCA), LasLabs
MAINTAINERS
MAINTAINERSOdoo Community Association (OCA), LasLabs
COMMITTERS
COMMITTERSPedro M. Baeza, Weblate, OCA-git-bot, oca-ci
WEBSITE
WEBSITEhttps://github.com/OCA/server-backend
LAST TRACKING UPDATE
LAST TRACKING UPDATE2026-07-06 00:46:43
ODOO DEPENDENCIES
ODOO DEPENDENCIES odoo/odoo:
    - base
PYTHON DEPENDENCIES
PYTHON DEPENDENCIES Not have
SYSTEM DEPENDENCIES
SYSTEM DEPENDENCIES Not have
DESCRIPTION
DESCRIPTION

Code Analysis

Views touched (3)
XML IDNameModelTypeStatus
external_system_view_form external.system.view.form external.system form New
external_system_view_search external.system.view.search external.system search New
external_system_view_tree external.system.view.tree external.system tree New
Models touched (3)

New fields (13)
  • company_ids Many2many → res.company
    comodel_name='res.company' default=<expr> help='Access to this system is restricted to these companies.' required=True string='Companies'
  • fingerprint Text
    help='This is the fingerprint that is advertised by this system in order to validate its identity.'
  • host Char
    help='This is the domain or IP address that the system can be reached at.'
  • ignore_fingerprint Boolean
    default=True help='Set this to `True` in order to ignore an invalid/unknown fingerprint from the system.'
  • interface Reference
    help='This is the interface that this system represents. It is created automatically upon creation of the external system.' readonly=True selection='_get_system_types'
  • name Char
    help='This is the canonical (humanized) name for the system.' required=True
  • password Char
    help='This is the password that is used for authenticating to this system, if applicable.'
  • port Integer
    help='This is the port number that the system is listening on.'
  • private_key Text
    help='This is the private key that is used for authenticating to this system, if applicable.'
  • private_key_password Text
    help='This is the password to unlock the private key that was provided for this sytem.'
  • remote_path Char
    help='Restrict to this directory path on the remote, if applicable.'
  • system_type Selection
    required=True selection='_get_system_types'
  • username Char
    help='This is the username that is used for authenticating to this system, if applicable.'
Public methods (4)
  • action_test_connection(self)
    Test the connection to the external system.
  • check_fingerprint_ignore_fingerprint(self)
    @api.constrains('fingerprint', 'ignore_fingerprint')
    Do not allow a blank fingerprint if not set to ignore.
  • client(self)
    @contextmanager
    Client object usable as a context manager to include destruction. Yields the result from ``external_get_client``, then calls ``external_destroy_client`` to cleanup the client. Yields: mixed: An object representing the client connection to the remote system.
  • create(self, vals)
    @api.model
    Create the interface for the record and assign to ``interface``.

New fields (1)
  • system_id Many2one → external.system
    comodel_name='external.system' ondelete='cascade' required=True string='System'
Public methods (5)
  • client(self)
    @contextmanager
    Client object usable as a context manager to include destruction. Yields the result from ``external_get_client``, then calls ``external_destroy_client`` to cleanup the client. Yields: mixed: An object representing the client connection to the remote system.
  • create(self, vals)
    @api.model
  • external_destroy_client(self, client)
    Perform any logic necessary to destroy the client connection. Args: client (mixed): The client that was returned by ``external_get_client``.
  • external_get_client(self)
    Return a usable client representing the remote system.
  • external_test_connection(self)
    Adapters should override this method, then call super if valid. If the connection is invalid, adapters should raise an instance of ``odoo.ValidationError``. Raises: odoo.exceptions.UserError: In the event of a good connection.

New fields (0)

No new fields.

Public methods (2)
  • external_destroy_client(self, client)
    Perform any logic necessary to destroy the client connection. Args: client (mixed): The client that was returned by ``external_get_client``.
  • external_get_client(self)
    Return a usable client representing the remote system.
REPOSITORY
REPOSITORYOCA/server-backend
GIT
GIThttps://github.com/OCA/server-backend.git
GIT FOLDER
GIT FOLDERhttps://github.com/OCA/server-backend/tree/13.0/base_external_system
VERSION
VERSION 1.0.1
CATEGORY
CATEGORYBase
LICENSE
LICENSELGPL-3
APPLICATION
APPLICATIONNo
AUTO-INSTALLABLE
AUTO-INSTALLABLENo
AUTHORS
AUTHORSOdoo Community Association (OCA), LasLabs
MAINTAINERS
MAINTAINERSOdoo Community Association (OCA), LasLabs
COMMITTERS
COMMITTERSRonald Portier, JordiMForgeFlow, oca-travis, OCA-git-bot
WEBSITE
WEBSITEhttps://github.com/OCA/server-backend
LAST TRACKING UPDATE
LAST TRACKING UPDATE2026-07-06 00:34:20
ODOO DEPENDENCIES
ODOO DEPENDENCIES odoo/odoo:
    - base
PYTHON DEPENDENCIES
PYTHON DEPENDENCIES Not have
SYSTEM DEPENDENCIES
SYSTEM DEPENDENCIES Not have
DESCRIPTION
DESCRIPTION

Code Analysis

Views touched (3)
XML IDNameModelTypeStatus
external_system_view_form external.system.view.form external.system form New
external_system_view_search external.system.view.search external.system search New
external_system_view_tree external.system.view.tree external.system tree New
Models touched (3)

New fields (13)
  • company_ids Many2many → res.company
    comodel_name='res.company' default=<expr> help='Access to this system is restricted to these companies.' required=True string='Companies'
  • fingerprint Text
    help='This is the fingerprint that is advertised by this system in order to validate its identity.'
  • host Char
    help='This is the domain or IP address that the system can be reached at.'
  • ignore_fingerprint Boolean
    default=True help='Set this to `True` in order to ignore an invalid/unknown fingerprint from the system.'
  • interface Reference
    help='This is the interface that this system represents. It is created automatically upon creation of the external system.' readonly=True selection='_get_system_types'
  • name Char
    help='This is the canonical (humanized) name for the system.' required=True
  • password Char
    help='This is the password that is used for authenticating to this system, if applicable.'
  • port Integer
    help='This is the port number that the system is listening on.'
  • private_key Text
    help='This is the private key that is used for authenticating to this system, if applicable.'
  • private_key_password Text
    help='This is the password to unlock the private key that was provided for this sytem.'
  • remote_path Char
    help='Restrict to this directory path on the remote, if applicable.'
  • system_type Selection
    required=True selection='_get_system_types'
  • username Char
    help='This is the username that is used for authenticating to this system, if applicable.'
Public methods (4)
  • action_test_connection(self)
    Test the connection to the external system.
  • check_fingerprint_ignore_fingerprint(self)
    @api.constrains('fingerprint', 'ignore_fingerprint')
    Do not allow a blank fingerprint if not set to ignore.
  • client(self)
    @contextmanager
    Client object usable as a context manager to include destruction. Yields the result from ``external_get_client``, then calls ``external_destroy_client`` to cleanup the client. Yields: mixed: An object representing the client connection to the remote system.
  • create(self, vals)
    @api.model
    Create the interface for the record and assign to ``interface``.

New fields (1)
  • system_id Many2one → external.system
    comodel_name='external.system' ondelete='cascade' required=True string='System'
Public methods (5)
  • client(self)
    @contextmanager
    Client object usable as a context manager to include destruction. Yields the result from ``external_get_client``, then calls ``external_destroy_client`` to cleanup the client. Yields: mixed: An object representing the client connection to the remote system.
  • create(self, vals)
    @api.model
  • external_destroy_client(self, client)
    Perform any logic necessary to destroy the client connection. Args: client (mixed): The client that was returned by ``external_get_client``.
  • external_get_client(self)
    Return a usable client representing the remote system.
  • external_test_connection(self)
    Adapters should override this method, then call super if valid. If the connection is invalid, adapters should raise an instance of ``odoo.ValidationError``. Raises: odoo.exceptions.UserError: In the event of a good connection.

New fields (0)

No new fields.

Public methods (2)
  • external_destroy_client(self, client)
    Perform any logic necessary to destroy the client connection. Args: client (mixed): The client that was returned by ``external_get_client``.
  • external_get_client(self)
    Return a usable client representing the remote system.
REPOSITORY
REPOSITORYOCA/server-backend
GIT
GIThttps://github.com/OCA/server-backend.git
GIT FOLDER
GIT FOLDERhttps://github.com/OCA/server-backend/tree/12.0/base_external_system
VERSION
VERSION 1.0.0
CATEGORY
CATEGORYBase
LICENSE
LICENSELGPL-3
APPLICATION
APPLICATIONNo
AUTO-INSTALLABLE
AUTO-INSTALLABLENo
AUTHORS
AUTHORSOdoo Community Association (OCA), LasLabs
MAINTAINERS
MAINTAINERSOdoo Community Association (OCA), LasLabs
COMMITTERS
COMMITTERSAlexandre Díaz, OCA Transbot, oca-travis, Weblate, OCA-git-bot
WEBSITE
WEBSITEhttps://github.com/OCA/server-backend
LAST TRACKING UPDATE
LAST TRACKING UPDATE2026-07-06 00:29:25
ODOO DEPENDENCIES
ODOO DEPENDENCIES odoo/odoo:
    - base
PYTHON DEPENDENCIES
PYTHON DEPENDENCIES Not have
SYSTEM DEPENDENCIES
SYSTEM DEPENDENCIES Not have
DESCRIPTION
DESCRIPTION

Code Analysis

Views touched (3)
XML IDNameModelTypeStatus
external_system_view_form external.system.view.form external.system form New
external_system_view_search external.system.view.search external.system search New
external_system_view_tree external.system.view.tree external.system tree New
Models touched (3)

New fields (13)
  • company_ids Many2many → res.company
    comodel_name='res.company' default=<expr> help='Access to this system is restricted to these companies.' required=True string='Companies'
  • fingerprint Text
    help='This is the fingerprint that is advertised by this system in order to validate its identity.'
  • host Char
    help='This is the domain or IP address that the system can be reached at.'
  • ignore_fingerprint Boolean
    default=True help='Set this to `True` in order to ignore an invalid/unknown fingerprint from the system.'
  • interface Reference
    help='This is the interface that this system represents. It is created automatically upon creation of the external system.' readonly=True selection='_get_system_types'
  • name Char
    help='This is the canonical (humanized) name for the system.' required=True
  • password Char
    help='This is the password that is used for authenticating to this system, if applicable.'
  • port Integer
    help='This is the port number that the system is listening on.'
  • private_key Text
    help='This is the private key that is used for authenticating to this system, if applicable.'
  • private_key_password Text
    help='This is the password to unlock the private key that was provided for this sytem.'
  • remote_path Char
    help='Restrict to this directory path on the remote, if applicable.'
  • system_type Selection
    required=True selection='_get_system_types'
  • username Char
    help='This is the username that is used for authenticating to this system, if applicable.'
Public methods (4)
  • action_test_connection(self)
    @api.multi
    Test the connection to the external system.
  • check_fingerprint_ignore_fingerprint(self)
    @api.multi@api.constrains('fingerprint', 'ignore_fingerprint')
    Do not allow a blank fingerprint if not set to ignore.
  • client(self)
    @api.multi@contextmanager
    Client object usable as a context manager to include destruction. Yields the result from ``external_get_client``, then calls ``external_destroy_client`` to cleanup the client. Yields: mixed: An object representing the client connection to the remote system.
  • create(self, vals)
    @api.model
    Create the interface for the record and assign to ``interface``.

New fields (1)
  • system_id Many2one → external.system
    comodel_name='external.system' ondelete='cascade' required=True string='System'
Public methods (5)
  • client(self)
    @api.multi@contextmanager
    Client object usable as a context manager to include destruction. Yields the result from ``external_get_client``, then calls ``external_destroy_client`` to cleanup the client. Yields: mixed: An object representing the client connection to the remote system.
  • create(self, vals)
    @api.model
  • external_destroy_client(self, client)
    @api.multi
    Perform any logic necessary to destroy the client connection. Args: client (mixed): The client that was returned by ``external_get_client``.
  • external_get_client(self)
    @api.multi
    Return a usable client representing the remote system.
  • external_test_connection(self)
    @api.multi
    Adapters should override this method, then call super if valid. If the connection is invalid, adapters should raise an instance of ``odoo.ValidationError``. Raises: odoo.exceptions.UserError: In the event of a good connection.

New fields (0)

No new fields.

Public methods (2)
  • external_destroy_client(self, client)
    @api.multi
    Perform any logic necessary to destroy the client connection. Args: client (mixed): The client that was returned by ``external_get_client``.
  • external_get_client(self)
    @api.multi
    Return a usable client representing the remote system.
REPOSITORY
REPOSITORYOCA/server-backend
GIT
GIThttps://github.com/OCA/server-backend.git
GIT FOLDER
GIT FOLDERhttps://github.com/OCA/server-backend/tree/11.0/base_external_system
VERSION
VERSION 1.0.0
CATEGORY
CATEGORYBase
LICENSE
LICENSELGPL-3
APPLICATION
APPLICATIONNo
AUTO-INSTALLABLE
AUTO-INSTALLABLENo
AUTHORS
AUTHORSOdoo Community Association (OCA), LasLabs
MAINTAINERS
MAINTAINERSOdoo Community Association (OCA), LasLabs
COMMITTERS
COMMITTERSDave Lasley, oca-travis
WEBSITE
WEBSITEhttps://laslabs.com/
LAST TRACKING UPDATE
LAST TRACKING UPDATE2026-07-06 00:24:02
ODOO DEPENDENCIES
ODOO DEPENDENCIES odoo/odoo:
    - base
PYTHON DEPENDENCIES
PYTHON DEPENDENCIES Not have
SYSTEM DEPENDENCIES
SYSTEM DEPENDENCIES Not have
DESCRIPTION
DESCRIPTION

Code Analysis

Views touched (3)
XML IDNameModelTypeStatus
external_system_view_form external.system.view.form external.system form New
external_system_view_search external.system.view.search external.system search New
external_system_view_tree external.system.view.tree external.system tree New
Models touched (3)

New fields (13)
  • company_ids Many2many → res.company
    comodel_name='res.company' default=<expr> help='Access to this system is restricted to these companies.' required=True string='Companies'
  • fingerprint Text
    help='This is the fingerprint that is advertised by this system in order to validate its identity.'
  • host Char
    help='This is the domain or IP address that the system can be reached at.'
  • ignore_fingerprint Boolean
    default=True help='Set this to `True` in order to ignore an invalid/unknown fingerprint from the system.'
  • interface Reference
    help='This is the interface that this system represents. It is created automatically upon creation of the external system.' readonly=True selection='_get_system_types'
  • name Char
    help='This is the canonical (humanized) name for the system.' required=True
  • password Char
    help='This is the password that is used for authenticating to this system, if applicable.'
  • port Integer
    help='This is the port number that the system is listening on.'
  • private_key Text
    help='This is the private key that is used for authenticating to this system, if applicable.'
  • private_key_password Text
    help='This is the password to unlock the private key that was provided for this sytem.'
  • remote_path Char
    help='Restrict to this directory path on the remote, if applicable.'
  • system_type Selection
    required=True selection='_get_system_types'
  • username Char
    help='This is the username that is used for authenticating to this system, if applicable.'
Public methods (4)
  • action_test_connection(self)
    @api.multi
    Test the connection to the external system.
  • check_fingerprint_ignore_fingerprint(self)
    @api.multi@api.constrains('fingerprint', 'ignore_fingerprint')
    Do not allow a blank fingerprint if not set to ignore.
  • client(self)
    @api.multi@contextmanager
    Client object usable as a context manager to include destruction. Yields the result from ``external_get_client``, then calls ``external_destroy_client`` to cleanup the client. Yields: mixed: An object representing the client connection to the remote system.
  • create(self, vals)
    @api.model
    Create the interface for the record and assign to ``interface``.

New fields (1)
  • system_id Many2one → external.system
    comodel_name='external.system' ondelete='cascade' required=True string='System'
Public methods (5)
  • client(self)
    @api.multi@contextmanager
    Client object usable as a context manager to include destruction. Yields the result from ``external_get_client``, then calls ``external_destroy_client`` to cleanup the client. Yields: mixed: An object representing the client connection to the remote system.
  • create(self, vals)
    @api.model
  • external_destroy_client(self, client)
    @api.multi
    Perform any logic necessary to destroy the client connection. Args: client (mixed): The client that was returned by ``external_get_client``.
  • external_get_client(self)
    @api.multi
    Return a usable client representing the remote system.
  • external_test_connection(self)
    @api.multi
    Adapters should override this method, then call super if valid. If the connection is invalid, adapters should raise an instance of ``odoo.ValidationError``. Raises: odoo.exceptions.UserError: In the event of a good connection.

New fields (0)

No new fields.

Public methods (2)
  • external_destroy_client(self, client)
    @api.multi
    Perform any logic necessary to destroy the client connection. Args: client (mixed): The client that was returned by ``external_get_client``.
  • external_get_client(self)
    @api.multi
    Return a usable client representing the remote system.
REPOSITORY
REPOSITORYOCA/server-tools
GIT
GIThttps://github.com/OCA/server-tools.git
GIT FOLDER
GIT FOLDERhttps://github.com/OCA/server-tools/tree/10.0/base_external_system
VERSION
VERSION 1.0.0
CATEGORY
CATEGORYBase
LICENSE
LICENSELGPL-3
APPLICATION
APPLICATIONNo
AUTO-INSTALLABLE
AUTO-INSTALLABLENo
AUTHORS
AUTHORSOdoo Community Association (OCA), LasLabs
MAINTAINERS
MAINTAINERSOdoo Community Association (OCA), LasLabs
COMMITTERS
COMMITTERSGitHub, OCA Transbot, Dave Lasley, oca-travis, Weblate
WEBSITE
WEBSITEhttps://laslabs.com/
LAST TRACKING UPDATE
LAST TRACKING UPDATE2026-07-06 00:19:59
ODOO DEPENDENCIES
ODOO DEPENDENCIES odoo/odoo:
    - base
PYTHON DEPENDENCIES
PYTHON DEPENDENCIES Not have
SYSTEM DEPENDENCIES
SYSTEM DEPENDENCIES Not have
DESCRIPTION
DESCRIPTION

Code Analysis

Views touched (3)
XML IDNameModelTypeStatus
external_system_view_form external.system.view.form external.system form New
external_system_view_search external.system.view.search external.system search New
external_system_view_tree external.system.view.tree external.system tree New
Models touched (3)

New fields (13)
  • company_ids Many2many → res.company
    comodel_name='res.company' default=<expr> help='Access to this system is restricted to these companies.' required=True string='Companies'
  • fingerprint Text
    help='This is the fingerprint that is advertised by this system in order to validate its identity.'
  • host Char
    help='This is the domain or IP address that the system can be reached at.'
  • ignore_fingerprint Boolean
    default=True help='Set this to `True` in order to ignore an invalid/unknown fingerprint from the system.'
  • interface Reference
    help='This is the interface that this system represents. It is created automatically upon creation of the external system.' readonly=True selection='_get_system_types'
  • name Char
    help='This is the canonical (humanized) name for the system.' required=True
  • password Char
    help='This is the password that is used for authenticating to this system, if applicable.'
  • port Integer
    help='This is the port number that the system is listening on.'
  • private_key Text
    help='This is the private key that is used for authenticating to this system, if applicable.'
  • private_key_password Text
    help='This is the password to unlock the private key that was provided for this sytem.'
  • remote_path Char
    help='Restrict to this directory path on the remote, if applicable.'
  • system_type Selection
    required=True selection='_get_system_types'
  • username Char
    help='This is the username that is used for authenticating to this system, if applicable.'
Public methods (4)
  • action_test_connection(self)
    @api.multi
    Test the connection to the external system.
  • check_fingerprint_ignore_fingerprint(self)
    @api.multi@api.constrains('fingerprint', 'ignore_fingerprint')
    Do not allow a blank fingerprint if not set to ignore.
  • client(self)
    @api.multi@contextmanager
    Client object usable as a context manager to include destruction. Yields the result from ``external_get_client``, then calls ``external_destroy_client`` to cleanup the client. Yields: mixed: An object representing the client connection to the remote system.
  • create(self, vals)
    @api.model
    Create the interface for the record and assign to ``interface``.

New fields (1)
  • system_id Many2one → external.system
    comodel_name='external.system' ondelete='cascade' required=True string='System'
Public methods (4)
  • client(self)
    @api.multi@contextmanager
    Client object usable as a context manager to include destruction. Yields the result from ``external_get_client``, then calls ``external_destroy_client`` to cleanup the client. Yields: mixed: An object representing the client connection to the remote system.
  • external_destroy_client(self, client)
    @api.multi
    Perform any logic necessary to destroy the client connection. Args: client (mixed): The client that was returned by ``external_get_client``.
  • external_get_client(self)
    @api.multi
    Return a usable client representing the remote system.
  • external_test_connection(self)
    @api.multi
    Adapters should override this method, then call super if valid. If the connection is invalid, adapters should raise an instance of ``odoo.ValidationError``. Raises: odoo.exceptions.UserError: In the event of a good connection.

New fields (0)

No new fields.

Public methods (2)
  • external_destroy_client(self, client)
    @api.multi
    Perform any logic necessary to destroy the client connection. Args: client (mixed): The client that was returned by ``external_get_client``.
  • external_get_client(self)
    @api.multi
    Return a usable client representing the remote system.