import gphoto2 as gp import shutil from . import leds, config class Camera: def capture(self): return None class RealCamera(Camera): def __init__(self): self.inner = gp.Camera() def __enter__(self): self.inner.init() return self def __exit__(self, *args): self.inner.exit() def capture(self): try: return self.inner.capture(gp.GP_CAPTURE_IMAGE) except Exception as e: print('An error occured when capturing photo', e) return None def save(self, capture, output_file): preview = self.inner.file_get(capture.folder, capture.name[:-3] + 'JPG', gp.GP_FILE_TYPE_NORMAL) raw = self.inner.file_get(capture.folder, capture.name, gp.GP_FILE_TYPE_RAW) preview.save(output_file + '.jpg') raw.save(output_file + '.cr2') class DummyCamera(Camera): def __init__(self, leds: leds.DummyLeds): self.leds = leds def __enter__(self): return self def __exit__(self, *args): pass def capture(self): # Find which leds are turned on found = None all_on = False for led in self.leds.leds: if led.is_on: if found is None: found = led else: all_on = True if all_on: return 'data-keep/small/all_on.jpg' elif found is not None: return 'data-keep/small/' + str(found) + '.jpg' else: return 'data-keep/small/all_off.jpg' def save(self, capture, output_file): shutil.copyfile(capture, output_file + '.jpg') camera = DummyCamera(leds.get()) if config.CAMERA == "dummy" else RealCamera() def get(): return camera