1be630eb07ddb84310fcc580acffcaa362a2dc606mbligh#
2be630eb07ddb84310fcc580acffcaa362a2dc606mbligh# Copyright 2008 Google Inc. All Rights Reserved.
3be630eb07ddb84310fcc580acffcaa362a2dc606mbligh
4be630eb07ddb84310fcc580acffcaa362a2dc606mbligh"""
5be630eb07ddb84310fcc580acffcaa362a2dc606mblighIf you need to change the default behavior of some atest commands, you
6be630eb07ddb84310fcc580acffcaa362a2dc606mblighcan create a site_<topic>.py file to subclass some of the classes from
7be630eb07ddb84310fcc580acffcaa362a2dc606mbligh<topic>.py.
8be630eb07ddb84310fcc580acffcaa362a2dc606mbligh
9be630eb07ddb84310fcc580acffcaa362a2dc606mblighThe following example would prevent the creation of platform labels.
10be630eb07ddb84310fcc580acffcaa362a2dc606mbligh"""
11be630eb07ddb84310fcc580acffcaa362a2dc606mbligh
12be630eb07ddb84310fcc580acffcaa362a2dc606mblighimport inspect, new, sys
13be630eb07ddb84310fcc580acffcaa362a2dc606mbligh
14be630eb07ddb84310fcc580acffcaa362a2dc606mblighfrom autotest_lib.cli import topic_common, label
15be630eb07ddb84310fcc580acffcaa362a2dc606mbligh
16be630eb07ddb84310fcc580acffcaa362a2dc606mbligh
17be630eb07ddb84310fcc580acffcaa362a2dc606mblighclass site_label(label.label):
18be630eb07ddb84310fcc580acffcaa362a2dc606mbligh    pass
19be630eb07ddb84310fcc580acffcaa362a2dc606mbligh
20be630eb07ddb84310fcc580acffcaa362a2dc606mbligh
21be630eb07ddb84310fcc580acffcaa362a2dc606mblighclass site_label_create(label.label_create):
22be630eb07ddb84310fcc580acffcaa362a2dc606mbligh    """Disable the platform option
23be630eb07ddb84310fcc580acffcaa362a2dc606mbligh    atest label create <labels>|--blist <file>"""
24be630eb07ddb84310fcc580acffcaa362a2dc606mbligh    def __init__(self):
25be630eb07ddb84310fcc580acffcaa362a2dc606mbligh        super(site_label_create, self).__init__()
26be630eb07ddb84310fcc580acffcaa362a2dc606mbligh        self.parser.remove_option("--platform")
27be630eb07ddb84310fcc580acffcaa362a2dc606mbligh
28be630eb07ddb84310fcc580acffcaa362a2dc606mbligh
29be630eb07ddb84310fcc580acffcaa362a2dc606mbligh    def parse(self):
30be630eb07ddb84310fcc580acffcaa362a2dc606mbligh        (options, leftover) = super(site_label_create, self).parse()
31be630eb07ddb84310fcc580acffcaa362a2dc606mbligh        self.is_platform = False
32be630eb07ddb84310fcc580acffcaa362a2dc606mbligh        return (options, leftover)
33be630eb07ddb84310fcc580acffcaa362a2dc606mbligh
34be630eb07ddb84310fcc580acffcaa362a2dc606mbligh
35be630eb07ddb84310fcc580acffcaa362a2dc606mbligh# The following boiler plate code should be added at the end to create
36be630eb07ddb84310fcc580acffcaa362a2dc606mbligh# all the other site_<topic>_<action> classes that do not modify their
37be630eb07ddb84310fcc580acffcaa362a2dc606mbligh# <topic>_<action> super class.
38be630eb07ddb84310fcc580acffcaa362a2dc606mbligh
39be630eb07ddb84310fcc580acffcaa362a2dc606mbligh# Any classes we don't override in label should be copied automatically
40be630eb07ddb84310fcc580acffcaa362a2dc606mblighfor cls in [getattr(label, n) for n in dir(label) if not n.startswith("_")]:
41be630eb07ddb84310fcc580acffcaa362a2dc606mbligh    if not inspect.isclass(cls):
42be630eb07ddb84310fcc580acffcaa362a2dc606mbligh        continue
43be630eb07ddb84310fcc580acffcaa362a2dc606mbligh    cls_name = cls.__name__
44be630eb07ddb84310fcc580acffcaa362a2dc606mbligh    site_cls_name = 'site_' + cls_name
45be630eb07ddb84310fcc580acffcaa362a2dc606mbligh    if hasattr(sys.modules[__name__], site_cls_name):
46be630eb07ddb84310fcc580acffcaa362a2dc606mbligh        continue
47be630eb07ddb84310fcc580acffcaa362a2dc606mbligh    bases = (site_label, cls)
48be630eb07ddb84310fcc580acffcaa362a2dc606mbligh    members = {'__doc__': cls.__doc__}
49be630eb07ddb84310fcc580acffcaa362a2dc606mbligh    site_cls = new.classobj(site_cls_name, bases, members)
50be630eb07ddb84310fcc580acffcaa362a2dc606mbligh    setattr(sys.modules[__name__], site_cls_name, site_cls)
51