Change the Attribute Configuration, %6.2f to %g

The following script runs through all attributes of a TangoDB and identifies those that have the %6.2f format in their configuration. It changes this format to %g.

#!/usr/bin/env python
""" attrConfig.py changes the attribute configuration from '%6.2f' to '%g' """

import sys
import PyTango
import HasyUtils
from optparse import OptionParser

usage = "%prog [-x] [-c]\n" + \
    "  Changes the attribute configuration from '%6.2f' to '%g'"

parser = OptionParser(usage=usage)
parser.add_option( "-c", action="store_true", dest="classlist", 
                   default = False, help="display classlist (harmless)")
parser.add_option( "-d", action="store_true", dest="dryrun", 
                   default = False, help="dry run (harmless)")
parser.add_option( "-x", action="store_true", dest="execute", 
                   default = False, help="really execute (not harmless)")

(options, args) = parser.parse_args()
#
# 'dry-run' and 'execute', both cannot by True
#
if options.dryrun and options.execute:
    parser.print_help()
    sys.exit(255)
#
# nothing specified, print help and exit
#
if not options.classlist and not options.dryrun and not options.execute:
    parser.print_help()
    sys.exit(255)
#
# get all classes
#
classList = HasyUtils.getClassList()
#
# the class list is printed as an array [ 'Motor', 'OmsVme58', ...] 
# 
if options.classlist:
    print "Classes on", HasyUtils.getHostList()
    print classList
    sys.exit(0)
#
# you may wish to find all classes with './attrConfig.py -c' and
# then limit the action to selected classes, like
#
# classList = [ 'GalilDMCSlit', 'Motor', 'OmsVme58', 'PseudoAxes', 'PseudoAxis', 'TangoMotor','VmExecutor']
#
for clss in classList:
    print clss
    if options.classlist:
        continue
    devs = HasyUtils.getDeviceNamesByClass( clss)
    for dev in devs:
        print " ", dev
        try:
            proxy = PyTango.DeviceProxy( dev)
            attrs = proxy.get_attribute_list()
        except:
            continue

        for attr in attrs:
            attrInfo = proxy.get_attribute_config( attr)
            if attrInfo.format == "%6.2f":
                print "    ", attrInfo.name, attrInfo.format
                if options.execute is True:
                    print "      from '%6.2f' to '%g'"
                    attrInfo.format = "%g"
                    proxy.set_attribute_config( attrInfo)
                elif options.dryrun is True:
                    print "      would change '%6.2f' to '%g'"



2019-11-13