Source code for tendril.scripts.writecalib

# Copyright (C) 2015 Chintalagiri Shashank
#
# This file is part of Tendril.
#
# This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU Affero General Public License as published by
# the Free Software Foundation, either version 3 of the License, or
# (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
# GNU Affero General Public License for more details.
#
# You should have received a copy of the GNU Affero General Public License
# along with this program.  If not, see <http://www.gnu.org/licenses/>.
"""
Device Calibration Writer Script (``tendril-writecalib``)
=========================================================

Writes calibration data to a device.

.. hint::

     - The calibration data is retrieved and calculated from the latest
       test results linked to the serial number of the device.
     - The commands to write to the device and the format of the calibration
       data are defined by the ``calibformat`` defined in the relevant
       product definition.

.. seealso::
    :func:`tendril.entityhub.products.get_product_calibformat`
    :func:`tendril.testing.testrunner.write_to_device`

.. rubric:: Script Usage

.. argparse::
    :module: tendril.scripts.writecalib
    :func: _get_parser
    :prog: tendril-writecalib
    :nodefault:

"""


import argparse

from tendril.entityhub import macs
from tendril.entityhub import serialnos
from tendril.testing import testrunner
from .helpers import add_base_options

from tendril.utils import log
logger = log.get_logger("writecalib", log.DEFAULT)


[docs]def _get_parser(): """ Constructs the CLI argument parser for the tendril-writecalib script. """ parser = argparse.ArgumentParser( description='Write calibration parameters to device.', prog='tendril-writecalib' ) add_base_options(parser) parser.add_argument( 'serialno', metavar='SNO', type=str, nargs='?', help='Device serial number' ) parser.add_argument( '--detect', '-d', metavar=('MACTYPE'), type=str, nargs=1, help='Autodetect serial number using the specified MACTYPE. ' 'No effect if serial number specified.' ) parser.add_argument( '--dry-run', '-n', action='store_true', default=False, help="Dry run only. Don't actually write to device." ) return parser
[docs]def run(serialno=None): """ Write calibration to device. :param serialno: The serial number of the device. """ if serialno is None: raise AttributeError("serialno cannot be None") devicetype = serialnos.get_serialno_efield(sno=serialno) logger.info(serialno + " is device : " + devicetype) testrunner.write_to_device(serialno, devicetype)
# user_input = raw_input("Print to Paper [y/N] ?: ").strip() # if user_input.lower() in ['y', 'yes', 'ok', 'pass']: # testrunner.publish_and_print( # serialno, devicetype, print_to_paper=True # ) # else: # testrunner.publish_and_print( # serialno, devicetype, print_to_paper=False # )
[docs]def main(): """ The tendril-writecalib script entry point. """ parser = _get_parser() args = parser.parse_args() if not args.serialno and not args.detect: parser.print_help() return if args.dry_run: print "Dry run not yet implemented. Not doing anything." return if not args.serialno: try: mactype = args.detect[0] sno = macs.get_sno_from_device(mactype) except: logger.error("Got exception when trying to detect serialno") raise else: sno = args.serialno run(sno)
if __name__ == '__main__': main()