Пример #1
0
def update_files_privacy(pub_record):
    """Update file privacy according to the publishing destination

    :param pub_record: One of a SourcePackagePublishingHistory or
        BinaryPackagePublishingHistory record.

    :return: a list of changed `LibraryFileAlias` objects.
    """
    package_files = []
    archive = None
    if ISourcePackagePublishingHistory.providedBy(pub_record):
        archive = pub_record.archive
        # Unrestrict the package files files if necessary.
        sourcepackagerelease = pub_record.sourcepackagerelease
        package_files.extend([(source_file, 'libraryfile')
                              for source_file in sourcepackagerelease.files])
        # Unrestrict the package diff files if necessary.
        package_files.extend([(diff, 'diff_content')
                              for diff in sourcepackagerelease.package_diffs])
        # Unrestrict the source upload changesfile if necessary.
        package_upload = sourcepackagerelease.package_upload
        package_files.append((package_upload, 'changesfile'))
        package_files.append((sourcepackagerelease, 'changelog'))
    elif IBinaryPackagePublishingHistory.providedBy(pub_record):
        archive = pub_record.archive
        # Unrestrict the binary files if necessary.
        binarypackagerelease = pub_record.binarypackagerelease
        package_files.extend([(binary_file, 'libraryfile')
                              for binary_file in binarypackagerelease.files])
        # Unrestrict the upload changesfile file as necessary.
        build = binarypackagerelease.build
        package_upload = build.package_upload
        package_files.append((package_upload, 'changesfile'))
        # Unrestrict the buildlog file as necessary.
        package_files.append((build, 'log'))
    elif IPackageUploadCustom.providedBy(pub_record):
        # Unrestrict the custom files included
        package_files.append((pub_record, 'libraryfilealias'))
        # And set archive to the right attribute for PUCs
        archive = pub_record.packageupload.archive
    else:
        raise AssertionError(
            "pub_record is not one of SourcePackagePublishingHistory, "
            "BinaryPackagePublishingHistory or PackageUploadCustom.")

    changed_files = []
    for obj, attr_name in package_files:
        lfa = getattr(obj, attr_name, None)
        # Only unrestrict restricted files published in public archives,
        # not the opposite. We don't have a use-case for privatizing
        # files yet.
        if (lfa is None or lfa.restricted == archive.private
                or lfa.restricted == False):
            continue
        # LibraryFileAlias.restricted is normally read-only, but we have a
        # good excuse here.
        removeSecurityProxy(lfa).restricted = archive.private
        changed_files.append(lfa)

    return changed_files
Пример #2
0
 def is_binary(self):
     return IBinaryPackagePublishingHistory.providedBy(self.context)
Пример #3
0
 def is_binary(self):
     return IBinaryPackagePublishingHistory.providedBy(self.context)
Пример #4
0
def update_files_privacy(pub_record):
    """Update file privacy according to the publishing destination

    :param pub_record: One of a SourcePackagePublishingHistory or
        BinaryPackagePublishingHistory record.

    :return: a list of changed `LibraryFileAlias` objects.
    """
    package_files = []
    archive = None
    if ISourcePackagePublishingHistory.providedBy(pub_record):
        archive = pub_record.archive
        # Unrestrict the package files files if necessary.
        sourcepackagerelease = pub_record.sourcepackagerelease
        package_files.extend(
            [(source_file, 'libraryfile')
             for source_file in sourcepackagerelease.files])
        # Unrestrict the package diff files if necessary.
        package_files.extend(
            [(diff, 'diff_content')
             for diff in sourcepackagerelease.package_diffs])
        # Unrestrict the source upload changesfile if necessary.
        package_upload = sourcepackagerelease.package_upload
        package_files.append((package_upload, 'changesfile'))
        package_files.append((sourcepackagerelease, 'changelog'))
    elif IBinaryPackagePublishingHistory.providedBy(pub_record):
        archive = pub_record.archive
        # Unrestrict the binary files if necessary.
        binarypackagerelease = pub_record.binarypackagerelease
        package_files.extend(
            [(binary_file, 'libraryfile')
             for binary_file in binarypackagerelease.files])
        # Unrestrict the upload changesfile file as necessary.
        build = binarypackagerelease.build
        package_upload = build.package_upload
        package_files.append((package_upload, 'changesfile'))
        # Unrestrict the buildlog file as necessary.
        package_files.append((build, 'log'))
    elif IPackageUploadCustom.providedBy(pub_record):
        # Unrestrict the custom files included
        package_files.append((pub_record, 'libraryfilealias'))
        # And set archive to the right attribute for PUCs
        archive = pub_record.packageupload.archive
    else:
        raise AssertionError(
            "pub_record is not one of SourcePackagePublishingHistory, "
            "BinaryPackagePublishingHistory or PackageUploadCustom.")

    changed_files = []
    for obj, attr_name in package_files:
        lfa = getattr(obj, attr_name, None)
        # Only unrestrict restricted files published in public archives,
        # not the opposite. We don't have a use-case for privatizing
        # files yet.
        if (lfa is None or
            lfa.restricted == archive.private or
            lfa.restricted == False):
            continue
        # LibraryFileAlias.restricted is normally read-only, but we have a
        # good excuse here.
        removeSecurityProxy(lfa).restricted = archive.private
        changed_files.append(lfa)

    return changed_files