diff --git a/base_external_system/__manifest__.py b/base_external_system/__manifest__.py
index 7e10c32c..acc80c05 100644
--- a/base_external_system/__manifest__.py
+++ b/base_external_system/__manifest__.py
@@ -7,17 +7,14 @@
"version": "12.0.1.0.0",
"category": "Base",
"website": "https://github.com/OCA/server-backend",
- "author": "LasLabs, "
- "Odoo Community Association (OCA)",
+ "author": "LasLabs, " "Odoo Community Association (OCA)",
"license": "LGPL-3",
"application": False,
"installable": True,
- 'depends': [
- 'base',
- ],
- 'data': [
- 'demo/external_system_os_demo.xml',
- 'security/ir.model.access.csv',
- 'views/external_system_view.xml',
+ "depends": ["base",],
+ "data": [
+ "demo/external_system_os_demo.xml",
+ "security/ir.model.access.csv",
+ "views/external_system_view.xml",
],
}
diff --git a/base_external_system/demo/external_system_os_demo.xml b/base_external_system/demo/external_system_os_demo.xml
index 81727075..ff6b10fa 100755
--- a/base_external_system/demo/external_system_os_demo.xml
+++ b/base_external_system/demo/external_system_os_demo.xml
@@ -1,17 +1,13 @@
-
-
+
-
-
Example OS Connection
external.system.os
/tmp
-
diff --git a/base_external_system/models/external_system.py b/base_external_system/models/external_system.py
index 5816a020..d3e96bd7 100644
--- a/base_external_system/models/external_system.py
+++ b/base_external_system/models/external_system.py
@@ -3,94 +3,89 @@
from contextlib import contextmanager
-from odoo import api, fields, models, _
+from odoo import _, api, fields, models
from odoo.exceptions import ValidationError
class ExternalSystem(models.Model):
- _name = 'external.system'
- _description = 'External System'
+ _name = "external.system"
+ _description = "External System"
name = fields.Char(
- required=True,
- help='This is the canonical (humanized) name for the system.',
+ required=True, help="This is the canonical (humanized) name for the system.",
)
host = fields.Char(
- help='This is the domain or IP address that the system can be reached '
- 'at.',
+ help="This is the domain or IP address that the system can be reached " "at.",
)
port = fields.Integer(
- help='This is the port number that the system is listening on.',
+ help="This is the port number that the system is listening on.",
)
username = fields.Char(
- help='This is the username that is used for authenticating to this '
- 'system, if applicable.',
+ help="This is the username that is used for authenticating to this "
+ "system, if applicable.",
)
password = fields.Char(
- help='This is the password that is used for authenticating to this '
- 'system, if applicable.',
+ help="This is the password that is used for authenticating to this "
+ "system, if applicable.",
)
private_key = fields.Text(
- help='This is the private key that is used for authenticating to '
- 'this system, if applicable.',
+ help="This is the private key that is used for authenticating to "
+ "this system, if applicable.",
)
private_key_password = fields.Text(
- help='This is the password to unlock the private key that was '
- 'provided for this sytem.',
+ help="This is the password to unlock the private key that was "
+ "provided for this sytem.",
)
fingerprint = fields.Text(
- help='This is the fingerprint that is advertised by this system in '
- 'order to validate its identity.',
+ help="This is the fingerprint that is advertised by this system in "
+ "order to validate its identity.",
)
ignore_fingerprint = fields.Boolean(
default=True,
- help='Set this to `True` in order to ignore an invalid/unknown '
- 'fingerprint from the system.',
+ help="Set this to `True` in order to ignore an invalid/unknown "
+ "fingerprint from the system.",
)
remote_path = fields.Char(
- help='Restrict to this directory path on the remote, if applicable.',
+ help="Restrict to this directory path on the remote, if applicable.",
)
company_ids = fields.Many2many(
- string='Companies',
- comodel_name='res.company',
+ string="Companies",
+ comodel_name="res.company",
required=True,
default=lambda s: [(6, 0, s.env.user.company_id.ids)],
- help='Access to this system is restricted to these companies.',
- )
- system_type = fields.Selection(
- selection='_get_system_types',
- required=True,
+ help="Access to this system is restricted to these companies.",
)
+ system_type = fields.Selection(selection="_get_system_types", required=True,)
interface = fields.Reference(
- selection='_get_system_types',
+ selection="_get_system_types",
readonly=True,
- help='This is the interface that this system represents. It is '
- 'created automatically upon creation of the external system.',
+ help="This is the interface that this system represents. It is "
+ "created automatically upon creation of the external system.",
)
_sql_constraints = [
- ('name_uniq', 'UNIQUE(name)', 'Connection name must be unique.'),
+ ("name_uniq", "UNIQUE(name)", "Connection name must be unique."),
]
@api.model
def _get_system_types(self):
"""Return the adapter interface models that are installed."""
- adapter = self.env['external.system.adapter']
- return [
- (m, self.env[m]._description) for m in adapter._inherit_children
- ]
+ adapter = self.env["external.system.adapter"]
+ return [(m, self.env[m]._description) for m in adapter._inherit_children]
@api.multi
- @api.constrains('fingerprint', 'ignore_fingerprint')
+ @api.constrains("fingerprint", "ignore_fingerprint")
def check_fingerprint_ignore_fingerprint(self):
"""Do not allow a blank fingerprint if not set to ignore."""
for record in self:
if not record.ignore_fingerprint and not record.fingerprint:
- raise ValidationError(_(
- 'Fingerprint cannot be empty when Ignore Fingerprint is '
- 'not checked.',
- ))
+ raise ValidationError(
+ _(
+ "Fingerprint cannot be empty when Ignore Fingerprint is "
+ "not checked.",
+ )
+ )
@api.multi
@contextmanager
@@ -111,10 +106,8 @@ class ExternalSystem(models.Model):
def create(self, vals):
"""Create the interface for the record and assign to ``interface``."""
record = super(ExternalSystem, self).create(vals)
- if not self.env.context.get('no_create_interface'):
- interface = self.env[vals['system_type']].create({
- 'system_id': record.id,
- })
+ if not self.env.context.get("no_create_interface"):
+ interface = self.env[vals["system_type"]].create({"system_id": record.id,})
record.interface = interface
return record
diff --git a/base_external_system/models/external_system_adapter.py b/base_external_system/models/external_system_adapter.py
index 532e4a33..dc44cedf 100644
--- a/base_external_system/models/external_system_adapter.py
+++ b/base_external_system/models/external_system_adapter.py
@@ -3,7 +3,7 @@
from contextlib import contextmanager
-from odoo import api, fields, models, _
+from odoo import _, api, fields, models
from odoo.exceptions import UserError
@@ -13,15 +13,15 @@ class ExternalSystemAdapter(models.AbstractModel):
Methods provided are prefixed with ``external_`` in order to keep from
"""
- _name = 'external.system.adapter'
- _description = 'External System Adapter'
- _inherits = {'external.system': 'system_id'}
+ _name = "external.system.adapter"
+ _description = "External System Adapter"
+ _inherits = {"external.system": "system_id"}
system_id = fields.Many2one(
- string='System',
- comodel_name='external.system',
+ string="System",
+ comodel_name="external.system",
required=True,
- ondelete='cascade',
+ ondelete="cascade",
)
@api.multi
@@ -67,14 +67,14 @@ class ExternalSystemAdapter(models.AbstractModel):
Raises:
odoo.exceptions.UserError: In the event of a good connection.
"""
- raise UserError(_('The connection was a success.'))
+ raise UserError(_("The connection was a success."))
@api.model
def create(self, vals):
context_self = self.with_context(no_create_interface=True)
- vals.update({
- 'system_type': self._name,
- })
+ vals.update(
+ {"system_type": self._name,}
+ )
record = super(ExternalSystemAdapter, context_self).create(vals)
record.system_id.interface = record
return record
diff --git a/base_external_system/models/external_system_os.py b/base_external_system/models/external_system_os.py
index 93ee921d..7e644a71 100644
--- a/base_external_system/models/external_system_os.py
+++ b/base_external_system/models/external_system_os.py
@@ -13,9 +13,9 @@ class ExternalSystemOs(models.Model):
system interface. This is still a fully usable implementation, however.
"""
- _name = 'external.system.os'
- _inherit = 'external.system.adapter'
- _description = 'External System OS'
+ _name = "external.system.os"
+ _inherit = "external.system.adapter"
+ _description = "External System OS"
previous_dir = None
diff --git a/base_external_system/tests/common.py b/base_external_system/tests/common.py
index df695719..e02e6513 100644
--- a/base_external_system/tests/common.py
+++ b/base_external_system/tests/common.py
@@ -2,13 +2,13 @@
# License LGPL-3.0 or later (http://www.gnu.org/licenses/lgpl).
from contextlib import contextmanager
+
from mock import MagicMock
from odoo.tests.common import TransactionCase
class Common(TransactionCase):
-
@contextmanager
def _mock_method(self, method_name, method_obj=None):
if method_obj is None:
diff --git a/base_external_system/tests/test_external_system.py b/base_external_system/tests/test_external_system.py
index 09c2ec22..20dee9be 100644
--- a/base_external_system/tests/test_external_system.py
+++ b/base_external_system/tests/test_external_system.py
@@ -7,59 +7,46 @@ from .common import Common
class TestExternalSystem(Common):
-
def setUp(self):
super(TestExternalSystem, self).setUp()
- self.record = self.env.ref('base_external_system.external_system_os')
+ self.record = self.env.ref("base_external_system.external_system_os")
def test_get_system_types(self):
"""It should return at least the test record's interface."""
self.assertIn(
(self.record._name, self.record._description),
- self.env['external.system']._get_system_types(),
+ self.env["external.system"]._get_system_types(),
)
def test_check_fingerprint_blank(self):
"""It should not allow blank fingerprints when checking enabled."""
with self.assertRaises(ValidationError):
- self.record.write({
- 'ignore_fingerprint': False,
- 'fingerprint': False,
- })
+ self.record.write({"ignore_fingerprint": False, "fingerprint": False})
def test_check_fingerprint_allowed(self):
"""It should not raise a validation error if there is a fingerprint."""
- self.record.write({
- 'ignore_fingerprint': False,
- 'fingerprint': 'Data',
- })
+ self.record.write({"ignore_fingerprint": False, "fingerprint": "Data"})
self.assertTrue(True)
def test_client(self):
"""It should yield the open interface client."""
- with self._mock_method('client', self.record) as magic:
+ with self._mock_method("client", self.record) as magic:
with self.record.system_id.client() as client:
self.assertEqual(client, magic().__enter__())
def test_create_creates_and_assigns_interface(self):
"""It should create and assign the interface on record create."""
- record = self.env['external.system'].create({
- 'name': 'Test',
- 'system_type': 'external.system.os',
- })
+ record = self.env["external.system"].create(
+ {"name": "Test", "system_type": "external.system.os"}
+ )
self.assertEqual(
- record.interface._name, 'external.system.os',
+ record.interface._name, "external.system.os",
)
def test_create_context_override(self):
"""It should allow for interface create override with context."""
- model = self.env['external.system'].with_context(
- no_create_interface=True,
- )
- record = model.create({
- 'name': 'Test',
- 'system_type': 'external.system.os',
- })
+ model = self.env["external.system"].with_context(no_create_interface=True,)
+ record = model.create({"name": "Test", "system_type": "external.system.os"})
self.assertFalse(record.interface)
def test_action_test_connection(self):
diff --git a/base_external_system/tests/test_external_system_adapter.py b/base_external_system/tests/test_external_system_adapter.py
index 7e322fc5..f5ce4c07 100644
--- a/base_external_system/tests/test_external_system_adapter.py
+++ b/base_external_system/tests/test_external_system_adapter.py
@@ -7,23 +7,22 @@ from .common import Common
class TestExternalSystemAdapter(Common):
-
def setUp(self):
super(TestExternalSystemAdapter, self).setUp()
- self.system = self.env.ref('base_external_system.external_system_os')
- self.record = self.env['external.system.adapter'].new({
- 'system_id': self.system.id,
- })
+ self.system = self.env.ref("base_external_system.external_system_os")
+ self.record = self.env["external.system.adapter"].new(
+ {"system_id": self.system.id}
+ )
def test_client_yields_client(self):
"""It should yield the client."""
- with self._mock_method('external_get_client') as magic:
+ with self._mock_method("external_get_client") as magic:
with self.record.client() as client:
self.assertEqual(client, magic())
def test_client_destroys_client(self):
"""It should destroy the client after use."""
- with self._mock_method('external_destroy_client') as magic:
+ with self._mock_method("external_destroy_client") as magic:
with self.record.client() as client:
self.assertFalse(magic.call_count)
magic.assert_called_once_with(client)
@@ -31,12 +30,12 @@ class TestExternalSystemAdapter(Common):
def test_external_get_client_ensure_one(self):
"""It should assert singletons."""
with self.assertRaises(ValueError):
- self.env['external.system.adapter'].external_get_client()
+ self.env["external.system.adapter"].external_get_client()
def test_external_destroy_client_ensure_one(self):
"""It should assert singletons."""
with self.assertRaises(ValueError):
- self.env['external.system.adapter'].external_destroy_client(None)
+ self.env["external.system.adapter"].external_destroy_client(None)
def test_external_test_connection(self):
"""It should raise a UserError."""
diff --git a/base_external_system/tests/test_external_system_os.py b/base_external_system/tests/test_external_system_os.py
index 33c36717..6e4d55cb 100644
--- a/base_external_system/tests/test_external_system_os.py
+++ b/base_external_system/tests/test_external_system_os.py
@@ -7,7 +7,6 @@ from .common import Common
class TestExternalSystemOs(Common):
-
@classmethod
def setUpClass(cls):
"""Remember the working dir, just in case."""
@@ -22,7 +21,7 @@ class TestExternalSystemOs(Common):
def setUp(self):
super(TestExternalSystemOs, self).setUp()
- self.record = self.env.ref('base_external_system.external_system_os')
+ self.record = self.env.ref("base_external_system.external_system_os")
def test_external_get_client_returns_os(self):
"""It should return the Pyhton OS module."""
diff --git a/base_external_system/views/external_system_view.xml b/base_external_system/views/external_system_view.xml
index 809bc4f4..bbefb00d 100755
--- a/base_external_system/views/external_system_view.xml
+++ b/base_external_system/views/external_system_view.xml
@@ -1,21 +1,20 @@
-
-
+
-
-
external.system.view.form
external.system
-
external.system.view.tree
external.system
@@ -62,50 +60,51 @@
-
external.system.view.search
external.system
-
-
-
-
-
+
+
+
-
-
- External Systems
- external.system
- ir.actions.act_window
- form
- tree,form
-
-
-
-
+ External Systems
+ external.system
+ ir.actions.act_window
+ form
+ tree,form
+
+
diff --git a/setup/base_external_system/odoo/addons/base_external_system b/setup/base_external_system/odoo/addons/base_external_system
new file mode 120000
index 00000000..6740d6a6
--- /dev/null
+++ b/setup/base_external_system/odoo/addons/base_external_system
@@ -0,0 +1 @@
+../../../../base_external_system
\ No newline at end of file
diff --git a/setup/base_external_system/setup.py b/setup/base_external_system/setup.py
new file mode 100644
index 00000000..28c57bb6
--- /dev/null
+++ b/setup/base_external_system/setup.py
@@ -0,0 +1,6 @@
+import setuptools
+
+setuptools.setup(
+ setup_requires=['setuptools-odoo'],
+ odoo_addon=True,
+)