Ejemplo n.º 1
0
 def __init__(self, version=None, data_license=None, comment=None,
              package=None):
     super(Document, self).__init__()
     self.version = version
     self.data_license = data_license
     self.comment = comment
     self.creation_info = CreationInfo()
     self.package = package
     self.extracted_licenses = []
     self.reviews = []
Ejemplo n.º 2
0
class Document(object):

    """Represents an SPDX document.
        Fields: 
        version: Spec version. Mandatory, one - Type: Version.
        data_license: SPDX-Metadata license. Mandatory, one. Type: License.
        comment: Comments on the SPDX file, optional one. Type: str
        creation_info: SPDX file creation info. Mandatory, one. Type: CreationInfo
        package: Package described by this document. Mandatory, one. Type: Package
        extracted_licenses: List of licenses extracted that are not part of the
            SPDX license list. Optional, many. Type: ExtractedLicense.
        reviews: SPDX document review information, Optional zero or more. 
            Type: Review.
    """

    def __init__(self, version=None, data_license=None, comment=None,
                 package=None):
        super(Document, self).__init__()
        self.version = version
        self.data_license = data_license
        self.comment = comment
        self.creation_info = CreationInfo()
        self.package = package
        self.extracted_licenses = []
        self.reviews = []

    def add_review(self, review):
        self.reviews.append(review)

    def add_extr_lic(self, lic):
        self.extracted_licenses.append(lic)

    @property
    def files(self):
        return self.package.files
    @files.setter
    def files(self, value):
        self.package.files = value    

    @property
    def has_comment(self):
        return self.comment is not None

    def validate(self, messages=[]):
        """Validate all fields of the document.
        messages - appends user friendly error messages to this list for display.
        """
        return (self.validate_version(messages)
                & self.validate_data_lics(messages)
                & self.validate_creation_info(messages)
                & self.validate_package(messages)
                & self.validate_extracted_licenses(messages)
                & self.validate_reviews(messages))

    def validate_version(self, messages):
        if self.version is not None:
            if self.version == Version(1, 2):
                return True
            else:
                messages.append('SPDX Version must be 1.2')
                return False
        else:
            messages.append('Document has no version.')
            return False

    def validate_data_lics(self, messages):
        if self.data_license is not None:
            if self.data_license.identifier == 'CC0-1.0':
                return True
            else:
                messages.append('Document data license must be CC0-1.0.')
                return False
        else:
            messages.append('Document has no data license.')
            return False

    def validate_reviews(self, messages):
        status = True
        for review in self.reviews:
            status &= review.validate(messages)
        return status

    def validate_creation_info(self, messages):
        if self.creation_info is not None:
            return self.creation_info.validate(messages)
        else:
            messages.append('Document has no creation information.')
            return False

    def validate_package(self, messages):
        if self.package is not None:
            return self.package.validate(messages)
        else:
            messages.append('Document has no package.')
            return False

    def validate_extracted_licenses(self, messages):
        status = True
        for lic in self.extracted_licenses:
            if isinstance(lic, ExtractedLicense):
                status &= lic.validate(messages)
            else:
                messages.append('Document extracted licenses must be of type' +
                    'spdx.document.ExtractedLicense')
                return False

        return status