def post(label=None): stream, filename = request_content() if not stream: return "Nope.\n", 400 cur = model.get_digest(stream) args = {} if request.form.get('p'): args['private'] = 1 if request.form.get('s'): try: args['sunset'] = int(request.form['s']) except ValueError: return "Invalid sunset value.\n", 400 if label: label, _ = label args['label'] = label if not cur.count(): try: paste = model.insert(stream, **args) except errors.DuplicateKeyError: return "label already exists.\n", 409 uuid = str(UUID(hex=paste['_id'])) status = "created" else: paste = cur.__next__() uuid = None status = "already exists" return complex_response(paste, filename=filename, uuid=uuid, status=status)
def post(label=None): stream, filename = request_content() if not stream: return "Nope.\n", 400 cur = model.get_digest(stream) if not cur.count(): if label: label, _ = label try: paste = model.insert(stream, label=label) except errors.DuplicateKeyError: return "label already exists.\n", 409 elif request.form.get('p'): paste = model.insert(stream, private=1) else: paste = model.insert(stream) uuid = str(UUID(hex=paste['_id'])) status = "created" else: paste = cur.__next__() uuid = None status = "already exists" return complex_response(paste, filename=filename, uuid=uuid, status=status)
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
def get(sid=None, sha1=None, label=None, lexer=None, handler=None): cur = None if sid: sid, name, value = sid cur = model.get_content(**{ '$or' : [ { 'digest': { '$regex': '{}$'.format(sid) } }, { 'label' : value } ], 'private': { '$exists': False } }) if sha1: digest, name = sha1[:2] cur = model.get_content(digest = digest).hint([('digest', 1)]) if label: label, name = label cur = model.get_content(label = label).hint([('label', 1)]) if not cur or not cur.count(): return "Not found.\n", 404 paste = cur.__next__() if paste.get('sunset'): request.max_age = (paste['date'] + timedelta(seconds=paste['sunset'])) - datetime.utcnow() if request.max_age < timedelta(): request.max_age = 0 else: request.max_age = request.max_age.seconds if paste['date'] + timedelta(seconds=paste['sunset']) < datetime.utcnow(): max_age = datetime.utcnow() - (paste['date'] + timedelta(seconds=paste['sunset'])) uuid = UUID(hex=paste['_id']) paste = invalidate(uuid) result = model.delete(uuid) if not result['n']: return "This should not happen.", 500 return complex_response(paste, status="expired") content = model._get(paste.get('content')) if paste.get('redirect'): content = content.decode('utf-8') return redirect(content, '{}\n'.format(content)) mimetype, _ = guess_type(name) if not mimetype: mimetype = paste.get('mimetype') if lexer != None: return highlight(content, lexer) if handler != None: return _handler.get(handler, content, mimetype) if mimetype: return Response(content, mimetype=mimetype) return content
def delete(uuid): paste = invalidate(uuid) result = model.delete(uuid) if result['n']: return complex_response(paste, status="deleted") return "Not found.\n", 404