From 4afa747fa1bc99e5626636541a2dabb22c7f22cd Mon Sep 17 00:00:00 2001 From: Martin Trigaux Date: Tue, 19 May 2020 10:19:45 +0200 Subject: [PATCH] [IMP] *: make ir.property methods private Should only interact with them via python code in a controlled environment, no direct call with RPC --- addons/account/tests/common.py | 10 +++++----- addons/hr_expense/models/hr_expense.py | 4 ++-- addons/point_of_sale/tests/test_frontend.py | 2 +- addons/pos_restaurant/tests/test_frontend.py | 2 +- addons/product/models/product_pricelist.py | 4 ++-- addons/product/models/res_company.py | 4 ++-- addons/product/models/res_partner.py | 4 ++-- addons/stock_account/__init__.py | 4 ++-- addons/stock_account/tests/common.py | 4 ++-- .../tests/test_ui_wslides.py | 4 ++-- odoo/addons/base/models/ir_property.py | 12 ++++++------ odoo/addons/test_main_flows/tests/test_flow.py | 10 +++++----- odoo/addons/test_new_api/tests/test_new_fields.py | 6 +++--- .../test_performance/tests/test_performance.py | 4 ++-- odoo/fields.py | 6 +++--- odoo/models.py | 2 +- 16 files changed, 41 insertions(+), 41 deletions(-) diff --git a/addons/account/tests/common.py b/addons/account/tests/common.py index b46ca6f93c4..5c665ef1092 100644 --- a/addons/account/tests/common.py +++ b/addons/account/tests/common.py @@ -213,11 +213,11 @@ class AccountTestCommon(SavepointCase): # Properties: Product income and expense accounts, default parameters Property = cls.env['ir.property'] - Property.set_default('property_account_receivable_id', 'res.partner', cls.a_recv, cls.company) - Property.set_default('property_account_payable_id', 'res.partner', cls.a_pay, cls.company) - Property.set_default('property_account_position_id', 'res.partner', False, cls.company) - Property.set_default('property_account_expense_categ_id', 'product.category', cls.a_expense, cls.company) - Property.set_default('property_account_income_categ_id', 'product.category', cls.a_sale, cls.company) + Property._set_default('property_account_receivable_id', 'res.partner', cls.a_recv, cls.company) + Property._set_default('property_account_payable_id', 'res.partner', cls.a_pay, cls.company) + Property._set_default('property_account_position_id', 'res.partner', False, cls.company) + Property._set_default('property_account_expense_categ_id', 'product.category', cls.a_expense, cls.company) + Property._set_default('property_account_income_categ_id', 'product.category', cls.a_sale, cls.company) # Bank Accounts cls.bank_account = cls.env['res.partner.bank'].create({ diff --git a/addons/hr_expense/models/hr_expense.py b/addons/hr_expense/models/hr_expense.py index fe9e0bddc60..7c1c6734234 100644 --- a/addons/hr_expense/models/hr_expense.py +++ b/addons/hr_expense/models/hr_expense.py @@ -26,7 +26,7 @@ class HrExpense(models.Model): @api.model def _default_account_id(self): - return self.env['ir.property'].get('property_account_expense_categ_id', 'product.category') + return self.env['ir.property']._get('property_account_expense_categ_id', 'product.category') @api.model def _get_employee_id_domain(self): @@ -365,7 +365,7 @@ class HrExpense(models.Model): raise UserError( _("No Expense account found for the product %s (or for its category), please configure one.") % (self.product_id.name)) else: - account = self.env['ir.property'].with_company(self.company_id).get('property_account_expense_categ_id', 'product.category') + account = self.env['ir.property'].with_company(self.company_id)._get('property_account_expense_categ_id', 'product.category') if not account: raise UserError(_('Please configure Default Expense account for Product expense: `property_account_expense_categ_id`.')) return account diff --git a/addons/point_of_sale/tests/test_frontend.py b/addons/point_of_sale/tests/test_frontend.py index 63807196588..69fff92983e 100644 --- a/addons/point_of_sale/tests/test_frontend.py +++ b/addons/point_of_sale/tests/test_frontend.py @@ -30,7 +30,7 @@ class TestPointOfSaleHttpCommon(odoo.tests.HttpCase): 'reconcile': True}) self.env.company.account_default_pos_receivable_account_id = account_receivable - self.env['ir.property'].set_default( + self.env['ir.property']._set_default( 'property_account_receivable_id', 'res.partner', account_receivable, diff --git a/addons/pos_restaurant/tests/test_frontend.py b/addons/pos_restaurant/tests/test_frontend.py index 44ae56444c2..28d023f294e 100644 --- a/addons/pos_restaurant/tests/test_frontend.py +++ b/addons/pos_restaurant/tests/test_frontend.py @@ -86,7 +86,7 @@ class TestFrontend(odoo.tests.HttpCase): 'user_type_id': self.env.ref('account.data_account_type_receivable').id, 'reconcile': True}) - self.env['ir.property'].set_default( + self.env['ir.property']._set_default( 'property_account_receivable_id', 'res.partner', account_receivable, diff --git a/addons/product/models/product_pricelist.py b/addons/product/models/product_pricelist.py index 4938c9c313b..680ed729cf9 100644 --- a/addons/product/models/product_pricelist.py +++ b/addons/product/models/product_pricelist.py @@ -340,7 +340,7 @@ class Pricelist(models.Model): pl_domain = self._get_partner_pricelist_multi_search_domain_hook(company_id) # if no specific property, try to find a fitting pricelist - result = Property.get_multi('property_product_pricelist', Partner._name, partner_ids) + result = Property._get_multi('property_product_pricelist', Partner._name, partner_ids) remaining_partner_ids = [pid for pid, val in result.items() if not val or not val._get_partner_pricelist_multi_filter_hook()] @@ -348,7 +348,7 @@ class Pricelist(models.Model): # get fallback pricelist when no pricelist for a given country pl_fallback = ( Pricelist.search(pl_domain + [('country_group_ids', '=', False)], limit=1) or - Property.get('property_product_pricelist', 'res.partner') or + Property._get('property_product_pricelist', 'res.partner') or Pricelist.search(pl_domain, limit=1) ) # group partners by country, and find a pricelist for each country diff --git a/addons/product/models/res_company.py b/addons/product/models/res_company.py index 94e053eda23..323d722fb87 100644 --- a/addons/product/models/res_company.py +++ b/addons/product/models/res_company.py @@ -18,7 +18,7 @@ class ResCompany(models.Model): 'name': _("Default %(currency)s pricelist") % params, 'currency_id': new_company.currency_id.id, }) - self.env['ir.property'].sudo().set_default( + self.env['ir.property'].sudo()._set_default( 'property_product_pricelist', 'res.partner', pricelist, @@ -54,7 +54,7 @@ class ResCompany(models.Model): 'name': _("Default %(currency)s pricelist") % params, 'currency_id': currency_id, }) - self.env['ir.property'].sudo().set_default( + self.env['ir.property'].sudo()._set_default( 'property_product_pricelist', 'res.partner', pricelist, diff --git a/addons/product/models/res_partner.py b/addons/product/models/res_partner.py index 786923ef5a4..f76c0e4da63 100644 --- a/addons/product/models/res_partner.py +++ b/addons/product/models/res_partner.py @@ -29,11 +29,11 @@ class Partner(models.Model): limit=1 ) default_for_country = pls and pls[0] - actual = self.env['ir.property'].get('property_product_pricelist', 'res.partner', 'res.partner,%s' % partner.id) + actual = self.env['ir.property']._get('property_product_pricelist', 'res.partner', 'res.partner,%s' % partner.id) # update at each change country, and so erase old pricelist if partner.property_product_pricelist or (actual and default_for_country and default_for_country.id != actual.id): # keep the company of the current user before sudo - self.env['ir.property'].sudo().set_multi( + self.env['ir.property'].sudo()._set_multi( 'property_product_pricelist', partner._name, {partner.id: partner.property_product_pricelist or default_for_country.id}, diff --git a/addons/stock_account/__init__.py b/addons/stock_account/__init__.py index e0fb76fd2d7..558fd40f096 100644 --- a/addons/stock_account/__init__.py +++ b/addons/stock_account/__init__.py @@ -34,7 +34,7 @@ def _configure_journals(cr, registry): 'company_id': company_id.id, 'show_on_dashboard': False }).id - env['ir.property'].set_default( + env['ir.property']._set_default( 'property_stock_journal', 'product.category', journal_id, @@ -51,7 +51,7 @@ def _configure_journals(cr, registry): for name in todo_list: account = getattr(company_id, name) if account: - env['ir.property'].set_default( + env['ir.property']._set_default( name, 'product.category', account, diff --git a/addons/stock_account/tests/common.py b/addons/stock_account/tests/common.py index 68d79a1b8d9..6eec8bce93c 100644 --- a/addons/stock_account/tests/common.py +++ b/addons/stock_account/tests/common.py @@ -11,13 +11,13 @@ class StockAccountTestCommon(AccountTestCommon): super(StockAccountTestCommon, cls).setUpClass() # Properties: Stock valuation account and journal - cls.env['ir.property'].set_default( + cls.env['ir.property']._set_default( 'property_stock_valuation_account_id', 'product.category', cls.stk, cls.env.company, ) - cls.env['ir.property'].set_default( + cls.env['ir.property']._set_default( 'property_stock_journal', 'product.category', cls.miscellaneous_journal, diff --git a/addons/test_website_slides_full/tests/test_ui_wslides.py b/addons/test_website_slides_full/tests/test_ui_wslides.py index e8b45d55d7e..c3e999db7a8 100644 --- a/addons/test_website_slides_full/tests/test_ui_wslides.py +++ b/addons/test_website_slides_full/tests/test_ui_wslides.py @@ -41,8 +41,8 @@ class TestUi(TestUICommon): }) Property = self.env['ir.property'] - Property.set_default('property_account_receivable_id', 'res.partner', a_recv, self.env.company) - Property.set_default('property_account_payable_id', 'res.partner', a_pay, self.env.company) + Property._set_default('property_account_receivable_id', 'res.partner', a_recv, self.env.company) + Property._set_default('property_account_payable_id', 'res.partner', a_pay, self.env.company) product_course_channel_6 = self.env['product.product'].create({ 'name': 'DIY Furniture Course', diff --git a/odoo/addons/base/models/ir_property.py b/odoo/addons/base/models/ir_property.py index aed37bece8c..02703383df4 100644 --- a/odoo/addons/base/models/ir_property.py +++ b/odoo/addons/base/models/ir_property.py @@ -176,7 +176,7 @@ class Property(models.Model): return False @api.model - def set_default(self, name, model, value, company=False): + def _set_default(self, name, model, value, company=False): """ Set the given field's generic value for the given company. :param name: the field's name @@ -204,7 +204,7 @@ class Property(models.Model): }) @api.model - def get(self, name, model, res_id=False): + def _get(self, name, model, res_id=False): """ Get the given field's generic value for the record. :param name: the field's name @@ -223,7 +223,7 @@ class Property(models.Model): return p.get_by_record() return False - # only cache Property.get(res_id=False) as that's + # only cache Property._get(res_id=False) as that's # sub-optimally. COMPANY_KEY = "self.env.company.id" @ormcache(COMPANY_KEY, 'name', 'model') @@ -255,7 +255,7 @@ class Property(models.Model): return [('fields_id', '=', res[0]), ('company_id', 'in', [company_id, False])] @api.model - def get_multi(self, name, model, ids): + def _get_multi(self, name, model, ids): """ Read the property field `name` for the records of model `model` with the given `ids`, and return a dictionary mapping `ids` to their corresponding value. @@ -319,7 +319,7 @@ class Property(models.Model): } @api.model - def set_multi(self, name, model, values, default_value=None): + def _set_multi(self, name, model, values, default_value=None): """ Assign the property field `name` for the records of model `model` with `values` (dictionary mapping record ids to their value). If the value for a given record is the same as the default @@ -340,7 +340,7 @@ class Property(models.Model): if domain is None: raise Exception() # retrieve the default value for the field - default_value = clean(self.get(name, model)) + default_value = clean(self._get(name, model)) # retrieve the properties corresponding to the given record ids self._cr.execute("SELECT id FROM ir_model_fields WHERE name=%s AND model=%s", (name, model)) diff --git a/odoo/addons/test_main_flows/tests/test_flow.py b/odoo/addons/test_main_flows/tests/test_flow.py index 4aaca90ed4d..6d2cfab311b 100644 --- a/odoo/addons/test_main_flows/tests/test_flow.py +++ b/odoo/addons/test_main_flows/tests/test_flow.py @@ -37,11 +37,11 @@ class BaseTestUi(odoo.tests.HttpCase): }) Property = self.env['ir.property'] - Property.set_default('property_account_receivable_id', 'res.partner', a_recv, self.env.company) - Property.set_default('property_account_payable_id', 'res.partner', a_pay, self.env.company) - Property.set_default('property_account_position_id', 'res.partner', False, self.env.company) - Property.set_default('property_account_expense_categ_id', 'product.category', a_expense, self.env.company) - Property.set_default('property_account_income_categ_id', 'product.category', a_sale, self.env.company) + Property._set_default('property_account_receivable_id', 'res.partner', a_recv, self.env.company) + Property._set_default('property_account_payable_id', 'res.partner', a_pay, self.env.company) + Property._set_default('property_account_position_id', 'res.partner', False, self.env.company) + Property._set_default('property_account_expense_categ_id', 'product.category', a_expense, self.env.company) + Property._set_default('property_account_income_categ_id', 'product.category', a_sale, self.env.company) self.expenses_journal = self.env['account.journal'].create({ 'name': 'Vendor Bills - Test', diff --git a/odoo/addons/test_new_api/tests/test_new_fields.py b/odoo/addons/test_new_api/tests/test_new_fields.py index 6df342aaf94..44a1fe695bf 100644 --- a/odoo/addons/test_new_api/tests/test_new_fields.py +++ b/odoo/addons/test_new_api/tests/test_new_fields.py @@ -1071,9 +1071,9 @@ class TestFields(TransactionCaseWithUserDemo): tag2 = self.env['test_new_api.multi.tag'].create({'name': 'Quuz'}) # create default values for the company-dependent fields - self.env['ir.property'].set_default('foo', 'test_new_api.company', 'default') - self.env['ir.property'].set_default('foo', 'test_new_api.company', 'default1', company1) - self.env['ir.property'].set_default('tag_id', 'test_new_api.company', tag0) + self.env['ir.property']._set_default('foo', 'test_new_api.company', 'default') + self.env['ir.property']._set_default('foo', 'test_new_api.company', 'default1', company1) + self.env['ir.property']._set_default('tag_id', 'test_new_api.company', tag0) # assumption: users don't have access to 'ir.property' accesses = self.env['ir.model.access'].search([('model_id.model', '=', 'ir.property')]) diff --git a/odoo/addons/test_performance/tests/test_performance.py b/odoo/addons/test_performance/tests/test_performance.py index d77ef7c1a21..104fce93195 100644 --- a/odoo/addons/test_performance/tests/test_performance.py +++ b/odoo/addons/test_performance/tests/test_performance.py @@ -459,7 +459,7 @@ class TestIrPropertyOptimizations(TransactionCase): self.Eggs = self.env['test_performance.eggs'] def test_with_falsy_default(self): - self.assertFalse(self.env['ir.property'].get('property_eggs', 'test_performance.bacon')) + self.assertFalse(self.env['ir.property']._get('property_eggs', 'test_performance.bacon')) # warmup eggs = self.Eggs.create({}) @@ -492,7 +492,7 @@ class TestIrPropertyOptimizations(TransactionCase): 'value': eggs, }) - self.assertEqual(eggs, self.env['ir.property'].get('property_eggs', 'test_performance.bacon')) + self.assertEqual(eggs, self.env['ir.property']._get('property_eggs', 'test_performance.bacon')) # warmup self.Bacon.create({}) diff --git a/odoo/fields.py b/odoo/fields.py index d64555e0025..56f58364809 100644 --- a/odoo/fields.py +++ b/odoo/fields.py @@ -571,12 +571,12 @@ class Field(MetaField('DummyField', (object,), {})): # def _default_company_dependent(self, model): - return model.env['ir.property'].get(self.name, self.model_name) + return model.env['ir.property']._get(self.name, self.model_name) def _compute_company_dependent(self, records): # read property as superuser, as the current user may not have access Property = records.env['ir.property'].sudo() - values = Property.get_multi(self.name, self.model_name, records.ids) + values = Property._get_multi(self.name, self.model_name, records.ids) for record in records: record[self.name] = values.get(record.id) @@ -587,7 +587,7 @@ class Field(MetaField('DummyField', (object,), {})): record.id: self.convert_to_write(record[self.name], record) for record in records } - Property.set_multi(self.name, self.model_name, values) + Property._set_multi(self.name, self.model_name, values) def _search_company_dependent(self, records, operator, value): Property = records.env['ir.property'] diff --git a/odoo/models.py b/odoo/models.py index 8af30b89bb5..f88bcce1dca 100644 --- a/odoo/models.py +++ b/odoo/models.py @@ -3705,7 +3705,7 @@ Record ids: %(records)s if not field: raise ValueError("Invalid field %r on model %r" % (key, self._name)) if field.company_dependent: - irprop_def = self.env['ir.property'].get(key, self._name) + irprop_def = self.env['ir.property']._get(key, self._name) cached_def = field.convert_to_cache(irprop_def, self) cached_val = field.convert_to_cache(val, self) if cached_val == cached_def: