summaryrefslogtreecommitdiffstats
path: root/omaha_server/omaha
diff options
context:
space:
mode:
authorKirill Yakovenko <kirill.yakovenko@gmail.com>2016-11-01 22:45:49 +0700
committerGitHub <noreply@github.com>2016-11-01 22:45:49 +0700
commitd1e883ceb9272e0cb9c26801a706da12f1cebb6a (patch)
treeb7bc1c3a9b5ac46ae15ff373d2c896a9e2efd409 /omaha_server/omaha
parentb2907055db8037ef0701fc10b5a0fb865fd82afd (diff)
parent9e468645314a1a9f5108e492fc0906b52638964f (diff)
downloadomaha-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.py10
-rw-r--r--omaha_server/omaha/tables.py6
-rw-r--r--omaha_server/omaha/tests/test_api.py73
-rw-r--r--omaha_server/omaha/views_admin.py7
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)