Example #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)
Example #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)
Example #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
Example #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
Example #5
0
File: cache.py Project: 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
Example #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
Example #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)
Example #8
0
def stats():
    cur = model.get_meta()
    return DictResponse(dict(pastes=cur.count()))
Example #9
0
def stats():
    cur = model.get_meta()
    return DictResponse(dict(pastes=cur.count()))