Added Status

This commit is contained in:
2019-07-16 11:08:44 +02:00
parent 2cc2b1a6d0
commit f9d3743318
14 changed files with 224 additions and 0 deletions

View File

@@ -39,6 +39,7 @@ INSTALLED_APPS = [
'django.contrib.staticfiles',
'animals',
'parameter',
'status',
'rest_framework',
'rest_framework_swagger',
]

View File

@@ -24,6 +24,7 @@ urlpatterns = [
path('', schema_view),
path ('', include ('animals.urls')),
path ('', include ('parameter.urls')),
path ('', include ('status.urls')),
path (
'api-auth/',
include ('rest_framework.urls', namespace = 'rest_framework')

0
parameter/__init__.py Normal file
View File

3
parameter/admin.py Normal file
View File

@@ -0,0 +1,3 @@
from django.contrib import admin
# Register your models here.

4
parameter/apps.py Normal file
View File

@@ -0,0 +1,4 @@
from django.apps import AppConfig
class ParameterConfig(AppConfig):
name = 'parameter'

View File

@@ -0,0 +1,21 @@
# Generated by Django 2.1.4 on 2019-01-01 16:25
from django.db import migrations, models
class Migration(migrations.Migration):
initial = True
dependencies = [
]
operations = [
migrations.CreateModel(
name='Parameter',
fields=[
('key', models.CharField(primary_key=True, max_length=20)),
('value', models.IntegerField()),
],
),
]

View File

15
parameter/models.py Normal file
View File

@@ -0,0 +1,15 @@
from django.db import models
class Parameter (models.Model):
"""
Parameter Model
Defines the attributes of a config KeyPair
"""
key = models.CharField (primary_key = True, max_length = 20)
value = models.IntegerField (null = False)
def get_value (self):
return self.value
def __repr__(self):
return self.key + ' is added.'

8
parameter/serializers.py Normal file
View File

@@ -0,0 +1,8 @@
from rest_framework import serializers
from .models import Parameter
class ParameterSerializer (serializers.ModelSerializer):
class Meta:
model = Parameter
fields = ('key', 'value')

View File

View File

@@ -0,0 +1,21 @@
from django.test import TestCase
from ..models import Parameter
class ParameterTest (TestCase):
""" Test module for Parameter model """
def setUp (self):
Parameter.objects.create (key = 'TestPar1',
value = 123)
Parameter.objects.create (key = 'TestPar2',
value = 567)
def test_parameter (self):
par1 = Parameter.objects.get (key = 'TestPar1')
par2 = Parameter.objects.get (key = 'TestPar2')
self.assertEqual (
par1.get_value (), 123)
self.assertEqual (
par2.get_value (), 567)

View File

@@ -0,0 +1,84 @@
import json
from rest_framework import status
from django.test import TestCase, Client
from django.urls import reverse
from ..models import Parameter
from ..serializers import ParameterSerializer
# initialize the APIClient app
client = Client ()
class GetAllParmetersTest (TestCase):
""" Test module for GET all Parameter API """
def setUp (self):
Parameter.objects.create ( key = 'TestParameter1',
value = 123)
Parameter.objects.create ( key = 'TestParameter2',
value = 456)
def test_get_all_parameter (self):
""" get API response """
response = client.get (reverse ('get_post_parameter'))
# get data from db
parameter = Parameter.objects.all ()
serializer = ParameterSerializer (parameter, many=True)
self.assertEqual (response.data, serializer.data)
self.assertEqual (response.status_code, status.HTTP_200_OK)
class GetSingleParameterTest (TestCase):
""" Test module for GET single ParameterTest API """
def setUp(self):
self.parameter1 = Parameter.objects.create ( key = 'TestParameter1',
value = 123)
self.parameter2 = Parameter.objects.create ( key = 'TestParameter2',
value = 456)
def test_get_valid_single_parameter (self):
""" get API response """
# get data from db
parameters = Parameter.objects.all ()
response = client.get (
reverse ('get_delete_update_parameter', kwargs = {'key': self.parameter1.key}))
parameter = Parameter.objects.get (key = self.parameter1.key)
serializer = ParameterSerializer (parameter)
self.assertEqual (response.data, serializer.data)
self.assertEqual (response.status_code, status.HTTP_200_OK)
def test_get_invalid_single_parameter (self):
response = client.get (
reverse ('get_delete_update_parameter', kwargs = {'key': 'BadParam'}))
self.assertEqual (response.status_code, status.HTTP_404_NOT_FOUND)
class CreateNewParameterTest (TestCase):
""" Test module for inserting a new parameter """
def setUp (self):
self.valid_payload = { 'key' : 'Parameter1',
'value' : 123}
#FixMe
self.invalid_payload = { 'key' : 'Parameter2',
'value' : 0}
def test_create_valid_parameter (self):
response = client.post (
reverse ('get_post_parameter'),
data = json.dumps (self.valid_payload),
content_type = 'application/json'
)
self.assertEqual (response.status_code, status.HTTP_201_CREATED)
def test_create_invalid_parameter (self):
response = client.post (
reverse ('get_post_parameter'),
data = json.dumps (self.invalid_payload),
content_type = 'application/json'
)
self.assertEqual (response.status_code, status.HTTP_400_BAD_REQUEST)

17
parameter/urls.py Normal file
View File

@@ -0,0 +1,17 @@
#from django.conf.urls import url,path
from django.urls import path
from . import views
urlpatterns = [
path (
'api/parameter/<key>',
views.get_delete_update_parameter,
name = 'get_delete_update_parameter'
),
path (
'api/parameter/',
views.get_post_parameter,
name = 'get_post_parameter'
)
]

49
parameter/views.py Normal file
View File

@@ -0,0 +1,49 @@
from django.shortcuts import render
from rest_framework.decorators import api_view
from rest_framework.response import Response
from rest_framework import status
from .models import Parameter
from .serializers import ParameterSerializer
#@api_view(['GET', 'DELETE', 'PUT'])
@api_view(['GET', 'PUT'])
def get_delete_update_parameter (request, key):
try:
parameter = Parameter.objects.get (key = key)
except Parameter.DoesNotExist:
return Response (status=status.HTTP_404_NOT_FOUND)
# get value of a single Parameter
if request.method == 'GET':
serializer = ParameterSerializer (parameter)
return Response (serializer.data)
# delete a single Parameter
elif request.method == 'DELETE':
return Response ({})
# update details of a single Parameter
elif request.method == 'PUT':
serializer = ParameterSerializer (parameter, data = request.data)
if serializer.is_valid ():
serializer.save ()
return Response(serializer.data, status=status.HTTP_204_NO_CONTENT)
return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)
@api_view(['GET', 'POST'])
def get_post_parameter (request):
# get all Parameter
if request.method == 'GET':
parameter = Parameter.objects.all ()
serializer = ParameterSerializer (parameter, many=True)
return Response (serializer.data)
# insert a new record for a Parameter
elif request.method == 'POST':
data = { 'key': request.data.get ('key'),
'value': int (request.data.get ('value'))
}
serializer = ParameterSerializer (data = data)
if serializer.is_valid () and data ['key'] > '' :
serializer.save ()
return Response (serializer.data, status=status.HTTP_201_CREATED)
return Response( serializer.errors, status=status.HTTP_400_BAD_REQUEST)