Ejemplo n.º 1
0
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())
Ejemplo n.º 2
0
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'])
Ejemplo n.º 3
0
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"],
    )
Ejemplo n.º 4
0
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)
Ejemplo n.º 5
0
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)