treewide: Use argparse.FileType in more places

Convert some scripts to use `argparse.FileType` where the change is relatively
easily doable. This allows better error messages as e.g. missing input files
will be detected during argument parsing. And it also makes writing to stdout
in absence of an explicit argument simpler.

Signed-off-by: Barnabás Pőcze <barnabas.pocze@ideasonboard.com>
Reviewed-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
This commit is contained in:
Barnabás Pőcze
2025-09-11 12:00:21 +02:00
parent 901aae13c1
commit b9fd53fbef
6 changed files with 49 additions and 84 deletions

View File

@@ -44,25 +44,25 @@ def main(argv):
parser = argparse.ArgumentParser()
parser.add_argument('--mode', '-m', type=str, required=True, choices=['controls', 'properties'],
help='Mode of operation')
parser.add_argument('--output', '-o', metavar='file', type=str,
parser.add_argument('--output', '-o', metavar='file', default=sys.stdout,
type=argparse.FileType('w', encoding='utf-8'),
help='Output file name. Defaults to standard output if not specified.')
parser.add_argument('--ranges', '-r', type=str, required=True,
parser.add_argument('--ranges', '-r', required=True, type=argparse.FileType('rb'),
help='Control id range reservation file.')
parser.add_argument('--template', '-t', dest='template', type=str, required=True,
parser.add_argument('--template', '-t', dest='template', required=True,
type=argparse.FileType('r', encoding='utf-8'),
help='Template file name.')
parser.add_argument('input', type=str, nargs='+',
parser.add_argument('input', nargs='+',
type=argparse.FileType('rb'),
help='Input file name.')
args = parser.parse_args(argv[1:])
ranges = {}
with open(args.ranges, 'rb') as f:
data = open(args.ranges, 'rb').read()
ranges = yaml.safe_load(data)['ranges']
ranges = yaml.safe_load(args.ranges)['ranges']
controls = {}
for input in args.input:
data = yaml.safe_load(open(input, 'rb').read())
data = yaml.safe_load(input)
vendor = data['vendor']
if vendor not in ranges.keys():
@@ -92,15 +92,10 @@ def main(argv):
env = jinja2.Environment()
env.filters['format_description'] = format_description
env.filters['snake_case'] = snake_case
template = env.from_string(open(args.template, 'r', encoding='utf-8').read())
template = env.from_string(args.template.read())
string = template.render(data)
if args.output:
output = open(args.output, 'w', encoding='utf-8')
output.write(string)
output.close()
else:
sys.stdout.write(string)
args.output.write(string)
return 0

View File

@@ -19,14 +19,12 @@ class DRMFourCC(object):
mod_vendor_regex = re.compile(r"#define DRM_FORMAT_MOD_VENDOR_([A-Z0-9_]+)[ \t]+([0-9a-fA-Fx]+)")
mod_regex = re.compile(r"#define ([A-Za-z0-9_]+)[ \t]+fourcc_mod_code\(([A-Z0-9_]+), ([0-9a-fA-Fx]+)\)")
def __init__(self, filename):
def __init__(self, file):
self.formats = {}
self.vendors = {}
self.mods = {}
for line in open(filename, 'rb').readlines():
line = line.decode('utf-8')
for line in file:
match = DRMFourCC.format_regex.match(line)
if match:
format, fourcc = match.groups()
@@ -80,32 +78,27 @@ def main(argv):
# Parse command line arguments
parser = argparse.ArgumentParser()
parser.add_argument('-o', dest='output', metavar='file', type=str,
parser.add_argument('-o', dest='output', metavar='file', default=sys.stdout,
type=argparse.FileType('w', encoding='utf-8'),
help='Output file name. Defaults to standard output if not specified.')
parser.add_argument('input', type=str,
parser.add_argument('input', type=argparse.FileType('rb'),
help='Input file name.')
parser.add_argument('template', type=str,
parser.add_argument('template', type=argparse.FileType('r', encoding='utf-8'),
help='Template file name.')
parser.add_argument('drm_fourcc', type=str,
parser.add_argument('drm_fourcc', type=argparse.FileType('r', encoding='utf-8'),
help='Path to drm_fourcc.h.')
args = parser.parse_args(argv[1:])
data = open(args.input, 'rb').read()
formats = yaml.safe_load(data)['formats']
formats = yaml.safe_load(args.input)['formats']
drm_fourcc = DRMFourCC(args.drm_fourcc)
env = jinja2.Environment()
template = env.from_string(open(args.template, 'r', encoding='utf-8').read())
template = env.from_string(args.template.read())
string = template.render({
'formats': generate_formats(formats, drm_fourcc),
})
if args.output:
output = open(args.output, 'wb')
output.write(string.encode('utf-8'))
output.close()
else:
sys.stdout.write(string)
args.output.write(string)
return 0

View File

@@ -138,18 +138,20 @@ def extend_control(ctrl):
def main(argv):
# Parse command line arguments
parser = argparse.ArgumentParser()
parser.add_argument('--output', '-o', metavar='file', type=str,
parser.add_argument('--output', '-o', metavar='file', default=sys.stdout,
type=argparse.FileType('w', encoding='utf-8'),
help='Output file name. Defaults to standard output if not specified.')
parser.add_argument('--template', '-t', dest='template', type=str, required=True,
parser.add_argument('--template', '-t', dest='template', required=True,
type=argparse.FileType('r', encoding='utf-8'),
help='Template file name.')
parser.add_argument('input', type=str, nargs='+',
parser.add_argument('input', nargs='+', type=argparse.FileType('rb'),
help='Input file name.')
args = parser.parse_args(argv[1:])
controls = {}
for input in args.input:
data = yaml.safe_load(open(input, 'rb').read())
data = yaml.safe_load(input)
vendor = data['vendor']
ctrls = controls.setdefault(vendor, [])
@@ -167,14 +169,10 @@ def main(argv):
env.filters['indent_str'] = indent_str
env.filters['snake_case'] = snake_case
env.filters['kebab_case'] = kebab_case
template = env.from_string(open(args.template, 'r', encoding='utf-8').read())
template = env.from_string(args.template.read())
string = template.render(data)
if args.output:
with open(args.output, 'w', encoding='utf-8') as output:
output.write(string)
else:
sys.stdout.write(string)
args.output.write(string)
return 0