diff options
author | jstebbins <[email protected]> | 2015-05-06 16:04:08 +0000 |
---|---|---|
committer | jstebbins <[email protected]> | 2015-05-06 16:04:08 +0000 |
commit | 9c0e97cc2c369e0c720441d182bbde20210742f4 (patch) | |
tree | 8b8f74ed24d0f617c9980d9043ebd53c33c531f3 /scripts/create_resources.py | |
parent | 81bcee10d2ad88f44c0f7791f2dd8da4ee2c1b76 (diff) |
libhb,cli: add preset management to libhb, use it in cli
This results in custom preset support in the CLI and additional
command line options to fully support all preset keys.
git-svn-id: svn://svn.handbrake.fr/HandBrake/trunk@7158 b64f7644-9d1e-0410-96f1-a4d463321fa5
Diffstat (limited to 'scripts/create_resources.py')
-rw-r--r-- | scripts/create_resources.py | 161 |
1 files changed, 161 insertions, 0 deletions
diff --git a/scripts/create_resources.py b/scripts/create_resources.py new file mode 100644 index 000000000..95921d317 --- /dev/null +++ b/scripts/create_resources.py @@ -0,0 +1,161 @@ +#! /bin/python +# + +import types +import os +import sys +import time +import datetime +import json +import plistlib +import getopt +from xml.parsers import expat + +resources = dict() +stack = list() +stack.append(resources) + +def top(ss): + return ss[len(ss)-1] + +def end_element_handler(tag): + global stack + + if tag == "section": + stack.pop() + +def start_element_handler(tag, attr): + global resources, stack + + current = top(stack) + key = val = None + if tag == "section": + key = attr["name"] + val = dict() + stack.append(val) + elif tag == "integer": + key = attr["name"] + val = int(attr["value"]) + elif tag == "json": + fbase = attr["file"] + fname = find_file(fbase) + key = attr["name"] + if fname != None and key != None: + try: + fp = open(fname) + except Exception, err: + print >> sys.stderr, ( "Error: %s" % str(err) ) + val = json.load(fp) + elif fname == None: + print >> sys.stderr, ( "Error: No such json file %s" % fbase ) + sys.exit(1) + elif tag == "plist": + fbase = attr["file"] + fname = find_file(fbase) + key = attr["name"] + if fname != None and key != None: + val = plistlib.readPlist(fname) + elif fname == None: + print >> sys.stderr, ( "Error: No such plist file %s" % fbase ) + sys.exit(1) + elif tag == "string": + fbase = attr["file"] + fname = find_file(fbase) + key = attr["name"] + if fname != None and key != None: + try: + fp = open(fname) + val = fp.read() + except Exception, err: + print >> sys.stderr, ( "Error: %s" % str(err) ) + sys.exit(1) + elif fname == None: + print >> sys.stderr, ( "Error: No such string file %s" % fbase ) + sys.exit(1) + + if val != None: + if type(current) == types.DictType: + current[key] = val + elif type(current) == types.TupleType: + current.append(val) + + +def cdata_handler(str): + return + +def resource_parse_file(infile): + parser = expat.ParserCreate() + parser.StartElementHandler = start_element_handler + parser.EndElementHandler = end_element_handler + parser.CharacterDataHandler = cdata_handler + parser.ParseFile(infile) + +def usage(): + print >> sys.stderr, ( + "Usage: %s [-I <inc path>] <resource list> [resource json]\n" + "Summary:\n" + " Creates a resource json from a resource list\n\n" + "Options:\n" + " I - Include path to search for files\n" + " <resource list> Input resources file\n" + " <resource json> Output resources json file\n" + % sys.argv[0] + ) + +inc_list = list() + +def find_file(name): + global inc_list + + for inc_dir in inc_list: + inc = "%s/%s" % (inc_dir, name) + if os.path.isfile(inc): + return inc + + if os.path.isfile(name): + return name + + return None + +def main(): + global inc_list + + OPTS = "I:" + try: + opts, args = getopt.gnu_getopt(sys.argv[1:], OPTS) + except getopt.GetoptError, err: + print >> sys.stderr, str(err) + usage() + sys.exit(2) + + for o, a in opts: + if o == "-I": + # add to include list + inc_list.append(a) + else: + assert False, "unhandled option" + + if len(args) > 2 or len(args) < 1: + usage() + sys.exit(2) + + try: + infile = open(args[0]) + except Exception, err: + print >> sys.stderr, ( "Error: %s" % str(err) ) + sys.exit(1) + + if len(args) > 1: + try: + outfile = open(args[1], "w") + except Exception, err: + print >> sys.stderr, ( "Error: %s" % str(err)) + sys.exit(1) + else: + outfile = sys.stdout + + resource_parse_file(infile) + json.dump(resources, outfile, indent=4, sort_keys=True) + +main() + |