summaryrefslogtreecommitdiff
path: root/framework/replay/programs/query.py
diff options
context:
space:
mode:
Diffstat (limited to 'framework/replay/programs/query.py')
-rw-r--r--framework/replay/programs/query.py119
1 files changed, 119 insertions, 0 deletions
diff --git a/framework/replay/programs/query.py b/framework/replay/programs/query.py
new file mode 100644
index 000000000..ba9b40585
--- /dev/null
+++ b/framework/replay/programs/query.py
@@ -0,0 +1,119 @@
+# coding=utf-8
+#
+# Copyright (c) 2019 Collabora Ltd
+# Copyright © 2020 Valve Corporation.
+#
+# Permission is hereby granted, free of charge, to any person obtaining a
+# copy of this software and associated documentation files (the "Software"),
+# to deal in the Software without restriction, including without limitation
+# the rights to use, copy, modify, merge, publish, distribute, sublicense,
+# and/or sell copies of the Software, and to permit persons to whom the
+# Software is furnished to do so, subject to the following conditions:
+#
+# The above copyright notice and this permission notice shall be included
+# in all copies or substantial portions of the Software.
+#
+# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
+# OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
+# THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR
+# OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
+# ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
+# OTHER DEALINGS IN THE SOFTWARE.
+#
+# SPDX-License-Identifier: MIT
+
+import argparse
+
+from framework import exceptions
+from framework.replay import query_traces_yaml as qty
+from . import parsers
+
+
+__all__ = ['query']
+
+
+def _traces_db_download_url(args):
+ y = qty.load_yaml(args.yaml_file)
+
+ url = qty.download_url(y) or ""
+
+ print(url)
+
+
+def _traces(args):
+ y = qty.load_yaml(args.yaml_file)
+
+ t_list = qty.traces(y,
+ trace_types=args.trace_types,
+ device_name=args.device_name,
+ checksum=args.checksum)
+
+ if args.checksum:
+ print('\n'.join(((t['path'] + '\n' + t['checksum'])
+ for t in t_list)))
+ else:
+ print('\n'.join((t['path'] for t in t_list)))
+
+
+def _checksum(args):
+ y = qty.load_yaml(args.yaml_file)
+
+ traces = y['traces']
+ try:
+ trace = next(t for t in traces if t['path'] == args.file_path)
+ except StopIteration:
+ print("")
+ return
+
+ print(qty.trace_checksum(trace, args.device_name))
+
+
+@exceptions.handler
+def query(input_):
+ """ Parser for replayer query command """
+ try:
+ parser = argparse.ArgumentParser(parents=[parsers.YAML])
+ # The "required" keyword is only available since python >= 3.7
+ subparsers = parser.add_subparsers(dest='command', required=True)
+ except TypeError:
+ parser = argparse.ArgumentParser(parents=[parsers.YAML])
+ # Add a destination due to
+ # https://github.com/python/cpython/pull/3027#issuecomment-330910633
+ subparsers = parser.add_subparsers(dest='command')
+
+ parser_checksum = subparsers.add_parser(
+ 'checksum',
+ parents=[parsers.DEVICE],
+ help=('Outputs, if available, the checksum that a specific device '
+ 'should produce for a specified trace file.'))
+ parser_checksum.add_argument(
+ 'file_path',
+ help=('the path to a trace file.'))
+ parser_checksum.set_defaults(func=_checksum)
+
+ parser_traces = subparsers.add_parser(
+ 'traces',
+ parents=[parsers.DEVICE],
+ help=('Outputs the trace files filtered by the optional arguments.'))
+ parser_traces.add_argument(
+ '-t', '--trace-types',
+ required=False,
+ default=None,
+ help=('a comma separated list of trace types to look for '
+ 'in recursive dir walks. '
+ 'If none are provide, all types are used by default'))
+ parser_traces.add_argument(
+ '-c', '--checksum',
+ action='store_true',
+ help='whether to print the checksum below every trace')
+ parser_traces.set_defaults(func=_traces)
+
+ parser_traces_db_download_url = subparsers.add_parser(
+ 'traces_db_download_url',
+ help=('Outputs, if available, the download URL.'))
+ parser_traces_db_download_url.set_defaults(func=_traces_db_download_url)
+
+ args = parser.parse_args(input_)
+
+ args.func(args)