Exemple #1
0
def main(cmdline=None):
    # Parse the command line arguments
    parser = argparse.ArgumentParser(prog='initdb',description="Initialize the database for the thermostat backend.")
    parser.add_argument('-c','--config',help='Configuration file path',default='thermostat.conf',dest='configfile',metavar='filename')
    parser.add_argument('-y','--yes',action='store_true',help='Answer "yes" to all prompts')
    if cmdline is None:
        args = parser.parse_args()
    else:
        args = parser.parse_args(cmdline)
    # Get the config file name from command line
    defaultfile = 'thermostat.conf.defaults'
    config = Config(args.configfile,defaultfile)
    # Create engine and bind session
    cxn = config.option('connection')
    echo = config.option('debug/echosql',Config.BOOL)
    engine = create_engine(cxn,echo=echo)
    # Check which tables are already there
    mdtables = [x for x in Base.metadata.tables]
    enginetables = engine.table_names()
    existing,new = [],[]
    for t in mdtables:
        if t in enginetables:
            existing.append(t)
        else:
            new.append(t)
    # Confirm table creations
    confirmstring = 'Tables in engine: {0}\nTables to create: {1}\n'
    print(confirmstring.format(','.join(existing),','.join(new)))
    if len(new) > 0:
        # Boolean short-circuit: only prompts if not args['yes']
        if args.yes==True or input('Continue? [y/n] ').lower() == 'y':
            Base.metadata.create_all(engine)
            print('Done.')
        else:
            print('Abort.')
    else:
        print('No tables to create.')
    return 0
def main(cmdline=None):
    """Main entry point."""
    # Set up command line parser
    parser = argparse.ArgumentParser(
        prog='manage-sensors',
        description='Manage the sensors in the database')
    parser.add_argument('-c',
                        '--config',
                        help='Configuration file path',
                        default='thermostat.conf',
                        dest='configfile',
                        metavar='filename')
    parser.add_argument('-y',
                        '--yes',
                        action='store_true',
                        help='Answer "yes" to all prompts')
    main_subparsers = parser.add_subparsers()

    parser_list = main_subparsers.add_parser(
        'list',
        description='List all sensors organized by group',
        help='List all sensors organized by group')
    parser_list.set_defaults(func=listsensors)

    parser_add = main_subparsers.add_parser(
        'addsensor',
        description='Add a sensor to the database',
        help='Add a sensor')
    parser_add.add_argument('-n', '--name')
    parser_add.add_argument('-d', '--description')
    add_subparsers = parser_add.add_subparsers(help='Type of sensor to add')

    parser_aw = add_subparsers.add_parser(
        'accuweather',
        description='Add an Accuweather sensor to the database',
        help='Add Accuweather sensor')
    parser_aw.add_argument('zipcode', help='ZIP Code for Accuweather sensor')
    parser_aw.set_defaults(func=add_accuweather)

    parser_w1 = add_subparsers.add_parser(
        'w1therm',
        description='Add a W1Therm sensor to the database',
        help='Add W1Therm sensor')
    parser_w1.add_argument('type', type=int)
    parser_w1.add_argument('id')
    parser_w1.set_defaults(func=add_w1therm)

    parser_addgroup = main_subparsers.add_parser(
        'addgroup',
        description='Add a sensor group to the database',
        help='Add a sensor group')
    parser_addgroup.add_argument('name')
    parser_addgroup.add_argument('-d', '--description')
    parser_addgroup.set_defaults(func=add_group)

    parser_changegroup = main_subparsers.add_parser(
        'changegroup',
        description=
        "Change a sensor's assigned group. Leave groupid blank to remove its group.",
        help="Change a sensor's group")
    parser_changegroup.add_argument('sensorid',
                                    type=int,
                                    help='ID of the sensor to modify')
    parser_changegroup.add_argument(
        'groupid',
        nargs='?',
        default=None,
        type=int,
        help="ID of the sensor's new group (blank for none)")
    parser_changegroup.set_defaults(func=change_group)

    parser_readsensor = main_subparsers.add_parser(
        'readsensor',
        description="Take a reading from a sensor",
        help="Read a sensor's value")
    parser_readsensor.add_argument('sensorid',
                                   type=int,
                                   help='ID of the sensor to be read')
    parser_readsensor.add_argument('-s',
                                   '--save',
                                   action='store_true',
                                   help='Save the reading to the database')
    parser_readsensor.set_defaults(func=readsensor)

    if cmdline is None:
        args = parser.parse_args()
    else:
        args = parser.parse_args(cmdline)

    # Get the config file name from command line
    defaultfile = 'thermostat.conf.defaults'
    config = Config(args.configfile, defaultfile)
    # Create engine and bind session
    cxn = config.option('connection')
    echo = config.option('debug/echosql', Config.BOOL)
    engine = create_engine(cxn, echo=echo)
    Session.configure(bind=engine)
    # Check what the command is and call appropriate function
    args.func(args)
    return 0
def main(cmdline=None):
    """Main entry point."""
    # Set up command line parser
    parser = argparse.ArgumentParser(prog="manage-sensors", description="Manage the sensors in the database")
    parser.add_argument(
        "-c",
        "--config",
        help="Configuration file path",
        default="thermostat.conf",
        dest="configfile",
        metavar="filename",
    )
    parser.add_argument("-y", "--yes", action="store_true", help='Answer "yes" to all prompts')
    main_subparsers = parser.add_subparsers()

    parser_list = main_subparsers.add_parser(
        "list", description="List all sensors organized by group", help="List all sensors organized by group"
    )
    parser_list.set_defaults(func=listsensors)

    parser_add = main_subparsers.add_parser(
        "addsensor", description="Add a sensor to the database", help="Add a sensor"
    )
    parser_add.add_argument("-n", "--name")
    parser_add.add_argument("-d", "--description")
    add_subparsers = parser_add.add_subparsers(help="Type of sensor to add")

    parser_aw = add_subparsers.add_parser(
        "accuweather", description="Add an Accuweather sensor to the database", help="Add Accuweather sensor"
    )
    parser_aw.add_argument("zipcode", help="ZIP Code for Accuweather sensor")
    parser_aw.set_defaults(func=add_accuweather)

    parser_w1 = add_subparsers.add_parser(
        "w1therm", description="Add a W1Therm sensor to the database", help="Add W1Therm sensor"
    )
    parser_w1.add_argument("type", type=int)
    parser_w1.add_argument("id")
    parser_w1.set_defaults(func=add_w1therm)

    parser_addgroup = main_subparsers.add_parser(
        "addgroup", description="Add a sensor group to the database", help="Add a sensor group"
    )
    parser_addgroup.add_argument("name")
    parser_addgroup.add_argument("-d", "--description")
    parser_addgroup.set_defaults(func=add_group)

    parser_changegroup = main_subparsers.add_parser(
        "changegroup",
        description="Change a sensor's assigned group. Leave groupid blank to remove its group.",
        help="Change a sensor's group",
    )
    parser_changegroup.add_argument("sensorid", type=int, help="ID of the sensor to modify")
    parser_changegroup.add_argument(
        "groupid", nargs="?", default=None, type=int, help="ID of the sensor's new group (blank for none)"
    )
    parser_changegroup.set_defaults(func=change_group)

    parser_readsensor = main_subparsers.add_parser(
        "readsensor", description="Take a reading from a sensor", help="Read a sensor's value"
    )
    parser_readsensor.add_argument("sensorid", type=int, help="ID of the sensor to be read")
    parser_readsensor.add_argument("-s", "--save", action="store_true", help="Save the reading to the database")
    parser_readsensor.set_defaults(func=readsensor)

    if cmdline is None:
        args = parser.parse_args()
    else:
        args = parser.parse_args(cmdline)

    # Get the config file name from command line
    defaultfile = "thermostat.conf.defaults"
    config = Config(args.configfile, defaultfile)
    # Create engine and bind session
    cxn = config.option("connection")
    echo = config.option("debug/echosql", Config.BOOL)
    engine = create_engine(cxn, echo=echo)
    Session.configure(bind=engine)
    # Check what the command is and call appropriate function
    args.func(args)
    return 0