deltacat 1.1.16__py3-none-any.whl → 1.1.17__py3-none-any.whl

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.
deltacat/__init__.py CHANGED
@@ -44,7 +44,7 @@ from deltacat.types.tables import TableWriteMode
44
44
 
45
45
  deltacat.logs.configure_deltacat_logger(logging.getLogger(__name__))
46
46
 
47
- __version__ = "1.1.16"
47
+ __version__ = "1.1.17"
48
48
 
49
49
 
50
50
  __all__ = [
deltacat/logs.py CHANGED
@@ -49,11 +49,13 @@ class JsonFormatter(logging.Formatter):
49
49
  fmt_dict: dict = None,
50
50
  time_format: str = "%Y-%m-%dT%H:%M:%S",
51
51
  msec_format: str = "%s.%03dZ",
52
+ context_kwargs: Optional[Dict[str, Any]] = None,
52
53
  ):
53
54
  self.fmt_dict = fmt_dict if fmt_dict is not None else {"message": "message"}
54
55
  self.default_time_format = time_format
55
56
  self.default_msec_format = msec_format
56
57
  self.datefmt = None
58
+ self.additional_context = context_kwargs or {}
57
59
  if ray.is_initialized():
58
60
  self.ray_runtime_ctx: RuntimeContext = ray.get_runtime_context()
59
61
  self.context = {}
@@ -117,6 +119,9 @@ class JsonFormatter(logging.Formatter):
117
119
 
118
120
  message_dict["ray_runtime_context"] = self.context
119
121
 
122
+ if self.additional_context:
123
+ message_dict["additional_context"] = self.additional_context
124
+
120
125
  return json.dumps(message_dict, default=str)
121
126
 
122
127
 
@@ -159,6 +164,7 @@ def _create_rotating_file_handler(
159
164
  max_bytes_per_log_file: int = DEFAULT_MAX_BYTES_PER_LOG,
160
165
  backup_count: int = DEFAULT_BACKUP_COUNT,
161
166
  logging_format: Union[str, dict] = DEFAULT_LOG_FORMAT,
167
+ context_kwargs: Dict[str, Any] = None,
162
168
  ) -> FileHandler:
163
169
 
164
170
  if type(logging_level) is str:
@@ -176,7 +182,9 @@ def _create_rotating_file_handler(
176
182
  if type(logging_format) is str:
177
183
  handler.setFormatter(logging.Formatter(logging_format))
178
184
  else:
179
- handler.setFormatter(JsonFormatter(logging_format))
185
+ handler.setFormatter(
186
+ JsonFormatter(logging_format, context_kwargs=context_kwargs)
187
+ )
180
188
 
181
189
  handler.setLevel(logging_level)
182
190
  return handler
@@ -205,6 +213,7 @@ def _configure_logger(
205
213
  log_dir: str,
206
214
  log_base_file_name: str,
207
215
  debug_log_base_file_name: str,
216
+ context_kwargs: Dict[str, Any] = None,
208
217
  ) -> Union[Logger, LoggerAdapter]:
209
218
  # This maintains log level of rotating file handlers
210
219
  primary_log_level = log_level
@@ -212,13 +221,19 @@ def _configure_logger(
212
221
  if log_level <= logging.getLevelName("DEBUG"):
213
222
  if not _file_handler_exists(logger, log_dir, debug_log_base_file_name):
214
223
  handler = _create_rotating_file_handler(
215
- log_dir, debug_log_base_file_name, "DEBUG"
224
+ log_dir,
225
+ debug_log_base_file_name,
226
+ "DEBUG",
227
+ context_kwargs=context_kwargs,
216
228
  )
217
229
  _add_logger_handler(logger, handler)
218
230
  primary_log_level = logging.getLevelName("INFO")
219
231
  if not _file_handler_exists(logger, log_dir, log_base_file_name):
220
232
  handler = _create_rotating_file_handler(
221
- log_dir, log_base_file_name, primary_log_level
233
+ log_dir,
234
+ log_base_file_name,
235
+ primary_log_level,
236
+ context_kwargs=context_kwargs,
222
237
  )
223
238
  _add_logger_handler(logger, handler)
224
239
 
@@ -226,7 +241,9 @@ def _configure_logger(
226
241
 
227
242
 
228
243
  def configure_deltacat_logger(
229
- logger: Logger, level: int = None
244
+ logger: Logger,
245
+ level: int = None,
246
+ context_kwargs: Dict[str, Any] = None,
230
247
  ) -> Union[Logger, LoggerAdapter]:
231
248
  if level is None:
232
249
  level = logging.getLevelName(DELTACAT_SYS_LOG_LEVEL)
@@ -237,11 +254,14 @@ def configure_deltacat_logger(
237
254
  DELTACAT_SYS_LOG_DIR,
238
255
  DELTACAT_SYS_INFO_LOG_BASE_FILE_NAME,
239
256
  DELTACAT_SYS_DEBUG_LOG_BASE_FILE_NAME,
257
+ context_kwargs,
240
258
  )
241
259
 
242
260
 
243
261
  def configure_application_logger(
244
- logger: Logger, level: int = None
262
+ logger: Logger,
263
+ level: int = None,
264
+ context_kwargs: Dict[str, Any] = None,
245
265
  ) -> Union[Logger, LoggerAdapter]:
246
266
  if level is None:
247
267
  level = logging.getLevelName(DELTACAT_APP_LOG_LEVEL)
@@ -252,4 +272,5 @@ def configure_application_logger(
252
272
  DELTACAT_APP_LOG_DIR,
253
273
  DELTACAT_APP_INFO_LOG_BASE_FILE_NAME,
254
274
  DELTACAT_APP_DEBUG_LOG_BASE_FILE_NAME,
275
+ context_kwargs,
255
276
  )
@@ -126,3 +126,67 @@ class TestJsonFormatter(unittest.TestCase):
126
126
  "We expect task ID to be present inside a remote task",
127
127
  )
128
128
  ray.shutdown()
129
+
130
+ def test_format_when_ray_initialized_with_context_kwargs(self):
131
+ ray.init(local_mode=True, ignore_reinit_error=True)
132
+
133
+ formatter = JsonFormatter(
134
+ {"message": "msg"}, context_kwargs={"custom_key": "custom_val"}
135
+ )
136
+
137
+ record = LogRecord(
138
+ level="INFO",
139
+ name="test",
140
+ pathname="test",
141
+ lineno=0,
142
+ message="test_message",
143
+ msg="test_message",
144
+ args=None,
145
+ exc_info=None,
146
+ )
147
+
148
+ result = formatter.format(record)
149
+ result = json.loads(result)
150
+
151
+ self.assertEqual("test_message", result["message"])
152
+ self.assertTrue(ray.is_initialized())
153
+ self.assertIn("ray_runtime_context", result)
154
+ self.assertIn("job_id", result["ray_runtime_context"])
155
+ self.assertIn("node_id", result["ray_runtime_context"])
156
+ self.assertIn("worker_id", result["ray_runtime_context"])
157
+ self.assertNotIn(
158
+ "task_id",
159
+ result["ray_runtime_context"],
160
+ "We expect task ID not be present outside a remote task",
161
+ )
162
+ self.assertEqual("custom_val", result["additional_context"]["custom_key"])
163
+ ray.shutdown()
164
+
165
+ def test_format_with_context_kwargs(self):
166
+ ray.shutdown()
167
+ formatter = JsonFormatter(
168
+ {"message": "msg"}, context_kwargs={"custom_key": "custom_val"}
169
+ )
170
+
171
+ record = LogRecord(
172
+ level="INFO",
173
+ name="test",
174
+ pathname="test",
175
+ lineno=0,
176
+ message="test_message",
177
+ msg="test_message",
178
+ args=None,
179
+ exc_info=None,
180
+ )
181
+
182
+ result = formatter.format(record)
183
+
184
+ self.assertEqual(
185
+ {
186
+ "message": "test_message",
187
+ "additional_context": {"custom_key": "custom_val"},
188
+ },
189
+ json.loads(result),
190
+ )
191
+ self.assertFalse(ray.is_initialized())
192
+ self.assertNotIn("ray_runtime_context", json.loads(result))
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: deltacat
3
- Version: 1.1.16
3
+ Version: 1.1.17
4
4
  Summary: A scalable, fast, ACID-compliant Data Catalog powered by Ray.
5
5
  Home-page: https://github.com/ray-project/deltacat
6
6
  Author: Ray Team
@@ -1,7 +1,7 @@
1
- deltacat/__init__.py,sha256=o3hcQ85nWUeDYkaXi3ADAbqwM_c5ajyxzlx-Z2jdKbI,1778
1
+ deltacat/__init__.py,sha256=x9MIXX9uM_Gf7hvnQuf0dQwXgyXztDLmGSbM1F27e10,1778
2
2
  deltacat/constants.py,sha256=_6oRI-3yp5c8J1qKGQZrt89I9-ttT_gSSvVsJ0h8Duc,1939
3
3
  deltacat/exceptions.py,sha256=yWM4RXK7uRrQc1VgJv6Lv2UiNZWAx2wolLq7cBwjlkg,12770
4
- deltacat/logs.py,sha256=6g16VkEFidbaMjgenAjggE1r2l664drMVhreRs8B1IQ,8438
4
+ deltacat/logs.py,sha256=_UAc_6GiQR3mxccys32Cp2CZOKOVZ9L-AkNUAlzepns,9091
5
5
  deltacat/aws/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
6
6
  deltacat/aws/clients.py,sha256=4eQvpkV1PzFfxog7EriuglOGGwNFHR5hbGYpjsNNPxk,6949
7
7
  deltacat/aws/constants.py,sha256=1HnDXrSokW-G3YA3qKEiv7fZVntDs1uSk6a7On-VG5k,1223
@@ -138,7 +138,7 @@ deltacat/storage/model/transform.py,sha256=t4hg1dKua8VPeMFgyllkWdzq-L5M_DRG0HD9s
138
138
  deltacat/storage/model/types.py,sha256=hj7MmjjVmKT-R9sMUulOWG-FByGZKKaYXNnOWW32mP0,1608
139
139
  deltacat/tests/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
140
140
  deltacat/tests/test_exceptions.py,sha256=V3jUQClHLD24tS18tnGvNIt0psn2WFT3Nf_CIvSqL08,3140
141
- deltacat/tests/test_logs.py,sha256=Bq0kfzOVW0UbJL4Hayqy1k1QDXLu5hlvQX_cOJdsgYs,3851
141
+ deltacat/tests/test_logs.py,sha256=QmnArioPo0dbOUXjaG-b7HEg1GaYI8NDhinPDmzwjfQ,5889
142
142
  deltacat/tests/aws/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
143
143
  deltacat/tests/aws/test_clients.py,sha256=23GMWfz27WWBDXSqphG9mfputsyS7j3I5P_HRk4YoKE,3790
144
144
  deltacat/tests/aws/test_s3u.py,sha256=FsYCH8K8DsDRPOtTp-w1Nu3ATqt4p1mqDo6aVJV-SbU,7918
@@ -220,8 +220,8 @@ deltacat/utils/ray_utils/concurrency.py,sha256=JDVwMiQWrmuSlyCWAoiq9ctoJ0XADEfDD
220
220
  deltacat/utils/ray_utils/dataset.py,sha256=waHdtH0c835a-2t51HYRHnulfC0_zBxx8mFSAPvPSPM,3274
221
221
  deltacat/utils/ray_utils/performance.py,sha256=d7JFM7vTXHzkGx9qNQcZzUWajnqINvYRwaM088_FpsE,464
222
222
  deltacat/utils/ray_utils/runtime.py,sha256=rB0A-tU9WZHz0J11LzJdANYtL397YyuemcA1l-K9dAw,5029
223
- deltacat-1.1.16.dist-info/LICENSE,sha256=xx0jnfkXJvxRnG63LTGOxlggYnIysveWIZ6H3PNdCrQ,11357
224
- deltacat-1.1.16.dist-info/METADATA,sha256=EvOmjI60akKZ6BKEWQ2_KZJxr-Bp6wMZOU6-zV1EDos,1734
225
- deltacat-1.1.16.dist-info/WHEEL,sha256=eOLhNAGa2EW3wWl_TU484h7q1UNgy0JXjjoqKoxAAQc,92
226
- deltacat-1.1.16.dist-info/top_level.txt,sha256=RWdIcid4Bv2i2ozLVh-70kJpyB61xEKXod9XXGpiono,9
227
- deltacat-1.1.16.dist-info/RECORD,,
223
+ deltacat-1.1.17.dist-info/LICENSE,sha256=xx0jnfkXJvxRnG63LTGOxlggYnIysveWIZ6H3PNdCrQ,11357
224
+ deltacat-1.1.17.dist-info/METADATA,sha256=SxYHCGGCCaUP0Yej0eT0BMV3K8lQdOmodQj6VSnALcU,1734
225
+ deltacat-1.1.17.dist-info/WHEEL,sha256=eOLhNAGa2EW3wWl_TU484h7q1UNgy0JXjjoqKoxAAQc,92
226
+ deltacat-1.1.17.dist-info/top_level.txt,sha256=RWdIcid4Bv2i2ozLVh-70kJpyB61xEKXod9XXGpiono,9
227
+ deltacat-1.1.17.dist-info/RECORD,,