2020-11-13 15:31:14 +01:00
|
|
|
from rest_framework.views import APIView
|
|
|
|
from rest_framework.response import Response
|
2020-11-16 16:30:41 +01:00
|
|
|
from django.http import FileResponse
|
|
|
|
|
|
|
|
from django.views.decorators.csrf import csrf_exempt
|
|
|
|
|
2020-11-13 15:31:14 +01:00
|
|
|
from rest_framework.decorators import schema
|
2020-11-16 16:30:41 +01:00
|
|
|
from rest_framework import status
|
2020-11-13 15:31:14 +01:00
|
|
|
|
|
|
|
from django.urls import reverse
|
|
|
|
|
|
|
|
from lib.utils.general import get_ip_address
|
|
|
|
|
2020-11-16 16:30:41 +01:00
|
|
|
from apps.synthea.api.serializers import SyntheaSerializer
|
|
|
|
|
|
|
|
from apps.synthea.lib.utils import available_states, available_modules,run_synthea
|
|
|
|
|
|
|
|
import mimetypes
|
|
|
|
|
|
|
|
|
2020-11-13 15:31:14 +01:00
|
|
|
@schema(None)
|
|
|
|
class Info(APIView):
|
|
|
|
"""
|
|
|
|
Show some API information. Also this can be used to check if the Hawk credentials are working.
|
|
|
|
|
|
|
|
Make sure your request does contain the header 'Content-Type': 'application/json'
|
|
|
|
"""
|
|
|
|
|
|
|
|
def get(self, request, format=None):
|
|
|
|
"""
|
|
|
|
Default API get action will return the following information in a dict:
|
|
|
|
|
|
|
|
- Connected user
|
|
|
|
- Used authentication scheme
|
|
|
|
- The remote IP of the connection
|
|
|
|
- The used content type
|
|
|
|
- The full url to the API documentation (OpenAPI)
|
|
|
|
- If a super token is used
|
|
|
|
"""
|
|
|
|
|
|
|
|
data = {
|
|
|
|
'type' : 'anonymous',
|
|
|
|
'auth' : 'none',
|
|
|
|
'remote_ip' : get_ip_address(request),
|
|
|
|
'content_type' : request.content_type,
|
|
|
|
'openapi' : request.build_absolute_uri(reverse('api:schema-redoc')),
|
|
|
|
}
|
|
|
|
|
|
|
|
if request.user.is_authenticated:
|
|
|
|
|
|
|
|
data['user'] = request.user.username
|
|
|
|
data['type'] = 'authenticated'
|
|
|
|
data['auth'] = str(request.successful_authenticator)
|
|
|
|
|
|
|
|
if request.user.token.is_supertoken:
|
|
|
|
data['type'] = 'supertoken'
|
|
|
|
else:
|
|
|
|
try:
|
|
|
|
assert request.user.researcher
|
|
|
|
data['type'] = 'researcher'
|
|
|
|
except AttributeError:
|
|
|
|
pass
|
|
|
|
|
2020-11-16 16:30:41 +01:00
|
|
|
return Response(data)
|
|
|
|
|
|
|
|
|
|
|
|
#@schema(None)
|
|
|
|
class States(APIView):
|
|
|
|
|
|
|
|
def get(self, request, format=None):
|
|
|
|
return Response(available_states())
|
|
|
|
|
|
|
|
|
|
|
|
class Modules(APIView):
|
|
|
|
|
|
|
|
def get(self, request, format=None):
|
|
|
|
return Response(available_modules())
|
|
|
|
|
|
|
|
class Generate(APIView):
|
|
|
|
|
|
|
|
def post(self, request, format=None):
|
|
|
|
print('Post data')
|
|
|
|
print(request.data)
|
|
|
|
|
|
|
|
serializer = SyntheaSerializer(data=request.data)
|
|
|
|
if serializer.is_valid():
|
|
|
|
synthea = serializer.save()
|
|
|
|
zipfile = synthea.generate()
|
|
|
|
print(zipfile)
|
|
|
|
response = FileResponse(zipfile.open('rb'), content_type='application/zip')
|
|
|
|
response['Content-Disposition'] = f'attachment; filename={zipfile.name}'
|
|
|
|
|
|
|
|
return response
|
|
|
|
|
|
|
|
|
|
|
|
#return Response(serializer.data, status=status.HTTP_201_CREATED)
|
|
|
|
return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)
|