Skip to content

Commit

Permalink
Publish custom/unknown repository metadata
Browse files Browse the repository at this point in the history
closes #5432
https://pulp.plan.io/issues/5432
Required PR: #1438
Required PR: #1439
  • Loading branch information
fao89 committed Sep 11, 2019
1 parent bf48a5f commit 9d8521a
Show file tree
Hide file tree
Showing 2 changed files with 66 additions and 34 deletions.
1 change: 1 addition & 0 deletions CHANGES/5432.misc
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
Publish custom/unknown repository metadata.
99 changes: 65 additions & 34 deletions pulp_rpm/app/tasks/publishing.py
Original file line number Diff line number Diff line change
Expand Up @@ -15,13 +15,65 @@

from pulpcore.plugin.tasking import WorkingDirectory

from pulp_rpm.app.models import Package, RpmPublication, UpdateRecord
from pulp_rpm.app.models import Package, RepoMetadataFile, RpmPublication, UpdateRecord

log = logging.getLogger(__name__)

REPODATA_PATH = 'repodata'


class PublicationData:
"""
Encapsulates data relative to publication.
"""

def __init__(self, publication):
"""
Setting Publication data.
"""
self.publication = publication
self.packages = []
self.repo_metadata_files = []

self.populate()

def populate(self):
"""
Populate a publication.
Create published artifacts for a publication.
"""
publication = self.publication

self.packages = Package.objects.filter(pk__in=publication.repository_version.content).\
prefetch_related('contentartifact_set')
published_artifacts = []

for package in self.packages:
for content_artifact in package.contentartifact_set.all():
published_artifacts.append(PublishedArtifact(
relative_path=content_artifact.relative_path,
publication=publication,
content_artifact=content_artifact)
)

self.repo_metadata_files = RepoMetadataFile.objects.filter(
pk__in=publication.repository_version.content).prefetch_related('contentartifact_set')

for repo_metadata_file in self.repo_metadata_files:
for content_artifact in repo_metadata_file.contentartifact_set.all():
published_artifacts.append(PublishedArtifact(
relative_path=content_artifact.relative_path,
publication=publication,
content_artifact=content_artifact)
)

PublishedArtifact.objects.bulk_create(published_artifacts)


def update_record_xml(update_record):
"""
Return xml for an UpdateRecord.
Expand Down Expand Up @@ -96,7 +148,8 @@ def publish(repository_version_pk):

with WorkingDirectory():
with RpmPublication.create(repository_version) as publication:
packages = populate(publication)
publication_data = PublicationData(publication)
packages = publication_data.packages

# Prepare metadata files
repomd_path = os.path.join(os.getcwd(), "repomd.xml")
Expand Down Expand Up @@ -143,13 +196,21 @@ def publish(repository_version_pk):

repomd = cr.Repomd()

repomdrecords = (("primary", pri_xml_path, pri_db),
repomdrecords = [("primary", pri_xml_path, pri_db),
("filelists", fil_xml_path, fil_db),
("other", oth_xml_path, oth_db),
("primary_db", pri_db_path, None),
("filelists_db", fil_db_path, None),
("other_db", oth_db_path, None),
("updateinfo", upd_xml_path, None))
("updateinfo", upd_xml_path, None)]

for repo_metadata_file in publication_data.repo_metadata_files:
contentartifact = repo_metadata_file.contentartifact_set.get()
repomdrecords.append((
repo_metadata_file.data_type,
contentartifact.relative_path,
None,
))

sqlite_files = ("primary_db", "filelists_db", "other_db")
for name, path, db_to_update in repomdrecords:
Expand Down Expand Up @@ -184,33 +245,3 @@ def publish(repository_version_pk):
file=File(open(os.path.basename(repomd_path), 'rb'))
)
metadata.save()


def populate(publication):
"""
Populate a publication.
Create published artifacts for a publication.
Args:
publication (pulpcore.plugin.models.Publication): A Publication to populate.
Returns:
packages (pulp_rpm.models.Package): A list of published packages.
"""
packages = Package.objects.filter(pk__in=publication.repository_version.content).\
prefetch_related('contentartifact_set')
published_artifacts = []

for package in packages:
for content_artifact in package.contentartifact_set.all():
published_artifacts.append(PublishedArtifact(
relative_path=content_artifact.relative_path,
publication=publication,
content_artifact=content_artifact)
)

PublishedArtifact.objects.bulk_create(published_artifacts)

return packages

0 comments on commit 9d8521a

Please sign in to comment.