keboola.component 1.9.4__tar.gz → 1.11.0__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (22) hide show
  1. {keboola_component-1.9.4/src/keboola.component.egg-info → keboola_component-1.11.0}/PKG-INFO +1 -1
  2. {keboola_component-1.9.4 → keboola_component-1.11.0}/pyproject.toml +1 -1
  3. {keboola_component-1.9.4 → keboola_component-1.11.0}/src/keboola/component/dao.py +0 -5
  4. {keboola_component-1.9.4 → keboola_component-1.11.0}/src/keboola/component/interface.py +18 -11
  5. {keboola_component-1.9.4 → keboola_component-1.11.0/src/keboola.component.egg-info}/PKG-INFO +1 -1
  6. {keboola_component-1.9.4 → keboola_component-1.11.0}/tests/test_dao.py +23 -0
  7. {keboola_component-1.9.4 → keboola_component-1.11.0}/LICENSE +0 -0
  8. {keboola_component-1.9.4 → keboola_component-1.11.0}/README.md +0 -0
  9. {keboola_component-1.9.4 → keboola_component-1.11.0}/setup.cfg +0 -0
  10. {keboola_component-1.9.4 → keboola_component-1.11.0}/src/keboola/component/__init__.py +0 -0
  11. {keboola_component-1.9.4 → keboola_component-1.11.0}/src/keboola/component/base.py +0 -0
  12. {keboola_component-1.9.4 → keboola_component-1.11.0}/src/keboola/component/exceptions.py +0 -0
  13. {keboola_component-1.9.4 → keboola_component-1.11.0}/src/keboola/component/sync_actions.py +0 -0
  14. {keboola_component-1.9.4 → keboola_component-1.11.0}/src/keboola/component/table_schema.py +0 -0
  15. {keboola_component-1.9.4 → keboola_component-1.11.0}/src/keboola.component.egg-info/SOURCES.txt +0 -0
  16. {keboola_component-1.9.4 → keboola_component-1.11.0}/src/keboola.component.egg-info/dependency_links.txt +0 -0
  17. {keboola_component-1.9.4 → keboola_component-1.11.0}/src/keboola.component.egg-info/requires.txt +0 -0
  18. {keboola_component-1.9.4 → keboola_component-1.11.0}/src/keboola.component.egg-info/top_level.txt +0 -0
  19. {keboola_component-1.9.4 → keboola_component-1.11.0}/tests/test_base.py +0 -0
  20. {keboola_component-1.9.4 → keboola_component-1.11.0}/tests/test_interface.py +0 -0
  21. {keboola_component-1.9.4 → keboola_component-1.11.0}/tests/test_schema.py +0 -0
  22. {keboola_component-1.9.4 → keboola_component-1.11.0}/tests/test_sync_actions.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: keboola.component
3
- Version: 1.9.4
3
+ Version: 1.11.0
4
4
  Summary: General library for Python applications running in Keboola Connection environment
5
5
  Author-email: Keboola KDS Team <support@keboola.com>
6
6
  License-Expression: MIT
@@ -1,6 +1,6 @@
1
1
  [project]
2
2
  name = "keboola.component"
3
- version = "1.9.4" # replaced by the actual version based on the release tag in github actions
3
+ version = "1.11.0" # replaced by the actual version based on the release tag in github actions
4
4
  dependencies = [
5
5
  "pygelf",
6
6
  "deprecated",
@@ -162,11 +162,6 @@ class TableMetadata:
162
162
 
163
163
  """
164
164
 
165
- if manifest.get("schema") and (
166
- manifest.get("metadata") or manifest.get("column_metadata") or manifest.get("columns")
167
- ): # noqa
168
- raise UserException("Manifest can't contain new 'schema' and old 'metadata'/'column_metadata'/'columns'")
169
-
170
165
  if not manifest.get("schema"):
171
166
  # column metadata
172
167
  for column, metadata_list in manifest.get("column_metadata", {}).items():
@@ -160,18 +160,22 @@ class CommonInterface:
160
160
 
161
161
  hd1 = logging.StreamHandler(sys.stdout)
162
162
  hd1.addFilter(InfoFilter())
163
+ hd1._keboola_owned = True
163
164
  hd2 = logging.StreamHandler(sys.stderr)
164
165
  hd2.setLevel(logging.WARNING)
166
+ hd2._keboola_owned = True
165
167
 
166
- logging.getLogger().setLevel(log_level)
167
- # remove default handler
168
- for h in logging.getLogger().handlers:
169
- logging.getLogger().removeHandler(h)
170
- logging.getLogger().addHandler(hd1)
171
- logging.getLogger().addHandler(hd2)
168
+ root = logging.getLogger()
169
+ root.setLevel(log_level)
170
+ # Remove only handlers previously installed by keboola.component, leaving
171
+ # any external handlers (e.g. test infrastructure) untouched.
172
+ for h in list(root.handlers):
173
+ if getattr(h, "_keboola_owned", False):
174
+ root.removeHandler(h)
175
+ root.addHandler(hd1)
176
+ root.addHandler(hd2)
172
177
 
173
- logger = logging.getLogger()
174
- return logger
178
+ return root
175
179
 
176
180
  @staticmethod
177
181
  def set_gelf_logger(
@@ -192,9 +196,11 @@ class CommonInterface:
192
196
 
193
197
  Returns: Logger object
194
198
  """
195
- # remove existing handlers
196
- for h in logging.getLogger().handlers:
197
- logging.getLogger().removeHandler(h)
199
+ # Remove only handlers previously installed by keboola.component.
200
+ root = logging.getLogger()
201
+ for h in list(root.handlers):
202
+ if getattr(h, "_keboola_owned", False):
203
+ root.removeHandler(h)
198
204
  if stdout:
199
205
  CommonInterface.set_default_logger(log_level)
200
206
 
@@ -210,6 +216,7 @@ class CommonInterface:
210
216
  else:
211
217
  raise ValueError(f"Unsupported gelf transport layer: {transport_layer}. Choose TCP or UDP")
212
218
 
219
+ gelf._keboola_owned = True
213
220
  logging.getLogger().setLevel(log_level)
214
221
  logging.getLogger().addHandler(gelf)
215
222
 
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: keboola.component
3
- Version: 1.9.4
3
+ Version: 1.11.0
4
4
  Summary: General library for Python applications running in Keboola Connection environment
5
5
  Author-email: Keboola KDS Team <support@keboola.com>
6
6
  License-Expression: MIT
@@ -122,6 +122,29 @@ class TestTableMetadata(unittest.TestCase):
122
122
  self.assertEqual(table_metadata.column_metadata, expected_tmetadata.column_metadata)
123
123
  self.assertEqual(table_metadata.table_metadata, expected_tmetadata.table_metadata)
124
124
 
125
+ def test_build_from_manifest_with_schema_and_legacy_keys_valid(self):
126
+ # Input manifests produced by the platform carry the new `schema` node alongside the legacy
127
+ # `columns`/`metadata`/`column_metadata` keys for backward compatibility. The library must accept this:
128
+ # `schema` is the source of truth for columns, while legacy table `metadata` is still loaded.
129
+ raw_manifest = {
130
+ "id": "in.c-bucket.table",
131
+ "columns": ["foo", "bar"],
132
+ "primary_key": ["foo"],
133
+ "metadata": [{"key": "bar", "value": "kochba"}],
134
+ "column_metadata": {"bar": [{"key": "foo", "value": "gogo"}]},
135
+ "schema": [
136
+ {"name": "foo", "data_type": {"base": {"type": "STRING"}}, "nullable": False, "primary_key": True},
137
+ {"name": "bar", "data_type": {"base": {"type": "STRING"}}, "nullable": True},
138
+ ],
139
+ }
140
+
141
+ table_metadata = TableMetadata(raw_manifest)
142
+
143
+ # column metadata comes from `schema`, not the legacy `column_metadata` block
144
+ self.assertEqual(table_metadata.column_metadata, {})
145
+ # table-level legacy metadata is still loaded
146
+ self.assertEqual(table_metadata.table_metadata, {"bar": "kochba"})
147
+
125
148
  def test_build_manifest_legacy_none_metadata_skipped(self):
126
149
  table_def = TableDefinition(
127
150
  "testDef",