Skip to content

Commit 33433a0

Browse files
committed
Merge branch 'master' into refactor-views-project-versions
2 parents a9218a5 + 8e643fb commit 33433a0

File tree

9 files changed

+255
-261
lines changed

9 files changed

+255
-261
lines changed

readthedocs/api/v2/urls.py

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,6 @@
1717
BuildCommandViewSet,
1818
BuildViewSet,
1919
DomainViewSet,
20-
NotificationViewSet,
2120
ProjectViewSet,
2221
RemoteOrganizationViewSet,
2322
RemoteRepositoryViewSet,
@@ -31,7 +30,6 @@
3130
router.register(r'command', BuildCommandViewSet, basename='buildcommandresult')
3231
router.register(r'version', VersionViewSet, basename='version')
3332
router.register(r'project', ProjectViewSet, basename='project')
34-
router.register(r'notification', NotificationViewSet, basename='emailhook')
3533
router.register(r'domain', DomainViewSet, basename='domain')
3634
router.register(r'sphinx_domain', SphinxDomainAPIView, basename='sphinxdomain')
3735
router.register(

readthedocs/api/v2/views/model_views.py

Lines changed: 0 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -292,15 +292,6 @@ class BuildCommandViewSet(UserSelectViewSet):
292292
model = BuildCommandResult
293293

294294

295-
class NotificationViewSet(viewsets.ReadOnlyModelViewSet):
296-
permission_classes = (permissions.IsAuthenticated, RelatedProjectIsOwner)
297-
renderer_classes = (JSONRenderer,)
298-
model = EmailHook
299-
300-
def get_queryset(self):
301-
return self.model.objects.api(self.request.user)
302-
303-
304295
class DomainViewSet(UserSelectViewSet):
305296
permission_classes = [APIRestrictedPermission]
306297
renderer_classes = (JSONRenderer,)

readthedocs/api/v3/serializers.py

Lines changed: 22 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -115,15 +115,6 @@ class BuildSerializer(FlexFieldsModelSerializer):
115115
state = BuildStateSerializer(source='*')
116116
_links = BuildLinksSerializer(source='*')
117117

118-
expandable_fields = dict(
119-
config=(
120-
BuildConfigSerializer,
121-
dict(
122-
source='config',
123-
),
124-
),
125-
)
126-
127118
class Meta:
128119
model = Build
129120
fields = [
@@ -140,6 +131,10 @@ class Meta:
140131
'_links',
141132
]
142133

134+
expandable_fields = {
135+
'config': (BuildConfigSerializer, {'source': 'config'})
136+
}
137+
143138
def get_finished(self, obj):
144139
if obj.date and obj.length:
145140
return obj.date + datetime.timedelta(seconds=obj.length)
@@ -215,15 +210,6 @@ class VersionSerializer(FlexFieldsModelSerializer):
215210
urls = VersionURLsSerializer(source='*')
216211
_links = VersionLinksSerializer(source='*')
217212

218-
expandable_fields = dict(
219-
last_build=(
220-
BuildSerializer,
221-
dict(
222-
source='last_build',
223-
),
224-
),
225-
)
226-
227213
class Meta:
228214
model = Version
229215
fields = [
@@ -241,6 +227,12 @@ class Meta:
241227
'_links',
242228
]
243229

230+
expandable_fields = {
231+
'last_build': (
232+
BuildSerializer, {'source': 'last_build'}
233+
)
234+
}
235+
244236
def get_downloads(self, obj):
245237
downloads = obj.get_downloads()
246238
data = {}
@@ -448,18 +440,6 @@ class ProjectSerializer(FlexFieldsModelSerializer):
448440
created = serializers.DateTimeField(source='pub_date')
449441
modified = serializers.DateTimeField(source='modified_date')
450442

451-
expandable_fields = dict(
452-
active_versions=(
453-
VersionSerializer,
454-
dict(
455-
# NOTE: this has to be a Model method, can't be a
456-
# ``SerializerMethodField`` as far as I know
457-
source='active_versions',
458-
many=True,
459-
),
460-
),
461-
)
462-
463443
class Meta:
464444
model = Project
465445
fields = [
@@ -489,6 +469,18 @@ class Meta:
489469
'_links',
490470
]
491471

472+
expandable_fields = {
473+
'active_versions': (
474+
VersionSerializer,
475+
{
476+
# NOTE: this has to be a Model method, can't be a
477+
# ``SerializerMethodField`` as far as I know
478+
'source': 'active_versions',
479+
'many': True,
480+
}
481+
)
482+
}
483+
492484
def get_homepage(self, obj):
493485
# Overridden only to return ``None`` when the project_url is ``''``
494486
return obj.project_url or None

conftest.py renamed to readthedocs/conftest.py

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,7 @@
1-
# -*- coding: utf-8 -*-
21
import pytest
3-
from django.conf import settings
42
from rest_framework.test import APIClient
53

4+
65
try:
76
# TODO: this file is read/executed even when called from ``readthedocsinc``,
87
# so it's overriding the options that we are defining in the ``conftest.py``

readthedocs/projects/urls/private.py

Lines changed: 21 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -27,12 +27,18 @@
2727
ProjectAdvertisingUpdate,
2828
ProjectDashboard,
2929
ProjectDelete,
30+
ProjectNotications,
31+
ProjectNoticationsDelete,
32+
ProjectRedirects,
33+
ProjectRedirectsDelete,
3034
ProjectUpdate,
35+
ProjectUsersCreateList,
36+
ProjectUsersDelete,
3137
ProjectVersionDeleteHTML,
3238
ProjectVersionDetail,
39+
SearchAnalytics,
3340
)
3441

35-
3642
urlpatterns = [
3743
url(r'^$', ProjectDashboard.as_view(), name='projects_dashboard'),
3844
url(
@@ -78,20 +84,24 @@
7884
name='projects_delete',
7985
),
8086
url(
81-
r'^(?P<project_slug>[-\w]+)/users/$', private.project_users,
87+
r'^(?P<project_slug>[-\w]+)/users/$',
88+
ProjectUsersCreateList.as_view(),
8289
name='projects_users',
8390
),
8491
url(
8592
r'^(?P<project_slug>[-\w]+)/users/delete/$',
86-
private.project_users_delete, name='projects_users_delete',
93+
ProjectUsersDelete.as_view(),
94+
name='projects_users_delete',
8795
),
8896
url(
8997
r'^(?P<project_slug>[-\w]+)/notifications/$',
90-
private.project_notifications, name='projects_notifications',
98+
ProjectNotications.as_view(),
99+
name='projects_notifications',
91100
),
92101
url(
93102
r'^(?P<project_slug>[-\w]+)/notifications/delete/$',
94-
private.project_notifications_delete, name='projects_notification_delete',
103+
ProjectNoticationsDelete.as_view(),
104+
name='projects_notification_delete',
95105
),
96106
url(
97107
r'^(?P<project_slug>[-\w]+)/translations/$',
@@ -103,20 +113,23 @@
103113
name='projects_translations_delete',
104114
),
105115
url(
106-
r'^(?P<project_slug>[-\w]+)/redirects/$', private.project_redirects,
116+
r'^(?P<project_slug>[-\w]+)/redirects/$',
117+
ProjectRedirects.as_view(),
107118
name='projects_redirects',
108119
),
109120
url(
110121
r'^(?P<project_slug>[-\w]+)/redirects/delete/$',
111-
private.project_redirects_delete, name='projects_redirects_delete',
122+
ProjectRedirectsDelete.as_view(),
123+
name='projects_redirects_delete',
112124
),
113125
url(
114126
r'^(?P<project_slug>[-\w]+)/advertising/$',
115127
ProjectAdvertisingUpdate.as_view(), name='projects_advertising',
116128
),
117129
url(
118130
r'^(?P<project_slug>[-\w]+)/search-analytics/$',
119-
private.search_analytics_view, name='projects_search_analytics',
131+
SearchAnalytics.as_view(),
132+
name='projects_search_analytics',
120133
),
121134
]
122135

0 commit comments

Comments
 (0)