Skip to content

Commit 2a7e04b

Browse files
committed
support serialization and deserialization for SarifLog
1 parent 8bcc64f commit 2a7e04b

File tree

3 files changed

+61
-1
lines changed

3 files changed

+61
-1
lines changed

sarif_om/__init__.py

Lines changed: 59 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,11 @@
11
# This file was generated by jschema_to_python version 1.2.3.
22

3+
import json
4+
from typing import Dict
5+
from attrs import has, fields
6+
from cattrs import Converter
7+
from cattrs.gen import make_dict_unstructure_fn, make_dict_structure_fn, override
8+
39
from ._sarif_log import SarifLog
410
from ._address import Address
511
from ._artifact import Artifact
@@ -53,3 +59,56 @@
5359
from ._version_control_details import VersionControlDetails
5460
from ._web_request import WebRequest
5561
from ._web_response import WebResponse
62+
63+
64+
def _generate_sarif_report_cattrs_converter() -> Converter:
65+
converter = Converter()
66+
67+
def _unstructure(cls):
68+
return make_dict_unstructure_fn(
69+
cls,
70+
converter,
71+
**{
72+
a.name: override(
73+
rename=a.metadata["schema_property_name"],
74+
omit_if_default=True,
75+
)
76+
for a in fields(cls)
77+
},
78+
)
79+
80+
def _structure(cls):
81+
return make_dict_structure_fn(
82+
cls,
83+
converter,
84+
**{
85+
a.name: override(
86+
rename=a.metadata["schema_property_name"],
87+
)
88+
for a in fields(cls)
89+
},
90+
)
91+
92+
converter.register_unstructure_hook_factory(has, _unstructure)
93+
converter.register_structure_hook_factory(has, _structure)
94+
return converter
95+
96+
97+
_converter = _generate_sarif_report_cattrs_converter()
98+
99+
100+
def to_dict(sarif_log: SarifLog) -> Dict:
101+
return _converter.unstructure(sarif_log, SarifLog)
102+
103+
104+
def to_json(sarif_log: SarifLog, indent=2) -> str:
105+
obj = to_dict(sarif_log)
106+
return json.dumps(obj, indent=indent)
107+
108+
109+
def from_dict(data: Dict) -> SarifLog:
110+
return _converter.structure(data, SarifLog)
111+
112+
113+
def from_json(data: str) -> SarifLog:
114+
return from_dict(json.loads(data))

setup.cfg

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@ classifier =
2020
python_requires = >= 2.7
2121
install_requires =
2222
attrs
23+
cattrs
2324
pbr
2425

2526
[files]

setup.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,4 +2,4 @@
22

33
from setuptools import setup
44

5-
setup(setup_requires=["pbr"], pbr=True)
5+
setup(setup_requires=["pbr"], install_requires=["attrs", "cattrs"], pbr=True)

0 commit comments

Comments
 (0)