Skip to content

Commit

Permalink
Merge pull request #34595 from dimagi/cs/ds-missing-table-catch
Browse files Browse the repository at this point in the history
Catch exception in case of missing ds table
  • Loading branch information
Charl1996 committed May 30, 2024
2 parents 300531b + e6884b2 commit 8a490ba
Show file tree
Hide file tree
Showing 2 changed files with 59 additions and 2 deletions.
9 changes: 7 additions & 2 deletions corehq/apps/userreports/sql/adapter.py
Original file line number Diff line number Diff line change
Expand Up @@ -211,8 +211,13 @@ def bulk_delete(self, docs, use_shard_col=True):
table = self.get_table()
doc_ids = [doc['_id'] for doc in docs]
delete = table.delete(table.c.doc_id.in_(doc_ids))
with self.session_context() as session:
session.execute(delete)
try:
with self.session_context() as session:
session.execute(delete)
except ProgrammingError as e:
if not self.table_exists:
return
raise e

register_data_source_row_change(
domain=self.config.domain,
Expand Down
52 changes: 52 additions & 0 deletions corehq/apps/userreports/tests/test_adapters.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,52 @@
from django.test import TestCase
from unittest.mock import patch

from corehq.apps.userreports.sql.adapter import IndicatorSqlAdapter
from corehq.apps.userreports.models import DataSourceConfiguration
from corehq.apps.userreports.app_manager.helpers import clean_table_name


class TestIndicatorSqlAdapter(TestCase):

@staticmethod
def _create_data_source_config(domain):
indicator = {
"type": "expression",
"expression": {
"type": "property_name",
"property_name": 'name'
},
"column_id": 'name',
"display_name": 'name',
"datatype": "string"
}
return DataSourceConfiguration(
domain=domain,
display_name='foo',
referenced_doc_type='CommCareCase',
table_id=clean_table_name('domain', 'test-table'),
configured_indicators=[indicator],
)

@patch("corehq.apps.userreports.sql.adapter.register_data_source_row_change")
def test_bulk_delete_table_dont_exist(self, register_data_source_row_change_mock):
config = self._create_data_source_config("test-domain")
adapter = IndicatorSqlAdapter(config)

docs = [{'_id': '1'}]
self.assertFalse(adapter.table_exists)

adapter.bulk_delete(docs)
register_data_source_row_change_mock.assert_not_called()

@patch("corehq.apps.userreports.sql.adapter.register_data_source_row_change")
def test_bulk_delete_table_exists(self, register_data_source_row_change_mock):
config = self._create_data_source_config("test-domain2")
adapter = IndicatorSqlAdapter(config)

docs = [{'_id': '1'}]
adapter.build_table()
self.assertTrue(adapter.table_exists)

adapter.bulk_delete(docs)
register_data_source_row_change_mock.assert_called()

0 comments on commit 8a490ba

Please sign in to comment.