def parse_xmlrpc_request(request): """ Parse the request and dispatch to the appropriate view """ args, command = xmlrpclib.loads(request.raw_post_data) if command in XMLRPC_COMMANDS: return get_class(XMLRPC_COMMANDS[command])(request, *args) else: return HttpResponseNotAllowed(XMLRPC_COMMANDS.keys())
def manage_metadata(request, owner, package, version, **kwargs): kwargs.pop('owner') kwargs.setdefault('template_name', 'userpypi/release_manage.html') kwargs.setdefault('template_object_name', 'release') kwargs.setdefault('extra_context', {}) kwargs.setdefault('mimetype', settings.DEFAULT_CONTENT_TYPE) release = get_object_or_404(Package, owner=request.user, name=package).get_release(version) if not release: raise Http404('Version %s does not exist for %s' % ( version, package, )) if not release.metadata_version in METADATA_FORMS: #TODO: Need to change this to a more meaningful error raise Http404() kwargs['extra_context'][kwargs['template_object_name']] = release form_class = get_class(METADATA_FORMS.get(release.metadata_version)) initial = {} multivalue = ('classifier', ) for key, values in release.package_info.iterlists(): if key in multivalue: initial[key] = values else: initial[key] = '\n'.join(values) if request.method == 'POST': form = form_class(data=request.POST, initial=initial) if form.is_valid(): for key, value in form.cleaned_data.iteritems(): if isinstance(value, basestring): release.package_info[key] = value elif hasattr(value, '__iter__'): release.package_info.setlist(key, list(value)) release.save() return create_update.redirect( kwargs.get('post_save_redirect', None), release) else: form = form_class(initial=initial) kwargs['extra_context']['form'] = form return render_to_response(kwargs['template_name'], kwargs['extra_context'], context_instance=RequestContext(request), mimetype=kwargs['mimetype'])
def manage_metadata(request, owner, package, version, **kwargs): kwargs.pop("owner") kwargs.setdefault("template_name", "userpypi/release_manage.html") kwargs.setdefault("template_object_name", "release") kwargs.setdefault("extra_context", {}) kwargs.setdefault("mimetype", settings.DEFAULT_CONTENT_TYPE) release = get_object_or_404(Package, owner=request.user, name=package).get_release(version) if not release: raise Http404("Version %s does not exist for %s" % (version, package)) if not release.metadata_version in METADATA_FORMS: # TODO: Need to change this to a more meaningful error raise Http404() kwargs["extra_context"][kwargs["template_object_name"]] = release form_class = get_class(METADATA_FORMS.get(release.metadata_version)) initial = {} multivalue = ("classifier",) for key, values in release.package_info.iterlists(): if key in multivalue: initial[key] = values else: initial[key] = "\n".join(values) if request.method == "POST": form = form_class(data=request.POST, initial=initial) if form.is_valid(): for key, value in form.cleaned_data.iteritems(): if isinstance(value, basestring): release.package_info[key] = value elif hasattr(value, "__iter__"): release.package_info.setlist(key, list(value)) release.save() return create_update.redirect(kwargs.get("post_save_redirect", None), release) else: form = form_class(initial=initial) kwargs["extra_context"]["form"] = form return render_to_response( kwargs["template_name"], kwargs["extra_context"], context_instance=RequestContext(request), mimetype=kwargs["mimetype"], )
def root(request, fallback_view=None, **kwargs): """ Root view of the package index, handle incoming actions from distutils or redirect to a more user friendly view """ if request.method == 'POST': if request.META['CONTENT_TYPE'] == 'text/xml': return parse_xmlrpc_request(request) parse_distutils_request(request) action = request.POST.get(':action','') else: action = request.GET.get(':action','') if not action: if fallback_view is None: fallback_view = get_class(FALLBACK_VIEW) if hasattr(fallback_view, 'as_view'): return fallback_view.as_view()(request, **kwargs) return fallback_view(request, **kwargs) if not action in ACTION_VIEWS: print 'unknown action: %s' % (action,) return HttpResponseNotAllowed(ACTION_VIEWS.keys()) return get_class(ACTION_VIEWS[action])(request, **kwargs)
def root(request, fallback_view=None, **kwargs): """ Root view of the package index, handle incoming actions from distutils or redirect to a more user friendly view """ if request.method == 'POST': if request.META['CONTENT_TYPE'] == 'text/xml': return parse_xmlrpc_request(request) parse_distutils_request(request) action = request.POST.get(':action', '') else: action = request.GET.get(':action', '') if not action: if fallback_view is None: fallback_view = get_class(FALLBACK_VIEW) if hasattr(fallback_view, 'as_view'): return fallback_view.as_view()(request, **kwargs) return fallback_view(request, **kwargs) if not action in ACTION_VIEWS: print 'unknown action: %s' % (action, ) return HttpResponseNotAllowed(ACTION_VIEWS.keys()) return get_class(ACTION_VIEWS[action])(request, **kwargs)