Skip to content

Commit 6c154a0

Browse files
authored
Merge pull request #127 from palfrey/mypy-testing
Add minimal typing support to pass mypy checks
2 parents 2df191a + ad11a9a commit 6c154a0

File tree

15 files changed

+115
-13
lines changed

15 files changed

+115
-13
lines changed

.gitignore

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,4 +16,4 @@ coverage.*
1616
!.gitignore
1717
!.travis.yml
1818

19-
sample*
19+
sample*

README.md

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -50,13 +50,13 @@ class AccessKey(models.Model):
5050

5151
class Profile(models.Model):
5252
sites = models.ManyToManyField(Site)
53-
user = models.OneToOneField(User)
54-
access_key = models.ForeignKey(AccessKey, null=True)
53+
user = models.OneToOneField(User, on_delete=models.CASCADE)
54+
access_key = models.ForeignKey(AccessKey, null=True, on_delete=models.CASCADE)
5555

5656

5757
class Avatar(models.Model):
5858
image = models.CharField(max_length=100)
59-
profile = models.ForeignKey(Profile, related_name='avatars')
59+
profile = models.ForeignKey(Profile, related_name='avatars', on_delete=models.CASCADE)
6060
```
6161

6262
We should create the following list of serializers:

drf_writable_nested/mixins.py

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
# -*- coding: utf-8 -*-
22
from collections import OrderedDict, defaultdict
3+
from typing import List
34

45
from django.contrib.contenttypes.fields import GenericRelation
56
from django.contrib.contenttypes.models import ContentType
@@ -382,7 +383,7 @@ class Meta:
382383
(`UniqueFieldsMixin` and `NestedCreateMixin` or `NestedUpdateMixin`)
383384
you should put `UniqueFieldsMixin` ahead.
384385
"""
385-
_unique_fields = []
386+
_unique_fields = [] # type: List[str]
386387

387388
def get_fields(self):
388389
self._unique_fields = []

drf_writable_nested/py.typed

Whitespace-only changes.

example/README.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
Stripped down example project, based on top-level README

example/__init__.py

Whitespace-only changes.

example/models.py

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
from django.db import models
2+
3+
4+
class Site(models.Model):
5+
url = models.CharField(max_length=100)
6+
7+
8+
class User(models.Model):
9+
username = models.CharField(max_length=100)
10+
11+
12+
class AccessKey(models.Model):
13+
key = models.CharField(max_length=100)
14+
15+
16+
class Profile(models.Model):
17+
sites = models.ManyToManyField(Site)
18+
user = models.OneToOneField(User, on_delete=models.CASCADE)
19+
access_key = models.ForeignKey(AccessKey, null=True, on_delete=models.CASCADE)
20+
21+
22+
class Avatar(models.Model):
23+
image = models.CharField(max_length=100)
24+
profile = models.ForeignKey(Profile, related_name='avatars', on_delete=models.CASCADE)

example/requirements.txt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
djangorestframework-stubs

example/serializers.py

Lines changed: 49 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,49 @@
1+
from rest_framework import serializers
2+
from drf_writable_nested.serializers import WritableNestedModelSerializer
3+
from .models import Avatar, AccessKey, Profile, User, Site
4+
5+
class AvatarSerializer(serializers.ModelSerializer):
6+
image = serializers.CharField()
7+
8+
class Meta:
9+
model = Avatar
10+
fields = ('pk', 'image',)
11+
12+
13+
class SiteSerializer(serializers.ModelSerializer):
14+
url = serializers.CharField()
15+
16+
class Meta:
17+
model = Site
18+
fields = ('pk', 'url',)
19+
20+
21+
class AccessKeySerializer(serializers.ModelSerializer):
22+
23+
class Meta:
24+
model = AccessKey
25+
fields = ('pk', 'key',)
26+
27+
28+
class ProfileSerializer(WritableNestedModelSerializer):
29+
# Direct ManyToMany relation
30+
sites = SiteSerializer(many=True)
31+
32+
# Reverse FK relation
33+
avatars = AvatarSerializer(many=True)
34+
35+
# Direct FK relation
36+
access_key = AccessKeySerializer(allow_null=True)
37+
38+
class Meta:
39+
model = Profile
40+
fields = ('pk', 'sites', 'avatars', 'access_key',)
41+
42+
43+
class UserSerializer(WritableNestedModelSerializer):
44+
# Reverse OneToOne relation
45+
profile = ProfileSerializer()
46+
47+
class Meta:
48+
model = User
49+
fields = ('pk', 'profile', 'username',)

example/settings.py

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
# Minimal Django config so the django-stubs mypy plugin doesn't complain
2+
SECRET_KEY="something secret"

0 commit comments

Comments
 (0)