Add driver app

This commit is contained in:
2021-12-18 00:33:46 +01:00
parent 5bab2243bf
commit a6005615e0
18 changed files with 201 additions and 3 deletions

Binary file not shown.

BIN
dcc/driver/.views.py.swp Normal file

Binary file not shown.

0
dcc/driver/__init__.py Normal file
View File

3
dcc/driver/admin.py Normal file
View File

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

6
dcc/driver/apps.py Normal file
View File

@@ -0,0 +1,6 @@
from django.apps import AppConfig
class DriverConfig(AppConfig):
default_auto_field = 'django.db.models.BigAutoField'
name = 'driver'

35
dcc/driver/connector.py Normal file
View File

@@ -0,0 +1,35 @@
class Connector:
@classmethod
def __mqtt_pub(self, message):
# to be encoded
print(message)
return True
def passthrough(self, address, data):
self.__mqtt_pub(data)
def ops(self, address, data, function=False):
if function:
message = "<F {0} {1} {2}>".format(address, data['function'],
data['state'])
else:
message = "<t 1 {0} {1} {2}>".format(address, data['speed'],
data['direction'])
self.__mqtt_pub(message)
return True
def infra(self, data):
power = data['power']
if "track" in data:
track = " {}".forma(data['track'].upper())
else:
track = ""
if power:
self.__mqtt_pub('<1{}>'.format(track))
else:
self.__mqtt_pub('<0{}>'.format(track))
def emergency(self):
self.__mqtt_pub('<!>')

View File

3
dcc/driver/models.py Normal file
View File

@@ -0,0 +1,3 @@
from django.db import models
# Create your models here.

17
dcc/driver/serializers.py Normal file
View File

@@ -0,0 +1,17 @@
from rest_framework import serializers
class FunctionSerializer(serializers.Serializer):
function = serializers.IntegerField(required=True)
state = serializers.IntegerField(required=True)
class CabSerializer(serializers.Serializer):
speed = serializers.IntegerField(required=True)
direction = serializers.IntegerField(required=True)
class InfraSerializer(serializers.Serializer):
power = serializers.BooleanField(required=True)
track = serializers.ChoiceField(choices=('main', 'prog', 'join'),
required=False)

3
dcc/driver/tests.py Normal file
View File

@@ -0,0 +1,3 @@
from django.test import TestCase
# Create your tests here.

10
dcc/driver/urls.py Normal file
View File

@@ -0,0 +1,10 @@
from django.urls import path
from driver.views import SendCommand, Function, Cab, Emergency, Infra
urlpatterns = [
path('emergency', Emergency.as_view()),
path('infra', Infra.as_view()),
path('<int:address>/command', SendCommand.as_view()),
path('<int:address>/cab', Cab.as_view()),
path('<int:address>/function', Function.as_view()),
]

68
dcc/driver/views.py Normal file
View File

@@ -0,0 +1,68 @@
from django.views import View
from django.http import HttpResponse
from driver.serializers import (
FunctionSerializer, CabSerializer, InfraSerializer)
from rest_framework import status
from rest_framework.views import APIView
from rest_framework.response import Response
from dcc.parsers import PlainTextParser
from driver.connector import Connector
conn = Connector()
class SendCommand(APIView):
parser_classes = [PlainTextParser]
def put(self, request, address):
data = request.data
conn.passthrough(address, data)
return Response(data,
status=status.HTTP_202_ACCEPTED)
class Function(APIView):
def put(self, request, address):
serializer = FunctionSerializer(data=request.data)
if serializer.is_valid():
conn.ops(address, serializer.data, function=True)
return Response(serializer.data,
status=status.HTTP_202_ACCEPTED)
return Response(serializer.errors,
status=status.HTTP_400_BAD_REQUEST)
class Cab(APIView):
def put(self, request, address):
serializer = CabSerializer(data=request.data)
if serializer.is_valid():
conn.ops(address, serializer.data)
return Response(serializer.data,
status=status.HTTP_202_ACCEPTED)
return Response(serializer.errors,
status=status.HTTP_400_BAD_REQUEST)
class Infra(APIView):
def put(self, request):
serializer = InfraSerializer(data=request.data)
if serializer.is_valid():
conn.infra(serializer.data)
return Response(serializer.data,
status=status.HTTP_202_ACCEPTED)
return Response(serializer.errors,
status=status.HTTP_400_BAD_REQUEST)
class Emergency(View):
def put(self, request):
conn.emergency()
return HttpResponse()
def get(self, request):
conn.emergency()
return HttpResponse()