fix: add wutta.purge_email_settings() for cloning prod DB to test

This commit is contained in:
Lance Edgar 2025-01-14 17:28:36 -06:00
parent 34459c008f
commit 8c512e33ce
4 changed files with 90 additions and 0 deletions

View file

@ -0,0 +1,6 @@
``wuttamess.wutta``
===================
.. automodule:: wuttamess.wutta
:members:

View file

@ -36,3 +36,4 @@ project.
api/wuttamess.ssh
api/wuttamess.sync
api/wuttamess.util
api/wuttamess.wutta

57
src/wuttamess/wutta.py Normal file
View file

@ -0,0 +1,57 @@
# -*- coding: utf-8; -*-
################################################################################
#
# WuttaMess -- Fabric Automation Helpers
# Copyright © 2024-2025 Lance Edgar
#
# This file is part of Wutta Framework.
#
# Wutta Framework is free software: you can redistribute it and/or modify it
# under the terms of the GNU General Public License as published by the Free
# Software Foundation, either version 3 of the License, or (at your option) any
# later version.
#
# Wutta Framework is distributed in the hope that it will be useful, but
# WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
# more details.
#
# You should have received a copy of the GNU General Public License along with
# Wutta Framework. If not, see <http://www.gnu.org/licenses/>.
#
################################################################################
"""
Utilities for Wutta Framework
"""
from wuttamess import postgres
def purge_email_settings(c, dbname, appname='wutta'):
"""
Purge production email settings for a database.
This can be used when cloning a production app DB to a test
server. The general pattern is:
* setup test app on test server
* config file should specify test email settings
* clone the production DB to test server
* call this function to purge email settings from test DB
So the end result should be, the test server app can run and send
emails safely using only what is specified in config file(s),
since none of the production email settings remain in the test DB.
:param dbname: Name of the database to be updated.
:param appname: The ``appname`` used to determine setting names.
"""
postgres.sql(c, f"delete from setting where name like '{appname}.email.%.sender';",
database=dbname)
postgres.sql(c, f"delete from setting where name like '{appname}.email.%.to';",
database=dbname)
postgres.sql(c, f"delete from setting where name like '{appname}.email.%.cc';",
database=dbname)
postgres.sql(c, f"delete from setting where name like '{appname}.email.%.bcc';",
database=dbname)

26
tests/test_wutta.py Normal file
View file

@ -0,0 +1,26 @@
# -*- coding: utf-8; -*-
from unittest import TestCase
from unittest.mock import MagicMock, patch, call
from wuttamess import wutta as mod
class TestPurgeEmailSettings(TestCase):
def test_basic(self):
c = MagicMock()
sql = MagicMock()
postgres = MagicMock(sql=sql)
with patch.object(mod, 'postgres', new=postgres):
mod.purge_email_settings(c, 'testy', appname='wuttatest')
sql.assert_has_calls([
call(c, "delete from setting where name like 'wuttatest.email.%.sender';",
database='testy'),
call(c, "delete from setting where name like 'wuttatest.email.%.to';",
database='testy'),
call(c, "delete from setting where name like 'wuttatest.email.%.cc';",
database='testy'),
call(c, "delete from setting where name like 'wuttatest.email.%.bcc';",
database='testy'),
])