def form_upload(request, username): """ XForm upload view. Briefcase Aggregate API /formUpload. """ form_user = get_object_or_404(User, username__iexact=username) __, ___ = UserProfile.objects.get_or_create(user=form_user) authenticator = HttpDigestAuthenticator() if not authenticator.authenticate(request): return authenticator.build_challenge_response() if form_user != request.user: return HttpResponseForbidden( _(u"Not allowed to upload form[s] to %(user)s account." % {'user': form_user})) if request.method == 'HEAD': response = OpenRosaResponse(status=204) response['Location'] = request.build_absolute_uri().replace( request.get_full_path(), '/%s/formUpload' % form_user.username) return response xform_def = request.FILES.get('form_def_file', None) content = u"" if isinstance(xform_def, File): do_form_upload = PublishXForm(xform_def, form_user) xform = publish_form(do_form_upload.publish_xform) status = 201 if isinstance(xform, XForm): content = _(u"%s successfully published." % xform.id_string) else: content = xform['text'] if isinstance(content, Exception): content = content.message status = 500 else: status = 400 return OpenRosaResponse(content, status=status)
def _upload_xform(self, path, file_name): xml_file = default_storage.open(path) xml_file.name = file_name k = PublishXForm(xml_file, self.user) return publish_form(k.publish_xform)