Skip to content

Commit 0ff08c2

Browse files
Refactore settings export management
1 parent fc87b64 commit 0ff08c2

File tree

5 files changed

+49
-10
lines changed

5 files changed

+49
-10
lines changed

connector_algolia/components/adapter.py

+10-7
Original file line numberDiff line numberDiff line change
@@ -32,12 +32,16 @@ def _get_index(self):
3232
backend.algolia_app_id, account._get_password())
3333
return client.initIndex(self.work.index.name)
3434

35-
def _set_settings(self, index):
35+
def set_settings(self, force=True):
3636
"""Set advanced settings like facettings attributes."""
37-
data = self.work.index.settings
38-
if data:
39-
clean = json.loads(data)
40-
index.setSettings(clean)
37+
set_settings = force
38+
index = self._get_index()
39+
data = self.work.index._get_setting_values()
40+
if not force:
41+
settings = index.get_settings()
42+
set_settings = not settings and True or False
43+
if data and set_settings:
44+
index.setSettings(data)
4145

4246
def index(self, datas):
4347
index = self._get_index()
@@ -47,7 +51,6 @@ def index(self, datas):
4751
if not data.get('objectID'):
4852
raise UserError(
4953
_('The key objectID is missing in the data %s') % data)
50-
self._set_settings(index)
5154
index.add_objects(datas)
5255

5356
def delete(self, binding_ids):
@@ -57,4 +60,4 @@ def delete(self, binding_ids):
5760
def clear(self):
5861
index = self._get_index()
5962
index.clear_index()
60-
self._set_settings(index)
63+
self.set_settings()

connector_search_engine/components/adapter.py

+4
Original file line numberDiff line numberDiff line change
@@ -23,3 +23,7 @@ def delete(self, binding_ids):
2323

2424
def clear(self):
2525
return NotImplemented
26+
27+
def set_settings(self, force=True):
28+
"""Set advanced settings like facettings attributes."""
29+
return NotImplemented

connector_search_engine/components/exporter.py

+4
Original file line numberDiff line numberDiff line change
@@ -21,3 +21,7 @@ def run(self):
2121
""" Run the synchronization """
2222
self.work.records.write({'sync_state': 'done'})
2323
return self._index([record.data for record in self.work.records])
24+
25+
def export_settings(self, force=True):
26+
""" Run the settings synchronization """
27+
return self.backend_adapter.set_settings(force=force)

connector_search_engine/data/ir_cron.xml

+13
Original file line numberDiff line numberDiff line change
@@ -27,4 +27,17 @@
2727
<field eval="'()'" name="args"/>
2828
</record>
2929

30+
<record forcecreate="True" id="ir_cron_export_settings" model="ir.cron">
31+
<field name="name">Search engine: Export settings for all indexes</field>
32+
<field eval="False" name="active"/>
33+
<field name="user_id" ref="base.user_root"/>
34+
<field name="interval_number">1</field>
35+
<field name="interval_type">days</field>
36+
<field name="numbercall">-1</field>
37+
<field eval="False" name="doall"/>
38+
<field eval="'se.index'" name="model"/>
39+
<field eval="'export_all_settings'" name="function"/>
40+
<field eval="'()'" name="args"/>
41+
</record>
42+
3043
</odoo>

connector_search_engine/models/se_index.py

+18-3
Original file line numberDiff line numberDiff line change
@@ -46,9 +46,6 @@ def _get_model_domain(self):
4646
string='Model',
4747
required=True,
4848
domain=_get_model_domain)
49-
settings = fields.Text(
50-
'Additionnal settings',
51-
help="Facetting, pagination, advanced settings, etc.")
5249
exporter_id = fields.Many2one(
5350
'ir.exports',
5451
string='Exporter')
@@ -143,3 +140,21 @@ def clear_index(self):
143140
adapter = work.component(usage='se.backend.adapter')
144141
adapter.clear()
145142
return True
143+
144+
def _get_setting_values(self):
145+
"""
146+
Override this method is sub modules in order to pass the adequate
147+
settings (like Facetting, pagination, advanced settings, etc...)
148+
"""
149+
self.ensure_one()
150+
return {}
151+
152+
@api.model
153+
def export_all_settings(self):
154+
for index in self.search([]):
155+
se_specific_backend = index.backend_id.specific_backend
156+
with se_specific_backend.work_on(
157+
index.model_id.model, index=index
158+
) as work:
159+
exporter = work.component(usage='se.record.exporter')
160+
exporter.export_settings()

0 commit comments

Comments
 (0)