diff --git a/kbcstorage/tables_metadata.py b/kbcstorage/tables_metadata.py index 295e6d3..ba24018 100644 --- a/kbcstorage/tables_metadata.py +++ b/kbcstorage/tables_metadata.py @@ -66,7 +66,7 @@ def delete(self, table_id, metadata_id): self._delete(url) - def create(self, table_id, provider, metadata, columns_metadata): + def create(self, table_id, provider, metadata, columns_metadata=None): """ Post metadata to a table. @@ -86,13 +86,15 @@ def create(self, table_id, provider, metadata, columns_metadata): ValueError: If the metadata is not a list. ValueError: If the columns_metadata is not a list """ + if columns_metadata is None: + columns_metadata = [] if not isinstance(table_id, str) or table_id == '': raise ValueError("Invalid table_id '{}'.".format(table_id)) if not isinstance(provider, str) or provider == '': raise ValueError("Invalid provider '{}'.".format(provider)) if not isinstance(metadata, list): raise ValueError("Invalid metadata '{}'.".format(metadata)) - if not isinstance(columns_metadata, list): + if columns_metadata is not None and not isinstance(columns_metadata, list): raise ValueError("Invalid columns_metadata '{}'.".format(columns_metadata)) url = '{}/{}/metadata'.format(self.base_url, table_id) @@ -101,7 +103,8 @@ def create(self, table_id, provider, metadata, columns_metadata): } data = { "provider": provider, - "metadata": metadata, - "columnsMetadata": columns_metadata + "metadata": metadata } + if columns_metadata: + data["columnsMetadata"] = columns_metadata return self._post(url, data=json.dumps(data), headers=headers) diff --git a/tests/functional/test_tables.py b/tests/functional/test_tables.py index bc3ff43..1b2814c 100644 --- a/tests/functional/test_tables.py +++ b/tests/functional/test_tables.py @@ -358,6 +358,18 @@ def test_table_with_metadata(self): ] ) + with self.subTest("Test empty columns metadata"): + # test that empty [] is not actually put in the request + self.tables.metadata.create( + table_id=table_id, + provider='test', + metadata=[{ + 'key': 'test_table_with_metadata', + 'value': 'success' + }], + columns_metadata=[] + ) + table_info = self.tables.detail(table_id) with self.subTest("Test metadata key in response"): self.assertIn('metadata', table_info)