Skip to content

Commit 485df36

Browse files
author
Gabriel Monroy
committed
seed default providers and flavors on user registration, re #23
1 parent cc9f277 commit 485df36

3 files changed

Lines changed: 63 additions & 0 deletions

File tree

api/models.py

Lines changed: 49 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@
88

99
from __future__ import unicode_literals
1010
import importlib
11+
import json
1112

1213
from django.conf import settings
1314
from django.db import models
@@ -82,12 +83,22 @@ def __str__(self):
8283
return '{0} : {1}'.format(self.owner.username, self.id)
8384

8485

86+
@python_2_unicode_compatible
87+
class ProviderManager(models.Manager):
88+
89+
def seed(self, user, **kwargs):
90+
providers = (('ec2', 'ec2'),)
91+
for p_id, p_type in providers:
92+
self.create(owner=user, id=p_id, type=p_type, creds='{}')
93+
94+
8595
@python_2_unicode_compatible
8696
class Provider(UuidAuditedModel):
8797

8898
"""
8999
Cloud provider information for a user. Available as `user.provider_set`.
90100
"""
101+
objects = ProviderManager()
91102

92103
PROVIDERS = (
93104
('ec2', 'Amazon Elastic Compute Cloud (EC2)'),
@@ -103,12 +114,50 @@ class Meta:
103114
unique_together = (('owner', 'id'),)
104115

105116

117+
@python_2_unicode_compatible
118+
class FlavorManager(models.Manager):
119+
120+
def seed(self, user, **kwargs):
121+
# TODO: add optimized AMIs to default flavors
122+
flavors = (
123+
{'id': 'ec2-us-east-1',
124+
'provider': 'ec2',
125+
'params': json.dumps({'region': 'us-east-1'})},
126+
{'id': 'ec2-us-west-1',
127+
'provider': 'ec2',
128+
'params': json.dumps({'region': 'us-west-1'})},
129+
{'id': 'ec2-us-west-2',
130+
'provider': 'ec2',
131+
'params': json.dumps({'region': 'us-west-2'})},
132+
{'id': 'ec2-eu-west-1',
133+
'provider': 'ec2',
134+
'params': json.dumps({'region': 'eu-west-1'})},
135+
{'id': 'ec2-ap-northeast-1',
136+
'provider': 'ec2',
137+
'params': json.dumps({'region': 'ap-northeast-1'})},
138+
{'id': 'ec2-ap-southeast-1',
139+
'provider': 'ec2',
140+
'params': json.dumps({'region': 'ap-southeast-1'})},
141+
{'id': 'ec2-ap-southeast-2',
142+
'provider': 'ec2',
143+
'params': json.dumps({'region': 'ap-southeast-2'})},
144+
{'id': 'ec2-sa-east-1',
145+
'provider': 'ec2',
146+
'params': json.dumps({'region': 'sa-east-1'})},
147+
)
148+
for flavor in flavors:
149+
provider = flavor.pop('provider')
150+
flavor['provider'] = Provider.objects.get(owner=user, id=provider)
151+
self.create(owner=user, **flavor)
152+
153+
106154
@python_2_unicode_compatible
107155
class Flavor(UuidAuditedModel):
108156

109157
"""
110158
Virtual machine flavors available as `user.flavor_set`.
111159
"""
160+
objects = FlavorManager()
112161

113162
owner = models.ForeignKey(settings.AUTH_USER_MODEL)
114163
id = models.SlugField(max_length=64)

api/tests/auth.py

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -47,3 +47,12 @@ def test_auth(self):
4747
self.assertFalse(response.data['is_staff'])
4848
self.assertTrue(
4949
self.client.login(username=username, password=password))
50+
# test for default objects
51+
url = '/api/providers'
52+
response = self.client.get(url)
53+
self.assertEqual(response.status_code, 200)
54+
self.assertEqual(response.data['count'], 1)
55+
url = '/api/flavors'
56+
response = self.client.get(url)
57+
self.assertEqual(response.status_code, 200)
58+
self.assertEqual(response.data['count'], 8) # 8 regions

api/views.py

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -77,6 +77,11 @@ class UserRegistrationView(viewsets.GenericViewSet,
7777
permission_classes = (IsAnonymous,)
7878
serializer_class = serializers.UserSerializer
7979

80+
def post_save(self, user, created=False):
81+
if created:
82+
models.Provider.objects.seed(user)
83+
models.Flavor.objects.seed(user)
84+
8085
def pre_save(self, obj):
8186
"Replicate UserManager.create_user functionality"
8287
now = timezone.now()

0 commit comments

Comments
 (0)