From f0ffc73b33a5ae3bcadcd8d98f7b5367673f326d Mon Sep 17 00:00:00 2001 From: Sergio Teruel Albert Date: Wed, 27 Jun 2018 14:01:11 +0200 Subject: [PATCH] [11.0][MIG] base_external_dbsource: Migration to v11.0 --- base_external_dbsource/README.rst | 89 +----------------- base_external_dbsource/__init__.py | 2 - base_external_dbsource/__manifest__.py | 5 +- base_external_dbsource/exceptions.py | 1 - .../images/screenshot01.png | Bin 31726 -> 0 bytes base_external_dbsource/models/__init__.py | 2 - .../models/base_external_dbsource.py | 1 - base_external_dbsource/readme/CONFIGURE.rst | 4 + .../readme/CONTRIBUTORS.rst | 5 + base_external_dbsource/readme/DESCRIPTION.rst | 2 + base_external_dbsource/readme/INSTALL.rst | 1 + base_external_dbsource/readme/ROADMAP.rst | 8 ++ base_external_dbsource/readme/USAGE.rst | 7 ++ base_external_dbsource/tests/__init__.py | 2 - .../tests/test_base_external_dbsource.py | 1 - .../views/base_external_dbsource.xml | 12 ++- 16 files changed, 38 insertions(+), 104 deletions(-) delete mode 100644 base_external_dbsource/images/screenshot01.png create mode 100644 base_external_dbsource/readme/CONFIGURE.rst create mode 100644 base_external_dbsource/readme/CONTRIBUTORS.rst create mode 100644 base_external_dbsource/readme/DESCRIPTION.rst create mode 100644 base_external_dbsource/readme/INSTALL.rst create mode 100644 base_external_dbsource/readme/ROADMAP.rst create mode 100644 base_external_dbsource/readme/USAGE.rst diff --git a/base_external_dbsource/README.rst b/base_external_dbsource/README.rst index 93882879..3f626252 100644 --- a/base_external_dbsource/README.rst +++ b/base_external_dbsource/README.rst @@ -1,88 +1 @@ -.. image:: https://img.shields.io/badge/licence-LGPL--3-blue.svg - :target: http://www.gnu.org/licenses/lgpl-3.0-standalone.html - :alt: License: LGPL-3 - -========================= -External Database Sources -========================= - -This module allows you to define connections to foreign databases using ODBC, Firebird, -Oracle Client or SQLAlchemy. - -Installation -============ - -No installation required. - -Configuration -============= - -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: - -* Data source nameĀ  -* Password -* Connector: Choose the database to which you want to connect -* Connection string: Specify how to connect to database - -To extend this module: ----------------------- - - -.. image:: https://odoo-community.org/website/image/ir.attachment/5784_f2813bd/datas - :alt: Try me on Runbot - :target: https://runbot.odoo-community.org/runbot/149/10.0 for server-tools - -Known issues / Roadmap -====================== - -* Find a way to remove or default the CA certs dir -* Add concept of multiple connection strings for one source (multiple nodes) -* Add a ConnectionEnvironment that allows for the reuse of connections -* Message box should be displayed instead of error in ``connection_test`` -* Remove old api compatibility layers (v11) -* Instead of returning list of results, we should return iterators. This will support - larger datasets in a more efficient manner. -* Implement better CRUD handling - - -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 smashing it by providing a detailed and welcomed feedback. - -Credits -======= - -Contributors ------------- - -* Daniel Reis -* Maxime Chambreuil -* Gervais Naoussi -* Dave Lasley - -Maintainer ----------- - -.. image:: https://odoo-community.org/logo.png - :alt: Odoo Community Association - :target: https://odoo-community.org - -This module is maintained by the OCA. - -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. - -To contribute to this module, please visit http://odoo-community.org. +**This file is going to be generated by oca-gen-addon-readme.** diff --git a/base_external_dbsource/__init__.py b/base_external_dbsource/__init__.py index cde864ba..0650744f 100644 --- a/base_external_dbsource/__init__.py +++ b/base_external_dbsource/__init__.py @@ -1,3 +1 @@ -# -*- coding: utf-8 -*- - from . import models diff --git a/base_external_dbsource/__manifest__.py b/base_external_dbsource/__manifest__.py index 54cc5dc8..3aed3908 100644 --- a/base_external_dbsource/__manifest__.py +++ b/base_external_dbsource/__manifest__.py @@ -1,15 +1,14 @@ -# -*- coding: utf-8 -*- # Copyright <2011> # Copyright <2016> # License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). { 'name': 'External Database Sources', - 'version': '10.0.2.0.0', + 'version': '11.0.1.0.0', 'category': 'Tools', 'author': "Daniel Reis, " "LasLabs, " "Odoo Community Association (OCA)", - 'website': 'https://github.com/OCA/server-tools', + 'website': 'https://github.com/OCA/server-backend', 'license': 'LGPL-3', 'images': [ 'images/screenshot01.png', diff --git a/base_external_dbsource/exceptions.py b/base_external_dbsource/exceptions.py index 68acafe3..c4d0144e 100644 --- a/base_external_dbsource/exceptions.py +++ b/base_external_dbsource/exceptions.py @@ -1,4 +1,3 @@ -# -*- coding: utf-8 -*- # Copyright 2016 LasLabs Inc. # License LGPL-3.0 or later (http://www.gnu.org/licenses/lgpl). diff --git a/base_external_dbsource/images/screenshot01.png b/base_external_dbsource/images/screenshot01.png deleted file mode 100644 index 0d6a47a9330b13dfe56c2370d47e4911d80e65e4..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 31726 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 s{fBY)|CvGZf7;ys8w)9_1}PJh8g Technical > + Database Structure > Data sources. diff --git a/base_external_dbsource/readme/CONTRIBUTORS.rst b/base_external_dbsource/readme/CONTRIBUTORS.rst new file mode 100644 index 00000000..7826d82d --- /dev/null +++ b/base_external_dbsource/readme/CONTRIBUTORS.rst @@ -0,0 +1,5 @@ +* Daniel Reis +* Maxime Chambreuil +* Gervais Naoussi +* Dave Lasley +* Sergio Teruel (https://wwww.tecnativa.com) diff --git a/base_external_dbsource/readme/DESCRIPTION.rst b/base_external_dbsource/readme/DESCRIPTION.rst new file mode 100644 index 00000000..b6beb1c1 --- /dev/null +++ b/base_external_dbsource/readme/DESCRIPTION.rst @@ -0,0 +1,2 @@ +This module allows you to define connections to foreign databases using ODBC, +Firebird, Oracle Client or SQLAlchemy. diff --git a/base_external_dbsource/readme/INSTALL.rst b/base_external_dbsource/readme/INSTALL.rst new file mode 100644 index 00000000..af1c9362 --- /dev/null +++ b/base_external_dbsource/readme/INSTALL.rst @@ -0,0 +1 @@ +No installation required. diff --git a/base_external_dbsource/readme/ROADMAP.rst b/base_external_dbsource/readme/ROADMAP.rst new file mode 100644 index 00000000..853d0579 --- /dev/null +++ b/base_external_dbsource/readme/ROADMAP.rst @@ -0,0 +1,8 @@ +* Find a way to remove or default the CA certs dir +* Add concept of multiple connection strings for one source (multiple nodes) +* Add a ConnectionEnvironment that allows for the reuse of connections +* Message box should be displayed instead of error in ``connection_test`` +* Remove old api compatibility layers (v11) +* Instead of returning list of results, we should return iterators. This will + support larger datasets in a more efficient manner. +* Implement better CRUD handling diff --git a/base_external_dbsource/readme/USAGE.rst b/base_external_dbsource/readme/USAGE.rst new file mode 100644 index 00000000..4b219923 --- /dev/null +++ b/base_external_dbsource/readme/USAGE.rst @@ -0,0 +1,7 @@ +* Go to Settings > Technical > Database Structure > Database Sources +* Click on Create to enter the following information: + +* Data source nameĀ  +* Password +* Connector: Choose the database to which you want to connect +* Connection string: Specify how to connect to database diff --git a/base_external_dbsource/tests/__init__.py b/base_external_dbsource/tests/__init__.py index 768d7990..87aa84b3 100644 --- a/base_external_dbsource/tests/__init__.py +++ b/base_external_dbsource/tests/__init__.py @@ -1,3 +1 @@ -# -*- encoding: utf-8 -*- - from . import test_base_external_dbsource diff --git a/base_external_dbsource/tests/test_base_external_dbsource.py b/base_external_dbsource/tests/test_base_external_dbsource.py index 24606c46..0ee52ee2 100644 --- a/base_external_dbsource/tests/test_base_external_dbsource.py +++ b/base_external_dbsource/tests/test_base_external_dbsource.py @@ -1,4 +1,3 @@ -# -*- coding: utf-8 -*- # Copyright 2016 LasLabs Inc. import mock diff --git a/base_external_dbsource/views/base_external_dbsource.xml b/base_external_dbsource/views/base_external_dbsource.xml index 15b9ce70..dcc72961 100644 --- a/base_external_dbsource/views/base_external_dbsource.xml +++ b/base_external_dbsource/views/base_external_dbsource.xml @@ -30,10 +30,14 @@ - - -