Merge PR #295 into 17.0

Signed-off-by pedrobaeza
This commit is contained in:
OCA-git-bot
2024-07-24 15:58:59 +00:00
27 changed files with 1124 additions and 0 deletions

View File

@@ -0,0 +1,126 @@
=================================
External Database Source - SQLite
=================================
..
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
!! This file is generated by oca-gen-addon-readme !!
!! changes will be overwritten. !!
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
!! source digest: sha256:be42980ba34bb6865c363361ab0af4b4c54884df329f861dd1d906f1723643ab
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
.. |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-OCA%2Fserver--backend-lightgray.png?logo=github
:target: https://github.com/OCA/server-backend/tree/17.0/base_external_dbsource_sqlite
:alt: OCA/server-backend
.. |badge4| image:: https://img.shields.io/badge/weblate-Translate%20me-F47D42.png
:target: https://translation.odoo-community.org/projects/server-backend-17-0/server-backend-17-0-base_external_dbsource_sqlite
: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/server-backend&target_branch=17.0
:alt: Try me on Runboat
|badge1| |badge2| |badge3| |badge4| |badge5|
This module extends ``base_external_dbsource``, allowing you to connect
to foreign SQLite databases using SQLAlchemy.
**Table of contents**
.. contents::
:local:
Installation
============
To install this module, you need to:
- Install ``sqlalchemy`` python library
Configuration
=============
To configure this module, you need to:
1. Database sources can be configured in Settings > Configuration ->
Data sources.
Usage
=====
To use this module:
- Go to Settings > Database Structure > Database Sources
- Click on Create to enter the following information:
- Datasource name 
- Pasword
- Connector: Choose the database to which you want to connect
- Connection string: Specify how to connect to database
Known issues / Roadmap
======================
- Add X.509 authentication
Bug Tracker
===========
Bugs are tracked on `GitHub Issues <https://github.com/OCA/server-backend/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 <https://github.com/OCA/server-backend/issues/new?body=module:%20base_external_dbsource_sqlite%0Aversion:%2017.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
-------
* Daniel Reis
* LasLabs
Contributors
------------
- Daniel Reis <dreis.pt@hotmail.com>
- Maxime Chambreuil <maxime.chambreuil@savoirfairelinux.com>
- Gervais Naoussi <gervaisnaoussi@gmail.com>
- Dave Lasley <dave@laslabs.com>
- `Tecnativa <https://www.tecnativa.com>`__:
- Sergio Teruel
- Andrea Cattalani (`Moduon <https://www.moduon.team/>`__)
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-anddago78| image:: https://github.com/anddago78.png?size=40px
:target: https://github.com/anddago78
:alt: anddago78
Current `maintainer <https://odoo-community.org/page/maintainer-role>`__:
|maintainer-anddago78|
This module is part of the `OCA/server-backend <https://github.com/OCA/server-backend/tree/17.0/base_external_dbsource_sqlite>`_ project on GitHub.
You are welcome to contribute. To learn how please visit https://odoo-community.org/page/Contribute.

View File

@@ -0,0 +1 @@
from . import models

View File

@@ -0,0 +1,16 @@
# Copyright <2011> <Daniel Reis, Maxime Chambreuil, Savoir-faire Linux>
# Copyright 2016 LasLabs Inc.
# License LGPL-3.0 or later (http://www.gnu.org/licenses/lgpl).
{
"name": "External Database Source - SQLite",
"version": "17.0.1.0.0",
"category": "Tools",
"author": "Daniel Reis, LasLabs, Odoo Community Association (OCA)",
"maintainers": ["anddago78"],
"website": "https://github.com/OCA/server-backend",
"license": "LGPL-3",
"depends": ["base_external_dbsource"],
"external_dependencies": {"python": ["sqlalchemy"]},
"demo": ["demo/base_external_dbsource.xml"],
"installable": True,
}

View File

@@ -0,0 +1,9 @@
<?xml version="1.0" ?>
<odoo noupdate="1">
<record model="base.external.dbsource" id="demo_sqlite">
<field name="name">SQLite Demo</field>
<field name="conn_string">sqlite://</field>
<field name="password" />
<field name="connector">sqlite</field>
</record>
</odoo>

View File

@@ -0,0 +1,36 @@
# Translation of Odoo Server.
# This file contains the translation of the following modules:
# * base_external_dbsource_sqlite
#
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: base_external_dbsource_sqlite
#: model:ir.model.fields,field_description:base_external_dbsource_sqlite.field_base_external_dbsource__connector
msgid "Connector"
msgstr ""
#. module: base_external_dbsource_sqlite
#: model:ir.model,name:base_external_dbsource_sqlite.model_base_external_dbsource
msgid "External Database Sources"
msgstr ""
#. module: base_external_dbsource_sqlite
#: model:ir.model.fields,help:base_external_dbsource_sqlite.field_base_external_dbsource__connector
msgid ""
"If a connector is missing from the list, check the server log to confirm "
"that the required components were detected."
msgstr ""
#. module: base_external_dbsource_sqlite
#: model:ir.model.fields.selection,name:base_external_dbsource_sqlite.selection__base_external_dbsource__connector__sqlite
msgid "SQLite"
msgstr ""

View File

@@ -0,0 +1,41 @@
# Translation of Odoo Server.
# This file contains the translation of the following modules:
# * base_external_dbsource_sqlite
#
# Translators:
# Rudolf Schnapka <rs@techno-flex.de>, 2017
msgid ""
msgstr ""
"Project-Id-Version: Odoo Server 10.0\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2017-05-10 00:47+0000\n"
"PO-Revision-Date: 2017-05-10 00:47+0000\n"
"Last-Translator: Rudolf Schnapka <rs@techno-flex.de>, 2017\n"
"Language-Team: German (https://www.transifex.com/oca/teams/23907/de/)\n"
"Language: de\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: \n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
#. module: base_external_dbsource_sqlite
#: model:ir.model.fields,field_description:base_external_dbsource_sqlite.field_base_external_dbsource__connector
msgid "Connector"
msgstr ""
#. module: base_external_dbsource_sqlite
#: model:ir.model,name:base_external_dbsource_sqlite.model_base_external_dbsource
msgid "External Database Sources"
msgstr "Externe Datenbankquellen"
#. module: base_external_dbsource_sqlite
#: model:ir.model.fields,help:base_external_dbsource_sqlite.field_base_external_dbsource__connector
msgid ""
"If a connector is missing from the list, check the server log to confirm "
"that the required components were detected."
msgstr ""
#. module: base_external_dbsource_sqlite
#: model:ir.model.fields.selection,name:base_external_dbsource_sqlite.selection__base_external_dbsource__connector__sqlite
msgid "SQLite"
msgstr ""

View File

@@ -0,0 +1,44 @@
# Translation of Odoo Server.
# This file contains the translation of the following modules:
# * base_external_dbsource_sqlite
#
# Translators:
# Fernando Lara <gennesis45@gmail.com>, 2017
msgid ""
msgstr ""
"Project-Id-Version: Odoo Server 10.0\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2017-02-22 00:54+0000\n"
"PO-Revision-Date: 2023-08-28 09:10+0000\n"
"Last-Translator: Ivorra78 <informatica@totmaterial.es>\n"
"Language-Team: Spanish (https://www.transifex.com/oca/teams/23907/es/)\n"
"Language: es\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: \n"
"Plural-Forms: nplurals=2; plural=n != 1;\n"
"X-Generator: Weblate 4.17\n"
#. module: base_external_dbsource_sqlite
#: model:ir.model.fields,field_description:base_external_dbsource_sqlite.field_base_external_dbsource__connector
msgid "Connector"
msgstr "Conector"
#. module: base_external_dbsource_sqlite
#: model:ir.model,name:base_external_dbsource_sqlite.model_base_external_dbsource
msgid "External Database Sources"
msgstr "Fuentes externas de la base de datos"
#. module: base_external_dbsource_sqlite
#: model:ir.model.fields,help:base_external_dbsource_sqlite.field_base_external_dbsource__connector
msgid ""
"If a connector is missing from the list, check the server log to confirm "
"that the required components were detected."
msgstr ""
"Si falta un conector en la lista, compruebe el registro del servidor para "
"confirmar que se han detectado los componentes necesarios."
#. module: base_external_dbsource_sqlite
#: model:ir.model.fields.selection,name:base_external_dbsource_sqlite.selection__base_external_dbsource__connector__sqlite
msgid "SQLite"
msgstr "SQLite"

View File

@@ -0,0 +1,42 @@
# Translation of Odoo Server.
# This file contains the translation of the following modules:
# * base_external_dbsource_sqlite
#
# Translators:
# Bole <bole@dajmi5.com>, 2017
msgid ""
msgstr ""
"Project-Id-Version: Odoo Server 10.0\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2017-05-10 00:47+0000\n"
"PO-Revision-Date: 2017-05-10 00:47+0000\n"
"Last-Translator: Bole <bole@dajmi5.com>, 2017\n"
"Language-Team: Croatian (https://www.transifex.com/oca/teams/23907/hr/)\n"
"Language: hr\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: \n"
"Plural-Forms: nplurals=3; plural=n%10==1 && n%100!=11 ? 0 : n%10>=2 && n"
"%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;\n"
#. module: base_external_dbsource_sqlite
#: model:ir.model.fields,field_description:base_external_dbsource_sqlite.field_base_external_dbsource__connector
msgid "Connector"
msgstr ""
#. module: base_external_dbsource_sqlite
#: model:ir.model,name:base_external_dbsource_sqlite.model_base_external_dbsource
msgid "External Database Sources"
msgstr "Vanjske baze"
#. module: base_external_dbsource_sqlite
#: model:ir.model.fields,help:base_external_dbsource_sqlite.field_base_external_dbsource__connector
msgid ""
"If a connector is missing from the list, check the server log to confirm "
"that the required components were detected."
msgstr ""
#. module: base_external_dbsource_sqlite
#: model:ir.model.fields.selection,name:base_external_dbsource_sqlite.selection__base_external_dbsource__connector__sqlite
msgid "SQLite"
msgstr ""

View File

@@ -0,0 +1,41 @@
# Translation of Odoo Server.
# This file contains the translation of the following modules:
# * base_external_dbsource_sqlite
#
msgid ""
msgstr ""
"Project-Id-Version: Odoo Server 16.0\n"
"Report-Msgid-Bugs-To: \n"
"PO-Revision-Date: 2024-01-05 11:35+0000\n"
"Last-Translator: mymage <stefano.consolaro@mymage.it>\n"
"Language-Team: none\n"
"Language: it\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: \n"
"Plural-Forms: nplurals=2; plural=n != 1;\n"
"X-Generator: Weblate 4.17\n"
#. module: base_external_dbsource_sqlite
#: model:ir.model.fields,field_description:base_external_dbsource_sqlite.field_base_external_dbsource__connector
msgid "Connector"
msgstr "Connettore"
#. module: base_external_dbsource_sqlite
#: model:ir.model,name:base_external_dbsource_sqlite.model_base_external_dbsource
msgid "External Database Sources"
msgstr "Origini database esterne"
#. module: base_external_dbsource_sqlite
#: model:ir.model.fields,help:base_external_dbsource_sqlite.field_base_external_dbsource__connector
msgid ""
"If a connector is missing from the list, check the server log to confirm "
"that the required components were detected."
msgstr ""
"Se il connettore è mancante dalla lista, controllare il log del server per "
"avere conferma che i componenti richiesti siano stati rilevati."
#. module: base_external_dbsource_sqlite
#: model:ir.model.fields.selection,name:base_external_dbsource_sqlite.selection__base_external_dbsource__connector__sqlite
msgid "SQLite"
msgstr "SQLite"

View File

@@ -0,0 +1,42 @@
# Translation of Odoo Server.
# This file contains the translation of the following modules:
# * base_external_dbsource_sqlite
#
# Translators:
# Peter Hageman <hageman.p@gmail.com>, 2017
msgid ""
msgstr ""
"Project-Id-Version: Odoo Server 10.0\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2017-06-22 01:11+0000\n"
"PO-Revision-Date: 2017-06-22 01:11+0000\n"
"Last-Translator: Peter Hageman <hageman.p@gmail.com>, 2017\n"
"Language-Team: Dutch (Netherlands) (https://www.transifex.com/oca/"
"teams/23907/nl_NL/)\n"
"Language: nl_NL\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: \n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
#. module: base_external_dbsource_sqlite
#: model:ir.model.fields,field_description:base_external_dbsource_sqlite.field_base_external_dbsource__connector
msgid "Connector"
msgstr ""
#. module: base_external_dbsource_sqlite
#: model:ir.model,name:base_external_dbsource_sqlite.model_base_external_dbsource
msgid "External Database Sources"
msgstr "Externe databasebronnen"
#. module: base_external_dbsource_sqlite
#: model:ir.model.fields,help:base_external_dbsource_sqlite.field_base_external_dbsource__connector
msgid ""
"If a connector is missing from the list, check the server log to confirm "
"that the required components were detected."
msgstr ""
#. module: base_external_dbsource_sqlite
#: model:ir.model.fields.selection,name:base_external_dbsource_sqlite.selection__base_external_dbsource__connector__sqlite
msgid "SQLite"
msgstr ""

View File

@@ -0,0 +1,46 @@
# Translation of Odoo Server.
# This file contains the translation of the following modules:
# * base_external_dbsource_sqlite
#
# Translators:
# OCA Transbot <transbot@odoo-community.org>, 2017
msgid ""
msgstr ""
"Project-Id-Version: Odoo Server 10.0\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2017-01-21 04:22+0000\n"
"PO-Revision-Date: 2024-05-22 15:40+0000\n"
"Last-Translator: Rodrigo Macedo <sottomaiormacedotec@users.noreply."
"translation.odoo-community.org>\n"
"Language-Team: Portuguese (Brazil) (https://www.transifex.com/oca/teams/"
"23907/pt_BR/)\n"
"Language: pt_BR\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: \n"
"Plural-Forms: nplurals=2; plural=n > 1;\n"
"X-Generator: Weblate 4.17\n"
#. module: base_external_dbsource_sqlite
#: model:ir.model.fields,field_description:base_external_dbsource_sqlite.field_base_external_dbsource__connector
msgid "Connector"
msgstr "Conector"
#. module: base_external_dbsource_sqlite
#: model:ir.model,name:base_external_dbsource_sqlite.model_base_external_dbsource
msgid "External Database Sources"
msgstr "Fontes Banco de Dados Externo"
#. module: base_external_dbsource_sqlite
#: model:ir.model.fields,help:base_external_dbsource_sqlite.field_base_external_dbsource__connector
msgid ""
"If a connector is missing from the list, check the server log to confirm "
"that the required components were detected."
msgstr ""
"Se um conector estiver ausente na lista, verifique o log do servidor para "
"confirmar se os componentes necessários foram detectados."
#. module: base_external_dbsource_sqlite
#: model:ir.model.fields.selection,name:base_external_dbsource_sqlite.selection__base_external_dbsource__connector__sqlite
msgid "SQLite"
msgstr "SQLite"

View File

@@ -0,0 +1,42 @@
# Translation of Odoo Server.
# This file contains the translation of the following modules:
# * base_external_dbsource_sqlite
#
# Translators:
# OCA Transbot <transbot@odoo-community.org>, 2017
msgid ""
msgstr ""
"Project-Id-Version: Odoo Server 10.0\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2017-01-21 04:22+0000\n"
"PO-Revision-Date: 2017-01-21 04:22+0000\n"
"Last-Translator: OCA Transbot <transbot@odoo-community.org>, 2017\n"
"Language-Team: Slovenian (https://www.transifex.com/oca/teams/23907/sl/)\n"
"Language: sl\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: \n"
"Plural-Forms: nplurals=4; plural=(n%100==1 ? 0 : n%100==2 ? 1 : n%100==3 || n"
"%100==4 ? 2 : 3);\n"
#. module: base_external_dbsource_sqlite
#: model:ir.model.fields,field_description:base_external_dbsource_sqlite.field_base_external_dbsource__connector
msgid "Connector"
msgstr ""
#. module: base_external_dbsource_sqlite
#: model:ir.model,name:base_external_dbsource_sqlite.model_base_external_dbsource
msgid "External Database Sources"
msgstr "Viri zunanjih podatkovnih baz"
#. module: base_external_dbsource_sqlite
#: model:ir.model.fields,help:base_external_dbsource_sqlite.field_base_external_dbsource__connector
msgid ""
"If a connector is missing from the list, check the server log to confirm "
"that the required components were detected."
msgstr ""
#. module: base_external_dbsource_sqlite
#: model:ir.model.fields.selection,name:base_external_dbsource_sqlite.selection__base_external_dbsource__connector__sqlite
msgid "SQLite"
msgstr ""

View File

@@ -0,0 +1,41 @@
# Translation of Odoo Server.
# This file contains the translation of the following modules:
# * base_external_dbsource_sqlite
#
# Translators:
# OCA Transbot <transbot@odoo-community.org>, 2017
msgid ""
msgstr ""
"Project-Id-Version: Odoo Server 10.0\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2017-01-21 04:22+0000\n"
"PO-Revision-Date: 2017-01-21 04:22+0000\n"
"Last-Translator: OCA Transbot <transbot@odoo-community.org>, 2017\n"
"Language-Team: Turkish (https://www.transifex.com/oca/teams/23907/tr/)\n"
"Language: tr\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: \n"
"Plural-Forms: nplurals=2; plural=(n > 1);\n"
#. module: base_external_dbsource_sqlite
#: model:ir.model.fields,field_description:base_external_dbsource_sqlite.field_base_external_dbsource__connector
msgid "Connector"
msgstr ""
#. module: base_external_dbsource_sqlite
#: model:ir.model,name:base_external_dbsource_sqlite.model_base_external_dbsource
msgid "External Database Sources"
msgstr "Dış veritabanı kaynakları"
#. module: base_external_dbsource_sqlite
#: model:ir.model.fields,help:base_external_dbsource_sqlite.field_base_external_dbsource__connector
msgid ""
"If a connector is missing from the list, check the server log to confirm "
"that the required components were detected."
msgstr ""
#. module: base_external_dbsource_sqlite
#: model:ir.model.fields.selection,name:base_external_dbsource_sqlite.selection__base_external_dbsource__connector__sqlite
msgid "SQLite"
msgstr ""

View File

@@ -0,0 +1 @@
from . import base_external_dbsource

View File

@@ -0,0 +1,44 @@
# Copyright 2011 Daniel Reis
# Copyright 2016 LasLabs Inc.
# License LGPL-3.0 or later (http://www.gnu.org/licenses/lgpl.html).
import sqlalchemy
from odoo import fields, models
class BaseExternalDbsource(models.Model):
"""It provides logic for connection to a SQLite data source."""
_inherit = "base.external.dbsource"
PWD_STRING_SQLITE = "Password=%s;"
connector = fields.Selection(
selection_add=[("sqlite", "SQLite")], ondelete={"sqlite": "cascade"}
)
def connection_close_sqlite(self, connection):
return connection.close()
def connection_open_sqlite(self):
return self._connection_open_sqlalchemy()
def execute_sqlite(self, sqlquery, sqlparams, metadata):
return self._execute_sqlalchemy(sqlquery, sqlparams, metadata)
def _connection_open_sqlalchemy(self):
return sqlalchemy.create_engine(self.conn_string_full).connect()
def _execute_sqlalchemy(self, sqlquery, sqlparams, metadata):
rows, cols = list(), list()
for record in self:
with record.connection_open() as connection:
if sqlparams is None:
cur = connection.execute(sqlquery)
else:
cur = connection.execute(sqlquery, sqlparams)
if metadata:
cols = list(cur.keys())
# If the query doesn't return rows, trying to get them anyway
# will raise an exception `sqlalchemy.exc.ResourceClosedError`
rows = [r for r in cur] if cur.returns_rows else []
return rows, cols

View File

@@ -0,0 +1,3 @@
[build-system]
requires = ["whool"]
build-backend = "whool.buildapi"

View File

@@ -0,0 +1,4 @@
To configure this module, you need to:
1. Database sources can be configured in Settings \> Configuration -\>
Data sources.

View File

@@ -0,0 +1,7 @@
- Daniel Reis \<<dreis.pt@hotmail.com>\>
- Maxime Chambreuil \<<maxime.chambreuil@savoirfairelinux.com>\>
- Gervais Naoussi \<<gervaisnaoussi@gmail.com>\>
- Dave Lasley \<<dave@laslabs.com>\>
- [Tecnativa](https://www.tecnativa.com):
- Sergio Teruel
- Andrea Cattalani ([Moduon](https://www.moduon.team/))

View File

@@ -0,0 +1,2 @@
This module extends `base_external_dbsource`, allowing you to connect to
foreign SQLite databases using SQLAlchemy.

View File

@@ -0,0 +1,3 @@
To install this module, you need to:
- Install `sqlalchemy` python library

View File

@@ -0,0 +1 @@
- Add X.509 authentication

View File

@@ -0,0 +1,8 @@
To use this module:
- Go to Settings \> Database Structure \> Database Sources
- Click on Create to enter the following information:
- Datasource name 
- Pasword
- Connector: Choose the database to which you want to connect
- Connection string: Specify how to connect to database

Binary file not shown.

After

Width:  |  Height:  |  Size: 9.2 KiB

View File

@@ -0,0 +1,472 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<meta name="generator" content="Docutils: https://docutils.sourceforge.io/" />
<title>External Database Source - SQLite</title>
<style type="text/css">
/*
:Author: David Goodger (goodger@python.org)
:Id: $Id: html4css1.css 9511 2024-01-13 09:50:07Z milde $
:Copyright: This stylesheet has been placed in the public domain.
Default cascading style sheet for the HTML output of Docutils.
Despite the name, some widely supported CSS2 features are used.
See https://docutils.sourceforge.io/docs/howto/html-stylesheets.html for how to
customize this style sheet.
*/
/* used to remove borders from tables and images */
.borderless, table.borderless td, table.borderless th {
border: 0 }
table.borderless td, table.borderless th {
/* Override padding for "table.docutils td" with "! important".
The right padding separates the table cells. */
padding: 0 0.5em 0 0 ! important }
.first {
/* Override more specific margin styles with "! important". */
margin-top: 0 ! important }
.last, .with-subtitle {
margin-bottom: 0 ! important }
.hidden {
display: none }
.subscript {
vertical-align: sub;
font-size: smaller }
.superscript {
vertical-align: super;
font-size: smaller }
a.toc-backref {
text-decoration: none ;
color: black }
blockquote.epigraph {
margin: 2em 5em ; }
dl.docutils dd {
margin-bottom: 0.5em }
object[type="image/svg+xml"], object[type="application/x-shockwave-flash"] {
overflow: hidden;
}
/* Uncomment (and remove this text!) to get bold-faced definition list terms
dl.docutils dt {
font-weight: bold }
*/
div.abstract {
margin: 2em 5em }
div.abstract p.topic-title {
font-weight: bold ;
text-align: center }
div.admonition, div.attention, div.caution, div.danger, div.error,
div.hint, div.important, div.note, div.tip, div.warning {
margin: 2em ;
border: medium outset ;
padding: 1em }
div.admonition p.admonition-title, div.hint p.admonition-title,
div.important p.admonition-title, div.note p.admonition-title,
div.tip p.admonition-title {
font-weight: bold ;
font-family: sans-serif }
div.attention p.admonition-title, div.caution p.admonition-title,
div.danger p.admonition-title, div.error p.admonition-title,
div.warning p.admonition-title, .code .error {
color: red ;
font-weight: bold ;
font-family: sans-serif }
/* Uncomment (and remove this text!) to get reduced vertical space in
compound paragraphs.
div.compound .compound-first, div.compound .compound-middle {
margin-bottom: 0.5em }
div.compound .compound-last, div.compound .compound-middle {
margin-top: 0.5em }
*/
div.dedication {
margin: 2em 5em ;
text-align: center ;
font-style: italic }
div.dedication p.topic-title {
font-weight: bold ;
font-style: normal }
div.figure {
margin-left: 2em ;
margin-right: 2em }
div.footer, div.header {
clear: both;
font-size: smaller }
div.line-block {
display: block ;
margin-top: 1em ;
margin-bottom: 1em }
div.line-block div.line-block {
margin-top: 0 ;
margin-bottom: 0 ;
margin-left: 1.5em }
div.sidebar {
margin: 0 0 0.5em 1em ;
border: medium outset ;
padding: 1em ;
background-color: #ffffee ;
width: 40% ;
float: right ;
clear: right }
div.sidebar p.rubric {
font-family: sans-serif ;
font-size: medium }
div.system-messages {
margin: 5em }
div.system-messages h1 {
color: red }
div.system-message {
border: medium outset ;
padding: 1em }
div.system-message p.system-message-title {
color: red ;
font-weight: bold }
div.topic {
margin: 2em }
h1.section-subtitle, h2.section-subtitle, h3.section-subtitle,
h4.section-subtitle, h5.section-subtitle, h6.section-subtitle {
margin-top: 0.4em }
h1.title {
text-align: center }
h2.subtitle {
text-align: center }
hr.docutils {
width: 75% }
img.align-left, .figure.align-left, object.align-left, table.align-left {
clear: left ;
float: left ;
margin-right: 1em }
img.align-right, .figure.align-right, object.align-right, table.align-right {
clear: right ;
float: right ;
margin-left: 1em }
img.align-center, .figure.align-center, object.align-center {
display: block;
margin-left: auto;
margin-right: auto;
}
table.align-center {
margin-left: auto;
margin-right: auto;
}
.align-left {
text-align: left }
.align-center {
clear: both ;
text-align: center }
.align-right {
text-align: right }
/* reset inner alignment in figures */
div.align-right {
text-align: inherit }
/* div.align-center * { */
/* text-align: left } */
.align-top {
vertical-align: top }
.align-middle {
vertical-align: middle }
.align-bottom {
vertical-align: bottom }
ol.simple, ul.simple {
margin-bottom: 1em }
ol.arabic {
list-style: decimal }
ol.loweralpha {
list-style: lower-alpha }
ol.upperalpha {
list-style: upper-alpha }
ol.lowerroman {
list-style: lower-roman }
ol.upperroman {
list-style: upper-roman }
p.attribution {
text-align: right ;
margin-left: 50% }
p.caption {
font-style: italic }
p.credits {
font-style: italic ;
font-size: smaller }
p.label {
white-space: nowrap }
p.rubric {
font-weight: bold ;
font-size: larger ;
color: maroon ;
text-align: center }
p.sidebar-title {
font-family: sans-serif ;
font-weight: bold ;
font-size: larger }
p.sidebar-subtitle {
font-family: sans-serif ;
font-weight: bold }
p.topic-title {
font-weight: bold }
pre.address {
margin-bottom: 0 ;
margin-top: 0 ;
font: inherit }
pre.literal-block, pre.doctest-block, pre.math, pre.code {
margin-left: 2em ;
margin-right: 2em }
pre.code .ln { color: gray; } /* line numbers */
pre.code, code { background-color: #eeeeee }
pre.code .comment, code .comment { color: #5C6576 }
pre.code .keyword, code .keyword { color: #3B0D06; font-weight: bold }
pre.code .literal.string, code .literal.string { color: #0C5404 }
pre.code .name.builtin, code .name.builtin { color: #352B84 }
pre.code .deleted, code .deleted { background-color: #DEB0A1}
pre.code .inserted, code .inserted { background-color: #A3D289}
span.classifier {
font-family: sans-serif ;
font-style: oblique }
span.classifier-delimiter {
font-family: sans-serif ;
font-weight: bold }
span.interpreted {
font-family: sans-serif }
span.option {
white-space: nowrap }
span.pre {
white-space: pre }
span.problematic, pre.problematic {
color: red }
span.section-subtitle {
/* font-size relative to parent (h1..h6 element) */
font-size: 80% }
table.citation {
border-left: solid 1px gray;
margin-left: 1px }
table.docinfo {
margin: 2em 4em }
table.docutils {
margin-top: 0.5em ;
margin-bottom: 0.5em }
table.footnote {
border-left: solid 1px black;
margin-left: 1px }
table.docutils td, table.docutils th,
table.docinfo td, table.docinfo th {
padding-left: 0.5em ;
padding-right: 0.5em ;
vertical-align: top }
table.docutils th.field-name, table.docinfo th.docinfo-name {
font-weight: bold ;
text-align: left ;
white-space: nowrap ;
padding-left: 0 }
/* "booktabs" style (no vertical lines) */
table.docutils.booktabs {
border: 0px;
border-top: 2px solid;
border-bottom: 2px solid;
border-collapse: collapse;
}
table.docutils.booktabs * {
border: 0px;
}
table.docutils.booktabs th {
border-bottom: thin solid;
text-align: left;
}
h1 tt.docutils, h2 tt.docutils, h3 tt.docutils,
h4 tt.docutils, h5 tt.docutils, h6 tt.docutils {
font-size: 100% }
ul.auto-toc {
list-style-type: none }
</style>
</head>
<body>
<div class="document" id="external-database-source-sqlite">
<h1 class="title">External Database Source - SQLite</h1>
<!-- !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
!! This file is generated by oca-gen-addon-readme !!
!! changes will be overwritten. !!
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
!! source digest: sha256:be42980ba34bb6865c363361ab0af4b4c54884df329f861dd1d906f1723643ab
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! -->
<p><a class="reference external image-reference" href="https://odoo-community.org/page/development-status"><img alt="Beta" src="https://img.shields.io/badge/maturity-Beta-yellow.png" /></a> <a class="reference external image-reference" href="http://www.gnu.org/licenses/lgpl-3.0-standalone.html"><img alt="License: LGPL-3" src="https://img.shields.io/badge/licence-LGPL--3-blue.png" /></a> <a class="reference external image-reference" href="https://github.com/OCA/server-backend/tree/17.0/base_external_dbsource_sqlite"><img alt="OCA/server-backend" src="https://img.shields.io/badge/github-OCA%2Fserver--backend-lightgray.png?logo=github" /></a> <a class="reference external image-reference" href="https://translation.odoo-community.org/projects/server-backend-17-0/server-backend-17-0-base_external_dbsource_sqlite"><img alt="Translate me on Weblate" src="https://img.shields.io/badge/weblate-Translate%20me-F47D42.png" /></a> <a class="reference external image-reference" href="https://runboat.odoo-community.org/builds?repo=OCA/server-backend&amp;target_branch=17.0"><img alt="Try me on Runboat" src="https://img.shields.io/badge/runboat-Try%20me-875A7B.png" /></a></p>
<p>This module extends <tt class="docutils literal">base_external_dbsource</tt>, allowing you to connect
to foreign SQLite databases using SQLAlchemy.</p>
<p><strong>Table of contents</strong></p>
<div class="contents local topic" id="contents">
<ul class="simple">
<li><a class="reference internal" href="#installation" id="toc-entry-1">Installation</a></li>
<li><a class="reference internal" href="#configuration" id="toc-entry-2">Configuration</a></li>
<li><a class="reference internal" href="#usage" id="toc-entry-3">Usage</a></li>
<li><a class="reference internal" href="#known-issues-roadmap" id="toc-entry-4">Known issues / Roadmap</a></li>
<li><a class="reference internal" href="#bug-tracker" id="toc-entry-5">Bug Tracker</a></li>
<li><a class="reference internal" href="#credits" id="toc-entry-6">Credits</a><ul>
<li><a class="reference internal" href="#authors" id="toc-entry-7">Authors</a></li>
<li><a class="reference internal" href="#contributors" id="toc-entry-8">Contributors</a></li>
<li><a class="reference internal" href="#maintainers" id="toc-entry-9">Maintainers</a></li>
</ul>
</li>
</ul>
</div>
<div class="section" id="installation">
<h1><a class="toc-backref" href="#toc-entry-1">Installation</a></h1>
<p>To install this module, you need to:</p>
<ul class="simple">
<li>Install <tt class="docutils literal">sqlalchemy</tt> python library</li>
</ul>
</div>
<div class="section" id="configuration">
<h1><a class="toc-backref" href="#toc-entry-2">Configuration</a></h1>
<p>To configure this module, you need to:</p>
<ol class="arabic simple">
<li>Database sources can be configured in Settings &gt; Configuration -&gt;
Data sources.</li>
</ol>
</div>
<div class="section" id="usage">
<h1><a class="toc-backref" href="#toc-entry-3">Usage</a></h1>
<p>To use this module:</p>
<ul class="simple">
<li>Go to Settings &gt; Database Structure &gt; Database Sources</li>
<li>Click on Create to enter the following information:</li>
<li>Datasource name</li>
<li>Pasword</li>
<li>Connector: Choose the database to which you want to connect</li>
<li>Connection string: Specify how to connect to database</li>
</ul>
</div>
<div class="section" id="known-issues-roadmap">
<h1><a class="toc-backref" href="#toc-entry-4">Known issues / Roadmap</a></h1>
<ul class="simple">
<li>Add X.509 authentication</li>
</ul>
</div>
<div class="section" id="bug-tracker">
<h1><a class="toc-backref" href="#toc-entry-5">Bug Tracker</a></h1>
<p>Bugs are tracked on <a class="reference external" href="https://github.com/OCA/server-backend/issues">GitHub Issues</a>.
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
<a class="reference external" href="https://github.com/OCA/server-backend/issues/new?body=module:%20base_external_dbsource_sqlite%0Aversion:%2017.0%0A%0A**Steps%20to%20reproduce**%0A-%20...%0A%0A**Current%20behavior**%0A%0A**Expected%20behavior**">feedback</a>.</p>
<p>Do not contact contributors directly about support or help with technical issues.</p>
</div>
<div class="section" id="credits">
<h1><a class="toc-backref" href="#toc-entry-6">Credits</a></h1>
<div class="section" id="authors">
<h2><a class="toc-backref" href="#toc-entry-7">Authors</a></h2>
<ul class="simple">
<li>Daniel Reis</li>
<li>LasLabs</li>
</ul>
</div>
<div class="section" id="contributors">
<h2><a class="toc-backref" href="#toc-entry-8">Contributors</a></h2>
<ul class="simple">
<li>Daniel Reis &lt;<a class="reference external" href="mailto:dreis.pt&#64;hotmail.com">dreis.pt&#64;hotmail.com</a>&gt;</li>
<li>Maxime Chambreuil &lt;<a class="reference external" href="mailto:maxime.chambreuil&#64;savoirfairelinux.com">maxime.chambreuil&#64;savoirfairelinux.com</a>&gt;</li>
<li>Gervais Naoussi &lt;<a class="reference external" href="mailto:gervaisnaoussi&#64;gmail.com">gervaisnaoussi&#64;gmail.com</a>&gt;</li>
<li>Dave Lasley &lt;<a class="reference external" href="mailto:dave&#64;laslabs.com">dave&#64;laslabs.com</a>&gt;</li>
<li><a class="reference external" href="https://www.tecnativa.com">Tecnativa</a>:<ul>
<li>Sergio Teruel</li>
</ul>
</li>
<li>Andrea Cattalani (<a class="reference external" href="https://www.moduon.team/">Moduon</a>)</li>
</ul>
</div>
<div class="section" id="maintainers">
<h2><a class="toc-backref" href="#toc-entry-9">Maintainers</a></h2>
<p>This module is maintained by the OCA.</p>
<a class="reference external image-reference" href="https://odoo-community.org">
<img alt="Odoo Community Association" src="https://odoo-community.org/logo.png" />
</a>
<p>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.</p>
<p>Current <a class="reference external" href="https://odoo-community.org/page/maintainer-role">maintainer</a>:</p>
<p><a class="reference external image-reference" href="https://github.com/anddago78"><img alt="anddago78" src="https://github.com/anddago78.png?size=40px" /></a></p>
<p>This module is part of the <a class="reference external" href="https://github.com/OCA/server-backend/tree/17.0/base_external_dbsource_sqlite">OCA/server-backend</a> project on GitHub.</p>
<p>You are welcome to contribute. To learn how please visit <a class="reference external" href="https://odoo-community.org/page/Contribute">https://odoo-community.org/page/Contribute</a>.</p>
</div>
</div>
</div>
</body>
</html>

View File

@@ -0,0 +1 @@
from . import test_base_external_dbsource

View File

@@ -0,0 +1,49 @@
# Copyright 2016 LasLabs Inc.
from unittest import mock
from odoo.tests import common
ADAPTER = (
"odoo.addons.base_external_dbsource_sqlite.models"
".base_external_dbsource.sqlalchemy"
)
class TestBaseExternalDbsource(common.TransactionCase):
@classmethod
def setUpClass(cls):
super().setUpClass()
cls.dbsource = cls.env.ref("base_external_dbsource_sqlite.demo_sqlite")
def test_connection_close_sqlite(self):
"""It should close the connection"""
connection = mock.MagicMock()
res = self.dbsource.connection_close_sqlite(connection)
self.assertEqual(res, connection.close())
def test_connection_open_sqlite(self):
"""It should call SQLAlchemy open"""
with mock.patch.object(
type(self.dbsource), "_connection_open_sqlalchemy"
) as parent_method:
self.dbsource.connection_open_sqlite()
parent_method.assert_called_once_with()
def test_excecute_sqlite(self):
"""It should pass args to SQLAlchemy execute"""
expect = "sqlquery", "sqlparams", "metadata"
with mock.patch.object(
type(self.dbsource), "_execute_sqlalchemy"
) as parent_method:
self.dbsource.execute_sqlite(*expect)
parent_method.assert_called_once_with(*expect)
def test_execute_sqlit_without_sqlparams(self):
"""It should pass args to SQLAlchemy execute"""
expect = "sqlquery", None, "metadata"
with mock.patch.object(
type(self.dbsource), "_execute_sqlalchemy"
) as parent_method:
self.dbsource.execute_sqlite(*expect)
parent_method.assert_called_once_with(*expect)

2
requirements.txt Normal file
View File

@@ -0,0 +1,2 @@
# generated from manifests external_dependencies
sqlalchemy