diff options
author | Daniel Baumann <daniel.baumann@progress-linux.org> | 2024-04-13 21:12:02 +0000 |
---|---|---|
committer | Daniel Baumann <daniel.baumann@progress-linux.org> | 2024-04-13 21:12:02 +0000 |
commit | 77e50caaf2ef81cd91075cf836fed0e75718ffb4 (patch) | |
tree | 53b7b411290b63192fc9e924a3b6b65cdf67e9d0 /debian/vendor-h2o/deps/brotli/python/bro.py | |
parent | Adding upstream version 1.8.3. (diff) | |
download | dnsdist-77e50caaf2ef81cd91075cf836fed0e75718ffb4.tar.xz dnsdist-77e50caaf2ef81cd91075cf836fed0e75718ffb4.zip |
Adding debian version 1.8.3-2.debian/1.8.3-2
Signed-off-by: Daniel Baumann <daniel.baumann@progress-linux.org>
Diffstat (limited to 'debian/vendor-h2o/deps/brotli/python/bro.py')
-rwxr-xr-x | debian/vendor-h2o/deps/brotli/python/bro.py | 132 |
1 files changed, 132 insertions, 0 deletions
diff --git a/debian/vendor-h2o/deps/brotli/python/bro.py b/debian/vendor-h2o/deps/brotli/python/bro.py new file mode 100755 index 0000000..c6f74ce --- /dev/null +++ b/debian/vendor-h2o/deps/brotli/python/bro.py @@ -0,0 +1,132 @@ +#! /usr/bin/env python +"""bro %s -- compression/decompression utility using the Brotli algorithm.""" + +from __future__ import print_function +import argparse +import sys +import os +import brotli +import platform + + +# default values of encoder parameters +DEFAULT_PARAMS = { + 'mode': brotli.MODE_GENERIC, + 'quality': 11, + 'lgwin': 22, + 'lgblock': 0, +} + + +def get_binary_stdio(stream): + """ Return the specified standard input, output or errors stream as a + 'raw' buffer object suitable for reading/writing binary data from/to it. + """ + assert stream in ['stdin', 'stdout', 'stderr'], "invalid stream name" + stdio = getattr(sys, stream) + if sys.version_info[0] < 3: + if sys.platform == 'win32': + # set I/O stream binary flag on python2.x (Windows) + runtime = platform.python_implementation() + if runtime == "PyPy": + # the msvcrt trick doesn't work in pypy, so I use fdopen + mode = "rb" if stream == "stdin" else "wb" + stdio = os.fdopen(stdio.fileno(), mode, 0) + else: + # this works with CPython -- untested on other implementations + import msvcrt + msvcrt.setmode(stdio.fileno(), os.O_BINARY) + return stdio + else: + # get 'buffer' attribute to read/write binary data on python3.x + if hasattr(stdio, 'buffer'): + return stdio.buffer + else: + orig_stdio = getattr(sys, "__%s__" % stream) + return orig_stdio.buffer + + +def main(args=None): + + parser = argparse.ArgumentParser( + prog='bro.py', + description="Compression/decompression utility using the Brotli algorithm.") + parser.add_argument('--version', action='version', version=brotli.__version__) + parser.add_argument('-i', '--input', metavar='FILE', type=str, dest='infile', + help='Input file', default=None) + parser.add_argument('-o', '--output', metavar='FILE', type=str, dest='outfile', + help='Output file', default=None) + parser.add_argument('-f', '--force', action='store_true', + help='Overwrite existing output file', default=False) + parser.add_argument('-d', '--decompress', action='store_true', + help='Decompress input file', default=False) + params = parser.add_argument_group('optional encoder parameters') + params.add_argument('-m', '--mode', metavar="MODE", type=int, choices=[0, 1, 2], + help='The compression mode can be 0 for generic input, ' + '1 for UTF-8 encoded text, or 2 for WOFF 2.0 font data. ' + 'Defaults to 0.') + params.add_argument('-q', '--quality', metavar="QUALITY", type=int, + choices=list(range(0, 12)), + help='Controls the compression-speed vs compression-density ' + 'tradeoff. The higher the quality, the slower the ' + 'compression. Range is 0 to 11. Defaults to 11.') + params.add_argument('--lgwin', metavar="LGWIN", type=int, + choices=list(range(10, 25)), + help='Base 2 logarithm of the sliding window size. Range is ' + '10 to 24. Defaults to 22.') + params.add_argument('--lgblock', metavar="LGBLOCK", type=int, + choices=[0] + list(range(16, 25)), + help='Base 2 logarithm of the maximum input block size. ' + 'Range is 16 to 24. If set to 0, the value will be set based ' + 'on the quality. Defaults to 0.') + params.add_argument('--custom-dictionary', metavar="FILE", type=str, dest='dictfile', + help='Custom dictionary file.', default = None) + # set default values using global DEFAULT_PARAMS dictionary + parser.set_defaults(**DEFAULT_PARAMS) + + options = parser.parse_args(args=args) + + if options.infile: + if not os.path.isfile(options.infile): + parser.error('file "%s" not found' % options.infile) + with open(options.infile, "rb") as infile: + data = infile.read() + else: + if sys.stdin.isatty(): + # interactive console, just quit + parser.error('no input') + infile = get_binary_stdio('stdin') + data = infile.read() + + if options.outfile: + if os.path.isfile(options.outfile) and not options.force: + parser.error('output file exists') + outfile = open(options.outfile, "wb") + else: + outfile = get_binary_stdio('stdout') + + if options.dictfile: + if not os.path.isfile(options.dictfile): + parser.error('file "%s" not found' % options.dictfile) + with open(options.dictfile, "rb") as dictfile: + custom_dictionary = dictfile.read() + else: + custom_dictionary = '' + + + try: + if options.decompress: + data = brotli.decompress(data, dictionary=custom_dictionary) + else: + data = brotli.compress( + data, mode=options.mode, quality=options.quality, + lgwin=options.lgwin, lgblock=options.lgblock, dictionary=custom_dictionary) + except brotli.error as e: + parser.exit(1,'bro: error: %s: %s' % (e, options.infile or 'sys.stdin')) + + outfile.write(data) + outfile.close() + + +if __name__ == '__main__': + main() |