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 +1 -1
- deltacat/logs.py +26 -5
- deltacat/tests/test_logs.py +64 -0
- {deltacat-1.1.16.dist-info → deltacat-1.1.17.dist-info}/METADATA +1 -1
- {deltacat-1.1.16.dist-info → deltacat-1.1.17.dist-info}/RECORD +8 -8
- {deltacat-1.1.16.dist-info → deltacat-1.1.17.dist-info}/LICENSE +0 -0
- {deltacat-1.1.16.dist-info → deltacat-1.1.17.dist-info}/WHEEL +0 -0
- {deltacat-1.1.16.dist-info → deltacat-1.1.17.dist-info}/top_level.txt +0 -0
deltacat/__init__.py
CHANGED
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(
|
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,
|
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,
|
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,
|
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,
|
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
|
)
|
deltacat/tests/test_logs.py
CHANGED
@@ -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,7 +1,7 @@
|
|
1
|
-
deltacat/__init__.py,sha256=
|
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=
|
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=
|
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.
|
224
|
-
deltacat-1.1.
|
225
|
-
deltacat-1.1.
|
226
|
-
deltacat-1.1.
|
227
|
-
deltacat-1.1.
|
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,,
|
File without changes
|
File without changes
|
File without changes
|