diff --git a/keychain/__manifest__.py b/keychain/__manifest__.py index 657433280..0e039de42 100644 --- a/keychain/__manifest__.py +++ b/keychain/__manifest__.py @@ -4,7 +4,7 @@ { "name": "Keychain", "summary": "Store accounts and credentials", - "version": "10.0.2.0.0", + "version": "10.0.2.0.1", "category": "Uncategorized", "website": "https://akretion.com/", "author": "Akretion, Odoo Community Association (OCA)", diff --git a/keychain/models/keychain.py b/keychain/models/keychain.py index 77e82bd20..e0f78717e 100644 --- a/keychain/models/keychain.py +++ b/keychain/models/keychain.py @@ -116,12 +116,59 @@ class KeychainAccount(models.Model): @implemented_by_keychain def _validate_data(self, data): + """Ensure data is valid according to the namespace. + + How to use: + - Create a method prefixed with your namespace + - Put your validation logic inside + - Return true if data is valid for your usage + + This method will be called on write(). + If false is returned an user error will be raised. + + Example: + def _hereismynamspace_validate_data(): + return len(data.get('some_param', '') > 6) + + @params data dict + @returns boolean + """ pass + def _default_validate_data(self, data): + """Default validation. + + By default says data is always valid. + See _validata_data() for more information. + """ + return True + @implemented_by_keychain def _init_data(self): + """Initialize data field. + + How to use: + - Create a method prefixed with your namespace + - Return a dict with the keys and may be default + values your expect. + + This method will be called on write(). + + Example: + def _hereismynamspace_init_data(): + return { 'some_param': 'default_value' } + + @returns dict + """ pass + def _default_init_data(self): + """Default initialization. + + See _init_data() for more information. + """ + return {} + @staticmethod def _retrieve_env(): """Return the current environments. diff --git a/keychain/tests/test_keychain.py b/keychain/tests/test_keychain.py index 8b72bb29c..b3aebd6e9 100644 --- a/keychain/tests/test_keychain.py +++ b/keychain/tests/test_keychain.py @@ -221,3 +221,24 @@ class TestKeychain(TransactionCase): self.assertTrue(True, 'Should validate json') except: self.assertTrue(False, 'It should validate a good json') + + def test_default_init_and_valid(self): + """.""" + self.keychain._fields['namespace'].selection.append( + ('keychain_test_default', 'test') + ) + account = self.keychain.create({ + "name": "test", + "namespace": "keychain_test_default", + "login": "test", + "technical_name": "keychain.test" + }) + try: + account.write({"login": "test default"}) + except ValidationError: + self.assertTrue(False, 'It should validate any json in default') + + self.assertEqual( + account.data, account._serialize_data( + account._default_init_data()), + 'Data should be default value')