A Python helper library for writing Alfred 2 workflows.
Alfred workflows typically take user input, fetch data from the Web or elsewhere, filter them and display results to the user. Alfred-Workflow takes care of a lot of the details for you, allowing you to concentrate your efforts on your workflow's functionality.
- Catches and logs workflow errors for easier development and support
- "Magic" arguments to help development/debugging
- Auto-saves settings
- Super-simple data caching
- Fuzzy, Alfred-like search/filtering with diacritic folding
- Keychain support for secure storage (and syncing) of passwords, API keys etc.
- Simple generation of Alfred feedback (XML output)
- Input/output decoding for handling non-ASCII text
- Lightweight web API with modelled on requests
- Pre-configured logging
- Painlessly add directories to
sys.path
- Easily launch background tasks (daemons) to keep your workflow responsive
- Check for new versions and update workflows hosted on GitHub.
Here's how to show recent Pinboard.in posts in Alfred.
Create a new workflow in Alfred's preferences. Add a Script Filter with
Language /usr/bin/python
and paste the following into the Script field
(changing API_KEY
):
import sys
from workflow import Workflow, ICON_WEB, web
API_KEY = 'your-pinboard-api-key'
def main(wf):
url = 'https://api.pinboard.in/v1/posts/recent'
params = dict(auth_token=API_KEY, count=20, format='json')
r = web.get(url, params)
r.raise_for_status()
for post in r.json()['posts']:
wf.add_item(post['description'], post['href'], arg=post['href'],
uid=post['hash'], valid=True, icon=ICON_WEB)
wf.send_feedback()
if __name__ == u"__main__":
wf = Workflow()
sys.exit(wf.run(main))
Add an Open URL action to your workflow with {query}
as the URL,
connect your Script Filter to it, and you can now hit ENTER on a
Pinboard item in Alfred to open it in your browser.
Note: If you intend to distribute your workflow to other users, you should include Alfred-Workflow (and other Python libraries your workflow requires) within your workflow's directory as described below. Do not ask users to install anything into their system Python. Python installations cannot support multiple versions of the same library, so if you rely on globally-installed libraries, the chances are very good that your workflow will sooner or later break—or be broken by—some other software doing the same naughty thing.
You can install Alfred-Workflow directly into your workflow with:
pip install --target=/path/to/my/workflow Alfred-Workflow
You can install any other library available on the Cheese Shop the same way. See the pip documentation for more information.
Download the alfred-workflow-X.X.X.zip
file from the GitHub releases page
and either extract the ZIP to the root directory of your workflow (where
info.plist
is) or place the ZIP in the root directory and add
sys.path.insert(0, 'alfred-workflow-X.X.X.zip')
to the top of your
Python scripts.
Alternatively, you can download the source code from the GitHub repository
and copy the workflow
subfolder to the root directory of your workflow.
Your workflow directory should look something like this (where
yourscript.py
contains your workflow code and info.plist
is
the workflow information file generated by Alfred):
Your Workflow/ info.plist icon.png workflow/ __init__.py background.py update.py version web.py workflow.py yourscript.py etc.
Or like this:
Your Workflow/ info.plist icon.png workflow-1.X.X.zip yourscript.py etc.
Detailed documentation, including a tutorial, is available at http://www.deanishe.net/alfred-workflow/.