diff --git a/djangopypi2/apps/pypi_frontend/distutils_request.py b/djangopypi2/apps/pypi_frontend/distutils_request.py index 4a01119..3815bc4 100644 --- a/djangopypi2/apps/pypi_frontend/distutils_request.py +++ b/djangopypi2/apps/pypi_frontend/distutils_request.py @@ -48,8 +48,10 @@ def parse_distutils_request(request): One portion of this is the end marker: \r\n\r\n (what Django expects) versus \n\n (what distutils is sending). """ + # request.raw_post_data has been renamed request.body + # see: https://code.djangoproject.com/ticket/17323 try: - sep = request.raw_post_data.splitlines()[1] + sep = request.body.splitlines()[1] except: raise ValueError('Invalid post data') @@ -59,18 +61,27 @@ def parse_distutils_request(request): except Exception, e: pass - for part in filter(lambda e: e.strip(), request.raw_post_data.split(sep)): + for part in filter(lambda e: e.strip(), request.body.split(sep)): try: header, content = part.lstrip().split('\n',1) except Exception, e: continue - + + # normalize line endings: + # newer distutils can submit \r\n end-of-line marks. + if header.endswith('\r'): + header = header[:-1] + + if content.startswith('\r'): + content = content[1:] if content.startswith('\n'): content = content[1:] if content.endswith('\n'): content = content[:-1] - + if content.endswith('\r'): + content = content[:-1] + headers = _parse_header(header) if "name" not in headers: diff --git a/djangopypi2/apps/pypi_frontend/distutils_views.py b/djangopypi2/apps/pypi_frontend/distutils_views.py index 251af0f..b914e70 100644 --- a/djangopypi2/apps/pypi_frontend/distutils_views.py +++ b/djangopypi2/apps/pypi_frontend/distutils_views.py @@ -197,8 +197,8 @@ def _handle_uploads(request, release): return 'upload accepted' -def list_classifiers(request, mimetype='text/plain'): - response = HttpResponse(mimetype=mimetype) +def list_classifiers(request, content_type='text/plain'): + response = HttpResponse(content_type=content_type) response.write(u'\n'.join(map(lambda c: c.name,Classifier.objects.all()))) return response diff --git a/djangopypi2/apps/pypi_frontend/views.py b/djangopypi2/apps/pypi_frontend/views.py index 5703d4a..3bc6673 100644 --- a/djangopypi2/apps/pypi_frontend/views.py +++ b/djangopypi2/apps/pypi_frontend/views.py @@ -55,7 +55,7 @@ def simple_details(request, package_name): return HttpResponseRedirect(reverse('djangopypi2-simple-package-info', kwargs=dict(package_name=package.name))) return render_to_response('pypi_frontend/package_detail_simple.html', context_instance=RequestContext(request, dict(package=package)), - mimetype='text/html') + content_type='text/html') @_mirror_if_not_found('pypi') def package_details(request, package_name): @@ -67,10 +67,10 @@ def package_doap(request, package_name): package = get_object_or_404(Package, name=package_name) return render_to_response('pypi_frontend/package_doap.xml', context_instance=RequestContext(request, dict(package=package)), - mimetype='text/xml') + content_type='text/xml') def release_doap(request, package_name, version): release = get_object_or_404(Release, package__name=package_name, version=version) return render_to_response('pypi_frontend/release_doap.xml', context_instance=RequestContext(request, dict(release=release)), - mimetype='text/xml') + content_type='text/xml') diff --git a/djangopypi2/apps/pypi_packages/feeds.py b/djangopypi2/apps/pypi_packages/feeds.py index 284385c..7bdb691 100644 --- a/djangopypi2/apps/pypi_packages/feeds.py +++ b/djangopypi2/apps/pypi_packages/feeds.py @@ -13,7 +13,7 @@ def __call__(self, request, *args, **kwargs): except ObjectDoesNotExist: raise Http404('Feed object does not exist.') feedgen = self.get_feed(obj, request) - response = HttpResponse(mimetype=feedgen.mime_type) + response = HttpResponse(content_type=feedgen.mime_type) feedgen.write(response, 'utf-8') return response diff --git a/djangopypi2/apps/pypi_packages/release_views.py b/djangopypi2/apps/pypi_packages/release_views.py index 97d1cf4..3e28b05 100644 --- a/djangopypi2/apps/pypi_packages/release_views.py +++ b/djangopypi2/apps/pypi_packages/release_views.py @@ -93,7 +93,7 @@ def manage_metadata(request, package_name, version): 'pypi_packages/release_manage.html', dict(release=release, form=form), context_instance = RequestContext(request), - mimetype = settings.DEFAULT_CONTENT_TYPE, + content_type = settings.DEFAULT_CONTENT_TYPE, ) @user_maintains_package() @@ -115,7 +115,7 @@ def manage_files(request, package_name, version): 'pypi_packages/release_manage_files.html', dict(release=release, formset=formset, upload_form=DistributionUploadForm()), context_instance = RequestContext(request), - mimetype = settings.DEFAULT_CONTENT_TYPE, + content_type = settings.DEFAULT_CONTENT_TYPE, ) @user_maintains_package() @@ -138,5 +138,5 @@ def upload_file(request, package_name, version): 'pypi_packages/release_upload_file.html', dict(release=release, form=form), context_instance = RequestContext(request), - mimetype = settings.DEFAULT_CONTENT_TYPE, + content_type = settings.DEFAULT_CONTENT_TYPE, )