Skip to content

Commit 14a0707

Browse files
fholgerarmintaenzertng
authored andcommitted
Add methods to serialize SPDX documents to a stream object rather than always expecting a file name
Signed-off-by: Holger Frydrych <holger.frydrych@tngtech.com>
1 parent 5fcb695 commit 14a0707

File tree

5 files changed

+56
-17
lines changed

5 files changed

+56
-17
lines changed

src/spdx_tools/spdx/writer/json/json_writer.py

Lines changed: 14 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
# SPDX-License-Identifier: Apache-2.0
44
import json
55

6-
from beartype.typing import List
6+
from beartype.typing import List, IO
77

88
from spdx_tools.spdx.document_utils import create_document_without_duplicates
99
from spdx_tools.spdx.jsonschema.document_converter import DocumentConverter
@@ -12,9 +12,9 @@
1212
from spdx_tools.spdx.validation.validation_message import ValidationMessage
1313

1414

15-
def write_document_to_file(
15+
def write_document_to_stream(
1616
document: Document,
17-
file_name: str,
17+
stream: IO[str],
1818
validate: bool = True,
1919
converter: DocumentConverter = None,
2020
drop_duplicates: bool = True,
@@ -33,5 +33,15 @@ def write_document_to_file(
3333
if converter is None:
3434
converter = DocumentConverter()
3535
document_dict = converter.convert(document)
36+
json.dump(document_dict, stream, indent=4)
37+
38+
39+
def write_document_to_file(
40+
document: Document,
41+
file_name: str,
42+
validate: bool = True,
43+
converter: DocumentConverter = None,
44+
drop_duplicates: bool = True,
45+
):
3646
with open(file_name, "w") as out:
37-
json.dump(document_dict, out, indent=4)
47+
write_document_to_stream(document, out, validate, converter, drop_duplicates)

src/spdx_tools/spdx/writer/rdf/rdf_writer.py

Lines changed: 8 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
# SPDX-FileCopyrightText: 2023 spdx contributors
22
#
33
# SPDX-License-Identifier: Apache-2.0
4-
from beartype.typing import Dict, List
4+
from beartype.typing import Dict, List, IO
55
from rdflib import DOAP, Graph
66
from rdflib.compare import to_isomorphic
77

@@ -19,7 +19,7 @@
1919
from spdx_tools.spdx.writer.rdf.snippet_writer import add_snippet_to_graph
2020

2121

22-
def write_document_to_file(document: Document, file_name: str, validate: bool, drop_duplicates: bool = True):
22+
def write_document_to_stream(document: Document, stream: IO[bytes], validate: bool, drop_duplicates: bool = True):
2323
if validate:
2424
validation_messages: List[ValidationMessage] = validate_full_spdx_document(document)
2525
if validation_messages:
@@ -55,4 +55,9 @@ def write_document_to_file(document: Document, file_name: str, validate: bool, d
5555
graph.bind("spdx", SPDX_NAMESPACE)
5656
graph.bind("doap", DOAP)
5757
graph.bind("ptr", POINTER_NAMESPACE)
58-
graph.serialize(file_name, "pretty-xml", encoding="UTF-8", max_depth=100)
58+
graph.serialize(stream, "pretty-xml", encoding="UTF-8", max_depth=100)
59+
60+
61+
def write_document_to_file(document: Document, file_name: str, validate: bool, drop_duplicates: bool = True):
62+
with open(file_name, "wb") as out:
63+
write_document_to_stream(document, out, validate, drop_duplicates)

src/spdx_tools/spdx/writer/tagvalue/tagvalue_writer.py

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -30,16 +30,20 @@
3030
)
3131

3232

33-
def write_document_to_file(document: Document, file_name: str, validate: bool = True, drop_duplicates: bool = True):
33+
def write_document_to_stream(document: Document, stream: TextIO, validate: bool = True, drop_duplicates: bool = True):
3434
if validate:
3535
validation_messages: List[ValidationMessage] = validate_full_spdx_document(document)
3636
if validation_messages:
3737
raise ValueError(f"Document is not valid. The following errors were detected: {validation_messages}")
3838
if drop_duplicates:
3939
document = create_document_without_duplicates(document)
4040

41+
write_document(document, stream)
42+
43+
44+
def write_document_to_file(document: Document, file_name: str, validate: bool = True, drop_duplicates: bool = True):
4145
with open(file_name, "w") as out:
42-
write_document(document, out)
46+
write_document_to_stream(document, out, validate, drop_duplicates)
4347

4448

4549
def write_document(document: Document, text_output: TextIO):

src/spdx_tools/spdx/writer/xml/xml_writer.py

Lines changed: 14 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
#
33
# SPDX-License-Identifier: Apache-2.0
44
import xmltodict
5-
from beartype.typing import List
5+
from beartype.typing import List, IO
66

77
from spdx_tools.spdx.document_utils import create_document_without_duplicates
88
from spdx_tools.spdx.jsonschema.document_converter import DocumentConverter
@@ -11,9 +11,9 @@
1111
from spdx_tools.spdx.validation.validation_message import ValidationMessage
1212

1313

14-
def write_document_to_file(
14+
def write_document_to_stream(
1515
document: Document,
16-
file_name: str,
16+
stream: IO[str],
1717
validate: bool = True,
1818
converter: DocumentConverter = None,
1919
drop_duplicates: bool = True,
@@ -33,5 +33,15 @@ def write_document_to_file(
3333
if converter is None:
3434
converter = DocumentConverter()
3535
document_dict = {"Document": converter.convert(document)}
36+
xmltodict.unparse(document_dict, stream, encoding="utf-8", pretty=True)
37+
38+
39+
def write_document_to_file(
40+
document: Document,
41+
file_name: str,
42+
validate: bool = True,
43+
converter: DocumentConverter = None,
44+
drop_duplicates: bool = True,
45+
):
3646
with open(file_name, "w") as out:
37-
xmltodict.unparse(document_dict, out, encoding="utf-8", pretty=True)
47+
write_document_to_stream(document, out, validate, converter, drop_duplicates)

src/spdx_tools/spdx/writer/yaml/yaml_writer.py

Lines changed: 14 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
#
33
# SPDX-License-Identifier: Apache-2.0
44
import yaml
5-
from beartype.typing import List
5+
from beartype.typing import List, IO
66

77
from spdx_tools.spdx.document_utils import create_document_without_duplicates
88
from spdx_tools.spdx.jsonschema.document_converter import DocumentConverter
@@ -11,9 +11,9 @@
1111
from spdx_tools.spdx.validation.validation_message import ValidationMessage
1212

1313

14-
def write_document_to_file(
14+
def write_document_to_stream(
1515
document: Document,
16-
file_name: str,
16+
stream: IO[str],
1717
validate: bool = True,
1818
converter: DocumentConverter = None,
1919
drop_duplicates: bool = True,
@@ -32,5 +32,15 @@ def write_document_to_file(
3232
if converter is None:
3333
converter = DocumentConverter()
3434
document_dict = converter.convert(document)
35+
yaml.safe_dump(document_dict, stream, indent=2)
36+
37+
38+
def write_document_to_file(
39+
document: Document,
40+
file_name: str,
41+
validate: bool = True,
42+
converter: DocumentConverter = None,
43+
drop_duplicates: bool = True,
44+
):
3545
with open(file_name, "w") as out:
36-
yaml.safe_dump(document_dict, out, indent=2)
46+
write_document_to_stream(document, out, validate, converter, drop_duplicates)

0 commit comments

Comments
 (0)