def create(request): """ Creates a new translation request for the current user. Does not yet work for anonymous users! """ LOGGER.info('Rendering create request view for user "{0}".'.format(request.user.username)) form = None if request.method == "POST": form = TranslationRequestForm(request.user, request.POST, request.FILES) if form.errors: LOGGER.info( "Form validation errors: {0}".format(["{0}: {1}".format(a, b[0]) for a, b in form.errors.items()]) ) if form.is_valid(): LOGGER.info("Create request form is valid.") new = TranslationRequest() new.shortname = request.POST["shortname"] new.owner = request.user new.worker = WorkerServer.objects.get(pk=int(request.POST["worker"])) message = TranslationRequestMessage() message.request_id = new.request_id message.source_language = request.POST["source_language"] message.target_language = request.POST["target_language"] message.source_text = u"" for chunk in request.FILES["source_text"].chunks(): message.source_text += unicode(chunk, "utf-8") handle = open("{0}/{1}.message".format(TRANSLATION_MESSAGE_PATH, new.request_id), "w+b") # pylint: disable-msg=E1101 handle.write(message.SerializeToString()) handle.close() new.save() # cfedermann: We have to decide whether the translation process # should directly be sent to the worker server or whether it # makes more sense to "queue" it on the broker server and have # a cronjob start the process when the worker is not busy... # This does have impact on system performance/robustness! new.start_translation() messages.add_message( request, messages.SUCCESS, "Successfully " 'started translation request "{0}".'.format(new.shortname) ) return HttpResponseRedirect(reverse("dashboard")) else: try: form = TranslationRequestForm(user=request.user) except AssertionError, msg: messages.add_message(request, messages.ERROR, msg) return HttpResponseRedirect(reverse("dashboard"))
def create(request): """ Creates a new translation request for the current user. Does not yet work for anonymous users! """ LOGGER.info('Rendering create request view for user "{0}".'.format( request.user.username)) form = None if request.method == "POST": form = TranslationRequestForm(request.POST, request.FILES) if form.errors: LOGGER.info('Form validation errors: {0}'.format( ['{0}: {1}'.format(a, b[0]) for a, b in form.errors.items()])) if form.is_valid(): LOGGER.info('Create request form is valid.') new = TranslationRequest() new.shortname = request.POST['shortname'] new.worker = WorkerServer.objects.get( pk=int(request.POST['worker'])) new.source_text = request.FILES['source_text'] text = '' for chunk in request.FILES['source_text'].chunks(): text += chunk new.request_id = new.start_translation(text) if not new.request_id: LOGGER.warning('Could not start translation request!') messages.add_message(request, messages.ERROR, 'Could not start translation request!') return HttpResponseRedirect('/dashboard/') new.owner = request.user new.save() messages.add_message(request, messages.SUCCESS, 'Successfully started translation request.') return HttpResponseRedirect('/dashboard/') else: form = TranslationRequestForm() #from serverland.dashboard.models import WorkerServer #workers = WorkerServer.objects.all() #active_workers = [w for w in workers if w.is_alive()] dictionary = {'title': 'MT Server Land (prototype) -- Create translation', 'form': form} return render_to_response('dashboard/create.html', dictionary, context_instance=RequestContext(request))
def create(self, request, shortname = None, results = False): '''Handles a POST request to create a new translation request.''' if shortname is not None or results: return rc.BAD_REQUEST print 'CREATE content-type', request.content_type # DEBUG # get the data from the POST request postdata = self.flatten_dict(request.data) # ensure that the worker field is present postdata['worker'] = postdata.get('worker','') # convert worker shortname to a worker ID if needed if not postdata['worker'].isdigit(): try: postdata['worker'] = str(WorkerServer.objects.get( shortname=postdata['worker']).id) except ObjectDoesNotExist: return rc.BAD_REQUEST # check whether the translation request is a duplicate if 'shortname' in postdata: try: TranslationRequest.objects.get(shortname=postdata['shortname']) return rc.DUPLICATE_ENTRY except MultipleObjectsReturned: return rc.DUPLICATE_ENTRY except ObjectDoesNotExist: pass # validate POST data using our Django form form = TranslationRequestForm(request.user, postdata, request.FILES) try: if not form.is_valid(): return rc.BAD_REQUEST except KeyError: return rc.BAD_REQUEST # create a new request object new = TranslationRequest() new.shortname = form.cleaned_data['shortname'] new.owner = request.user new.worker = form.cleaned_data['worker'] # create a new worker message message = TranslationRequestMessage() message.request_id = new.request_id message.source_language = form.cleaned_data['source_language'] message.target_language = form.cleaned_data['target_language'] message.source_text = u'' for chunk in request.FILES['source_text'].chunks(): message.source_text += unicode(chunk, 'utf-8') handle = open('{0}/{1}.message'.format(TRANSLATION_MESSAGE_PATH, new.request_id), 'w+b') handle.write(message.SerializeToString()) handle.close() new.save() new.start_translation() messages.add_message(request, messages.SUCCESS, 'Successfully ' \ 'started translation request "{0}".'.format( new.shortname)) # return 201 CREATED response = rc.CREATED # put the URI of the newly created object into the HTTP header # Location field (see RFC 2616) response['Location'] = reverse('requests', args=[new.request_id + '/']) # echo the created object inside the HTTP response # NOTE: this overwrites the "Location" header field set above. # See piston.resource.__call__() response.content = RequestHandler.request_to_dict(new) return response
def create(request): """ Creates a new translation request for the current user. Does not yet work for anonymous users! """ LOGGER.info('Rendering create request view for user "{0}".'.format(request.user.username)) form = None if request.method == "POST": form = TranslationRequestForm(request.POST, request.FILES) if form.errors: LOGGER.info( "Form validation errors: {0}".format(["{0}: {1}".format(a, b[0]) for a, b in form.errors.items()]) ) if form.is_valid(): LOGGER.info("Create request form is valid.") new = TranslationRequest() new.shortname = request.POST["shortname"] new.owner = request.user new.worker = WorkerServer.objects.get(pk=int(request.POST["worker"])) message = TranslationRequestMessage() message.request_id = new.request_id message.source_language = request.POST["source_language"] message.target_language = request.POST["target_language"] message.source_text = u"" for chunk in request.FILES["source_text"].chunks(): message.source_text += unicode(chunk, "utf-8") handle = open("{0}/{1}.message".format(TRANSLATION_MESSAGE_PATH, new.request_id), "w+b") handle.write(message.SerializeToString()) handle.close() new.save() # cfedermann: We have to decide whether the translation process # should directly be sent to the worker server or whether it # makes more sense to "queue" it on the broker server and have # a cronjob start the process when the worker is not busy... # This does have impact on system performance/robustness! new.start_translation() messages.add_message( request, messages.SUCCESS, "Successfully " 'started translation request "{0}".'.format(new.shortname) ) return HttpResponseRedirect("/dashboard/") else: form = TranslationRequestForm() # from serverland.dashboard.models import WorkerServer # workers = WorkerServer.objects.all() # active_workers = [w for w in workers if w.is_alive()] dictionary = {"title": "MT Server Land (prototype) -- Create translation", "form": form} return render_to_response("dashboard/create.html", dictionary, context_instance=RequestContext(request))