Skip to content

Commit

Permalink
Merge cceb860 into f4f608c
Browse files Browse the repository at this point in the history
  • Loading branch information
simozhan committed Nov 16, 2015
2 parents f4f608c + cceb860 commit 411ae13
Show file tree
Hide file tree
Showing 10 changed files with 544 additions and 6 deletions.
14 changes: 13 additions & 1 deletion pdc/apps/compose/filters.py
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@
from django.core.exceptions import ValidationError

from pdc.apps.common.filters import value_is_not_empty
from .models import Compose, OverrideRPM
from .models import Compose, OverrideRPM, ComposeTree


class ComposeFilter(django_filters.FilterSet):
Expand Down Expand Up @@ -77,3 +77,15 @@ class OverrideRPMFilter(django_filters.FilterSet):
class Meta:
model = OverrideRPM
fields = ('release', 'variant', 'arch', 'srpm_name', 'rpm_name', 'rpm_arch', 'comment')


class ComposeTreeFilter(django_filters.FilterSet):
compose = django_filters.CharFilter(name='compose__compose_id', lookup_type='iexact')
variant = django_filters.CharFilter(name='variant__variant_uid', lookup_type='iexact')
arch = django_filters.CharFilter(lookup_type='iexact')
location = django_filters.CharFilter(name='location__short', lookup_type='iexact')
scheme = django_filters.CharFilter(name='scheme__name', lookup_type='iexact')

class Meta:
model = ComposeTree
fields = ('compose', 'variant', 'arch', 'location', 'scheme')
28 changes: 28 additions & 0 deletions pdc/apps/compose/fixtures/tests/composetree.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,28 @@
[
{
"model": "compose.ComposeTree",
"pk": 1,
"fields": {
"compose": 1,
"variant": 1,
"arch": "x86_64",
"location": 2,
"scheme": 1,
"url": "nfs://nay.lab.la/",
"synced_content": [1]
}
},
{
"model": "compose.ComposeTree",
"pk": 2,
"fields": {
"compose": 1,
"variant": 2,
"arch": "x86_64",
"location": 1,
"scheme": 1,
"url": "nfs://nay.lab.la/",
"synced_content": [2]
}
}
]
18 changes: 18 additions & 0 deletions pdc/apps/compose/fixtures/tests/location.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
[
{
"model": "compose.Location",
"pk": 1,
"fields": {
"name": "Brno",
"short": "BRQ"
}
},
{
"model": "compose.Location",
"pk": 2,
"fields": {
"name": "Beijing",
"short": "NAY"
}
}
]
16 changes: 16 additions & 0 deletions pdc/apps/compose/fixtures/tests/scheme.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
[
{
"model": "compose.Scheme",
"pk": 1,
"fields": {
"name": "nfs"
}
},
{
"model": "compose.Scheme",
"pk": 2,
"fields": {
"name": "http"
}
}
]
63 changes: 63 additions & 0 deletions pdc/apps/compose/migrations/0007_auto_20151116_1007.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,63 @@
# -*- coding: utf-8 -*-
from __future__ import unicode_literals

from django.db import migrations, models


class Migration(migrations.Migration):

dependencies = [
('repository', '0002_auto_20150512_0724'),
('compose', '0006_auto_20150821_0616'),
]

operations = [
migrations.CreateModel(
name='ComposeTree',
fields=[
('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)),
('arch', models.CharField(max_length=50)),
('url', models.CharField(max_length=100)),
('compose', models.ForeignKey(to='compose.Compose')),
],
),
migrations.CreateModel(
name='Location',
fields=[
('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)),
('name', models.CharField(max_length=50)),
('short', models.CharField(unique=True, max_length=50)),
],
),
migrations.CreateModel(
name='Scheme',
fields=[
('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)),
('name', models.CharField(unique=True, max_length=50)),
],
),
migrations.AddField(
model_name='composetree',
name='location',
field=models.ForeignKey(to='compose.Location'),
),
migrations.AddField(
model_name='composetree',
name='scheme',
field=models.ForeignKey(to='compose.Scheme'),
),
migrations.AddField(
model_name='composetree',
name='synced_content',
field=models.ManyToManyField(to='repository.ContentCategory'),
),
migrations.AddField(
model_name='composetree',
name='variant',
field=models.ForeignKey(to='compose.Variant'),
),
migrations.AlterUniqueTogether(
name='composetree',
unique_together=set([('compose', 'variant', 'arch', 'location')]),
),
]
38 changes: 38 additions & 0 deletions pdc/apps/compose/models.py
Original file line number Diff line number Diff line change
Expand Up @@ -505,3 +505,41 @@ class Meta:
unique_together = (
("variant_arch", "image"),
)


class Location(models.Model):
name = models.CharField(max_length=50)
short = models.CharField(max_length=50, unique=True)


class Scheme(models.Model):
name = models.CharField(max_length=50, unique=True)


class ComposeTree(models.Model):
compose = models.ForeignKey("Compose")
variant = models.ForeignKey("Variant")
arch = models.CharField(max_length=50)
location = models.ForeignKey("Location")
scheme = models.ForeignKey("Scheme")
url = models.CharField(max_length=100)
synced_content = models.ManyToManyField('repository.ContentCategory')

class Meta:
unique_together = (
("compose", "variant", "arch", "location"),
)

def __unicode__(self):
return u"%s-%s-%s-%s" % (self.compose, self.variant, self.arch, self.location)

def export(self):
return {
"compose": self.compose.compose_id,
"variant": self.variant.variant_uid,
"arch": self.arch,
"location": self.location.short,
"scheme": self.scheme.name,
"url": self.url,
"synced_content": [item.name for item in self.synced_content.all()]
}
2 changes: 2 additions & 0 deletions pdc/apps/compose/routers.py
Original file line number Diff line number Diff line change
Expand Up @@ -36,3 +36,5 @@
router.register(r'compose/package',
views.FindComposeWithOlderPackageViewSet,
base_name='findcomposewitholderpackage')
router.register(r'compose-tree-locations', views.ComposeTreeViewSet,
base_name='composetreelocations')
31 changes: 30 additions & 1 deletion pdc/apps/compose/serializers.py
Original file line number Diff line number Diff line change
Expand Up @@ -8,9 +8,10 @@

from pdc.apps.common.serializers import StrictSerializerMixin, DynamicFieldsSerializerMixin
from pdc.apps.common.fields import ChoiceSlugField
from .models import Compose, OverrideRPM, ComposeAcceptanceTestingState
from .models import Compose, OverrideRPM, ComposeAcceptanceTestingState, ComposeTree, Variant, Location, Scheme
from pdc.apps.release.models import Release
from pdc.apps.utils.utils import urldecode
from pdc.apps.repository.models import ContentCategory


class StrictManyRelatedField(serializers.ManyRelatedField):
Expand Down Expand Up @@ -97,3 +98,31 @@ class Meta:
model = OverrideRPM
fields = ('id', 'release', 'variant', 'arch', 'srpm_name', 'rpm_name',
'rpm_arch', 'include', 'comment', 'do_not_delete')


class ComposeTreeSerializer(StrictSerializerMixin,
DynamicFieldsSerializerMixin,
serializers.ModelSerializer):
compose = serializers.SlugRelatedField(slug_field='compose_id', queryset=Compose.objects.all())
variant = serializers.SlugRelatedField(slug_field='variant_uid', queryset=Variant.objects.all())
arch = serializers.CharField()
location = ChoiceSlugField(slug_field='short', queryset=Location.objects.all())
scheme = ChoiceSlugField(slug_field='name', queryset=Scheme.objects.all())
url = serializers.CharField()
synced_content = ChoiceSlugField(slug_field='name', many=True, queryset=ContentCategory.objects.all())

class Meta:
model = ComposeTree
fields = ('compose', 'variant', 'arch', 'location',
'scheme', 'url', 'synced_content')

def validate(self, attrs):
super(ComposeTreeSerializer, self).validate(attrs)
compose = attrs.get('compose', None)
variant = attrs.get('variant', None)
arch = attrs.get('arch', None)
if compose == variant.compose and arch in [i.name for i in variant.arches]:
return attrs
else:
raise serializers.ValidationError('The combination with compose %s, variant %s, arch %s does not exist' %
(compose, variant, arch))
Loading

0 comments on commit 411ae13

Please sign in to comment.