Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[issue-593] expose model classes in model package init #597

Merged
merged 1 commit into from Apr 19, 2023
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
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