Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Implement module of parameters #56

Merged
merged 4 commits into from
Nov 8, 2017
Merged
Changes from 1 commit
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Prev Previous commit
Next Next commit
Create and save a sentiment analysis with their arguments
  • Loading branch information
guidonu91 committed Nov 6, 2017
commit ee4a6d345de8a82620aacd960a9ca637f882aae6
59 changes: 49 additions & 10 deletions backoffice/core/views.py
Original file line number Diff line number Diff line change
Expand Up @@ -5,14 5,17 @@
from rest_framework.views import APIView
from django.contrib.auth.hashers import make_password
from django.contrib.auth.models import Group, Permission
from django.db import transaction
from core.models import (
User, Project, Dataset, Attribute, Analysis,
Visualization, VisualizationType, Ownership
Visualization, VisualizationType, Ownership,
Parameter
)
from core.serializers import (
UserSerializer, ProjectSerializer, DatasetSerializer,
AnalysisSerializer, VisualizationSerializer, VisualizationTypeSerializer,
OwnershipSerializer, GroupSerializer, PermissionSerializer, AttributeSerializer
OwnershipSerializer, GroupSerializer, PermissionSerializer,
AttributeSerializer, ArgumentSerializer
)
from core.constants import *
from core.permissions import CorePermissions, CorePermissionsOrAnonReadOnly
Expand Down Expand Up @@ -74,6 77,27 @@ def get_object(object, pk):
raise Http404


# Create a list of arguments for an analysis
# It uses the arguments passed as parameters.
# If some argument is not supplied,
# it uses de default value in the parameters table
def create_arguments(analysis_type, arguments):
arguments_list = []
parameters = Parameter.objects.filter(analysis_type_id = analysis_type)
for p in parameters:
if p.name in arguments:
value = arguments[p.name]
else:
value = p.default_value
parameter_id = p.id
analysis_id = Analysis.objects.latest('id').id
argument = {
'value':value,
'parameter':parameter_id,
'analysis':analysis_id
}
arguments_list.append(argument)
return arguments_list

# ---
# API View Classes
Expand All @@ -100,8 124,11 @@ def post(self, request, format=None):
resp.content = ex
return resp

# Get arguments
arguments = request.data['arguments']

# Call sentiment analizer
sentiment_analyzer = SentimentAnalyzer()
sentiment_analyzer = SentimentAnalyzer(**arguments)
sentiment_analyzer.analyze_docs(ideas)

# Get results
Expand All @@ -112,15 139,27 @@ def post(self, request, format=None):
analysis_status = EXECUTED

#save results
analysis = {'name': request.data['name'], 'project': request.data['project'],
'dataset': request.data['dataset'], 'analysis_type': SENTIMENT_ANALYSIS,
'analysis_status':analysis_status, 'result': results}
analysis = {
'name': request.data['name'], 'project': request.data['project'],
'dataset': request.data['dataset'], 'analysis_type': SENTIMENT_ANALYSIS,
'analysis_status':analysis_status, 'result': results
}

try:
serializer = AnalysisSerializer(data=analysis)
serializer.is_valid()
serializer.save()
return Response(serializer.data, status=status.HTTP_201_CREATED)
with transaction.atomic():
# Save analysis
analysisSerializer = AnalysisSerializer(data=analysis)
analysisSerializer.is_valid()
analysisSerializer.save()

# Save arguments
arguments_list = create_arguments(SENTIMENT_ANALYSIS, arguments)
for arg in arguments_list:
argumentSerializer = ArgumentSerializer(data=arg)
argumentSerializer.is_valid()
argumentSerializer.save()

return Response(analysisSerializer.data, status=status.HTTP_201_CREATED)
except Exception as ex:
resp = Response(status=status.HTTP_400_BAD_REQUEST)
resp.content = ex
Expand Down