diff options
author | Kirill Yakovenko <kirill.yakovenko@gmail.com> | 2016-11-01 22:45:49 +0700 |
---|---|---|
committer | GitHub <noreply@github.com> | 2016-11-01 22:45:49 +0700 |
commit | d1e883ceb9272e0cb9c26801a706da12f1cebb6a (patch) | |
tree | b7bc1c3a9b5ac46ae15ff373d2c896a9e2efd409 /omaha_server/omaha | |
parent | b2907055db8037ef0701fc10b5a0fb865fd82afd (diff) | |
parent | 9e468645314a1a9f5108e492fc0906b52638964f (diff) | |
download | omaha-server-master.zip omaha-server-master.tar.gz omaha-server-master.tar.bz2 |
Merge pull request #230 from Crystalnix/devHEADorigin/masterorigin/HEADmaster
Sortable columns, PATCH request for versions, Hotfixs
Diffstat (limited to 'omaha_server/omaha')
-rw-r--r-- | omaha_server/omaha/api.py | 10 | ||||
-rw-r--r-- | omaha_server/omaha/tables.py | 6 | ||||
-rw-r--r-- | omaha_server/omaha/tests/test_api.py | 73 | ||||
-rw-r--r-- | omaha_server/omaha/views_admin.py | 7 |
4 files changed, 83 insertions, 13 deletions
diff --git a/omaha_server/omaha/api.py b/omaha_server/omaha/api.py index 4fda594..92d7a79 100644 --- a/omaha_server/omaha/api.py +++ b/omaha_server/omaha/api.py @@ -74,7 +74,7 @@ class StandardResultsSetPagination(pagination.PageNumberPagination): max_page_size = 100 -class AppViewSet(BaseView): +class AppViewSet(viewsets.ModelViewSet): """ API endpoint that allows applications to be viewed. @@ -152,12 +152,12 @@ class AppViewSet(BaseView): serializer_class = AppSerializer -class DataViewSet(BaseView): +class DataViewSet(viewsets.ModelViewSet): queryset = Data.objects.all().order_by('-id') serializer_class = DataSerializer -class PlatformViewSet(BaseView): +class PlatformViewSet(viewsets.ModelViewSet): queryset = Platform.objects.all().order_by('-id') serializer_class = PlatformSerializer @@ -167,12 +167,12 @@ class ChannelViewSet(viewsets.ModelViewSet): serializer_class = ChannelSerializer -class VersionViewSet(BaseView, mixins.UpdateModelMixin): +class VersionViewSet(viewsets.ModelViewSet): queryset = Version.objects.all().order_by('-id') serializer_class = VersionSerializer -class ActionViewSet(BaseView): +class ActionViewSet(viewsets.ModelViewSet): queryset = Action.objects.all().order_by('-id') serializer_class = ActionSerializer diff --git a/omaha_server/omaha/tables.py b/omaha_server/omaha/tables.py index ea7cc06..e1a4c30 100644 --- a/omaha_server/omaha/tables.py +++ b/omaha_server/omaha/tables.py @@ -75,12 +75,12 @@ class VersionsUsageTable(tables.Table): nextversion = tables.Column(verbose_name='Current Version') last_update = tables.DateTimeColumn(accessor='request.created', order_by='-request__created', verbose_name='Last update') - ip = tables.Column(accessor='request.ip') - platform = tables.Column(accessor='request.os.platform') + ip = tables.Column(accessor='request.ip', verbose_name='IP') + platform = tables.Column(accessor='request.os.platform', verbose_name='Platform') class Meta: model = AppRequest - orderable = False + orderable = True attrs = {'class': 'paleblue table table-striped table-bordered table-hover table-condensed', 'id': 'usage-table'} fields = ('userid', 'nextversion', 'last_update', 'ip', 'platform') diff --git a/omaha_server/omaha/tests/test_api.py b/omaha_server/omaha/tests/test_api.py index 09f0cb0..35a33b3 100644 --- a/omaha_server/omaha/tests/test_api.py +++ b/omaha_server/omaha/tests/test_api.py @@ -122,6 +122,20 @@ class AppTest(BaseTest, APITestCase): obj = Application.objects.get(id=response.data['id']) self.assertEqual(response.data, self.serializer(obj).data) + @is_private() + def test_update(self): + data = dict(id='test_id', name='test_name', data_set=[]) + response = self.client.post(reverse(self.url), data, format='json') + self.assertEqual(response.status_code, status.HTTP_201_CREATED) + obj_id = response.data['id'] + obj = Application.objects.get(id=obj_id) + self.assertEqual(obj.name, 'test_name') + url = reverse(self.url_detail, kwargs=dict(pk=obj_id)) + response = self.client.patch(url, dict(name='test_other_name')) + self.assertEqual(response.status_code, status.HTTP_200_OK) + obj = Application.objects.get(id=obj_id) + self.assertEqual(obj.name, 'test_other_name') + class DataTest(BaseTest, APITestCase): url = 'data-list' @@ -138,6 +152,21 @@ class DataTest(BaseTest, APITestCase): obj = Data.objects.get(id=response.data['id']) self.assertEqual(response.data, self.serializer(obj).data) + @is_private() + def test_update(self): + app = ApplicationFactory.create() + data = dict(name=0, app=app.pk) + response = self.client.post(reverse(self.url), data, format='json') + self.assertEqual(response.status_code, status.HTTP_201_CREATED) + obj_id = response.data['id'] + obj = Data.objects.get(id=obj_id) + self.assertEqual(obj.name, 0) + url = reverse(self.url_detail, kwargs=dict(pk=obj_id)) + response = self.client.patch(url, dict(name=1)) + self.assertEqual(response.status_code, status.HTTP_200_OK) + obj = Data.objects.get(id=obj_id) + self.assertEqual(obj.name, 1) + class PlatformTest(BaseTest, APITestCase): url = 'platform-list' @@ -157,6 +186,20 @@ class PlatformTest(BaseTest, APITestCase): obj = Platform.objects.get(id=response.data['id']) self.assertEqual(response.data, self.serializer(obj).data) + @is_private() + def test_create(self): + data = dict(name='test_name') + response = self.client.post(reverse(self.url), data, format='json') + self.assertEqual(response.status_code, status.HTTP_201_CREATED) + obj_id = response.data['id'] + obj = Platform.objects.get(id=obj_id) + self.assertEqual(obj.name, 'test_name') + url = reverse(self.url_detail, kwargs=dict(pk=obj_id)) + response = self.client.patch(url, dict(name='test_name2')) + self.assertEqual(response.status_code, status.HTTP_200_OK) + obj = Platform.objects.get(id=obj_id) + self.assertEqual(obj.name, 'test_name2') + class ChannelTest(BaseTest, APITestCase): url = 'channel-list' @@ -172,6 +215,19 @@ class ChannelTest(BaseTest, APITestCase): obj = Channel.objects.get(id=response.data['id']) self.assertEqual(response.data, self.serializer(obj).data) + @is_private() + def test_update(self): + data = dict(name='test_name') + response = self.client.post(reverse(self.url), data, format='json') + self.assertEqual(response.status_code, status.HTTP_201_CREATED) + obj_id = response.data['id'] + obj = Channel.objects.get(id=obj_id) + self.assertEqual(response.data, self.serializer(obj).data) + url = reverse(self.url_detail, kwargs=dict(pk=obj_id)) + response = self.client.patch(url, dict(name='test_name2')) + self.assertEqual(response.status_code, status.HTTP_200_OK) + obj = Channel.objects.get(id=obj_id) + self.assertEqual(obj.name, 'test_name2') class VersionTest(BaseTest, APITestCase): url = 'version-list' @@ -221,7 +277,6 @@ class VersionTest(BaseTest, APITestCase): self.assertEqual(response.status_code, status.HTTP_201_CREATED) obj_id = response.data['id'] version = Version.objects.get(id=obj_id) - self.assertEqual(response.data, self.serializer(version).data) self.assertEqual(version.file_size, len(b'content')) self.assertFalse(version.is_enabled) url = reverse(self.url_detail, kwargs=dict(pk=obj_id)) @@ -247,6 +302,22 @@ class ActionTest(BaseTest, APITestCase): obj = Action.objects.get(id=response.data['id']) self.assertEqual(response.data, self.serializer(obj).data) + @is_private() + def test_update(self): + version = VersionFactory.create() + data = dict(event=1, version=version.pk) + response = self.client.post(reverse(self.url), data, format='json') + self.assertEqual(response.status_code, status.HTTP_201_CREATED) + obj_id = response.data['id'] + obj = Action.objects.get(id=obj_id) + self.assertEqual(response.data, self.serializer(obj).data) + url = reverse(self.url_detail, kwargs=dict(pk=obj_id)) + response = self.client.patch(url, dict(event=2)) + self.assertEqual(response.status_code, status.HTTP_200_OK) + obj = Action.objects.get(id=obj_id) + self.assertEqual(obj.event, 2) + + class LiveStatistics(APITestCase): maxDiff = None diff --git a/omaha_server/omaha/views_admin.py b/omaha_server/omaha/views_admin.py index 3dbb0e9..f074836 100644 --- a/omaha_server/omaha/views_admin.py +++ b/omaha_server/omaha/views_admin.py @@ -131,9 +131,6 @@ class VersionsUsageView(StaffMemberRequiredMixin, SingleTableView): def get_queryset(self): qs = super(VersionsUsageView, self).get_queryset() - - qs = qs.select_related('request', 'request__os') - qs = qs.order_by('-request__created') self.appid = None try: @@ -145,7 +142,9 @@ class VersionsUsageView(StaffMemberRequiredMixin, SingleTableView): qs = qs.filter(events__eventtype__in=[2, 3], events__eventresult=1) qs = qs.distinct('request__userid').order_by('request__userid', '-request__created') - return list(qs) + qs = qs.only('id') + sortable_qs = self.model.objects.filter(id__in=qs).select_related('request', 'request__os') + return sortable_qs def get_context_data(self, **kwargs): context = super(VersionsUsageView, self).get_context_data(**kwargs) |