Skip to content

Commit 3797daf

Browse files
committed
Refs #11 -- more docstring improvement.
1 parent 2fb15e6 commit 3797daf

4 files changed

Lines changed: 47 additions & 50 deletions

File tree

api/models.py

Lines changed: 19 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -30,12 +30,11 @@
3030

3131

3232
def import_tasks(provider_type):
33-
"""Return the celerytasks module for a given provider.
33+
"""Return the celerytasks module for a provider.
3434
35-
:param provider_type: type of cloud provider **currently only "ec2"**
36-
:type provider_type: string
37-
:rtype: celerytasks module for the provider
38-
:raises: :py:class:`ImportError` if the provider isn't recognized
35+
:param string provider_type: type of cloud provider **currently only "ec2"**
36+
:rtype: celerytasks module for the provider
37+
:raises: :py:class:`ImportError` if the provider isn't recognized
3938
"""
4039
try:
4140
tasks = importlib.import_module('celerytasks.' + provider_type)
@@ -45,37 +44,30 @@ def import_tasks(provider_type):
4544

4645

4746
class AuditedModel(models.Model):
48-
49-
"""Adds created and updated fields to a model.
47+
"""Add created and updated fields to a model.
5048
"""
5149

5250
created = models.DateTimeField(auto_now_add=True)
5351
updated = models.DateTimeField(auto_now=True)
5452

5553
class Meta:
56-
"""
57-
Metadata options for `AuditedModel`, marking this class as abstract.
58-
"""
54+
"""Mark :class:`AuditedModel` as abstract."""
5955
abstract = True
6056

6157

6258
class UuidAuditedModel(AuditedModel):
63-
64-
"""
65-
Adds a UUID primary key to an audited model.
59+
"""Add a UUID primary key to an audited model.
6660
"""
61+
6762
uuid = fields.UuidField('UUID', primary_key=True)
6863

6964
class Meta:
70-
"""
71-
Metadata options for UuidAuditedModel, marking this class as abstract.
72-
"""
65+
"""Mark :class:`UuidAuditedModel` as abstract."""
7366
abstract = True
7467

7568

7669
@python_2_unicode_compatible
7770
class Key(UuidAuditedModel):
78-
7971
"""An SSH public key."""
8072

8173
owner = models.ForeignKey(settings.AUTH_USER_MODEL)
@@ -92,8 +84,7 @@ def __str__(self):
9284

9385
@python_2_unicode_compatible
9486
class ProviderManager(models.Manager):
95-
96-
"""Manages database interactions for Provider objects."""
87+
"""Manage database interactions for :class:`Provider`."""
9788

9889
def seed(self, user, **kwargs):
9990
"""Seeds the database with Providers for clouds supported by deis.
@@ -108,10 +99,11 @@ def seed(self, user, **kwargs):
10899

109100
@python_2_unicode_compatible
110101
class Provider(UuidAuditedModel):
102+
"""Cloud provider information for a user.
111103
104+
Available as `user.provider_set`.
112105
"""
113-
Cloud provider information for a user. Available as `user.provider_set`.
114-
"""
106+
115107
objects = ProviderManager()
116108

117109
PROVIDERS = (
@@ -131,7 +123,7 @@ class Meta:
131123
@python_2_unicode_compatible
132124
class FlavorManager(models.Manager):
133125

134-
"""Manages database interactions for Flavors."""
126+
"""Manages database interactions for :class:`Flavor`."""
135127

136128
def load_cloud_config_base(self):
137129
"""Read the base configuration file and return the YAML data it contains."""
@@ -534,12 +526,12 @@ def new(self, formation, layer):
534526

535527
@python_2_unicode_compatible
536528
class Node(UuidAuditedModel):
537-
538529
"""
539530
Node used to host containers
540531
541532
List of nodes available as `formation.nodes`
542533
"""
534+
543535
objects = NodeManager()
544536

545537
owner = models.ForeignKey(settings.AUTH_USER_MODEL)
@@ -709,8 +701,7 @@ def __str__(self):
709701

710702
@classmethod
711703
def push(cls, push):
712-
"""
713-
Process a push from a local Git server
704+
"""Process a push from a local Git server.
714705
715706
Creates a new Build and returns the formation's
716707
databag for processing by the git-receive hook
@@ -751,7 +742,6 @@ def push(cls, push):
751742

752743
@python_2_unicode_compatible
753744
class Release(UuidAuditedModel):
754-
755745
"""
756746
The deployment of a Build to Instances and the restarting of Processes.
757747
"""
@@ -781,8 +771,9 @@ def rollback(self):
781771

782772
@receiver(release_signal)
783773
def new_release(sender, **kwargs):
784-
"""Catches a release_signal and creates a new release from the
785-
last release.
774+
"""Catch a release_signal and clone a new release from the previous one.
775+
776+
:returns: a newly created :class:`Release`
786777
"""
787778
formation, user = kwargs['formation'], kwargs['user']
788779
last_release = Release.objects.filter(

api/serializers.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -140,7 +140,7 @@ class Meta:
140140

141141
@property
142142
def data(self):
143-
"Custom data property that removes secure fields"
143+
"""Custom data property that removes secure fields"""
144144
d = super(LayerSerializer, self).data
145145
for f in ('ssh_private_key',):
146146
if f in d:

api/views.py

Lines changed: 25 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -7,15 +7,14 @@
77
import json
88

99
from Crypto.PublicKey import RSA
10-
from django.conf import settings
11-
from django.contrib.auth.models import Group, AnonymousUser, User
10+
from django.contrib.auth.models import AnonymousUser, User
1211
from django.db.utils import IntegrityError
1312
from django.utils import timezone
1413
from rest_framework import permissions, status, viewsets
1514
from rest_framework.authentication import BaseAuthentication
1615
from rest_framework.generics import get_object_or_404
1716
from rest_framework.response import Response
18-
from rest_framework.status import HTTP_400_BAD_REQUEST, HTTP_201_CREATED
17+
from rest_framework.status import HTTP_201_CREATED, HTTP_400_BAD_REQUEST
1918

2019
from api import models
2120
from api import serializers
@@ -33,7 +32,7 @@ def authenticate(self, request):
3332

3433
class IsAnonymous(permissions.BasePermission):
3534
"""
36-
Object-level permission to allow anonymous users
35+
Object-level permission to allow anonymous users.
3736
"""
3837

3938
def has_permission(self, request, view):
@@ -60,16 +59,6 @@ def has_object_permission(self, request, view, obj):
6059
return False
6160

6261

63-
class GroupViewSet(viewsets.ModelViewSet):
64-
65-
model = Group
66-
67-
68-
class UserViewSet(viewsets.ModelViewSet):
69-
70-
model = settings.AUTH_USER_MODEL
71-
72-
7362
class UserRegistrationView(viewsets.GenericViewSet,
7463
viewsets.mixins.CreateModelMixin):
7564

@@ -80,12 +69,13 @@ class UserRegistrationView(viewsets.GenericViewSet,
8069
serializer_class = serializers.UserSerializer
8170

8271
def post_save(self, user, created=False):
72+
"""Seed both `Providers` and `Flavors` after registration."""
8373
if created:
8474
models.Provider.objects.seed(user)
8575
models.Flavor.objects.seed(user)
8676

8777
def pre_save(self, obj):
88-
"Replicate UserManager.create_user functionality"
78+
"""Replicate UserManager.create_user functionality."""
8979
now = timezone.now()
9080
obj.last_login = now
9181
obj.date_joined = now
@@ -94,43 +84,50 @@ def pre_save(self, obj):
9484

9585

9686
class OwnerViewSet(viewsets.ModelViewSet):
97-
"""
98-
Base ViewSet for views scoped to a particular Owner
99-
"""
87+
"""Scope views to an `owner` attribute."""
88+
10089
permission_classes = (permissions.IsAuthenticated, IsOwner)
10190

10291
def pre_save(self, obj):
10392
obj.owner = self.request.user
10493

10594
def get_queryset(self, **kwargs):
95+
"""Filter all querysets by an `owner` attribute.
96+
"""
10697
return self.model.objects.filter(owner=self.request.user)
10798

10899

109100
class KeyViewSet(OwnerViewSet):
101+
"""RESTful views for :class:`~api.models.Key`."""
110102

111103
model = models.Key
112104
serializer_class = serializers.KeySerializer
113105
lookup_field = 'id'
114106

115107
def post_save(self, obj, created=False, **kwargs):
116-
# update gitosis
108+
"""Publish all Formations when a Key is saved so gitosis stays updated.
109+
"""
117110
models.Formation.objects.publish()
118111

119112
def destroy(self, request, **kwargs):
113+
"""Publish all Formations when a Key is destroyed so gitosis
114+
stays updated.
115+
"""
120116
resp = super(KeyViewSet, self).destroy(self, request, **kwargs)
121-
# publish gitosis updates
122117
models.Formation.objects.publish()
123118
return resp
124119

125120

126121
class ProviderViewSet(OwnerViewSet):
122+
"""RESTful views for :class:`~api.models.Provider`."""
127123

128124
model = models.Provider
129125
serializer_class = serializers.ProviderSerializer
130126
lookup_field = 'id'
131127

132128

133129
class FlavorViewSet(OwnerViewSet):
130+
"""RESTful views for :class:`~api.models.Flavor`."""
134131

135132
model = models.Flavor
136133
serializer_class = serializers.FlavorSerializer
@@ -145,6 +142,7 @@ def create(self, request, **kwargs):
145142

146143

147144
class FormationViewSet(OwnerViewSet):
145+
"""RESTful views for :class:`~api.models.Formtion`."""
148146

149147
model = models.Formation
150148
serializer_class = serializers.FormationSerializer
@@ -233,6 +231,7 @@ def destroy(self, request, **kwargs):
233231

234232

235233
class FormationLayerViewSet(OwnerViewSet):
234+
"""RESTful views for :class:`~api.models.Layer`."""
236235

237236
model = models.Layer
238237
serializer_class = serializers.LayerSerializer
@@ -275,6 +274,7 @@ def destroy(self, request, **kwargs):
275274

276275

277276
class FormationNodeViewSet(OwnerViewSet):
277+
"""RESTful views for :class:`~api.models.Node`."""
278278

279279
model = models.Node
280280
serializer_class = serializers.NodeSerializer
@@ -298,6 +298,7 @@ def destroy(self, request, **kwargs):
298298

299299

300300
class FormationContainerViewSet(OwnerViewSet):
301+
"""RESTful views for :class:`~api.models.Container`."""
301302

302303
model = models.Container
303304
serializer_class = serializers.ContainerSerializer
@@ -315,6 +316,7 @@ def get_object(self, *args, **kwargs):
315316

316317

317318
class FormationImageViewSet(OwnerViewSet):
319+
"""RESTful views for :class:`~api.models.Image`."""
318320

319321
model = models.Release
320322
serializer_class = serializers.ReleaseSerializer
@@ -339,6 +341,7 @@ def reset_image(self, request, *args, **kwargs):
339341

340342

341343
class FormationConfigViewSet(OwnerViewSet):
344+
"""RESTful views for :class:`~api.models.Config`."""
342345

343346
model = models.Config
344347
serializer_class = serializers.ConfigSerializer
@@ -382,6 +385,7 @@ def create(self, request, *args, **kwargs):
382385

383386

384387
class FormationBuildViewSet(OwnerViewSet):
388+
"""RESTful views for :class:`~api.models.Build`."""
385389

386390
model = models.Build
387391
serializer_class = serializers.BuildSerializer
@@ -412,6 +416,7 @@ def create(self, request, *args, **kwargs):
412416

413417

414418
class FormationReleaseViewSet(OwnerViewSet):
419+
"""RESTful views for :class:`~api.models.Release`."""
415420

416421
model = models.Release
417422
serializer_class = serializers.ReleaseSerializer

deis/settings.py

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -248,7 +248,8 @@
248248
# EMAIL_HOST_USER = 'foo'
249249
# EMAIL_HOST_PASSWORD = 'bar'
250250

251+
251252
try:
252253
from .local_settings import * # @UnusedWildImport # noqa
253254
except ImportError:
254-
print('No deis/local_settings.py file found!')
255+
print('\033[96mdeis/local_settings.py \033[91mfile not found!\033[0m')

0 commit comments

Comments
 (0)