Skip to content

Commit 5c285d0

Browse files
author
Gabriel Monroy
committed
remove default build URL, allow null builds by default
1 parent 8ae3d22 commit 5c285d0

3 files changed

Lines changed: 44 additions & 27 deletions

File tree

api/models.py

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -654,12 +654,12 @@ class Build(UuidAuditedModel):
654654

655655
sha = models.CharField('SHA', max_length=255, blank=True)
656656
output = models.TextField(blank=True)
657-
# metadata
657+
658658
procfile = fields.ProcfileField(blank=True)
659659
dockerfile = models.TextField(blank=True)
660660
config = fields.EnvVarsField(blank=True)
661-
# slug info, TODO: replace default URL with something more user friendly
662-
url = models.URLField('URL', default='https://s3.amazonaws.com/gabrtv-slugs/nodejs.tar.gz')
661+
662+
url = models.URLField('URL')
663663
size = models.IntegerField(blank=True, null=True)
664664
checksum = models.CharField(max_length=255, blank=True)
665665

api/tests/build.py

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -44,19 +44,19 @@ def test_build(self):
4444
response = self.client.post(url, json.dumps(body), content_type='application/json')
4545
self.assertEqual(response.status_code, 201)
4646
formation_id = response.data['id']
47-
# check to see that an initial/null build was created
47+
# check to see that no initial build was created
4848
url = '/api/formations/{formation_id}/build'.format(**locals())
4949
response = self.client.get(url)
50-
self.assertEqual(response.status_code, 200)
51-
self.assertEqual(response.data['version'], 1)
52-
# post a new build
50+
self.assertEqual(response.status_code, 404)
51+
# post a first build
5352
body = {'sha': uuid.uuid4().hex, 'slug_size': 4096000, 'procfile': json.dumps({'web': 'node server.js'}),
5453
'url': 'http://deis.local/slugs/1c52739bbf3a44d3bfb9a58f7bbdd5fb.tar.gz',
5554
'checksum': uuid.uuid4().hex}
5655
response = self.client.post(url, json.dumps(body), content_type='application/json')
5756
self.assertEqual(response.status_code, 201)
5857
build1 = response.data
5958
self.assertEqual(response.data['url'], body['url'])
59+
self.assertEqual(response.data['version'], 1)
6060
# read the build
6161
response = self.client.get(url)
6262
self.assertEqual(response.status_code, 200)
@@ -69,6 +69,7 @@ def test_build(self):
6969
response = self.client.post(url, json.dumps(body), content_type='application/json')
7070
self.assertEqual(response.status_code, 201)
7171
build3 = response.data
72+
self.assertEqual(response.data['version'], 2)
7273
self.assertEqual(response.data['url'], body['url'])
7374
self.assertNotEqual(build2['uuid'], build3['uuid'])
7475
# disallow put/patch/delete

api/views.py

Lines changed: 36 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@
1616
from rest_framework.status import HTTP_400_BAD_REQUEST, HTTP_201_CREATED
1717
import json
1818
from rest_framework.generics import get_object_or_404
19+
from django.http.response import Http404
1920

2021
class AnonymousAuthentication(BaseAuthentication):
2122

@@ -158,10 +159,8 @@ def post_save(self, formation, created=False, **kwargs):
158159
if created:
159160
config = models.Config.objects.create(
160161
owner=formation.owner, formation=formation, values={})
161-
build = models.Build.objects.create(
162-
owner=formation.owner, formation=formation)
163162
_release = models.Release.objects.create(
164-
owner=formation.owner, formation=formation, config=config, build=build)
163+
owner=formation.owner, formation=formation, config=config)
165164
# update gitosis
166165
models.Formation.objects.publish()
167166

@@ -279,7 +278,8 @@ class FormationNodeViewSet(OwnerViewSet):
279278
def get_queryset(self, **kwargs):
280279
formation = models.Formation.objects.get(
281280
owner=self.request.user, id=self.kwargs['id'])
282-
return self.model.objects.filter(owner=self.request.user, formation=formation)
281+
return self.model.objects.filter(owner=self.request.user,
282+
formation=formation)
283283

284284
def get_object(self, *args, **kwargs):
285285
qs = self.get_queryset(**kwargs)
@@ -295,11 +295,12 @@ class FormationContainerViewSet(OwnerViewSet):
295295
def get_queryset(self, **kwargs):
296296
formation = models.Formation.objects.get(
297297
owner=self.request.user, id=self.kwargs['id'])
298-
return self.model.objects.filter(owner=self.request.user, formation=formation)
298+
return self.model.objects.filter(owner=self.request.user,
299+
formation=formation)
299300

300301
def get_object(self, *args, **kwargs):
301302
qs = self.get_queryset(**kwargs)
302-
obj = qs.get(pk=self.kwargs['id'])
303+
obj = qs.get(pk=self.kwargs['container'])
303304
return obj
304305

305306

@@ -309,12 +310,15 @@ class FormationImageViewSet(OwnerViewSet):
309310
serializer_class = serializers.ReleaseSerializer
310311

311312
def get_queryset(self, **kwargs):
312-
return self.model.objects.filter(owner=self.request.user)
313-
314-
def get_object(self, *args, **kwargs):
315313
formation = models.Formation.objects.get(
316314
owner=self.request.user, id=self.kwargs['id'])
317-
return formation.release
315+
return self.model.objects.filter(owner=self.request.user,
316+
formation=formation)
317+
318+
def get_object(self, *args, **kwargs):
319+
qs = self.get_queryset(**kwargs)
320+
obj = qs.get(pk=self.kwargs['id'])
321+
return obj
318322

319323
def reset_image(self, request, *args, **kwargs):
320324
formation = models.Formation.objects.get(
@@ -330,7 +334,10 @@ class FormationConfigViewSet(OwnerViewSet):
330334
serializer_class = serializers.ConfigSerializer
331335

332336
def get_queryset(self, **kwargs):
333-
return self.model.objects.filter(owner=self.request.user)
337+
formation = models.Formation.objects.get(
338+
owner=self.request.user, id=self.kwargs['id'])
339+
return self.model.objects.filter(owner=self.request.user,
340+
formation=formation)
334341

335342
def get_object(self, *args, **kwargs):
336343
formation = models.Formation.objects.get(id=self.kwargs['id'])
@@ -369,12 +376,14 @@ class FormationBuildViewSet(OwnerViewSet):
369376
serializer_class = serializers.BuildSerializer
370377

371378
def get_queryset(self, **kwargs):
372-
return self.model.objects.filter(owner=self.request.user)
379+
formation = models.Formation.objects.get(
380+
owner=self.request.user, id=self.kwargs['id'])
381+
return self.model.objects.filter(owner=self.request.user,
382+
formation=formation)
373383

374384
def get_object(self, *args, **kwargs):
375-
formation = models.Formation.objects.get(id=self.kwargs['id'])
376-
build = self.model.objects.filter(
377-
formation=formation).order_by('-created')[0]
385+
qs = self.get_queryset().order_by('-created')
386+
build = get_object_or_404(qs)
378387
return build
379388

380389
def post_save(self, obj, created=False):
@@ -384,10 +393,14 @@ def post_save(self, obj, created=False):
384393

385394
def create(self, request, *args, **kwargs):
386395
request._data = request.DATA.copy()
387-
obj = self.get_object()
388-
# increment version and use the same formation
389-
request.DATA['version'] = obj.version + 1
390-
request.DATA['formation'] = obj.formation
396+
try:
397+
obj = self.get_object()
398+
request.DATA['version'] = obj.version + 1
399+
except Http404:
400+
request.DATA['version'] = 1
401+
formation = models.Formation.objects.get(
402+
owner=self.request.user, id=self.kwargs['id'])
403+
request.DATA['formation'] = formation
391404
return super(OwnerViewSet, self).create(request, *args, **kwargs)
392405

393406

@@ -397,7 +410,10 @@ class FormationReleaseViewSet(OwnerViewSet):
397410
serializer_class = serializers.ReleaseSerializer
398411

399412
def get_queryset(self, **kwargs):
400-
return self.model.objects.filter(owner=self.request.user)
413+
formation = models.Formation.objects.get(
414+
owner=self.request.user, id=self.kwargs['id'])
415+
return self.model.objects.filter(owner=self.request.user,
416+
formation=formation)
401417

402418
def get_object(self, *args, **kwargs):
403419
formation = models.Formation.objects.get(id=self.kwargs['id'])

0 commit comments

Comments
 (0)