feeder: add option post-sync-commands (#56164)
Exemple: [wcs-olap] post-sync-commands = ALTER DEFAULT PRIVILEGES IN SCHEMA {schema} GRANT SELECT ON TABLES TO user; GRANT USAGE ON SCHEMA {schema} TO user; GRANT SELECT ON ALL TABLES IN SCHEMA {schema} TO user; Those commands will be launched after the synchronization, interpolation variables are usable (like {schema} for the target schema name).
This commit is contained in:
parent
5baffc8156
commit
47a85d8531
|
@ -1,4 +1,5 @@
|
||||||
import logging
|
import logging
|
||||||
|
from unittest import mock
|
||||||
|
|
||||||
import pytest
|
import pytest
|
||||||
|
|
||||||
|
@ -20,3 +21,23 @@ def test_sql_error_logging(caplog):
|
||||||
with pytest.raises(Exception):
|
with pytest.raises(Exception):
|
||||||
feeder.ex('COIN')
|
feeder.ex('COIN')
|
||||||
assert 'Failed to execute' in caplog.text
|
assert 'Failed to execute' in caplog.text
|
||||||
|
|
||||||
|
|
||||||
|
def test_post_sync_commands(mock_cursor_execute, wcs, postgres_db, olap_cmd):
|
||||||
|
with olap_cmd.config() as config:
|
||||||
|
config.set(
|
||||||
|
'wcs-olap',
|
||||||
|
'post-sync-commands',
|
||||||
|
"NOTIFY coucou, '{schema}';\nSELECT * FROM information_schema.tables")
|
||||||
|
|
||||||
|
queries = []
|
||||||
|
|
||||||
|
def side_effect(query, *args, **kwargs):
|
||||||
|
queries.append(query)
|
||||||
|
return mock.DEFAULT
|
||||||
|
|
||||||
|
with mock_cursor_execute(side_effect=side_effect):
|
||||||
|
assert olap_cmd() == 0
|
||||||
|
|
||||||
|
# verify post-sync-commands are in the last executed queries
|
||||||
|
assert queries[-1] == "NOTIFY coucou, 'olap';\nSELECT * FROM information_schema.tables"
|
||||||
|
|
|
@ -632,6 +632,9 @@ class WcsOlapFeeder(object):
|
||||||
model_path = os.path.join(self.config['cubes_model_dirs'], '%s.model' % self.schema)
|
model_path = os.path.join(self.config['cubes_model_dirs'], '%s.model' % self.schema)
|
||||||
with open(model_path, 'w') as f:
|
with open(model_path, 'w') as f:
|
||||||
json.dump(self.model, f, indent=2, sort_keys=True)
|
json.dump(self.model, f, indent=2, sort_keys=True)
|
||||||
|
post_sync_commands = self.config.get('post-sync-commands')
|
||||||
|
if post_sync_commands:
|
||||||
|
self.ex(post_sync_commands)
|
||||||
finally:
|
finally:
|
||||||
# prevent connection from remaining open
|
# prevent connection from remaining open
|
||||||
self.cur.close()
|
self.cur.close()
|
||||||
|
|
Loading…
Reference in New Issue