Skip to content

Commit

Permalink
Rename docker Tag and Blob models.
Browse files Browse the repository at this point in the history
  • Loading branch information
ipanova committed Aug 12, 2019
1 parent a4952c3 commit d2a7704
Show file tree
Hide file tree
Showing 15 changed files with 105 additions and 143 deletions.
1 change: 1 addition & 0 deletions CHANGES/5218.misc
@@ -0,0 +1 @@
Rename docker Tag and Blob models.
2 changes: 1 addition & 1 deletion docs/_static/api.json

Large diffs are not rendered by default.

48 changes: 20 additions & 28 deletions docs/workflows/sync.rst
Expand Up @@ -108,44 +108,36 @@ Response:
.. code:: json
{
"_created": "2019-03-26T15:54:06.448675Z",
"_href": "/pulp/api/v3/repositories/39520001-18e9-4c17-a703-2963a7837060/versions/1/",
"_created": "2019-08-07T20:46:11.311539Z",
"_href": "/pulp/api/v3/repositories/84a3ea29-1444-43c6-92da-14da25f543ec/versions/1/",
"base_version": null,
"content_summary": {
"added": {
"docker.manifest": {
"count": 37,
"href": "/pulp/api/v3/content/docker/manifests/?repository_version_added=/pulp/api/v3/repositories/39520001-18e9-4c17-a703-2963a7837060/versions/1/"
},
"docker.manifest-blob": {
"count": 74,
"href": "/pulp/api/v3/content/docker/blobs/?repository_version_added=/pulp/api/v3/repositories/39520001-18e9-4c17-a703-2963a7837060/versions/1/"
"docker.blob": {
"count": 487,
"href": "/pulp/api/v3/content/docker/blobs/?repository_version_added=/pulp/api/v3/repositories/84a3ea29-1444-43c6-92da-14da25f543ec/versions/1/"
},
"docker.manifest-list": {
"count": 10,
"href": "/pulp/api/v3/content/docker/manifest-lists/?repository_version_added=/pulp/api/v3/repositories/39520001-18e9-4c17-a703-2963a7837060/versions/1/"
"docker.manifest": {
"count": 307,
"href": "/pulp/api/v3/content/docker/manifests/?repository_version_added=/pulp/api/v3/repositories/84a3ea29-1444-43c6-92da-14da25f543ec/versions/1/"
},
"docker.manifest-list-tag": {
"count": 16,
"href": "/pulp/api/v3/content/docker/manifest-list-tags/?repository_version_added=/pulp/api/v3/repositories/39520001-18e9-4c17-a703-2963a7837060/versions/1/"
"docker.tag": {
"count": 135,
"href": "/pulp/api/v3/content/docker/tags/?repository_version_added=/pulp/api/v3/repositories/84a3ea29-1444-43c6-92da-14da25f543ec/versions/1/"
}
},
"present": {
"docker.manifest": {
"count": 37,
"href": "/pulp/api/v3/content/docker/manifests/?repository_version=/pulp/api/v3/repositories/39520001-18e9-4c17-a703-2963a7837060/versions/1/"
},
"docker.manifest-blob": {
"count": 74,
"href": "/pulp/api/v3/content/docker/blobs/?repository_version=/pulp/api/v3/repositories/39520001-18e9-4c17-a703-2963a7837060/versions/1/"
"docker.blob": {
"count": 487,
"href": "/pulp/api/v3/content/docker/blobs/?repository_version=/pulp/api/v3/repositories/84a3ea29-1444-43c6-92da-14da25f543ec/versions/1/"
},
"docker.manifest-list": {
"count": 10,
"href": "/pulp/api/v3/content/docker/manifest-lists/?repository_version=/pulp/api/v3/repositories/39520001-18e9-4c17-a703-2963a7837060/versions/1/"
"docker.manifest": {
"count": 307,
"href": "/pulp/api/v3/content/docker/manifests/?repository_version=/pulp/api/v3/repositories/84a3ea29-1444-43c6-92da-14da25f543ec/versions/1/"
},
"docker.manifest-list-tag": {
"count": 16,
"href": "/pulp/api/v3/content/docker/manifest-list-tags/?repository_version=/pulp/api/v3/repositories/39520001-18e9-4c17-a703-2963a7837060/versions/1/"
"docker.tag": {
"count": 135,
"href": "/pulp/api/v3/content/docker/tags/?repository_version=/pulp/api/v3/repositories/84a3ea29-1444-43c6-92da-14da25f543ec/versions/1/"
}
},
"removed": {}
Expand Down
56 changes: 24 additions & 32 deletions pulp_docker/app/migrations/0001_initial.py
@@ -1,4 +1,4 @@
# Generated by Django 2.2.1 on 2019-07-09 11:24
# Generated by Django 2.2.4 on 2019-08-12 16:09

from django.db import migrations, models
import django.db.models.deletion
Expand All @@ -9,12 +9,24 @@ class Migration(migrations.Migration):
initial = True

dependencies = [
('core', '0001_initial'),
('core', '0003_remove_upload_completed'),
]

operations = [
migrations.CreateModel(
name='BlobManifestBlob',
name='Blob',
fields=[
('content_ptr', models.OneToOneField(auto_created=True, on_delete=django.db.models.deletion.CASCADE, parent_link=True, primary_key=True, serialize=False, to='core.Content')),
('digest', models.CharField(max_length=255)),
('media_type', models.CharField(choices=[('application/vnd.docker.container.image.v1+json', 'application/vnd.docker.container.image.v1+json'), ('application/vnd.docker.image.rootfs.diff.tar.gzip', 'application/vnd.docker.image.rootfs.diff.tar.gzip'), ('application/vnd.docker.image.rootfs.foreign.diff.tar.gzip', 'application/vnd.docker.image.rootfs.foreign.diff.tar.gzip')], max_length=80)),
],
options={
'unique_together': {('digest',)},
},
bases=('core.content',),
),
migrations.CreateModel(
name='BlobManifest',
fields=[
('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
],
Expand All @@ -39,6 +51,8 @@ class Migration(migrations.Migration):
('digest', models.CharField(max_length=255)),
('schema_version', models.IntegerField()),
('media_type', models.CharField(choices=[('application/vnd.docker.distribution.manifest.v1+json', 'application/vnd.docker.distribution.manifest.v1+json'), ('application/vnd.docker.distribution.manifest.v2+json', 'application/vnd.docker.distribution.manifest.v2+json'), ('application/vnd.docker.distribution.manifest.list.v2+json', 'application/vnd.docker.distribution.manifest.list.v2+json')], max_length=60)),
('blobs', models.ManyToManyField(through='docker.BlobManifest', to='docker.Blob')),
('config_blob', models.ForeignKey(null=True, on_delete=django.db.models.deletion.CASCADE, related_name='config_blob', to='docker.Blob')),
],
bases=('core.content',),
),
Expand All @@ -48,39 +62,17 @@ class Migration(migrations.Migration):
('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('architecture', models.CharField(max_length=255)),
('os', models.CharField(max_length=255)),
('os_version', models.CharField(max_length=255)),
('os_version', models.CharField(blank=True, default='', max_length=255)),
('os_features', models.TextField(blank=True, default='')),
('features', models.TextField(blank=True, default='')),
('variant', models.CharField(max_length=255)),
('variant', models.CharField(blank=True, default='', max_length=255)),
('image_manifest', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='image_manifests', to='docker.Manifest')),
('manifest_list', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='manifest_lists', to='docker.Manifest')),
],
options={
'unique_together': {('image_manifest', 'manifest_list')},
},
),
migrations.CreateModel(
name='ManifestBlob',
fields=[
('content_ptr', models.OneToOneField(auto_created=True, on_delete=django.db.models.deletion.CASCADE, parent_link=True, primary_key=True, serialize=False, to='core.Content')),
('digest', models.CharField(max_length=255)),
('media_type', models.CharField(choices=[('application/vnd.docker.container.image.v1+json', 'application/vnd.docker.container.image.v1+json'), ('application/vnd.docker.image.rootfs.diff.tar.gzip', 'application/vnd.docker.image.rootfs.diff.tar.gzip'), ('application/vnd.docker.image.rootfs.foreign.diff.tar.gzip', 'application/vnd.docker.image.rootfs.foreign.diff.tar.gzip')], max_length=80)),
],
options={
'unique_together': {('digest',)},
},
bases=('core.content',),
),
migrations.AddField(
model_name='manifest',
name='blobs',
field=models.ManyToManyField(through='docker.BlobManifestBlob', to='docker.ManifestBlob'),
),
migrations.AddField(
model_name='manifest',
name='config_blob',
field=models.ForeignKey(null=True, on_delete=django.db.models.deletion.CASCADE, related_name='config_blob', to='docker.ManifestBlob'),
),
migrations.AddField(
model_name='manifest',
name='listed_manifests',
Expand All @@ -99,17 +91,17 @@ class Migration(migrations.Migration):
bases=('core.basedistribution',),
),
migrations.AddField(
model_name='blobmanifestblob',
model_name='blobmanifest',
name='manifest',
field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='blob_manifests', to='docker.Manifest'),
),
migrations.AddField(
model_name='blobmanifestblob',
model_name='blobmanifest',
name='manifest_blob',
field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='manifest_blobs', to='docker.ManifestBlob'),
field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='manifest_blobs', to='docker.Blob'),
),
migrations.CreateModel(
name='ManifestTag',
name='Tag',
fields=[
('content_ptr', models.OneToOneField(auto_created=True, on_delete=django.db.models.deletion.CASCADE, parent_link=True, primary_key=True, serialize=False, to='core.Content')),
('name', models.CharField(db_index=True, max_length=255)),
Expand All @@ -125,7 +117,7 @@ class Migration(migrations.Migration):
unique_together={('digest',)},
),
migrations.AlterUniqueTogether(
name='blobmanifestblob',
name='blobmanifest',
unique_together={('manifest', 'manifest_blob')},
),
]
23 changes: 0 additions & 23 deletions pulp_docker/app/migrations/0002_auto_20190812_1450.py

This file was deleted.

20 changes: 10 additions & 10 deletions pulp_docker/app/models.py
Expand Up @@ -25,7 +25,7 @@
)


class ManifestBlob(Content):
class Blob(Content):
"""
A blob defined within a manifest.
Expand All @@ -39,7 +39,7 @@ class ManifestBlob(Content):
manifest (models.ForeignKey): Many-to-one relationship with Manifest.
"""

TYPE = 'manifest-blob'
TYPE = 'blob'

BLOB_CHOICES = (
(MEDIA_TYPE.CONFIG_BLOB, MEDIA_TYPE.CONFIG_BLOB),
Expand Down Expand Up @@ -68,7 +68,7 @@ class Manifest(Content):
media_type (models.CharField): The manifest media type.
Relations:
blobs (models.ManyToManyField): Many-to-many relationship with ManifestBlob.
blobs (models.ManyToManyField): Many-to-many relationship with Blob.
config_blob (models.ForeignKey): Blob that contains configuration for this Manifest.
listed_manifests (models.ManyToManyField): Many-to-many relationship with Manifest. This
field is used only for a manifest-list type Manifests.
Expand All @@ -87,8 +87,8 @@ class Manifest(Content):
max_length=60,
choices=MANIFEST_CHOICES)

blobs = models.ManyToManyField(ManifestBlob, through='BlobManifestBlob')
config_blob = models.ForeignKey(ManifestBlob, related_name='config_blob',
blobs = models.ManyToManyField(Blob, through='BlobManifest')
config_blob = models.ForeignKey(Blob, related_name='config_blob',
null=True, on_delete=models.CASCADE)

# Order matters for through fields, (source, target)
Expand All @@ -103,15 +103,15 @@ class Meta:
unique_together = ('digest',)


class BlobManifestBlob(models.Model):
class BlobManifest(models.Model):
"""
Many-to-many relationship between ManifestBlobs and ImageManifests.
Many-to-many relationship between Blobs and Manifests.
"""

manifest = models.ForeignKey(
Manifest, related_name='blob_manifests', on_delete=models.CASCADE)
manifest_blob = models.ForeignKey(
ManifestBlob, related_name='manifest_blobs', on_delete=models.CASCADE)
Blob, related_name='manifest_blobs', on_delete=models.CASCADE)

class Meta:
unique_together = ('manifest', 'manifest_blob')
Expand Down Expand Up @@ -150,7 +150,7 @@ class Meta:
unique_together = ('image_manifest', 'manifest_list')


class ManifestTag(Content):
class Tag(Content):
"""
A tagged Manifest.
Expand All @@ -162,7 +162,7 @@ class ManifestTag(Content):
"""

TYPE = 'manifest-tag'
TYPE = 'tag'

name = models.CharField(max_length=255, db_index=True)

Expand Down
8 changes: 4 additions & 4 deletions pulp_docker/app/registry.py
Expand Up @@ -8,7 +8,7 @@

from pulpcore.plugin.content import Handler, PathNotResolved
from pulpcore.plugin.models import ContentArtifact
from pulp_docker.app.models import DockerDistribution, ManifestTag, MEDIA_TYPE
from pulp_docker.app.models import DockerDistribution, Tag, MEDIA_TYPE


log = logging.getLogger(__name__)
Expand Down Expand Up @@ -107,7 +107,7 @@ async def tags_list(self, request):
repository_version = distribution.get_repository_version()
for c in repository_version.content:
c = c.cast()
if isinstance(c, ManifestTag):
if isinstance(c, Tag):
tags['tags'].add(c.name)
tags['tags'] = list(tags['tags'])
return web.json_response(tags)
Expand Down Expand Up @@ -135,7 +135,7 @@ async def get_tag(self, request):
accepted_media_types = await Registry.get_accepted_media_types(request)

try:
tag = ManifestTag.objects.get(
tag = Tag.objects.get(
pk__in=repository_version.content,
name=tag_name,
)
Expand Down Expand Up @@ -169,7 +169,7 @@ async def dispatch_tag(tag, response_headers):
Finds an artifact associated with a Tag and sends it to the client.
Args:
tag: Either a ManifestTag or ManifestListTag
tag: Tag
response_headers (dict): dictionary that contains the 'Content-Type' header to send
with the response
Expand Down
16 changes: 8 additions & 8 deletions pulp_docker/app/serializers.py
Expand Up @@ -20,9 +20,9 @@
from . import models


class ManifestTagSerializer(SingleArtifactContentSerializer):
class TagSerializer(SingleArtifactContentSerializer):
"""
Serializer for ManifestTags.
Serializer for Tags.
"""

name = serializers.CharField(help_text="Tag name")
Expand All @@ -38,7 +38,7 @@ class Meta:
'name',
'tagged_manifest',
)
model = models.ManifestTag
model = models.Tag


class ManifestSerializer(SingleArtifactContentSerializer):
Expand All @@ -59,13 +59,13 @@ class ManifestSerializer(SingleArtifactContentSerializer):
many=True,
help_text="Blobs that are referenced by this Manifest",
view_name='docker-blobs-detail',
queryset=models.ManifestBlob.objects.all()
queryset=models.Blob.objects.all()
)
config_blob = DetailRelatedField(
many=False,
help_text="Blob that contains configuration for this Manifest",
view_name='docker-blobs-detail',
queryset=models.ManifestBlob.objects.all()
queryset=models.Blob.objects.all()
)

class Meta:
Expand Down Expand Up @@ -93,7 +93,7 @@ class Meta:
'digest',
'media_type',
)
model = models.ManifestBlob
model = models.Blob


class RegistryPathField(serializers.CharField):
Expand Down Expand Up @@ -257,11 +257,11 @@ def validate(self, data):
new_data = super().validate(data)

try:
models.ManifestTag.objects.get(
models.Tag.objects.get(
pk__in=new_data['latest_version'].content.all(),
name=new_data['tag']
)
except models.ManifestTag.DoesNotExist:
except models.Tag.DoesNotExist:
raise serializers.ValidationError(
_("The tag '{}' does not exist in the latest repository version '{}'"
.format(new_data['tag'], new_data['latest_version']))
Expand Down

0 comments on commit d2a7704

Please sign in to comment.