def main():
    args = parse_command_line()
    configure_logging(args.log_file, args.log_level)
    shooter = SecondShooter(camera=args.camera, port=args.port)
    run_count = -1 if args.repeat_forever else args.run_count

    while run_count != 0:
        with open(args.file, 'r') as script:
            shooter.run(script)
        run_count -= 1
예제 #2
0
def test_run_capture():
    """Test run calls capture."""
    with mock.patch.object(
            SecondShooter, 'aperture') as mock_aperture, mock.patch.object(
                SecondShooter, 'capture') as mock_capture, mock.patch.object(
                    SecondShooter, 'iso') as mock_iso, mock.patch.object(
                        SecondShooter,
                        'shutter') as mock_shutter, mock.patch.object(
                            SecondShooter,
                            'wait') as mock_wait, mock.patch.object(
                                SecondShooter, 'default') as mock_default:
        shooter = SecondShooter('Nikon', 'port')
        shooter.run('cmd: capture')

    assert not mock_aperture.called
    mock_capture.assert_called_with(cmd='capture')
    assert not mock_iso.called
    assert not mock_shutter.called
    assert not mock_wait.called
    assert not mock_default.called
예제 #3
0
def test_run_empty():
    """Test run with no commands."""
    with mock.patch.object(
            SecondShooter, 'aperture') as mock_aperture, mock.patch.object(
                SecondShooter, 'capture') as mock_capture, mock.patch.object(
                    SecondShooter, 'iso') as mock_iso, mock.patch.object(
                        SecondShooter,
                        'shutter') as mock_shutter, mock.patch.object(
                            SecondShooter,
                            'wait') as mock_wait, mock.patch.object(
                                SecondShooter, 'default') as mock_default:
        shooter = SecondShooter('Nikon', 'port')
        shooter.run('---')

    assert not mock_aperture.called
    assert not mock_capture.called
    assert not mock_iso.called
    assert not mock_shutter.called
    assert not mock_wait.called
    assert not mock_default.called
예제 #4
0
def test_run_default():
    """Test run calls default when it gets an unkown command."""
    with mock.patch.object(
            SecondShooter, 'aperture') as mock_aperture, mock.patch.object(
                SecondShooter, 'capture') as mock_capture, mock.patch.object(
                    SecondShooter, 'iso') as mock_iso, mock.patch.object(
                        SecondShooter,
                        'shutter') as mock_shutter, mock.patch.object(
                            SecondShooter,
                            'wait') as mock_wait, mock.patch.object(
                                SecondShooter, 'default') as mock_default:
        shooter = SecondShooter('Nikon', 'port')
        shooter.run('cmd: not a command')

    assert not mock_aperture.called
    assert not mock_capture.called
    assert not mock_iso.called
    assert not mock_shutter.called
    assert not mock_wait.called
    mock_default.assert_called_with(cmd='not a command')
예제 #5
0
def test_construction_arguments():
    test_settings = {'test': 2, 'settings': 3}
    with mock.patch('second_shooter.second_shooter.load_camera_settings',
                    return_value=test_settings
                    ) as mock_load_camera_settings, mock.patch.object(
                        SecondShooter, 'set_target_settings'):
        shooter = SecondShooter('camera', 'port')

        assert mock_load_camera_settings.called
        assert shooter._camera == 'camera'
        assert shooter._port == 'port'
        assert shooter._camera_settings == test_settings
        assert shooter._command['aperture'] == shooter.aperture
        assert shooter._command['capture'] == shooter.capture
        assert shooter._command['iso'] == shooter.iso
        assert shooter._command['shutter'] == shooter.shutter
        assert shooter._command['wait'] == shooter.wait
예제 #6
0
def test_construction_defaults():
    test_settings = {'test': 0, 'settings': 1}
    with mock.patch('second_shooter.second_shooter.load_camera_settings',
                    return_value=test_settings
                    ) as mock_load_camera_settings, mock.patch.object(
                        SecondShooter, 'set_target_settings'):
        shooter = SecondShooter()

        assert mock_load_camera_settings.called
        assert shooter._camera is None
        assert shooter._port is None
        assert shooter._camera_settings == test_settings
        assert shooter._command['aperture'] == shooter.aperture
        assert shooter._command['capture'] == shooter.capture
        assert shooter._command['iso'] == shooter.iso
        assert shooter._command['shutter'] == shooter.shutter
        assert shooter._command['wait'] == shooter.wait
예제 #7
0
def shooter():
    """SecondShooter instantiated without a camera to talk to."""
    with mock.patch.object(SecondShooter, 'set_target_settings'):
        s = SecondShooter('Nikon', 'port')

    return s
예제 #8
0
def test_run_multiple_steps():
    """Test run parses multiple commands."""
    def aperture_side_effect(**_):
        call_order.append('aperture')

    def capture_side_effect(**_):
        call_order.append('capture')

    def iso_side_effect(**_):
        call_order.append('iso')

    def shutter_side_effect(**_):
        call_order.append('shutter')

    def wait_side_effect(**_):
        call_order.append('wait')

    def default_side_effect(**_):
        call_order.append('default')

    call_order = []

    with mock.patch.object(
            SecondShooter, 'aperture',
            side_effect=aperture_side_effect), mock.patch.object(
                SecondShooter, 'capture',
                side_effect=capture_side_effect), mock.patch.object(
                    SecondShooter, 'iso',
                    side_effect=iso_side_effect), mock.patch.object(
                        SecondShooter,
                        'shutter',
                        side_effect=shutter_side_effect), mock.patch.object(
                            SecondShooter,
                            'wait',
                            side_effect=wait_side_effect), mock.patch.object(
                                SecondShooter,
                                'default',
                                side_effect=default_side_effect):
        shooter = SecondShooter('Nikon', 'port')
        shooter.run("""\
---
cmd: iso
value: 100
---
cmd: shutter
value: 1/125
---
cmd: aperture
value: 8
---
cmd: capture
---
cmd: wait
value: 2
---
cmd: capture
---
cmd: shutter
value: 1/250
---
cmd: capture
            """)

    assert call_order == [
        'iso', 'shutter', 'aperture', 'capture', 'wait', 'capture', 'shutter',
        'capture'
    ]