diff --git a/cassandra/cqlengine/management.py b/cassandra/cqlengine/management.py index 648e8705..d6bf5ad9 100644 --- a/cassandra/cqlengine/management.py +++ b/cassandra/cqlengine/management.py @@ -422,7 +422,10 @@ def _update_options(model): update_options = {} for name, value in model_options.items(): - existing_value = existing_options[name] + try: + existing_value = existing_options[name] + except KeyError: + raise KeyError("Invalid table option: '%s'; known options: %s" % (name, existing_options.keys())) if isinstance(existing_value, six.string_types): if value != existing_value: update_options[name] = value diff --git a/tests/integration/cqlengine/management/test_management.py b/tests/integration/cqlengine/management/test_management.py index 4b62fcfc..650beded 100644 --- a/tests/integration/cqlengine/management/test_management.py +++ b/tests/integration/cqlengine/management/test_management.py @@ -217,6 +217,15 @@ class TablePropertiesTests(BaseCassEngTestCase): self.assertDictContainsSubset(ModelWithTableProperties.__options__, table_options) + def test_bogus_option_update(self): + sync_table(ModelWithTableProperties) + option = 'no way will this ever be an option' + try: + ModelWithTableProperties.__options__[option] = 'what was I thinking?' + self.assertRaisesRegexp(KeyError, "Invalid table option.*%s.*" % option, sync_table, ModelWithTableProperties) + finally: + ModelWithTableProperties.__options__.pop(option, None) + class SyncTableTests(BaseCassEngTestCase):