def test_session_id(info3):
    """Workflow3: session_id."""
    wf = Workflow3()
    o = wf.obj
    assert 'variables' not in o

    sid = wf.session_id
    assert sid

    o = wf.obj
    assert 'variables' in o
    assert '_WF_SESSION_ID' in o['variables']
    assert o['variables']['_WF_SESSION_ID'] == sid

    sid = 'thisisatest'
    os.environ['_WF_SESSION_ID'] = sid
    wf = Workflow3()
    try:
        o = wf.obj
        assert 'variables' in o
        assert '_WF_SESSION_ID' in o['variables']
        assert o['variables']['_WF_SESSION_ID'] == sid
        assert wf.session_id == sid
    finally:
        del os.environ['_WF_SESSION_ID']
def test_envvar(infopl):
    """Version from environment variable."""
    v = '1.1.2'
    with env(alfred_workflow_version=v):
        wf = Workflow3()
        assert wf.version == Version(v), "unexpected version"
        # environment variables have priority
        wf = Workflow3(update_settings={'version': '1.1.3'})
        assert wf.version == Version(v), "unexpected version"
def test_session_cache(info3):
    """Workflow3: session-scoped caching."""
    wf1 = Workflow3()
    wf2 = Workflow3()
    data1 = {'foo': 'bar'}
    data2 = {'bar': 'foo'}
    # sid = wf.session_id
    wf1.cache_data('data', data1, session=True)
    wf2.cache_data('data', data2, session=True)
    assert wf1.cached_data('data', session=True) == data1
    assert wf2.cached_data('data', session=True) == data2
Exemple #4
0
def test_optional(info3):
    """Item3: Optional values."""
    wf = Workflow3()
    it = wf.add_item('Title',
                     'Subtitle',
                     arg='argument',
                     uid='uid',
                     valid=True,
                     autocomplete='auto',
                     largetext='large',
                     copytext='copy',
                     quicklookurl='http://www.deanishe.net/alfred-workflow',
                     type='file',
                     icon='icon.png')

    o = it.obj
    assert o['title'] == 'Title'
    assert o['valid'] is True
    assert o['autocomplete'] == 'auto'
    assert o['uid'] == 'uid'
    assert o['text']['copy'] == 'copy'
    assert o['text']['largetype'] == 'large'
    assert o['icon']['path'] == 'icon.png'
    assert o['quicklookurl'] == 'http://www.deanishe.net/alfred-workflow'
    assert o['type'] == 'file'
Exemple #5
0
def test_icontype(info3):
    """Item3: Icon type."""
    wf = Workflow3()
    it = wf.add_item('Title', icon='icon.png', icontype='filetype')
    o = it.obj
    assert o['icon']['path'] == 'icon.png'
    assert o['icon']['type'] == 'filetype'
Exemple #6
0
def test_feedback(info3):
    """Workflow3: Feedback."""
    wf = Workflow3()
    for i in range(10):
        wf.add_item('Title {0:2d}'.format(i + 1))

    orig = sys.stdout
    stdout = StringIO()
    try:
        sys.stdout = stdout
        wf.send_feedback()
    finally:
        sys.stdout = orig

    s = stdout.getvalue()

    assert len(s) > 0

    o = json.loads(s)

    assert isinstance(o, dict)

    items = o['items']

    assert len(items) == 10
    for i in range(10):
        assert items[i]['title'] == 'Title {0:2d}'.format(i + 1)
Exemple #7
0
def test_clear_session_cache(info3):
    """Workflow3: session-scoped caching."""
    wf = Workflow3()
    data = {'foo': 'bar'}
    wf.clear_cache()

    assert len(os.listdir(wf.cachedir)) == 0

    # save session and non-session data
    wf.cache_data('data', data, session=True)
    wf.cache_data('data', data, session=False)

    def _sessfiles():
        return [n for n in os.listdir(wf.cachedir) if n.startswith('_wfsess-')]

    assert len(_sessfiles()) > 0

    wf.clear_session_cache()

    # current session files kept
    assert len(_sessfiles()) == 1
    assert len(os.listdir(wf.cachedir)) > 0
    assert wf.cached_data('data', session=True) == data
    assert wf.cached_data('data', session=False) == data

    # also clear data for current session
    wf.clear_session_cache(True)

    # sessions files are gone, but other cache files are not
    assert len(_sessfiles()) == 0
    assert len(os.listdir(wf.cachedir)) > 0
    assert wf.cached_data('data', session=True) is None
    assert wf.cached_data('data', session=False) == data
Exemple #8
0
def test_modifiers(info3):
    """Item3: Modifiers."""
    wf = Workflow3()
    it = wf.add_item('Title', 'Subtitle', arg='value', valid=False)
    it.setvar('prevar', 'preval')
    mod = it.add_modifier('cmd',
                          subtitle='Subtitle2',
                          arg='value2',
                          valid=True)
    it.setvar('postvar', 'postval')
    mod.setvar('modvar', 'hello')

    # assert wf.getvar('prevar') == 'preval'
    # Test variable inheritance
    assert it.getvar('prevar') == 'preval'
    assert mod.getvar('prevar') == 'preval'
    assert it.getvar('postvar') == 'postval'
    assert mod.getvar('postvar') is None

    o = it.obj
    assert 'mods' in o
    assert set(o['mods'].keys()) == set(['cmd'])

    m = o['mods']['cmd']
    assert m['valid'] is True
    assert m['subtitle'] == 'Subtitle2'

    r = json.loads(m['arg'])['alfredworkflow']
    assert r['arg'] == 'value2'
    assert r['variables']['prevar'] == 'preval'
    assert r['variables']['modvar'] == 'hello'
def test_version_envvar(info3):
    """Version from environment variable."""
    os.environ['alfred_workflow_version'] = '1.1.2'
    wf = Workflow3()
    try:
        assert wf.version == Version('1.1.2')
    finally:
        del os.environ['alfred_workflow_version']
Exemple #10
0
def test_arg_variables(info3):
    """Item3: Variables in arg."""
    wf = Workflow3()
    it = wf.add_item('Title')
    it.setvar('key1', 'value1')
    o = it.obj
    assert 'variables' in o
    assert 'config' not in o
    assert o['variables']['key1'] == 'value1'
Exemple #11
0
def test_required_optional(info3):
    """Item3: Required and optional values."""
    wf = Workflow3()
    it = wf.add_item('Title')
    assert it.title == 'Title'
    o = it.obj
    assert o['title'] == 'Title'
    assert o['valid'] is False
    assert o['subtitle'] == ''
    assert set(o.keys()) == set(['title', 'valid', 'subtitle'])
Exemple #12
0
def test_arg_variables(info3):
    """Item3: Variables in arg."""
    wf = Workflow3()
    it = wf.add_item('Title')
    it.setvar('key1', 'value1')
    o = it.obj
    o2 = json.loads(o['arg'])
    assert 'alfredworkflow' in o2
    r = o2['alfredworkflow']
    assert r['variables']['key1'] == 'value1'
    assert 'config' not in r
Exemple #13
0
def test_rerun(info3):
    """Workflow3: rerun."""
    wf = Workflow3()
    o = wf.obj
    assert 'rerun' not in o
    assert wf.rerun == 0

    wf.rerun = 1

    o = wf.obj
    assert 'rerun' in o
    assert o['rerun'] == 1
    assert wf.rerun == 1
Exemple #14
0
def test_feedback_variables(info3):
    """Workflow3: feedback variables."""
    wf = Workflow3()

    o = wf.obj
    assert 'variables' not in o

    wf.setvar('var', 'val')
    it = wf.add_item('Title', arg='something')

    assert wf.getvar('var') == 'val'
    assert it.getvar('var') is None

    o = wf.obj
    assert 'variables' in o
    assert o['variables']['var'] == 'val'
Exemple #15
0
def test_modifier_icon(info3):
    """Item3: Modifier icon."""
    wf = Workflow3()
    it = wf.add_item('Title', 'Subtitle')
    mod = it.add_modifier('cmd', subtitle='Subtitle2', icon='icon.png')
    o = mod.obj
    assert 'icon' in o
    assert o['icon'] == {'path': 'icon.png'}

    mod = it.add_modifier('cmd',
                          subtitle='Subtitle2',
                          icon='/Applications/Safari.app',
                          icontype='fileicon')
    o = mod.obj
    assert 'icon' in o
    assert o['icon'] == {
        'path': '/Applications/Safari.app',
        'type': 'fileicon',
    }
Exemple #16
0
def test_item_config(info3):
    """Item3: Config."""
    wf = Workflow3()
    it = wf.add_item('Title')
    it.config['var1'] = 'val1'

    m = it.add_modifier('cmd')
    m.config['var1'] = 'val2'

    o = it.obj

    assert 'config' in o
    assert set(o['config'].keys()) == set(['var1'])
    assert o['config']['var1'] == 'val1'

    assert 'mods' in o
    assert 'cmd' in o['mods']
    assert 'config' in o['mods']['cmd']

    o2 = m.obj
    c = o2['config']
    assert c['var1'] == 'val2'
Exemple #17
0
def test_run_fails_with_plain_text_output():
    """Run fails with plain text output"""
    error_text = 'Have an error'

    def cb(wf):
        raise ValueError(error_text)

    # named after bundleid
    wf = Workflow3()
    wf.bundleid

    stdout = sys.stdout
    sio = StringIO()
    sys.stdout = sio
    ret = wf.run(cb, text_errors=True)
    sys.stdout = stdout
    output = sio.getvalue()
    sio.close()

    assert ret == 1
    assert error_text in output
    assert '{' not in output
Exemple #18
0
def test_item_config(info3):
    """Item3: Config."""
    wf = Workflow3()
    it = wf.add_item('Title')
    it.config['var1'] = 'val1'

    m = it.add_modifier('cmd')
    m.config['var1'] = 'val2'

    o = it.obj
    r = json.loads(o['arg'])['alfredworkflow']

    assert 'config' in r
    assert set(r['config'].keys()) == set(['var1'])
    assert r['config']['var1'] == 'val1'

    assert 'mods' in o
    assert 'cmd' in o['mods']
    r = json.loads(o['mods']['cmd']['arg'])['alfredworkflow']
    assert 'config' in r

    c = r['config']
    assert c['var1'] == 'val2'
Exemple #19
0
    # added via `Workflow3(libraries=...)`
    # import somemodule
    # import anothermodule

    # Get args from Workflow3, already in normalized Unicode.
    # This is also necessary for "magic" arguments to work.
    args = wf.args
    # print(args)
    indx = int(args[0])

    # Do stuff here ...
    d = get_dict()

    # Add an item to Alfred feedback
    wf.add_item(u'{}'.format(d[indx][1].decode('utf-8')),
                u'{}'.format(d[indx][0].decode('utf-8')))
    # wf.add_item(u'Item title', u'Item subtitle {}'.format(indx))

    # Send output to Alfred. You can only call this once.
    # Well, you *can* call it multiple times, but subsequent calls
    # are ignored (otherwise the JSON sent to Alfred would be invalid).
    wf.send_feedback()


if __name__ == '__main__':
    # Create a global `Workflow3` object
    wf = Workflow3()
    # Call your entry function via `Workflow3.run()` to enable its
    # helper functions, like exception catching, ARGV normalization,
    # magic arguments etc.
    sys.exit(wf.run(main))
def test_update_settings(infopl):
    """Version from update_settings."""
    v = '1.1.3'
    wf = Workflow3(update_settings={'version': v})
    assert wf.version == Version(v), "unexpected version"
def test_version_update_settings(info3):
    """Version from update_settings."""
    wf = Workflow3(update_settings={'version': '1.1.3'})
    assert wf.version == Version('1.1.3')
def test_info_plist(infopl):
    """Version from info.plist."""
    wf = Workflow3()
    assert wf.version == Version('1.1.1'), "unexpected version"
        pathlist = path_list_from_main(node)
        subtitle = '     Go into: ' + '/'.join(pathlist) + '/' + node.name
        arg = alfredworkflow('', 'group', search_in=node.dirpath,
                             content_query=content_query,
                             kind_requested=args.kind)
        item.add_modifier('cmd', subtitle=subtitle, arg=arg)
    else:
        if args.kind == 'group':
            subtitle = '< no groups >'
        elif args.kind == 'all':
            subtitle = '< empty >'
        else:
            assert False
        item.add_modifier('cmd', subtitle='     ' + subtitle, valid=False)


def path_list_from_main(node):
    """Return Ulysses path as list, not including the inetrnally named Main node"""
    pathlist = node.get_alfred_path_list()
    if pathlist and (pathlist[0] == 'Main'):
        pathlist = pathlist[1:]
    return pathlist


if __name__ == "__main__":
    wf = Workflow3(help_url=HELP_URL,
                   update_settings=UPDATE_SETTINGS)
    wf.magic_prefix = 'wf:'
    logger = wf.logger
    sys.exit(wf.run(main))
Exemple #24
0
def test_default_directories(info3):
    """Workflow3: Default directories."""
    wf3 = Workflow3()
    assert 'Alfred 3' in wf3.datadir
    assert 'Alfred-3' in wf3.cachedir
def test_version_info_plist(info3):
    """Version from info.plist."""
    wf = Workflow3()
    assert wf.version == Version('1.1.1')