[Piglit] [PATCH 11/13] framework: consolidate boilerplate in JSNOWriter class
Dylan Baker
baker.dylan.c at gmail.com
Sun Jun 22 16:02:38 PDT 2014
On Saturday, June 21, 2014 10:22:35 AM Ilia Mirkin wrote:
> On Sat, Jun 21, 2014 at 8:06 AM, Dylan Baker <baker.dylan.c at gmail.com>
wrote:
> > This moves all of the code for writing the name, the options, etc out of
> > run and resume and into a single method of JSONWriter. This should
> > reduce errors, code duplication, and help abstract a lot of problems
> > with future changes to the json away.
> >
> > Signed-off-by: Dylan Baker <baker.dylan.c at gmail.com>
>
> Reviewed-by: Ilia Mirkin <imirkin at alum.mit.edu>
>
> Although I'd prefer for there to also be a sister close function that
> wrote all the close_dicts...
Sure, I'll add that to the next version
>
> > ---
> >
> > framework/programs/run.py | 36 ++++++++----------------------------
> > framework/results.py | 30 ++++++++++++++++++++++++++++++
> > 2 files changed, 38 insertions(+), 28 deletions(-)
> >
> > diff --git a/framework/programs/run.py b/framework/programs/run.py
> > index 298f1e1..9255f64 100644
> > --- a/framework/programs/run.py
> > +++ b/framework/programs/run.py
> >
> > @@ -160,28 +160,18 @@ def run(input_):
> > result_filepath = path.join(args.results_path, 'main')
> > result_file = open(result_filepath, 'w')
> > json_writer = framework.results.JSONWriter(result_file)
> >
> > - json_writer.open_dict()
> >
> > - # Write out command line options for use in resuming.
> > - json_writer.write_dict_key('options')
> > - json_writer.open_dict()
> > - json_writer.write_dict_item('profile', args.test_profile)
> > - for key, value in env:
> > - json_writer.write_dict_item(key, value)
> > + # Create an dictionary to pass to initialize json, it needs the
> > contents of + # the env dictionary and profile and platform
> > information
> > + options = {'profile': args.test_profile}
> >
> > if args.platform:
> > - json_writer.write_dict_item('platform', args.platform)
> > - json_writer.close_dict()
> > -
> > - json_writer.write_dict_item('name', results.name)
> > -
> > - for key, value in core.collect_system_info().iteritems():
> > - json_writer.write_dict_item(key, value)
> > + options['platform'] = args.platform
> > + json_writer.initialize_json(options, results.name,
> > + core.collect_system_info())
> >
> > profile = framework.profile.merge_test_profiles(args.test_profile)
> > profile.results_dir = args.results_path
> >
> > - json_writer.write_dict_key('tests')
> > - json_writer.open_dict()
> >
> > time_start = time.time()
> > # Set the dmesg type
> >
> > if args.dmesg:
> > @@ -224,19 +214,9 @@ def resume(input_):
> > results_path = path.join(args.results_path, "main")
> > json_writer = framework.results.JSONWriter(open(results_path, 'w+'))
> >
> > - json_writer.open_dict()
> > - json_writer.write_dict_key("options")
> > - json_writer.open_dict()
> > - for key, value in results.options.iteritems():
> > - json_writer.write_dict_item(key, value)
> > - json_writer.close_dict()
> > -
> > - json_writer.write_dict_item('name', results.name)
> > - for key, value in core.collect_system_info().iteritems():
> > - json_writer.write_dict_item(key, value)
> > + json_writer.initialize_json(results.options, results.name,
> > + core.collect_system_info())
> >
> > - json_writer.write_dict_key('tests')
> > - json_writer.open_dict()
> >
> > for key, value in results.tests.iteritems():
> > json_writer.write_dict_item(key, value)
> > env.exclude_tests.add(key)
> >
> > diff --git a/framework/results.py b/framework/results.py
> > index 9823fc5..1edc423 100644
> > --- a/framework/results.py
> > +++ b/framework/results.py
> >
> > @@ -118,6 +118,36 @@ class JSONWriter(object):
> > #
> > self.__is_collection_empty = []
> >
> > + def initialize_json(self, options, name, env):
> > + """ Write boilerplate json code
> > +
> > + This writes all of the json except the actuall tests.
> > +
> > + Arguments:
> > + options -- any values to be put in the options dictionary, must
> > be a + dict-like object
> > + name -- the name of the test
> > + env -- any environment information to be written into the
> > results, must + be a dict-like object
> > +
> > + """
> > + self.open_dict()
> > + self.write_dict_item('name', name)
> > +
> > + self.write_dict_key('options')
> > + self.open_dict()
> > + for key, value in options.iteritems():
> > + # Loading a NoneType will break resume, and are a bug
> > + assert value is not None, "Value {} is NoneType".format(key)
> > + self.write_dict_item(key, value)
> > + self.close_dict()
> > +
> > + for key, value in env.iteritems():
> > + self.write_dict_item(key, value)
> > +
> > + self.write_dict_key('tests')
> > + self.open_dict()
> > +
> >
> > @synchronized_self
> >
> > def __write_indent(self):
> > if self.__inhibit_next_indent:
> > --
> > 2.0.0
> >
> > _______________________________________________
> > Piglit mailing list
> > Piglit at lists.freedesktop.org
> > http://lists.freedesktop.org/mailman/listinfo/piglit
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 473 bytes
Desc: This is a digitally signed message part.
URL: <http://lists.freedesktop.org/archives/piglit/attachments/20140622/6748bec8/attachment.sig>
More information about the Piglit
mailing list