import re import os import json from wptserve.utils import isomorphic_decode def main(request, response): path = os.path.join(request.doc_root, u"media", "sine440.mp3") total_size = os.path.getsize(path) rewrites = json.loads(request.GET.first(b'rewrites', '[]')) range_header = request.headers.get(b'Range') range_header_match = range_header and re.search(r'^bytes=(\d*)-(\d*)$', isomorphic_decode(range_header)) start = None end = None if range_header_match: response.status = 206 start, end = range_header_match.groups() if range_header: status = 206 else: status = 200 for rewrite in rewrites: req_start, req_end = rewrite['request'] if start == req_start or req_start == '*': if end == req_end or req_end == '*': if 'response' in rewrite: start, end = rewrite['response'] if 'status' in rewrite: status = rewrite['status'] start = int(start or 0) end = int(end or total_size) headers = [] if status == 206: headers.append((b"Content-Range", b"bytes %d-%d/%d" % (start, end - 1, total_size))) headers.append((b"Accept-Ranges", b"bytes")) headers.append((b"Content-Type", b"audio/mp3")) headers.append((b"Content-Length", str(end - start))) headers.append((b"Cache-Control", b"no-cache")) video_file = open(path, "rb") video_file.seek(start) content = video_file.read(end) return status, headers, content