Skip to content

Commit c65a6c7

Browse files
authored
Merge pull request #1387 from Jaseci-Labs/hotfix/log-file-encoder
[HOTFIX]: Logs file encoder
2 parents fdeab83 + 1496782 commit c65a6c7

File tree

4 files changed

+140
-2
lines changed

4 files changed

+140
-2
lines changed

jac-cloud/jac_cloud/jaseci/utils/logger.py

Lines changed: 18 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44
from enum import IntEnum
55
from io import text_encoding
66
from itertools import chain
7-
from json import dumps
7+
from json import JSONEncoder, dumps
88
from logging import FileHandler, LogRecord, getLogger
99
from logging.handlers import (
1010
BaseRotatingHandler,
@@ -21,10 +21,26 @@
2121

2222
from ecs_logging import StdlibFormatter
2323

24+
from starlette.datastructures import UploadFile
25+
2426
DEFAULT_PART = [0]
2527
DEFAULT_SEPARATORS = (",", ":")
2628

2729

30+
class LogEncoder(JSONEncoder):
31+
"""Custom Log Encoder."""
32+
33+
def default(self, data: object) -> object:
34+
"""Override default handler."""
35+
if isinstance(data, UploadFile):
36+
return {
37+
"name": data.filename,
38+
"content_type": data.content_type,
39+
"size": data.size,
40+
}
41+
return super().default(data)
42+
43+
2844
class MixedTimedRotatingFileHandler(TimedRotatingFileHandler, RotatingFileHandler):
2945
"""Merge TimedRotatingFileHandler and RotatingFileHandler."""
3046

@@ -263,7 +279,7 @@ class Level(IntEnum):
263279

264280
def log_dumps(payload: dict[str, Any] | list[Any]) -> str:
265281
"""Dump dictionary log."""
266-
return dumps(payload, separators=DEFAULT_SEPARATORS)
282+
return dumps(payload, separators=DEFAULT_SEPARATORS, cls=LogEncoder)
267283

268284

269285
def log_entry(

jac-cloud/jac_cloud/tests/simple_graph_mini.jac

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -338,6 +338,29 @@ walker post_with_file {
338338
print(self.single);
339339
print(self.multiple);
340340
print(self.singleOptional);
341+
342+
multiple = [];
343+
for file in self.multiple {
344+
multiple.append({
345+
"name": file.filename,
346+
"content_type": file.content_type,
347+
"size": file.size,
348+
});
349+
}
350+
351+
single = {
352+
"single": {
353+
"name": self.single.filename,
354+
"content_type": self.single.content_type,
355+
"size": self.single.size,
356+
}
357+
};
358+
359+
report {
360+
"single": single,
361+
"multiple": multiple,
362+
"singleOptional": self.singleOptional
363+
};
341364
}
342365

343366
class __specs__ {}

jac-cloud/jac_cloud/tests/test_simple_graph.py

Lines changed: 52 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -587,6 +587,52 @@ def trigger_custom_report(self) -> None:
587587
res = self.post_api("custom_report")
588588
self.assertEqual({"testing": 1}, res)
589589

590+
def trigger_upload_file(self) -> None:
591+
"""Test upload file."""
592+
with open("jac_cloud/tests/simple_graph.jac", mode="br") as s:
593+
files = [
594+
("single", ("simple_graph.jac", s)),
595+
("multiple", ("simple_graph.jac", s)),
596+
("multiple", ("simple_graph.jac", s)),
597+
]
598+
res = post(
599+
f"{self.host}/walker/post_with_file",
600+
files=files,
601+
headers=self.users[0]["headers"],
602+
)
603+
res.raise_for_status()
604+
data: dict = res.json()
605+
606+
self.assertEqual(200, data["status"])
607+
self.assertEqual([None], data["returns"])
608+
self.assertEqual(
609+
[
610+
{
611+
"single": {
612+
"single": {
613+
"name": "simple_graph.jac",
614+
"content_type": "application/octet-stream",
615+
"size": 6852,
616+
}
617+
},
618+
"multiple": [
619+
{
620+
"name": "simple_graph.jac",
621+
"content_type": "application/octet-stream",
622+
"size": 6852,
623+
},
624+
{
625+
"name": "simple_graph.jac",
626+
"content_type": "application/octet-stream",
627+
"size": 6852,
628+
},
629+
],
630+
"singleOptional": None,
631+
}
632+
],
633+
data["reports"],
634+
)
635+
590636
async def test_all_features(self) -> None:
591637
"""Test Full Features."""
592638
self.trigger_openapi_specs_test()
@@ -670,3 +716,9 @@ async def test_all_features(self) -> None:
670716
###################################################
671717

672718
self.trigger_custom_report()
719+
720+
###################################################
721+
# FILE UPLOAD #
722+
###################################################
723+
724+
self.trigger_upload_file()

jac-cloud/jac_cloud/tests/test_simple_graph_mini.py

Lines changed: 47 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -370,6 +370,47 @@ def trigger_custom_status_code(self) -> None:
370370
Exception, self.post_api, "custom_status_code", {"status": invalid_code}
371371
)
372372

373+
def trigger_upload_file(self) -> None:
374+
"""Test upload file."""
375+
with open("jac_cloud/tests/simple_graph.jac", mode="br") as s:
376+
files = [
377+
("single", ("simple_graph.jac", s)),
378+
("multiple", ("simple_graph.jac", s)),
379+
("multiple", ("simple_graph.jac", s)),
380+
]
381+
res = post(f"{self.host}/walker/post_with_file", files=files)
382+
res.raise_for_status()
383+
data: dict = res.json()
384+
385+
self.assertEqual(200, data["status"])
386+
self.assertEqual(
387+
[
388+
{
389+
"single": {
390+
"single": {
391+
"name": "simple_graph.jac",
392+
"content_type": "application/octet-stream",
393+
"size": 6852,
394+
}
395+
},
396+
"multiple": [
397+
{
398+
"name": "simple_graph.jac",
399+
"content_type": "application/octet-stream",
400+
"size": 6852,
401+
},
402+
{
403+
"name": "simple_graph.jac",
404+
"content_type": "application/octet-stream",
405+
"size": 6852,
406+
},
407+
],
408+
"singleOptional": None,
409+
}
410+
],
411+
data["reports"],
412+
)
413+
373414
async def test_all_features(self) -> None:
374415
"""Test Full Features."""
375416
self.trigger_openapi_specs_test()
@@ -415,3 +456,9 @@ async def test_all_features(self) -> None:
415456
###################################################
416457

417458
self.trigger_custom_status_code()
459+
460+
###################################################
461+
# FILE UPLOAD #
462+
###################################################
463+
464+
self.trigger_upload_file()

0 commit comments

Comments
 (0)