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