Skip to content

Commit

Permalink
[issue-593] expose model classes in model package init
Browse files Browse the repository at this point in the history
Signed-off-by: Armin Tänzer <armin.taenzer@tngtech.com>
  • Loading branch information
armintaenzertng committed Apr 19, 2023
1 parent b35941f commit 8d7d7b7
Show file tree
Hide file tree
Showing 172 changed files with 381 additions and 428 deletions.
2 changes: 1 addition & 1 deletion .flake8
@@ -1,4 +1,4 @@
[flake8]
max-line-length = 119
exclude = src/spdx_tools/spdx/parser/tagvalue/parsetab.py
exclude = src/spdx_tools/spdx/parser/tagvalue/parsetab.py, src/spdx_tools/spdx/model/__init__.py
extend-ignore = E203
10 changes: 5 additions & 5 deletions README.md
Expand Up @@ -94,13 +94,13 @@ instead of `bin`.

## Library usage
1. **DATA MODEL**
* The `src.spdx.model` package constitutes the internal SPDX v2.3 data model (v2.2 is a simply a subset of this).
* The `spdx_tools.spdx.model` package constitutes the internal SPDX v2.3 data model (v2.2 is a simply a subset of this). All relevant classes for SPDX document creation are exposed in the [__init__.py](src%2Fspdx_tools%2Fspdx%2Fmodel%2F__init__.py).
* SPDX objects are implemented via `@dataclass_with_properties`, a custom extension of `@dataclass`.
* Each class starts with a list of its properties and their possible types. When no default value is provided, the property is mandatory and must be set during initialization.
* Using the type hints, type checking is enforced when initializing a new instance or setting/getting a property on an instance
(wrong types will raise `ConstructorTypeError` or `TypeError`, respectively). This makes it easy to catch invalid properties early and only construct valid documents.
* Note: in-place manipulations like `list.append(item)` will circumvent the type checking (a `TypeError` will still be raised when reading `list` again). We recommend using `list = list + [item]` instead.
* The main entry point of an SPDX document is the `Document` class, which links to all other classes.
* The main entry point of an SPDX document is the `Document` class from the [document.py](src%2Fspdx_tools%2Fspdx%2Fmodel%2Fdocument.py) module, which links to all other classes.
* For license handling, the [license_expression](https://github.com/nexB/license-expression) library is used.
* Note on `documentDescribes` and `hasFiles`: These fields will be converted to relationships in the internal data model. As they are deprecated, these fields will not be written in the output.
2. **PARSING**
Expand All @@ -123,9 +123,9 @@ import logging

from license_expression import get_spdx_licensing

from spdx_tools.spdx.model.checksum import Checksum, ChecksumAlgorithm
from spdx_tools.spdx.model.file import File, FileType
from spdx_tools.spdx.model.relationship import Relationship, RelationshipType
from spdx_tools.spdx.model import Checksum, ChecksumAlgorithm
from spdx_tools.spdx.model import File, FileType
from spdx_tools.spdx.model import Relationship, RelationshipType
from spdx_tools.spdx.parser.parse_anything import parse_file
from spdx_tools.spdx.validation.document_validator import validate_full_spdx_document
from spdx_tools.spdx.writer.write_anything import write_file
Expand Down
1 change: 1 addition & 0 deletions pyproject.toml
Expand Up @@ -61,3 +61,4 @@ include = "(^/src/.*.py|^/tests/.*.py)"
[tool.isort]
profile = "black"
line_length = 119
skip = ["__init__.py"]
2 changes: 1 addition & 1 deletion src/spdx_tools/spdx/clitools/pyspdxtools.py
Expand Up @@ -19,7 +19,7 @@
import click

from spdx_tools.spdx.graph_generation import export_graph_from_document
from spdx_tools.spdx.model.document import Document
from spdx_tools.spdx.model import Document
from spdx_tools.spdx.parser.error import SPDXParsingError
from spdx_tools.spdx.parser.parse_anything import parse_file
from spdx_tools.spdx.validation.document_validator import validate_full_spdx_document
Expand Down
5 changes: 1 addition & 4 deletions src/spdx_tools/spdx/document_utils.py
Expand Up @@ -4,10 +4,7 @@
from copy import deepcopy
from typing import Any, Dict, List, Union

from spdx_tools.spdx.model.document import Document
from spdx_tools.spdx.model.file import File
from spdx_tools.spdx.model.package import Package
from spdx_tools.spdx.model.snippet import Snippet
from spdx_tools.spdx.model import Document, File, Package, Snippet


def get_contained_spdx_element_ids(document: Document) -> List[str]:
Expand Down
7 changes: 2 additions & 5 deletions src/spdx_tools/spdx/graph_generation.py
Expand Up @@ -3,17 +3,14 @@
# SPDX-License-Identifier: Apache-2.0
from typing import Dict, List, Union

from spdx_tools.spdx.model.file import File
from spdx_tools.spdx.model.package import Package
from spdx_tools.spdx.model.snippet import Snippet
from spdx_tools.spdx.model import File, Package, Snippet

try:
from networkx import DiGraph
except ImportError:
DiGraph = None
from spdx_tools.spdx.document_utils import get_contained_spdx_elements
from spdx_tools.spdx.model.document import Document
from spdx_tools.spdx.model.relationship import Relationship
from spdx_tools.spdx.model import Document, Relationship


def export_graph_from_document(document: Document, file_name: str) -> None:
Expand Down
3 changes: 1 addition & 2 deletions src/spdx_tools/spdx/jsonschema/annotation_converter.py
Expand Up @@ -7,8 +7,7 @@
from spdx_tools.spdx.jsonschema.annotation_properties import AnnotationProperty
from spdx_tools.spdx.jsonschema.converter import TypedConverter
from spdx_tools.spdx.jsonschema.json_property import JsonProperty
from spdx_tools.spdx.model.annotation import Annotation
from spdx_tools.spdx.model.document import Document
from spdx_tools.spdx.model import Annotation, Document


class AnnotationConverter(TypedConverter[Annotation]):
Expand Down
3 changes: 1 addition & 2 deletions src/spdx_tools/spdx/jsonschema/checksum_converter.py
Expand Up @@ -6,8 +6,7 @@
from spdx_tools.spdx.jsonschema.checksum_properties import ChecksumProperty
from spdx_tools.spdx.jsonschema.converter import TypedConverter
from spdx_tools.spdx.jsonschema.json_property import JsonProperty
from spdx_tools.spdx.model.checksum import Checksum, ChecksumAlgorithm
from spdx_tools.spdx.model.document import Document
from spdx_tools.spdx.model import Checksum, ChecksumAlgorithm, Document


class ChecksumConverter(TypedConverter[Checksum]):
Expand Down
2 changes: 1 addition & 1 deletion src/spdx_tools/spdx/jsonschema/converter.py
Expand Up @@ -6,7 +6,7 @@

from spdx_tools.spdx.casing_tools import snake_case_to_camel_case
from spdx_tools.spdx.jsonschema.json_property import JsonProperty
from spdx_tools.spdx.model.document import Document
from spdx_tools.spdx.model import Document

MISSING_IMPLEMENTATION_MESSAGE = "Must be implemented"

Expand Down
2 changes: 1 addition & 1 deletion src/spdx_tools/spdx/jsonschema/creation_info_converter.py
Expand Up @@ -8,7 +8,7 @@
from spdx_tools.spdx.jsonschema.creation_info_properties import CreationInfoProperty
from spdx_tools.spdx.jsonschema.json_property import JsonProperty
from spdx_tools.spdx.jsonschema.optional_utils import apply_if_present
from spdx_tools.spdx.model.document import CreationInfo, Document
from spdx_tools.spdx.model import CreationInfo, Document


class CreationInfoConverter(TypedConverter[CreationInfo]):
Expand Down
2 changes: 1 addition & 1 deletion src/spdx_tools/spdx/jsonschema/document_converter.py
Expand Up @@ -15,7 +15,7 @@
from spdx_tools.spdx.jsonschema.package_converter import PackageConverter
from spdx_tools.spdx.jsonschema.relationship_converter import RelationshipConverter
from spdx_tools.spdx.jsonschema.snippet_converter import SnippetConverter
from spdx_tools.spdx.model.document import Document
from spdx_tools.spdx.model import Document


class DocumentConverter(TypedConverter[Document]):
Expand Down
Expand Up @@ -7,8 +7,7 @@
from spdx_tools.spdx.jsonschema.converter import TypedConverter
from spdx_tools.spdx.jsonschema.external_document_ref_properties import ExternalDocumentRefProperty
from spdx_tools.spdx.jsonschema.json_property import JsonProperty
from spdx_tools.spdx.model.document import Document
from spdx_tools.spdx.model.external_document_ref import ExternalDocumentRef
from spdx_tools.spdx.model import Document, ExternalDocumentRef


class ExternalDocumentRefConverter(TypedConverter[ExternalDocumentRef]):
Expand Down
Expand Up @@ -6,8 +6,7 @@
from spdx_tools.spdx.jsonschema.converter import TypedConverter
from spdx_tools.spdx.jsonschema.external_package_ref_properties import ExternalPackageRefProperty
from spdx_tools.spdx.jsonschema.json_property import JsonProperty
from spdx_tools.spdx.model.document import Document
from spdx_tools.spdx.model.package import ExternalPackageRef
from spdx_tools.spdx.model import Document, ExternalPackageRef


class ExternalPackageRefConverter(TypedConverter[ExternalPackageRef]):
Expand Down
Expand Up @@ -7,8 +7,7 @@
from spdx_tools.spdx.jsonschema.extracted_licensing_info_properties import ExtractedLicensingInfoProperty
from spdx_tools.spdx.jsonschema.json_property import JsonProperty
from spdx_tools.spdx.jsonschema.optional_utils import apply_if_present
from spdx_tools.spdx.model.document import Document
from spdx_tools.spdx.model.extracted_licensing_info import ExtractedLicensingInfo
from spdx_tools.spdx.model import Document, ExtractedLicensingInfo


class ExtractedLicensingInfoConverter(TypedConverter[ExtractedLicensingInfo]):
Expand Down
3 changes: 1 addition & 2 deletions src/spdx_tools/spdx/jsonschema/file_converter.py
Expand Up @@ -9,8 +9,7 @@
from spdx_tools.spdx.jsonschema.file_properties import FileProperty
from spdx_tools.spdx.jsonschema.json_property import JsonProperty
from spdx_tools.spdx.jsonschema.optional_utils import apply_if_present
from spdx_tools.spdx.model.document import Document
from spdx_tools.spdx.model.file import File
from spdx_tools.spdx.model import Document, File


class FileConverter(TypedConverter[File]):
Expand Down
4 changes: 1 addition & 3 deletions src/spdx_tools/spdx/jsonschema/package_converter.py
Expand Up @@ -12,9 +12,7 @@
from spdx_tools.spdx.jsonschema.optional_utils import apply_if_present
from spdx_tools.spdx.jsonschema.package_properties import PackageProperty
from spdx_tools.spdx.jsonschema.package_verification_code_converter import PackageVerificationCodeConverter
from spdx_tools.spdx.model.actor import Actor
from spdx_tools.spdx.model.document import Document
from spdx_tools.spdx.model.package import Package
from spdx_tools.spdx.model import Actor, Document, Package


class PackageConverter(TypedConverter[Package]):
Expand Down
Expand Up @@ -6,8 +6,7 @@
from spdx_tools.spdx.jsonschema.converter import TypedConverter
from spdx_tools.spdx.jsonschema.json_property import JsonProperty
from spdx_tools.spdx.jsonschema.package_verification_code_properties import PackageVerificationCodeProperty
from spdx_tools.spdx.model.document import Document
from spdx_tools.spdx.model.package import PackageVerificationCode
from spdx_tools.spdx.model import Document, PackageVerificationCode


class PackageVerificationCodeConverter(TypedConverter[PackageVerificationCode]):
Expand Down
3 changes: 1 addition & 2 deletions src/spdx_tools/spdx/jsonschema/relationship_converter.py
Expand Up @@ -6,8 +6,7 @@
from spdx_tools.spdx.jsonschema.converter import TypedConverter
from spdx_tools.spdx.jsonschema.json_property import JsonProperty
from spdx_tools.spdx.jsonschema.relationship_properties import RelationshipProperty
from spdx_tools.spdx.model.document import Document
from spdx_tools.spdx.model.relationship import Relationship
from spdx_tools.spdx.model import Document, Relationship


class RelationshipConverter(TypedConverter[Relationship]):
Expand Down
3 changes: 1 addition & 2 deletions src/spdx_tools/spdx/jsonschema/snippet_converter.py
Expand Up @@ -8,8 +8,7 @@
from spdx_tools.spdx.jsonschema.json_property import JsonProperty
from spdx_tools.spdx.jsonschema.optional_utils import apply_if_present
from spdx_tools.spdx.jsonschema.snippet_properties import SnippetProperty
from spdx_tools.spdx.model.document import Document
from spdx_tools.spdx.model.snippet import Snippet
from spdx_tools.spdx.model import Document, Snippet


class SnippetConverter(TypedConverter[Snippet]):
Expand Down
19 changes: 19 additions & 0 deletions src/spdx_tools/spdx/model/__init__.py
@@ -0,0 +1,19 @@
from spdx_tools.spdx.model.spdx_no_assertion import SpdxNoAssertion
from spdx_tools.spdx.model.spdx_none import SpdxNone
from spdx_tools.spdx.model.version import Version
from spdx_tools.spdx.model.actor import Actor, ActorType
from spdx_tools.spdx.model.annotation import Annotation, AnnotationType
from spdx_tools.spdx.model.checksum import Checksum, ChecksumAlgorithm
from spdx_tools.spdx.model.external_document_ref import ExternalDocumentRef
from spdx_tools.spdx.model.extracted_licensing_info import ExtractedLicensingInfo
from spdx_tools.spdx.model.file import File, FileType
from spdx_tools.spdx.model.package import (
ExternalPackageRef,
ExternalPackageRefCategory,
Package,
PackagePurpose,
PackageVerificationCode,
)
from spdx_tools.spdx.model.relationship import Relationship, RelationshipType
from spdx_tools.spdx.model.snippet import Snippet
from spdx_tools.spdx.model.document import CreationInfo, Document
2 changes: 1 addition & 1 deletion src/spdx_tools/spdx/model/annotation.py
Expand Up @@ -6,7 +6,7 @@

from spdx_tools.common.typing.dataclass_with_properties import dataclass_with_properties
from spdx_tools.common.typing.type_checks import check_types_and_set_values
from spdx_tools.spdx.model.actor import Actor
from spdx_tools.spdx.model import Actor


class AnnotationType(Enum):
Expand Down
20 changes: 11 additions & 9 deletions src/spdx_tools/spdx/model/document.py
Expand Up @@ -7,15 +7,17 @@

from spdx_tools.common.typing.dataclass_with_properties import dataclass_with_properties
from spdx_tools.common.typing.type_checks import check_types_and_set_values
from spdx_tools.spdx.model.actor import Actor
from spdx_tools.spdx.model.annotation import Annotation
from spdx_tools.spdx.model.external_document_ref import ExternalDocumentRef
from spdx_tools.spdx.model.extracted_licensing_info import ExtractedLicensingInfo
from spdx_tools.spdx.model.file import File
from spdx_tools.spdx.model.package import Package
from spdx_tools.spdx.model.relationship import Relationship
from spdx_tools.spdx.model.snippet import Snippet
from spdx_tools.spdx.model.version import Version
from spdx_tools.spdx.model import (
Actor,
Annotation,
ExternalDocumentRef,
ExtractedLicensingInfo,
File,
Package,
Relationship,
Snippet,
Version,
)


@dataclass_with_properties
Expand Down
2 changes: 1 addition & 1 deletion src/spdx_tools/spdx/model/external_document_ref.py
Expand Up @@ -4,7 +4,7 @@

from spdx_tools.common.typing.dataclass_with_properties import dataclass_with_properties
from spdx_tools.common.typing.type_checks import check_types_and_set_values
from spdx_tools.spdx.model.checksum import Checksum
from spdx_tools.spdx.model import Checksum


@dataclass_with_properties
Expand Down
2 changes: 1 addition & 1 deletion src/spdx_tools/spdx/model/extracted_licensing_info.py
Expand Up @@ -6,7 +6,7 @@

from spdx_tools.common.typing.dataclass_with_properties import dataclass_with_properties
from spdx_tools.common.typing.type_checks import check_types_and_set_values
from spdx_tools.spdx.model.spdx_no_assertion import SpdxNoAssertion
from spdx_tools.spdx.model import SpdxNoAssertion


@dataclass_with_properties
Expand Down
4 changes: 1 addition & 3 deletions src/spdx_tools/spdx/model/file.py
Expand Up @@ -9,9 +9,7 @@

from spdx_tools.common.typing.dataclass_with_properties import dataclass_with_properties
from spdx_tools.common.typing.type_checks import check_types_and_set_values
from spdx_tools.spdx.model.checksum import Checksum
from spdx_tools.spdx.model.spdx_no_assertion import SpdxNoAssertion
from spdx_tools.spdx.model.spdx_none import SpdxNone
from spdx_tools.spdx.model import Checksum, SpdxNoAssertion, SpdxNone


class FileType(Enum):
Expand Down
5 changes: 1 addition & 4 deletions src/spdx_tools/spdx/model/package.py
Expand Up @@ -10,10 +10,7 @@

from spdx_tools.common.typing.dataclass_with_properties import dataclass_with_properties
from spdx_tools.common.typing.type_checks import check_types_and_set_values
from spdx_tools.spdx.model.actor import Actor
from spdx_tools.spdx.model.checksum import Checksum
from spdx_tools.spdx.model.spdx_no_assertion import SpdxNoAssertion
from spdx_tools.spdx.model.spdx_none import SpdxNone
from spdx_tools.spdx.model import Actor, Checksum, SpdxNoAssertion, SpdxNone


class PackagePurpose(Enum):
Expand Down
3 changes: 1 addition & 2 deletions src/spdx_tools/spdx/model/relationship.py
Expand Up @@ -6,8 +6,7 @@

from spdx_tools.common.typing.dataclass_with_properties import dataclass_with_properties
from spdx_tools.common.typing.type_checks import check_types_and_set_values
from spdx_tools.spdx.model.spdx_no_assertion import SpdxNoAssertion
from spdx_tools.spdx.model.spdx_none import SpdxNone
from spdx_tools.spdx.model import SpdxNoAssertion, SpdxNone


class RelationshipType(Enum):
Expand Down
4 changes: 1 addition & 3 deletions src/spdx_tools/spdx/model/relationship_filters.py
Expand Up @@ -3,9 +3,7 @@
# SPDX-License-Identifier: Apache-2.0
from typing import List

from spdx_tools.spdx.model.document import Document
from spdx_tools.spdx.model.package import Package
from spdx_tools.spdx.model.relationship import Relationship, RelationshipType
from spdx_tools.spdx.model import Document, Package, Relationship, RelationshipType


def find_package_contains_file_relationships(document: Document, package: Package) -> List[Relationship]:
Expand Down
3 changes: 1 addition & 2 deletions src/spdx_tools/spdx/model/snippet.py
Expand Up @@ -8,8 +8,7 @@

from spdx_tools.common.typing.dataclass_with_properties import dataclass_with_properties
from spdx_tools.common.typing.type_checks import check_types_and_set_values
from spdx_tools.spdx.model.spdx_no_assertion import SpdxNoAssertion
from spdx_tools.spdx.model.spdx_none import SpdxNone
from spdx_tools.spdx.model import SpdxNoAssertion, SpdxNone


@dataclass_with_properties
Expand Down
2 changes: 1 addition & 1 deletion src/spdx_tools/spdx/parser/actor_parser.py
Expand Up @@ -4,7 +4,7 @@
import re
from typing import Match, Optional, Pattern

from spdx_tools.spdx.model.actor import Actor, ActorType
from spdx_tools.spdx.model import Actor, ActorType
from spdx_tools.spdx.parser.error import SPDXParsingError
from spdx_tools.spdx.parser.parsing_functions import construct_or_raise_parsing_error

Expand Down
2 changes: 1 addition & 1 deletion src/spdx_tools/spdx/parser/json/json_parser.py
Expand Up @@ -4,7 +4,7 @@
import json
from typing import Dict

from spdx_tools.spdx.model.document import Document
from spdx_tools.spdx.model import Document
from spdx_tools.spdx.parser.jsonlikedict.json_like_dict_parser import JsonLikeDictParser


Expand Down
3 changes: 1 addition & 2 deletions src/spdx_tools/spdx/parser/jsonlikedict/annotation_parser.py
Expand Up @@ -5,8 +5,7 @@
from typing import Dict, List, Optional

from spdx_tools.spdx.datetime_conversions import datetime_from_str
from spdx_tools.spdx.model.actor import Actor
from spdx_tools.spdx.model.annotation import Annotation, AnnotationType
from spdx_tools.spdx.model import Actor, Annotation, AnnotationType
from spdx_tools.spdx.parser.actor_parser import ActorParser
from spdx_tools.spdx.parser.error import SPDXParsingError
from spdx_tools.spdx.parser.jsonlikedict.dict_parsing_functions import (
Expand Down
2 changes: 1 addition & 1 deletion src/spdx_tools/spdx/parser/jsonlikedict/checksum_parser.py
Expand Up @@ -3,7 +3,7 @@
# SPDX-License-Identifier: Apache-2.0
from typing import Dict, Optional

from spdx_tools.spdx.model.checksum import Checksum, ChecksumAlgorithm
from spdx_tools.spdx.model import Checksum, ChecksumAlgorithm
from spdx_tools.spdx.parser.jsonlikedict.dict_parsing_functions import json_str_to_enum_name
from spdx_tools.spdx.parser.logger import Logger
from spdx_tools.spdx.parser.parsing_functions import (
Expand Down
Expand Up @@ -5,11 +5,7 @@
from typing import Dict, List, Optional

from spdx_tools.spdx.datetime_conversions import datetime_from_str
from spdx_tools.spdx.model.actor import Actor
from spdx_tools.spdx.model.checksum import Checksum
from spdx_tools.spdx.model.document import CreationInfo
from spdx_tools.spdx.model.external_document_ref import ExternalDocumentRef
from spdx_tools.spdx.model.version import Version
from spdx_tools.spdx.model import Actor, Checksum, CreationInfo, ExternalDocumentRef, Version
from spdx_tools.spdx.parser.actor_parser import ActorParser
from spdx_tools.spdx.parser.error import SPDXParsingError
from spdx_tools.spdx.parser.jsonlikedict.checksum_parser import ChecksumParser
Expand Down
Expand Up @@ -3,8 +3,7 @@
# SPDX-License-Identifier: Apache-2.0
from typing import Any, Callable, Dict, List, Optional

from spdx_tools.spdx.model.spdx_no_assertion import SpdxNoAssertion
from spdx_tools.spdx.model.spdx_none import SpdxNone
from spdx_tools.spdx.model import SpdxNoAssertion, SpdxNone
from spdx_tools.spdx.parser.error import SPDXParsingError
from spdx_tools.spdx.parser.logger import Logger
from spdx_tools.spdx.parser.parsing_functions import raise_parsing_error_if_logger_has_messages
Expand Down

0 comments on commit 8d7d7b7

Please sign in to comment.