Example #1
0
 def create(self, request):
     """
     Throttled to create only 5 incidents by 5 minutes.
     """
     if request.content_type:
         try:
             data = request.data
             line = None
             if 'line_id' in data:
                 line = Line.objects.get(pk=int(data['line_id']))
             elif 'line_name' in data:
                 line = Line.objects.get_or_create(name=data['line_name'].strip())[0]
             if not line:
                 logger.error('Incident CRUD Handler got request with no line', exc_info=sys.exc_info(),
                   extra={
                       'request': request,
                       'url': request.build_absolute_uri(),
                       'data': {
                           'content_type': request.content_type,
                           'data': data
                       }
                   })
                 return rc.BAD_REQUEST
             comment = data['reason']
             source = data['source']
             incident = Incident(line=line, source=source, reason=comment)
             if 'level' in data:
                 incident.level = int(data['level'])
             incident.save()
             return HttpResponse(str(incident.id), status=201)
         except:
             logger.error('Incident CRUD Handler failed to process external request', exc_info=sys.exc_info(),
                   extra={
                       'request': request,
                       'url': request.build_absolute_uri(),
                       'data': {
                           'content_type': request.content_type,
                           'data': data
                       }
                   })
             return rc.BAD_REQUEST
     else:
         try:
             form = AddIncidentForm(request.POST)
             if form.is_valid():
                 form.save()            
                 return render('static/thanks.html', {'number': Incident.objects.count()});
             else:
                 resp = rc.BAD_REQUEST
                 resp.write("Incorrect parameters, submitted form is invalid.")
                 return resp
         except:     
             logger.error("Incident form submitted failed to be validated",
                          exc_info=sys.exc_info(), extra= {
                              'request': request,
                              'url': request.build_absolute_uri(),
                          })
             return rc.BAD_REQUEST