summaryrefslogtreecommitdiffstats
path: root/glucometerutils/glucometer.py
diff options
context:
space:
mode:
authorDiego Elio Pettenò <flameeyes@flameeyes.eu>2018-12-12 23:16:57 +0100
committerDiego Elio Pettenò <flameeyes@flameeyes.eu>2018-12-12 23:16:57 +0100
commitb1b2d814c0bdc883096bb8a23d397d5510189f9e (patch)
tree5e92df9bcad097d127c55be2240f47e05dff433e /glucometerutils/glucometer.py
parenthiddevice: split handle_ and hidapi_handle_. (diff)
downloadglucometerutils-b1b2d814c0bdc883096bb8a23d397d5510189f9e.tar
glucometerutils-b1b2d814c0bdc883096bb8a23d397d5510189f9e.tar.gz
glucometerutils-b1b2d814c0bdc883096bb8a23d397d5510189f9e.tar.bz2
glucometerutils-b1b2d814c0bdc883096bb8a23d397d5510189f9e.tar.lz
glucometerutils-b1b2d814c0bdc883096bb8a23d397d5510189f9e.tar.xz
glucometerutils-b1b2d814c0bdc883096bb8a23d397d5510189f9e.tar.zst
glucometerutils-b1b2d814c0bdc883096bb8a23d397d5510189f9e.zip
Diffstat (limited to 'glucometerutils/glucometer.py')
-rwxr-xr-xglucometerutils/glucometer.py236
1 files changed, 118 insertions, 118 deletions
diff --git a/glucometerutils/glucometer.py b/glucometerutils/glucometer.py
index 30efc83..97fe80e 100755
--- a/glucometerutils/glucometer.py
+++ b/glucometerutils/glucometer.py
@@ -17,123 +17,123 @@ from glucometerutils import common
from glucometerutils import exceptions
def main():
- if sys.version_info < (3, 4):
- raise Exception(
- 'Unsupported Python version, please use at least Python 3.4')
-
- parser = argparse.ArgumentParser()
- subparsers = parser.add_subparsers(dest="action")
-
- parser.add_argument(
- '--driver', action='store', required=True,
- help='Select the driver to use for connecting to the glucometer.')
- parser.add_argument(
- '--device', action='store', required=False,
- help=('Select the path to the glucometer device. Some devices require this '
- 'argument, others will try autodetection.'))
-
- parser.add_argument(
- '--vlog', action='store', required=False, type=int,
- help=('Python logging level. See the levels at '
- 'https://docs.python.org/3/library/logging.html#logging-levels'))
-
- subparsers.add_parser(
- 'help', help=('Display a description of the driver, including supported '
- 'features and known quirks.'))
- subparsers.add_parser(
- 'info', help='Display information about the meter.')
- subparsers.add_parser(
- 'zero', help='Zero out the data log of the meter.')
-
- parser_dump = subparsers.add_parser(
- 'dump', help='Dump the readings stored in the device.')
- parser_dump.add_argument(
- '--unit', action='store',
- choices=[unit.value for unit in common.Unit],
- help='Select the unit to use for the dumped data.')
- parser_dump.add_argument(
- '--with-ketone', action='store_true', default=False,
- help='Enable ketone reading if available on the glucometer.')
-
- parser_date = subparsers.add_parser(
- 'datetime', help='Reads or sets the date and time of the glucometer.')
- parser_date.add_argument(
- '--set', action='store', nargs='?', const='now', default=None,
- help='Set the date rather than just reading it from the device.')
-
- args = parser.parse_args()
-
- logging.basicConfig(level=args.vlog)
-
- try:
- driver = importlib.import_module('glucometerutils.drivers.' + args.driver)
- except ImportError as e:
- logging.error(
- 'Error importing driver "%s", please check your --driver parameter:\n%s',
- args.driver, e)
- return 1
-
- # This check needs to happen before we try to initialize the device, as the
- # help action does not require a --device at all.
- if args.action == 'help':
- print(inspect.getdoc(driver))
- return 0
-
- device = driver.Device(args.device)
-
- device.connect()
- device_info = device.get_meter_info()
-
- try:
- if args.action == 'info':
- try:
- time_str = device.get_datetime()
- except NotImplementedError:
- time_str = 'N/A'
- print("{device_info}Time: {time}".format(
- device_info=str(device_info), time=time_str))
- elif args.action == 'dump':
- unit = args.unit
- if unit is None:
- unit = device_info.native_unit
-
- readings = device.get_readings()
-
- if not args.with_ketone:
- readings = (reading for reading in readings
- if not isinstance(reading, common.KetoneReading))
-
- for reading in sorted(readings, key=lambda r: r.timestamp):
- print(reading.as_csv(unit))
- elif args.action == 'datetime':
- if args.set == 'now':
- print(device.set_datetime())
- elif args.set:
- try:
- from dateutil import parser as date_parser
- new_date = date_parser.parse(args.set)
- except ImportError:
- logging.error(
- 'Unable to import module "dateutil", please install it.')
- return 1
- except ValueError:
- logging.error('%s: not a valid date', args.set)
- return 1
- print(device.set_datetime(new_date))
- else:
- print(device.get_datetime())
- elif args.action == 'zero':
- confirm = input('Delete the device data log? (y/N) ')
- if confirm.lower() in ['y', 'ye', 'yes']:
- device.zero_log()
- print('\nDevice data log zeroed.')
- else:
- print('\nDevice data log not zeroed.')
+ if sys.version_info < (3, 4):
+ raise Exception(
+ 'Unsupported Python version, please use at least Python 3.4')
+
+ parser = argparse.ArgumentParser()
+ subparsers = parser.add_subparsers(dest="action")
+
+ parser.add_argument(
+ '--driver', action='store', required=True,
+ help='Select the driver to use for connecting to the glucometer.')
+ parser.add_argument(
+ '--device', action='store', required=False,
+ help=('Select the path to the glucometer device. Some devices require this '
+ 'argument, others will try autodetection.'))
+
+ parser.add_argument(
+ '--vlog', action='store', required=False, type=int,
+ help=('Python logging level. See the levels at '
+ 'https://docs.python.org/3/library/logging.html#logging-levels'))
+
+ subparsers.add_parser(
+ 'help', help=('Display a description of the driver, including supported '
+ 'features and known quirks.'))
+ subparsers.add_parser(
+ 'info', help='Display information about the meter.')
+ subparsers.add_parser(
+ 'zero', help='Zero out the data log of the meter.')
+
+ parser_dump = subparsers.add_parser(
+ 'dump', help='Dump the readings stored in the device.')
+ parser_dump.add_argument(
+ '--unit', action='store',
+ choices=[unit.value for unit in common.Unit],
+ help='Select the unit to use for the dumped data.')
+ parser_dump.add_argument(
+ '--with-ketone', action='store_true', default=False,
+ help='Enable ketone reading if available on the glucometer.')
+
+ parser_date = subparsers.add_parser(
+ 'datetime', help='Reads or sets the date and time of the glucometer.')
+ parser_date.add_argument(
+ '--set', action='store', nargs='?', const='now', default=None,
+ help='Set the date rather than just reading it from the device.')
+
+ args = parser.parse_args()
+
+ logging.basicConfig(level=args.vlog)
+
+ try:
+ driver = importlib.import_module('glucometerutils.drivers.' + args.driver)
+ except ImportError as e:
+ logging.error(
+ 'Error importing driver "%s", please check your --driver parameter:\n%s',
+ args.driver, e)
return 1
- else:
- return 1
- except exceptions.Error as err:
- print('Error while executing \'%s\': %s' % (args.action, str(err)))
- return 1
- device.disconnect()
+ # This check needs to happen before we try to initialize the device, as the
+ # help action does not require a --device at all.
+ if args.action == 'help':
+ print(inspect.getdoc(driver))
+ return 0
+
+ device = driver.Device(args.device)
+
+ device.connect()
+ device_info = device.get_meter_info()
+
+ try:
+ if args.action == 'info':
+ try:
+ time_str = device.get_datetime()
+ except NotImplementedError:
+ time_str = 'N/A'
+ print("{device_info}Time: {time}".format(
+ device_info=str(device_info), time=time_str))
+ elif args.action == 'dump':
+ unit = args.unit
+ if unit is None:
+ unit = device_info.native_unit
+
+ readings = device.get_readings()
+
+ if not args.with_ketone:
+ readings = (reading for reading in readings
+ if not isinstance(reading, common.KetoneReading))
+
+ for reading in sorted(readings, key=lambda r: r.timestamp):
+ print(reading.as_csv(unit))
+ elif args.action == 'datetime':
+ if args.set == 'now':
+ print(device.set_datetime())
+ elif args.set:
+ try:
+ from dateutil import parser as date_parser
+ new_date = date_parser.parse(args.set)
+ except ImportError:
+ logging.error(
+ 'Unable to import module "dateutil", please install it.')
+ return 1
+ except ValueError:
+ logging.error('%s: not a valid date', args.set)
+ return 1
+ print(device.set_datetime(new_date))
+ else:
+ print(device.get_datetime())
+ elif args.action == 'zero':
+ confirm = input('Delete the device data log? (y/N) ')
+ if confirm.lower() in ['y', 'ye', 'yes']:
+ device.zero_log()
+ print('\nDevice data log zeroed.')
+ else:
+ print('\nDevice data log not zeroed.')
+ return 1
+ else:
+ return 1
+ except exceptions.Error as err:
+ print('Error while executing \'%s\': %s' % (args.action, str(err)))
+ return 1
+
+ device.disconnect()