Ejemplo n.º 1
0
def put(**kwargs):
    if 'namespace' in kwargs:
        kwargs = _namespace_kwargs(kwargs)

    stream, filename = request_content()
    if not stream:
        return StatusResponse("no post content", 400)

    cur = model.get_digest(stream)
    try:
        return PasteResponse(next(cur), "already exists", filename)
    except StopIteration:
        pass

    if filename:
        kwargs['mimetype'], _ = guess_type(filename)

    # FIXME: such query; wow
    invalidate(**kwargs)
    result = model.put(stream, **kwargs)
    if result['n']:
        paste = next(model.get_meta(**kwargs))
        return PasteResponse(paste, "updated")

    return StatusResponse("not found", 404)
Ejemplo n.º 2
0
def put(**kwargs):
    if 'namespace' in kwargs:
        kwargs = _namespace_kwargs(kwargs)

    stream, filename = request_content()
    if not stream:
        return StatusResponse("no post content", 400)

    cur = model.get_digest(stream)
    try:
        return PasteResponse(next(cur), "already exists", filename)
    except StopIteration:
        pass

    if filename:
        kwargs['mimetype'], _ = guess_type(filename)

    # this entirely replaces paste headers, which might not be expected behavior
    headers = dict(allowed_headers(request.headers))

    # FIXME: such query; wow
    invalidate(**kwargs)
    result = model.put(stream, headers=headers, **kwargs)
    if result['n']:
        paste = next(model.get_meta(**kwargs))
        return PasteResponse(paste, "updated")

    return StatusResponse("not found", 404)
Ejemplo n.º 3
0
def put(uuid):
    stream, filename = request_content()
    if not stream:
        return "Nope.\n", 400

    cur = model.get_digest(stream)
    if cur.count():
        return complex_response(cur.__next__(), filename=filename, status="already exists")

    # FIXME: such query; wow
    invalidate(uuid)
    result = model.put(uuid, stream)
    if result['n']:
        paste = model.get_meta(_id=uuid.hex).__next__()
        return complex_response(paste, status="updated")

    return "Not found.\n", 404
Ejemplo n.º 4
0
def invalidate(uuid):
    cur = model.get_meta(_id=uuid.hex)
    if not cur or not cur.count():
        return
    paste = cur.__next__()

    base = current_app.config.get('VARNISH_BASE')
    if not base:
        return paste

    s = get_session()

    for url in all_urls(paste):
        url = urljoin(base, '/.*{}.*'.format(url))
        headers = {'Host': get_host(request.environ)}
        s.executor.submit(s.request, 'BAN', url, headers=headers)

    return paste
Ejemplo n.º 5
0
Archivo: cache.py Proyecto: ptpb/pb
def invalidate(**kwargs):
    cur = model.get_meta(**kwargs)
    try:
        paste = next(cur)
    except StopIteration:
        return

    base = current_app.config.get('VARNISH_BASE')
    if not base:
        return paste

    s = get_session()

    for url in all_urls(paste):
        url = urljoin(base, '/.*{}.*'.format(url))
        headers = {'Host': get_host(request.environ)}
        s.executor.submit(s.request, 'BAN', url, headers=headers)

    return paste
Ejemplo n.º 6
0
def invalidate(**kwargs):
    cur = model.get_meta(**kwargs)
    try:
        paste = next(cur)
    except StopIteration:
        return

    base = current_app.config.get('VARNISH_BASE')
    if not base:
        return paste

    s = get_session()

    for url in all_urls(paste):
        url = urljoin(base, '/.*{}.*'.format(url))
        headers = {'Host': get_host(request.environ)}
        s.executor.submit(s.request, 'BAN', url, headers=headers)

    return paste
Ejemplo n.º 7
0
def put(**kwargs):
    if 'namespace' in kwargs:
        kwargs = _namespace_kwargs(kwargs)

    stream, filename = request_content()
    if not stream:
        return StatusResponse("no post content", 400)

    cur = model.get_digest(stream)
    if cur.count():
        return PasteResponse(next(cur), "already exists", filename)

    if filename:
        kwargs['mimetype'], _ = guess_type(filename)

    # FIXME: such query; wow
    invalidate(**kwargs)
    result = model.put(stream, **kwargs)
    if result['n']:
        paste = next(model.get_meta(**kwargs))
        return PasteResponse(paste, "updated")

    return StatusResponse("not found", 404)
Ejemplo n.º 8
0
def stats():
    cur = model.get_meta()
    return DictResponse(dict(pastes=cur.count()))
Ejemplo n.º 9
0
def stats():
    cur = model.get_meta()
    return DictResponse(dict(pastes=cur.count()))