Example #1
0
def project_json(app, request, project_name):
    # fail early if callback is invalid
    callback = request.args.get("callback")
    if callback:
        if not is_valid_json_callback_name(callback):
            raise BadRequest("invalid JSONP callback name")

    # Get the real project name for this project
    project = app.db.packaging.get_project(project_name)

    if project is None:
        raise NotFound("{} does not exist".format(project_name))

    # we're looking for the latest version
    versions = app.db.packaging.get_project_versions(project)
    if not versions:
        raise NotFound("{} has no releases".format(project))
    version = versions[0]

    rpc = xmlrpc.Interface(app, request)

    d = dict(info=rpc.release_data(project, version), urls=rpc.release_urls(project, version))
    for url in d["urls"]:
        url["upload_time"] = url["upload_time"].strftime("%Y-%m-%dT%H:%M:%S")

    data = json.dumps(d, sort_keys=True)

    # write the JSONP extra crap if necessary
    if callback:
        data = "/**/ %s(%s);" % (callback, data)

    response = Response(data, mimetype="application/json")
    response.headers["Content-Disposition"] = "inline"
    return response
Example #2
0
def project_json(app, request, project_name, version=None):
    # fail early if callback is invalid
    callback = request.args.get('callback')
    if callback:
        if not is_valid_json_callback_name(callback):
            raise BadRequest('invalid JSONP callback name')

    # Get the real project name for this project
    project = app.db.packaging.get_project(project_name)

    if project is None:
        raise NotFound("{} does not exist".format(project_name))

    # we're looking for the latest version
    versions = app.db.packaging.get_project_versions(project['name'])
    if version is None:
        if not versions:
            raise NotFound("{} has no releases".format(project_name))
        version = versions[0]
    elif version not in versions:
        raise NotFound("{} has no release {}".format(project_name, version))

    rpc = xmlrpc.Interface(app, request)

    d = dict(
        info=rpc.release_data(project['name'], version),
        urls=rpc.release_urls(project['name'], version),
        releases=rpc.all_release_urls(project['name']),
    )
    time_format = '%Y-%m-%dT%H:%M:%S'
    for url in d['urls']:
        url['upload_time'] = url['upload_time'].strftime(time_format)
    for release, urls in d['releases'].items():
        for url in urls:
            url['upload_time'] = url['upload_time'].strftime(time_format)

    data = json.dumps(d, sort_keys=True)

    # write the JSONP extra crap if necessary
    if callback:
        data = '/**/ %s(%s);' % (callback, data)

    serial = app.db.packaging.get_last_serial()

    response = Response(data, mimetype="application/json")
    response.headers['Content-Disposition'] = 'inline'
    response.headers.add("X-PyPI-Last-Serial", serial)
    return response
Example #3
0
def test_is_valid_json_callback_name(callback, expected):
    assert is_valid_json_callback_name(callback) == expected
Example #4
0
def test_is_valid_json_callback_name(callback, expected):
    assert is_valid_json_callback_name(callback) == expected