def populate(publication): """ Populate a publication. Create published artifacts and yield a Manifest Entry for each. Args: publication (pulpcore.plugin.models.Publication): A Publication to populate. Yields: Entry: Each manifest entry. """ content_artifacts = ContentArtifact.objects.filter( content__in=publication.repository_version.content).order_by( "-content__pulp_created") for content_artifact in content_artifacts.select_related( "artifact").iterator(): if content_artifact.artifact: artifact = content_artifact.artifact else: # TODO: this scales poorly, one query per on_demand content being published. artifact = RemoteArtifact.objects.filter( content_artifact=content_artifact).first() entry = Entry( relative_path=content_artifact.relative_path, digest=artifact.sha256, size=artifact.size, ) yield entry
def populate(publication): """ Populate a publication. Create published artifacts and yield a Manifest Entry for each. Args: publication (pulpcore.plugin.models.Publication): A Publication to populate. Yields: Entry: Each manifest entry. """ def find_artifact(): _artifact = content_artifact.artifact if not _artifact: _artifact = RemoteArtifact.objects.filter( content_artifact=content_artifact).first() return _artifact paths = set() for content in FileContent.objects.filter( pk__in=publication.repository_version.content).order_by( '-_created'): if content.relative_path in paths: continue paths.add(content.relative_path) for content_artifact in content.contentartifact_set.all(): artifact = find_artifact() entry = Entry(relative_path=content_artifact.relative_path, digest=artifact.sha256, size=artifact.size) yield entry
def _publish(publication): """ Create published artifacts and yield a Manifest Entry for each. Args: publication (pulpcore.plugin.models.Publication): The Publication being created. Yields: Entry: The manifest entry. """ def find_artifact(): _artifact = content_artifact.artifact if not _artifact: _artifact = RemoteArtifact.objects.get( content_artifact=content_artifact, importer__repository=publication.repository_version.repository) return _artifact for content in publication.repository_version.content: for content_artifact in content.contentartifact_set.all(): artifact = find_artifact() published_artifact = PublishedArtifact( relative_path=content_artifact.relative_path, publication=publication, content_artifact=content_artifact) published_artifact.save() entry = Entry(path=content_artifact.relative_path, digest=artifact.sha256, size=artifact.size) yield entry
def _publish(self): """ Create published artifacts and yield the manifest entry for each. Yields: Entry: The manifest entry. """ for content in self.publication.repo_version.content(): for content_artifact in content.contentartifact_set.all(): artifact = self._find_artifact(content_artifact) published_artifact = PublishedArtifact( relative_path=content_artifact.relative_path, publication=self.publication, content_artifact=content_artifact) published_artifact.save() entry = Entry( path=content_artifact.relative_path, digest=artifact.sha256, size=artifact.size) yield entry