From feb935304be9162d3c1cfef0ac876df006489e6a Mon Sep 17 00:00:00 2001 From: Kevin Chen Date: Wed, 12 Apr 2023 11:09:34 -0400 Subject: [PATCH 1/3] initial commit, added basic logging --- src/pyvcam/__main__.py | 24 +++++++++++++++++++++--- src/pyvcam/driver.py | 5 +++++ 2 files changed, 26 insertions(+), 3 deletions(-) mode change 100644 => 100755 src/pyvcam/__main__.py diff --git a/src/pyvcam/__main__.py b/src/pyvcam/__main__.py old mode 100644 new mode 100755 index ca19631..de53e47 --- a/src/pyvcam/__main__.py +++ b/src/pyvcam/__main__.py @@ -17,7 +17,21 @@ from pyvcam.driver import PyVCAM -logger = logging.getLogger(__name__) +logger = logging.getLogger('pyvcam') +logger.setLevel(logging.DEBUG) +# create file handler which logs even debug messages +fh = logging.FileHandler('spam.log') +fh.setLevel(logging.DEBUG) +# create console handler with a higher log level +ch = logging.StreamHandler() +ch.setLevel(logging.ERROR) +# create formatter and add it to the handlers +formatter = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s') +fh.setFormatter(formatter) +ch.setFormatter(formatter) +# add the handlers to the logger +logger.addHandler(fh) +logger.addHandler(ch) def get_argparser(): parser = argparse.ArgumentParser(description="""PyVCAM controller. Use this controller to drive the Teledyne PrimeBSI camera. @@ -29,15 +43,19 @@ def get_argparser(): def main(): args = get_argparser().parse_args() common_args.init_logger_from_args(args) + logger.info('Creating an instance of PyVCAM') camera = PyVCAM() + logger.info('PyVCAM created. Opening camera...') try: camera.open() - logger.info('PyVCAM open.') + logger.info('Camera open. Establishing connection...') simple_server_loop({"pyvcam": camera}, common_args.bind_address_from_args(args), args.port) + except RuntimeError: + logger.exception("Connection refused. Check camera status") finally: camera.close() - logger.info('PyVCAM closed.') + logger.info('Camera closed.') del camera if __name__ == "__main__": diff --git a/src/pyvcam/driver.py b/src/pyvcam/driver.py index 815003a..cde78ea 100644 --- a/src/pyvcam/driver.py +++ b/src/pyvcam/driver.py @@ -14,7 +14,9 @@ from pyvcam.camera import Camera from pyvcam import constants as const from typing import NoReturn +import logging +module_logger = logging.getLogger('pyvcam.driver') class PyVCAM: """ @@ -27,6 +29,8 @@ def __init__(self) -> None: Creates camera object. **NOTE**: This does not open the camera. User has to call :func:`open` either in controller or experiment. """ + self.logger = logging.getLogger('pyvcam.driver.PyVCAM') + self.logger.info('Creating an instance of PyVCAM') pvc.init_pvcam() self.cam = [cam for cam in Camera.detect_camera()][0] @@ -56,6 +60,7 @@ def open(self) -> None: :return: None :raise RuntimeError: If call to PVCAM fails (e.g. Camera is already open). """ + self.logger.info('Opening camera') self.cam.open() def close(self) -> None: From 30d76d7c9eb842a985cc3475b43b3b4e7caafd77 Mon Sep 17 00:00:00 2001 From: Kevin Chen Date: Wed, 12 Apr 2023 16:20:23 -0400 Subject: [PATCH 2/3] minor changes --- src/pyvcam/__main__.py | 18 +++++++++++------- src/pyvcam/driver.py | 1 + 2 files changed, 12 insertions(+), 7 deletions(-) diff --git a/src/pyvcam/__main__.py b/src/pyvcam/__main__.py index de53e47..f295acf 100755 --- a/src/pyvcam/__main__.py +++ b/src/pyvcam/__main__.py @@ -2,7 +2,8 @@ """ __main__.py -Implement ARTIQ Network Device Support Package (NDSP) to support Teledyne PrimeBSI camera integration into ARTIQ experiment. +Implement ARTIQ Network Device Support Package (NDSP) to support Teledyne Prime BSI camera integration +into ARTIQ experiment. Kevin Chen 2023-02-24 @@ -33,14 +34,16 @@ logger.addHandler(fh) logger.addHandler(ch) -def get_argparser(): - parser = argparse.ArgumentParser(description="""PyVCAM controller. Use this controller to drive the Teledyne PrimeBSI camera. - See documentation at https://github.com/Photometrics/PyVCAM""") + +def get_argparser() -> argparse.ArgumentParser: + parser = argparse.ArgumentParser(description="""PyVCAM controller. Use this controller to drive the + Teledyne Prime BSI camera. See documentation at https://github.com/quantumion/PyVCAM""") common_args.simple_network_args(parser, 3249) common_args.verbosity_args(parser) return parser -def main(): + +def main() -> None: args = get_argparser().parse_args() common_args.init_logger_from_args(args) logger.info('Creating an instance of PyVCAM') @@ -49,14 +52,15 @@ def main(): try: camera.open() - logger.info('Camera open. Establishing connection...') + logger.info('Camera open.') simple_server_loop({"pyvcam": camera}, common_args.bind_address_from_args(args), args.port) except RuntimeError: - logger.exception("Connection refused. Check camera status") + logger.exception('Connection refused. Check camera status') finally: camera.close() logger.info('Camera closed.') del camera + if __name__ == "__main__": main() diff --git a/src/pyvcam/driver.py b/src/pyvcam/driver.py index cde78ea..54e9d8b 100644 --- a/src/pyvcam/driver.py +++ b/src/pyvcam/driver.py @@ -18,6 +18,7 @@ module_logger = logging.getLogger('pyvcam.driver') + class PyVCAM: """ Teledyne PrimeBSI camera control. From a836ef4a260ffd837aefa31943053c2587474c38 Mon Sep 17 00:00:00 2001 From: Kevin Chen Date: Thu, 13 Apr 2023 13:14:11 -0400 Subject: [PATCH 3/3] removed console output spam --- src/pyvcam/__main__.py | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/src/pyvcam/__main__.py b/src/pyvcam/__main__.py index f295acf..20c1908 100755 --- a/src/pyvcam/__main__.py +++ b/src/pyvcam/__main__.py @@ -14,22 +14,27 @@ from sipyco.pc_rpc import simple_server_loop from sipyco import common_args import argparse -import logging +import logging, logging.config from pyvcam.driver import PyVCAM logger = logging.getLogger('pyvcam') logger.setLevel(logging.DEBUG) +logger.propagate = False # prevents logging output flooding console + # create file handler which logs even debug messages -fh = logging.FileHandler('spam.log') +fh = logging.FileHandler('logfile.log') fh.setLevel(logging.DEBUG) + # create console handler with a higher log level ch = logging.StreamHandler() -ch.setLevel(logging.ERROR) +ch.setLevel(logging.DEBUG) + # create formatter and add it to the handlers formatter = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s') fh.setFormatter(formatter) ch.setFormatter(formatter) + # add the handlers to the logger logger.addHandler(fh) logger.addHandler(ch)