From 72e301d22e92fb7211fe10072a1a2a2f97f39c0d Mon Sep 17 00:00:00 2001 From: Dean Jackson Date: Sat, 23 Dec 2017 00:37:39 +0100 Subject: [PATCH] Improve feedback & refactor - Add gems directory to repo - Add Python dependencies to repo now they're no longer huge - Remove shebangs and add default null logging handlers - Use Alfred-Workflow notifications instead of Alfred's - Improve README, reorganise & colourise workflow elements - Improve docstrings - Improve icons - Add "generating citation" message - Refactor models --- .gitignore | 7 - README.md | 124 +- ...kflow => ZotHero-0.1.5-beta.alfredworkflow | Bin 2066173 -> 2056377 bytes src/icon.png | Bin 15929 -> 12881 bytes src/icons/citation.png | Bin 0 -> 3238 bytes src/icons/icons.txt | 26 +- src/icons/zorro.png | Bin 19548 -> 8047 bytes src/icons/zorro.pxm | Bin 190860 -> 212401 bytes src/icons/zorro.svg | 1 - src/info.plist | 773 +++-- src/lib/cite/.gitignore | 2 +- src/lib/cite/gems/.gitkeep | 0 src/lib/docopt.py | 579 ++++ src/lib/pasteboard.py | 9 +- src/lib/rtfunicode.py | 71 + src/lib/workflow/Notify.tgz | Bin 0 -> 35556 bytes src/lib/workflow/__init__.py | 108 + src/lib/workflow/background.py | 293 ++ src/lib/workflow/notify.py | 345 ++ src/lib/workflow/update.py | 426 +++ src/lib/workflow/util.py | 457 +++ src/lib/workflow/version | 1 + src/lib/workflow/web.py | 678 ++++ src/lib/workflow/workflow.py | 2818 +++++++++++++++++ src/lib/workflow/workflow3.py | 712 +++++ src/lib/zothero/__init__.py | 6 +- src/lib/zothero/cache.py | 5 +- src/lib/zothero/core.py | 2 +- src/lib/zothero/csl.py | 2 +- src/lib/zothero/formatting.py | 4 +- src/lib/zothero/index.py | 4 +- src/lib/zothero/models.py | 85 +- src/lib/zothero/styles.py | 2 +- src/lib/zothero/tests/test_util.py | 1 - src/lib/zothero/util.py | 13 + src/lib/zothero/zotero.py | 124 +- src/zh | 75 +- 37 files changed, 7372 insertions(+), 381 deletions(-) rename ZotHero-0.1.4-beta.alfredworkflow => ZotHero-0.1.5-beta.alfredworkflow (86%) create mode 100644 src/icons/citation.png delete mode 100644 src/icons/zorro.svg create mode 100644 src/lib/cite/gems/.gitkeep create mode 100644 src/lib/docopt.py create mode 100644 src/lib/rtfunicode.py create mode 100644 src/lib/workflow/Notify.tgz create mode 100644 src/lib/workflow/__init__.py create mode 100644 src/lib/workflow/background.py create mode 100644 src/lib/workflow/notify.py create mode 100644 src/lib/workflow/update.py create mode 100644 src/lib/workflow/util.py create mode 100644 src/lib/workflow/version create mode 100644 src/lib/workflow/web.py create mode 100644 src/lib/workflow/workflow.py create mode 100644 src/lib/workflow/workflow3.py diff --git a/.gitignore b/.gitignore index d043c80..4f5166a 100644 --- a/.gitignore +++ b/.gitignore @@ -1,11 +1,4 @@ -# Dependencies -/src/lib/workflow/ -/src/lib/lxml/ -/src/lib/docopt.py -/src/lib/rtfunicode.py -/src/lib/citeproc/ - # Created by https://www.gitignore.io/api/python,sublimetext,vim ### Python ### diff --git a/README.md b/README.md index 41cd2db..388f6b2 100644 --- a/README.md +++ b/README.md @@ -5,19 +5,42 @@ ZotHero ======= -Alfred 3 workflow for searching your Zotero database and copying citations. +[Alfred][alfred] workflow for rapidly searching your Zotero database and copying citations. +- [Features](#features) +- [Download & installation](#download--installation) - [Usage](#usage) - [Configuration](#configuration) - [Zotero data](#zotero-data) - [Citation styles](#citation-styles) + - [Locales](#locales) - [All settings](#all-settings) + - [Configuration sheet](#configuration-sheet) - [Licence & thanks](#licence--thanks) + + +Features +-------- + +- Perform full-text search across your Zotero database, including only searching specific fields +- Copy citations using any [CSL][csl] style you have installed in Zotero +- Copy citations either in citation/note style or bibliography style +- Copy citations in any [locale supported by CSL](#locales) +- Citations are copied in multiple formats, so the right data are automatically pasted into the application you're using + + + +Download & installation +----------------------- + +Download the `ZotHero-XYZ.alfredworkflow` file from [GitHub releases](https://github.com/deanishe/zothero/releases), and double-click the downloaded file to install. + + Usage ----- @@ -59,6 +82,8 @@ If you data are stored somewhere else, you need to set `ZOTERO_DIR` in the [work If you have set a "Linked Attachment Base Directory" in Zotero, enter its path for `ATTACHMENTS_DIR` in the [configuration sheet][conf-sheet]. +**Note**: You can use the UNIX shortcut `~` to represent your home directory, e.g. `~/Zotero` for Zotero 5's default directory. + ### Citation styles ### @@ -70,6 +95,67 @@ You can copy either a citation-/note-style citation or a bibliography-style one For `⌘↩` and `⌥↩` to work on search results, you must first choose a default style. You can either do this in the configuration screen (keyword `zotconf`), or hitting `^↩` on a search result to show all citation styles, then `^↩` on a style to set that as the default. + +### Locales ### + +[CSL][csl] and ZotHero support the following locales. The default locale is `en-US` (American English). Use the `zotconf` keyword to set a different locale. + +| Locale | Code | +|----------------------------------------------|---------| +| Afrikaans | `af-ZA` | +| Bahasa Indonesia / Indonesian | `id-ID` | +| Català / Catalan | `ca-AD` | +| Cymraeg / Welsh | `cy-GB` | +| Dansk / Danish | `da-DK` | +| Deutsch (Deutschland) / German (Germany) | `de-DE` | +| Deutsch (Schweiz) / German (Switzerland) | `de-CH` | +| Deutsch (Österreich) / German (Austria) | `de-AT` | +| Eesti / Estonian | `et-EE` | +| English (UK) | `en-GB` | +| English (US) | `en-US` | +| Español (Chile) / Spanish (Chile) | `es-CL` | +| Español (España) / Spanish (Spain) | `es-ES` | +| Español (México) / Spanish (Mexico) | `es-MX` | +| Euskara / Basque | `eu` | +| Français (Canada) / French (Canada) | `fr-CA` | +| Français (France) / French (France) | `fr-FR` | +| Hrvatski / Croatian | `hr-HR` | +| Italiano / Italian | `it-IT` | +| Latviešu / Latvian | `lv-LV` | +| Lietuvių / Lithuanian | `lt-LT` | +| Magyar / Hungarian | `hu-HU` | +| Nederlands / Dutch | `nl-NL` | +| Norsk bokmål / Norwegian (Bokmål) | `nb-NO` | +| Norsk nynorsk / Norwegian (Nynorsk) | `nn-NO` | +| Polski / Polish | `pl-PL` | +| Português (Brasil) / Portuguese (Brazil) | `pt-BR` | +| Português (Portugal) / Portuguese (Portugal) | `pt-PT` | +| Română / Romanian | `ro-RO` | +| Slovenčina / Slovak | `sk-SK` | +| Slovenščina / Slovenian | `sl-SI` | +| Suomi / Finnish | `fi-FI` | +| Svenska / Swedish | `sv-SE` | +| Tiếng Việt / Vietnamese | `vi-VN` | +| Türkçe / Turkish | `tr-TR` | +| Íslenska / Icelandic | `is-IS` | +| Čeština / Czech | `cs-CZ` | +| Ελληνικά / Greek | `el-GR` | +| Български / Bulgarian | `bg-BG` | +| Монгол / Mongolian | `mn-MN` | +| Русский / Russian | `ru-RU` | +| Српски / Srpski / Serbian | `sr-RS` | +| Українська / Ukrainian | `uk-UA` | +| עברית / Hebrew | `he-IL` | +| العربية / Arabic | `ar` | +| فارسی / Persian | `fa-IR` | +| ไทย / Thai | `th-TH` | +| ភាសាខ្មែរ / Khmer | `km-KH` | +| 中文 (中国大陆) / Chinese (PRC) | `zh-CN` | +| 中文 (台灣) / Chinese (Taiwan) | `zh-TW` | +| 日本語 / Japanese | `ja-JP` | +| 한국어 / Korean | `ko-KR` | + + ### All settings ### @@ -78,12 +164,29 @@ Theses are all settings available in the [workflow configuration sheet][conf-she You probably shouldn't edit the `CITE_STYLE` or `LOCALE` variables yourself, as there's no guarantee the value you set is actually available. Adjust them using the `zotconf` keyword. -| Variable | Meaning | -|-------------------|--------------------------------------------| -| `ATTACHMENTS_DIR` | Path to your Zotero attachments. | -| `CITE_STYLE` | Citation style copied by `⌘↩` and `⌥↩` | -| `LOCALE` | Locale for citations. Default: US English. | -| `ZOTERO_DIR` | Path to your Zotero data. | +| Variable | Meaning | +|-------------------|------------------------------------------------------| +| `ATTACHMENTS_DIR` | Path to your Zotero attachments. | +| `CITE_STYLE` | Citation style copied by `⌘↩` and `⌥↩` | +| `LOCALE` | Locale for citations. Default: `en-US` (US English). | +| `ZOTERO_DIR` | Path to your Zotero data. | +| | | + + + +### Configuration sheet ### + +Theses are all settings available in the [workflow configuration sheet][conf-sheet]. + +You probably shouldn't edit the `CITE_STYLE` or `LOCALE` variables yourself, as there's no guarantee the value you set is actually available. Adjust them using the `zotconf` keyword. + + +| Variable | Meaning | +|-------------------|------------------------------------------------------| +| `ATTACHMENTS_DIR` | Path to your Zotero attachments. | +| `CITE_STYLE` | Citation style copied by `⌘↩` and `⌥↩` | +| `LOCALE` | Locale for citations. Default: `en-US` (US English). | +| `ZOTERO_DIR` | Path to your Zotero data. | @@ -98,11 +201,14 @@ The [Zorro icon][icon-source] was created by [Dan Lowenstein][lowenstein] from [ +[alfred]: https://www.alfredapp.com/ [aw]: http://www.deanishe.net/alfred-workflow/ -[citeproc-ruby]: https://github.com/inukshuk/citeproc-ruby [citeproc-licence]: https://github.com/inukshuk/citeproc-ruby/blob/master/AGPL +[citeproc-ruby]: https://github.com/inukshuk/citeproc-ruby [conf-sheet]: https://www.alfredapp.com/help/workflows/advanced/variables/#environment +[csl]: http://citationstyles.org [icon-source]: https://thenounproject.com/term/zorro/14540/ -[lowenstein]: https://thenounproject.com/danny_mustache [licence]: ./LICENCE +[lowenstein]: https://thenounproject.com/danny_mustache [noun-project]: https://thenounproject.com +[releases]: https://github.com/deanishe/zothero/releases diff --git a/ZotHero-0.1.4-beta.alfredworkflow b/ZotHero-0.1.5-beta.alfredworkflow similarity index 86% rename from ZotHero-0.1.4-beta.alfredworkflow rename to ZotHero-0.1.5-beta.alfredworkflow index 9eabe98689d4f2cd2b26fd6af468c10a92e04dd3..da45a1998ee2425d9861f05e2477936c71c28cd1 100644 GIT binary patch delta 151993 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%0DiLt#i&)g`l@Ox{x(+7(!UyjJF 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 ac#sYTf`-OM?Ty;;69f&vGQ4(Q*hLW>?K8 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 diff --git a/src/icon.png b/src/icon.png index 1bc0f9bbc7227577b8278de3bfe20f7a8c295fbd..0121fb76b47ad84073c10005ac0d9ccc37dad520 100644 GIT binary patch delta 11871 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 a@EV9m$1JLH$|e9IA7y#<*VS?s;r|O~O<#Ec delta 14943 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 UC2zXVdjuUuSzbd9Bx4!&Ke+naSpWb4 literal 19548 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 z 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 diff --git a/src/icons/zorro.svg b/src/icons/zorro.svg deleted file mode 100644 index e411cc2..0000000 --- a/src/icons/zorro.svg +++ /dev/null @@ -1 +0,0 @@ -Created by dan lowensteinfrom the Noun Project \ No newline at end of file diff --git a/src/info.plist b/src/info.plist index b1626e3..e5fe489 100644 --- a/src/info.plist +++ b/src/info.plist @@ -79,7 +79,17 @@ destinationuid - 8C9BC8AD-88E5-4822-A2D6-FE177D87AF64 + A966EACB-331B-488E-937C-5D8DE7767B9D + modifiers + 0 + modifiersubtext + + vitoclose + + + + destinationuid + 88776196-8BC2-4B74-9B0E-15961AAC9A5C modifiers 0 modifiersubtext @@ -114,11 +124,24 @@ + 3636139E-A061-4685-8914-AC3351A9B797 + + + destinationuid + DA0C4D5F-7B13-41B9-B85A-091DD3EE9CAD + modifiers + 0 + modifiersubtext + + vitoclose + + + 3D2145B0-1260-41B9-9EC1-A78EB5CA2400 destinationuid - 65A74884-90D6-4453-963E-454CF4C84DCB + 49F6E2D6-5BF1-4E9A-A7CD-A4E04C30DFA8 modifiers 0 modifiersubtext @@ -184,36 +207,38 @@ 65A74884-90D6-4453-963E-454CF4C84DCB + + 674740C4-BFDA-44C8-A478-586EF06217BF destinationuid - F41A047D-DC74-4085-AD36-E52EDD909FBD + 118BDCA4-C25F-449C-93D8-877E192E22D2 modifiers 0 modifiersubtext vitoclose - + - 674740C4-BFDA-44C8-A478-586EF06217BF + 7123D0FE-B9BA-4300-9D28-410EE7B10E56 destinationuid - 118BDCA4-C25F-449C-93D8-877E192E22D2 + 09DFDC0D-394F-470C-974D-BB4AAB208CED modifiers 0 modifiersubtext vitoclose - + - 7123D0FE-B9BA-4300-9D28-410EE7B10E56 + 780DD041-49A4-44BF-89BE-4D53688296C0 destinationuid - 09DFDC0D-394F-470C-974D-BB4AAB208CED + F8F07F3C-11D6-44F1-BFE5-66F70A8C0253 modifiers 0 modifiersubtext @@ -287,11 +312,11 @@ - 8C9BC8AD-88E5-4822-A2D6-FE177D87AF64 + 8E44403F-E563-4611-9D78-046CD3CB6E61 destinationuid - A966EACB-331B-488E-937C-5D8DE7767B9D + 5ED18AC3-4DEE-4486-8717-A5742EB02AA7 modifiers 0 modifiersubtext @@ -328,6 +353,16 @@ AEE6452E-9186-4609-8AD4-D74F469F1A79 + + destinationuid + F9040898-2FD2-4C79-B34F-1EEAD90BE256 + modifiers + 0 + modifiersubtext + + vitoclose + + destinationuid A950947F-8EA7-4749-AF55-2C7F9D6E695E @@ -365,11 +400,11 @@ - C93018EF-4629-4261-B997-453D8F2D6856 + C66B4BF4-4CED-4B3C-962E-C2F190B575EB destinationuid - D78E4F18-6D77-4514-A55F-8894C014AB60 + 01395D7D-4E59-4FB9-8369-9578C42822C6 modifiers 0 modifiersubtext @@ -379,7 +414,7 @@ destinationuid - 3D2145B0-1260-41B9-9EC1-A78EB5CA2400 + 3636139E-A061-4685-8914-AC3351A9B797 modifiers 0 modifiersubtext @@ -388,11 +423,11 @@ - D78E4F18-6D77-4514-A55F-8894C014AB60 + C93018EF-4629-4261-B997-453D8F2D6856 destinationuid - 8F85FB21-8921-402F-BF70-C7C35E769212 + D78E4F18-6D77-4514-A55F-8894C014AB60 modifiers 0 modifiersubtext @@ -400,12 +435,9 @@ vitoclose - - E1E3A9E7-0EEF-4745-A62C-79E46A2AF51F - destinationuid - 2B20149E-1275-476A-9CAA-254CB2DC74E0 + 3D2145B0-1260-41B9-9EC1-A78EB5CA2400 modifiers 0 modifiersubtext @@ -414,11 +446,11 @@ - E703B0EC-921B-453A-A32F-14FDBFA54980 + D78E4F18-6D77-4514-A55F-8894C014AB60 destinationuid - 385AA15F-F7CF-440F-8567-48FD0CBCDC85 + 8F85FB21-8921-402F-BF70-C7C35E769212 modifiers 0 modifiersubtext @@ -427,11 +459,11 @@ - ED06F3FD-4D96-4866-9EEC-11B64FB6D558 + E1E3A9E7-0EEF-4745-A62C-79E46A2AF51F destinationuid - 65A74884-90D6-4453-963E-454CF4C84DCB + 2B20149E-1275-476A-9CAA-254CB2DC74E0 modifiers 0 modifiersubtext @@ -440,11 +472,11 @@ - F41A047D-DC74-4085-AD36-E52EDD909FBD + ED06F3FD-4D96-4866-9EEC-11B64FB6D558 destinationuid - C76774C3-12EA-4242-AF38-35F8D7EA1E9B + 65A74884-90D6-4453-963E-454CF4C84DCB modifiers 0 modifiersubtext @@ -452,9 +484,12 @@ vitoclose + + F8F07F3C-11D6-44F1-BFE5-66F70A8C0253 + destinationuid - E703B0EC-921B-453A-A32F-14FDBFA54980 + C66B4BF4-4CED-4B3C-962E-C2F190B575EB modifiers 0 modifiersubtext @@ -606,6 +641,29 @@ variables={allvars} version 1 + + config + + concurrently + + escaping + 102 + script + /usr/bin/open "$1" + scriptargtype + 1 + scriptfile + + type + 0 + + type + alfred.workflow.action.script + uid + 5D1E28B8-C1D6-495B-856F-F48C59150FE0 + version + 2 + config @@ -653,6 +711,51 @@ variables={allvars} version 2 + + config + + alfredfiltersresults + + alfredfiltersresultsmatchmode + 0 + argumenttrimmode + 0 + argumenttype + 1 + escaping + 102 + queuedelaycustom + 3 + queuedelayimmediatelyinitially + + queuedelaymode + 0 + queuemode + 1 + runningsubtext + + script + ./zh attachments $id "$1" + scriptargtype + 1 + scriptfile + + subtext + + title + + type + 0 + withspace + + + type + alfred.workflow.input.scriptfilter + uid + AF2071DD-5096-4528-8E57-EFD4E1817FEA + version + 2 + config @@ -672,6 +775,19 @@ variables={allvars} version 1 + + config + + triggerid + attachments + + type + alfred.workflow.trigger.external + uid + 7E1721EF-1D18-410E-8ACF-810BE8A960A7 + version + 1 + config @@ -729,29 +845,6 @@ variables={allvars} version 1 - - config - - concurrently - - escaping - 102 - script - /usr/bin/open "$1" - scriptargtype - 1 - scriptfile - - type - 0 - - type - alfred.workflow.action.script - uid - 5D1E28B8-C1D6-495B-856F-F48C59150FE0 - version - 2 - config @@ -776,7 +869,20 @@ variables={allvars} runningsubtext script - ./zh attachments $id "$1" + cat <<EOS +{ + "items": [ + { + "title": "Generating Citation…", + "subtitle": "This window will disappear when your citation is on the pasteboard", + "icon": { + "path": "icons/reload.png" + }, + "valid": false + } + ] +} +EOS scriptargtype 1 scriptfile @@ -784,32 +890,19 @@ variables={allvars} subtext title - + Generating Citation… type - 0 + 5 withspace type alfred.workflow.input.scriptfilter uid - AF2071DD-5096-4528-8E57-EFD4E1817FEA + F9040898-2FD2-4C79-B34F-1EEAD90BE256 version 2 - - config - - triggerid - attachments - - type - alfred.workflow.trigger.external - uid - 7E1721EF-1D18-410E-8ACF-810BE8A960A7 - version - 1 - config @@ -888,6 +981,33 @@ variables={allvars} version 1 + + config + + concurrently + + escaping + 102 + script + flags=() + +test -n "$bibliography" && flags+=(--bibliography) + +./zh copy $flags "$style" "$id" + scriptargtype + 1 + scriptfile + + type + 5 + + type + alfred.workflow.action.script + uid + A950947F-8EA7-4749-AF55-2C7F9D6E695E + version + 2 + config @@ -907,6 +1027,19 @@ variables={allvars} version 1 + + config + + triggerid + copy-cite + + type + alfred.workflow.trigger.external + uid + AEE6452E-9186-4609-8AD4-D74F469F1A79 + version + 1 + config @@ -948,37 +1081,50 @@ variables={allvars} 1 - config - - concurrently - - escaping - 102 - script - flags=() - -test -n "$bibliography" && flags+=(--bibliography) - -./zh copy $flags "$style" "$id" - scriptargtype - 1 - scriptfile - - type - 5 - type - alfred.workflow.action.script + alfred.workflow.utility.hidealfred uid - A950947F-8EA7-4749-AF55-2C7F9D6E695E + 5CF4D2DC-E6C6-4E4D-BB75-9D96C7C02203 version - 2 + 1 config - concurrently - + externaltriggerid + setvar + passinputasargument + + passvariables + + workflowbundleid + self + + type + alfred.workflow.output.callexternaltrigger + uid + 49F6E2D6-5BF1-4E9A-A7CD-A4E04C30DFA8 + version + 1 + + + config + + triggerid + setvar + + type + alfred.workflow.trigger.external + uid + 780DD041-49A4-44BF-89BE-4D53688296C0 + version + 1 + + + config + + concurrently + escaping 102 script @@ -991,46 +1137,52 @@ test -n "$bibliography" && flags+=(--bibliography) scriptfile type - 0 + 5 type alfred.workflow.action.script uid - F41A047D-DC74-4085-AD36-E52EDD909FBD + C66B4BF4-4CED-4B3C-962E-C2F190B575EB version 2 config - lastpathcomponent - - onlyshowifquerypopulated - - removeextension + externaltriggerid + notify + passinputasargument - text - {var:notifytext} - title - {var:notifytitle} + passvariables + + workflowbundleid + self type - alfred.workflow.output.notification + alfred.workflow.output.callexternaltrigger uid - C76774C3-12EA-4242-AF38-35F8D7EA1E9B + 01395D7D-4E59-4FB9-8369-9578C42822C6 version 1 config - triggerid - copy-cite + argument + . +/----------- SETVAR IN -----------\ +query={query} +variables={allvars} +\---------------------------------/ + cleardebuggertext + + processoutputs + type - alfred.workflow.trigger.external + alfred.workflow.utility.debug uid - AEE6452E-9186-4609-8AD4-D74F469F1A79 + F8F07F3C-11D6-44F1-BFE5-66F70A8C0253 version 1 @@ -1053,35 +1205,6 @@ test -n "$bibliography" && flags+=(--bibliography) version 1 - - type - alfred.workflow.utility.hidealfred - uid - 5CF4D2DC-E6C6-4E4D-BB75-9D96C7C02203 - version - 1 - - - config - - argument - . -/----------- SETVAR OUT -----------\ -query={query} -variables={allvars} -\----------------------------------/ - cleardebuggertext - - processoutputs - - - type - alfred.workflow.utility.debug - uid - 65A74884-90D6-4453-963E-454CF4C84DCB - version - 1 - config @@ -1147,6 +1270,25 @@ test -n "$style" && { version 2 + + config + + externaltriggerid + {var:next} + passinputasargument + + passvariables + + workflowbundleid + self + + type + alfred.workflow.output.callexternaltrigger + uid + DA0C4D5F-7B13-41B9-B85A-091DD3EE9CAD + version + 1 + config @@ -1197,19 +1339,19 @@ test -n "$style" && { config - externaltriggerid + inputstring {var:next} - passinputasargument - - passvariables + matchcasesensitive - workflowbundleid - self + matchmode + 1 + matchstring + type - alfred.workflow.output.callexternaltrigger + alfred.workflow.utility.filter uid - 385AA15F-F7CF-440F-8567-48FD0CBCDC85 + 3636139E-A061-4685-8914-AC3351A9B797 version 1 @@ -1256,19 +1398,19 @@ variables={allvars} config - inputstring - {var:next} - matchcasesensitive + externaltriggerid + setvar + passinputasargument + + passvariables - matchmode - 1 - matchstring - + workflowbundleid + self type - alfred.workflow.utility.filter + alfred.workflow.output.callexternaltrigger uid - E703B0EC-921B-453A-A32F-14FDBFA54980 + 65A74884-90D6-4453-963E-454CF4C84DCB version 1 @@ -1374,6 +1516,25 @@ variables={allvars} version 1 + + config + + externaltriggerid + config + passinputasargument + + passvariables + + workflowbundleid + self + + type + alfred.workflow.output.callexternaltrigger + uid + A966EACB-331B-488E-937C-5D8DE7767B9D + version + 1 + config @@ -1400,21 +1561,19 @@ variables={allvars} config - lastpathcomponent - - onlyshowifquerypopulated - - removeextension - - text - Zotero database will be reloaded on next run - title - Cache Cleared + inputstring + {var:action} + matchcasesensitive + + matchmode + 0 + matchstring + reload type - alfred.workflow.output.notification + alfred.workflow.utility.filter uid - 8C9BC8AD-88E5-4822-A2D6-FE177D87AF64 + E1E3A9E7-0EEF-4745-A62C-79E46A2AF51F version 1 @@ -1422,37 +1581,59 @@ variables={allvars} config externaltriggerid - config + notify passinputasargument passvariables - + workflowbundleid self type alfred.workflow.output.callexternaltrigger uid - A966EACB-331B-488E-937C-5D8DE7767B9D + 88776196-8BC2-4B74-9B0E-15961AAC9A5C version 1 config - inputstring - {var:action} - matchcasesensitive - - matchmode - 0 - matchstring - reload + concurrently + + escaping + 102 + script + flags=() + +test -n "$notifytitle" && flags+=(--title "$notifytitle") +test -n "$notifytext" && flags+=(--text "$notifytext") + +./zh notify $flags + scriptargtype + 1 + scriptfile + + type + 5 type - alfred.workflow.utility.filter + alfred.workflow.action.script uid - E1E3A9E7-0EEF-4745-A62C-79E46A2AF51F + 5ED18AC3-4DEE-4486-8717-A5742EB02AA7 + version + 2 + + + config + + triggerid + notify + + type + alfred.workflow.trigger.external + uid + 8E44403F-E563-4611-9D78-046CD3CB6E61 version 1 @@ -1470,24 +1651,35 @@ Configuration Edit the `ZOTERO_DIR` variable to point to Zotero 5's data directory if you aren't using the default (~/Zotero). uidata + 01395D7D-4E59-4FB9-8369-9578C42822C6 + + colorindex + 3 + xpos + 1770 + ypos + 730 + 09DFDC0D-394F-470C-974D-BB4AAB208CED xpos - 830 + 860 ypos 1290 118BDCA4-C25F-449C-93D8-877E192E22D2 xpos - 480 + 510 ypos 950 1AF47A02-39EA-41B0-BD44-C933C31014F5 + colorindex + 9 xpos - 40 + 70 ypos 920 @@ -1496,14 +1688,16 @@ Edit the `ZOTERO_DIR` variable to point to Zotero 5's data directory if you aren note $action = choose-locale xpos - 700 + 730 ypos 1140 27AB4926-3249-4A80-85B5-6176911ACE7D + colorindex + 8 xpos - 830 + 860 ypos 380 @@ -1512,7 +1706,7 @@ Edit the `ZOTERO_DIR` variable to point to Zotero 5's data directory if you aren note Clear cached data xpos - 830 + 860 ypos 1460 @@ -1521,7 +1715,7 @@ Edit the `ZOTERO_DIR` variable to point to Zotero 5's data directory if you aren note $action = show-citations xpos - 700 + 730 ypos 410 @@ -1530,7 +1724,7 @@ Edit the `ZOTERO_DIR` variable to point to Zotero 5's data directory if you aren note Open entry in Zotero xpos - 830 + 860 ypos 50 @@ -1539,78 +1733,112 @@ Edit the `ZOTERO_DIR` variable to point to Zotero 5's data directory if you aren note $action = show-attachments xpos - 700 + 730 ypos 250 - 385AA15F-F7CF-440F-8567-48FD0CBCDC85 + 3636139E-A061-4685-8914-AC3351A9B797 + note + $next is set xpos - 1540 + 1660 ypos - 920 + 950 3D2145B0-1260-41B9-9EC1-A78EB5CA2400 note $action = set-default xpos - 700 + 730 ypos 760 + 49F6E2D6-5BF1-4E9A-A7CD-A4E04C30DFA8 + + colorindex + 7 + xpos + 860 + ypos + 730 + 4C4E438A-90C4-463C-A31C-435EB61F8236 xpos - 520 + 550 ypos 80 53172C76-0F6F-4E84-8C96-D0E81629CBA4 + colorindex + 10 note Search all fields xpos - 240 + 270 ypos 50 5CF4D2DC-E6C6-4E4D-BB75-9D96C7C02203 + colorindex + 4 xpos - 480 + 1490 ypos - 760 + 590 5D1E28B8-C1D6-495B-856F-F48C59150FE0 + colorindex + 2 note Open file or URL xpos - 440 + 1450 ypos - 390 + 220 + + 5ED18AC3-4DEE-4486-8717-A5742EB02AA7 + + colorindex + 3 + note + Post a notification + xpos + 1490 + ypos + 1550 65A74884-90D6-4453-963E-454CF4C84DCB + colorindex + 7 xpos - 1080 + 1110 ypos - 760 + 1020 674740C4-BFDA-44C8-A478-586EF06217BF + colorindex + 9 note Configure workflow xpos - 240 + 270 ypos 920 67475FEA-6BC4-4EBA-B18B-5BF88B41D320 + colorindex + 2 xpos - 830 + 860 ypos 220 @@ -1619,60 +1847,92 @@ Edit the `ZOTERO_DIR` variable to point to Zotero 5's data directory if you aren note $action = open-url xpos - 700 + 730 ypos 1320 + 780DD041-49A4-44BF-89BE-4D53688296C0 + + colorindex + 7 + xpos + 1050 + ypos + 730 + 7D722132-9CB1-4556-B401-5A32F089CB28 + colorindex + 10 note Choose a field to search xpos - 240 + 270 ypos 220 7E1721EF-1D18-410E-8ACF-810BE8A960A7 + colorindex + 2 xpos - 40 + 1050 ypos - 390 + 220 7F4D56BD-6BC8-4206-87AC-33E2F9C05A2E + colorindex + 8 xpos - 40 + 70 ypos 560 7FB90320-6EAF-415A-9DD9-50B79BC0F901 + colorindex + 10 xpos - 40 + 70 ypos 50 + 88776196-8BC2-4B74-9B0E-15961AAC9A5C + + colorindex + 3 + xpos + 1110 + ypos + 1550 + 8956B5DB-42F0-4570-9265-ECD302239D56 + colorindex + 8 note View citation formats xpos - 240 + 270 ypos 560 - 8C9BC8AD-88E5-4822-A2D6-FE177D87AF64 + 8E44403F-E563-4611-9D78-046CD3CB6E61 + colorindex + 3 xpos - 1000 + 1290 ypos - 1460 + 1550 8F85FB21-8921-402F-BF70-C7C35E769212 + colorindex + 4 xpos - 830 + 860 ypos 560 @@ -1681,71 +1941,87 @@ Edit the `ZOTERO_DIR` variable to point to Zotero 5's data directory if you aren note $action = open-in-zotero xpos - 700 + 730 ypos 80 A950947F-8EA7-4749-AF55-2C7F9D6E695E + colorindex + 4 note Copy citation to pasteboard xpos - 240 + 1250 ypos - 730 + 560 A966EACB-331B-488E-937C-5D8DE7767B9D + colorindex + 9 xpos - 1170 + 1110 ypos - 1460 + 1390 AB53FBF0-1EC6-43BE-96BA-A30A9E6E9B66 + colorindex + 10 note Call normal search with category pre-filled xpos - 440 + 470 ypos 220 AEE6452E-9186-4609-8AD4-D74F469F1A79 + colorindex + 4 xpos - 40 + 1050 ypos - 730 + 560 AF2071DD-5096-4528-8E57-EFD4E1817FEA + colorindex + 2 note View entry attachments xpos - 240 + 1250 ypos - 390 + 220 B07E7A55-14DC-42F2-8321-17C2E8090E03 note $action = choose-style xpos - 700 + 730 ypos 950 - C76774C3-12EA-4242-AF38-35F8D7EA1E9B + C66B4BF4-4CED-4B3C-962E-C2F190B575EB + colorindex + 7 + note + Set a variable in info.plist xpos - 1380 + 1450 ypos 730 C93018EF-4629-4261-B997-453D8F2D6856 + colorindex + 8 xpos - 480 + 510 ypos 590 @@ -1754,50 +2030,61 @@ Edit the `ZOTERO_DIR` variable to point to Zotero 5's data directory if you aren note $action = copy-cite xpos - 700 + 730 ypos 590 - E1E3A9E7-0EEF-4745-A62C-79E46A2AF51F + DA0C4D5F-7B13-41B9-B85A-091DD3EE9CAD - note - $action = reload xpos - 700 + 1770 ypos - 1490 + 920 - E703B0EC-921B-453A-A32F-14FDBFA54980 + E1E3A9E7-0EEF-4745-A62C-79E46A2AF51F note - $next is set + $action = reload xpos - 1420 + 730 ypos - 950 + 1490 ED06F3FD-4D96-4866-9EEC-11B64FB6D558 note Choose locale xpos - 830 + 860 ypos 1110 - F41A047D-DC74-4085-AD36-E52EDD909FBD + F8F07F3C-11D6-44F1-BFE5-66F70A8C0253 + colorindex + 7 xpos - 1170 + 1290 ypos - 730 + 760 + + F9040898-2FD2-4C79-B34F-1EEAD90BE256 + + colorindex + 4 + note + Show "generating your citation" status message + xpos + 1250 + ypos + 400 F912A5F2-6586-498F-8A32-C11B59C687F5 note Choose default styles xpos - 830 + 860 ypos 920 @@ -1814,7 +2101,7 @@ Edit the `ZOTERO_DIR` variable to point to Zotero 5's data directory if you aren version - 0.1.4-beta + 0.1.5-beta webaddress https://github.com/deanishe/zothero diff --git a/src/lib/cite/.gitignore b/src/lib/cite/.gitignore index 3ac7b81..e5664d2 100644 --- a/src/lib/cite/.gitignore +++ b/src/lib/cite/.gitignore @@ -1 +1 @@ -gems/* \ No newline at end of file +gems/*/* \ No newline at end of file diff --git a/src/lib/cite/gems/.gitkeep b/src/lib/cite/gems/.gitkeep new file mode 100644 index 0000000..e69de29 diff --git a/src/lib/docopt.py b/src/lib/docopt.py new file mode 100644 index 0000000..7b927e2 --- /dev/null +++ b/src/lib/docopt.py @@ -0,0 +1,579 @@ +"""Pythonic command-line interface parser that will make you smile. + + * http://docopt.org + * Repository and issue-tracker: https://github.com/docopt/docopt + * Licensed under terms of MIT license (see LICENSE-MIT) + * Copyright (c) 2013 Vladimir Keleshev, vladimir@keleshev.com + +""" +import sys +import re + + +__all__ = ['docopt'] +__version__ = '0.6.2' + + +class DocoptLanguageError(Exception): + + """Error in construction of usage-message by developer.""" + + +class DocoptExit(SystemExit): + + """Exit in case user invoked program with incorrect arguments.""" + + usage = '' + + def __init__(self, message=''): + SystemExit.__init__(self, (message + '\n' + self.usage).strip()) + + +class Pattern(object): + + def __eq__(self, other): + return repr(self) == repr(other) + + def __hash__(self): + return hash(repr(self)) + + def fix(self): + self.fix_identities() + self.fix_repeating_arguments() + return self + + def fix_identities(self, uniq=None): + """Make pattern-tree tips point to same object if they are equal.""" + if not hasattr(self, 'children'): + return self + uniq = list(set(self.flat())) if uniq is None else uniq + for i, c in enumerate(self.children): + if not hasattr(c, 'children'): + assert c in uniq + self.children[i] = uniq[uniq.index(c)] + else: + c.fix_identities(uniq) + + def fix_repeating_arguments(self): + """Fix elements that should accumulate/increment values.""" + either = [list(c.children) for c in self.either.children] + for case in either: + for e in [c for c in case if case.count(c) > 1]: + if type(e) is Argument or type(e) is Option and e.argcount: + if e.value is None: + e.value = [] + elif type(e.value) is not list: + e.value = e.value.split() + if type(e) is Command or type(e) is Option and e.argcount == 0: + e.value = 0 + return self + + @property + def either(self): + """Transform pattern into an equivalent, with only top-level Either.""" + # Currently the pattern will not be equivalent, but more "narrow", + # although good enough to reason about list arguments. + ret = [] + groups = [[self]] + while groups: + children = groups.pop(0) + types = [type(c) for c in children] + if Either in types: + either = [c for c in children if type(c) is Either][0] + children.pop(children.index(either)) + for c in either.children: + groups.append([c] + children) + elif Required in types: + required = [c for c in children if type(c) is Required][0] + children.pop(children.index(required)) + groups.append(list(required.children) + children) + elif Optional in types: + optional = [c for c in children if type(c) is Optional][0] + children.pop(children.index(optional)) + groups.append(list(optional.children) + children) + elif AnyOptions in types: + optional = [c for c in children if type(c) is AnyOptions][0] + children.pop(children.index(optional)) + groups.append(list(optional.children) + children) + elif OneOrMore in types: + oneormore = [c for c in children if type(c) is OneOrMore][0] + children.pop(children.index(oneormore)) + groups.append(list(oneormore.children) * 2 + children) + else: + ret.append(children) + return Either(*[Required(*e) for e in ret]) + + +class ChildPattern(Pattern): + + def __init__(self, name, value=None): + self.name = name + self.value = value + + def __repr__(self): + return '%s(%r, %r)' % (self.__class__.__name__, self.name, self.value) + + def flat(self, *types): + return [self] if not types or type(self) in types else [] + + def match(self, left, collected=None): + collected = [] if collected is None else collected + pos, match = self.single_match(left) + if match is None: + return False, left, collected + left_ = left[:pos] + left[pos + 1:] + same_name = [a for a in collected if a.name == self.name] + if type(self.value) in (int, list): + if type(self.value) is int: + increment = 1 + else: + increment = ([match.value] if type(match.value) is str + else match.value) + if not same_name: + match.value = increment + return True, left_, collected + [match] + same_name[0].value += increment + return True, left_, collected + return True, left_, collected + [match] + + +class ParentPattern(Pattern): + + def __init__(self, *children): + self.children = list(children) + + def __repr__(self): + return '%s(%s)' % (self.__class__.__name__, + ', '.join(repr(a) for a in self.children)) + + def flat(self, *types): + if type(self) in types: + return [self] + return sum([c.flat(*types) for c in self.children], []) + + +class Argument(ChildPattern): + + def single_match(self, left): + for n, p in enumerate(left): + if type(p) is Argument: + return n, Argument(self.name, p.value) + return None, None + + @classmethod + def parse(class_, source): + name = re.findall('(<\S*?>)', source)[0] + value = re.findall('\[default: (.*)\]', source, flags=re.I) + return class_(name, value[0] if value else None) + + +class Command(Argument): + + def __init__(self, name, value=False): + self.name = name + self.value = value + + def single_match(self, left): + for n, p in enumerate(left): + if type(p) is Argument: + if p.value == self.name: + return n, Command(self.name, True) + else: + break + return None, None + + +class Option(ChildPattern): + + def __init__(self, short=None, long=None, argcount=0, value=False): + assert argcount in (0, 1) + self.short, self.long = short, long + self.argcount, self.value = argcount, value + self.value = None if value is False and argcount else value + + @classmethod + def parse(class_, option_description): + short, long, argcount, value = None, None, 0, False + options, _, description = option_description.strip().partition(' ') + options = options.replace(',', ' ').replace('=', ' ') + for s in options.split(): + if s.startswith('--'): + long = s + elif s.startswith('-'): + short = s + else: + argcount = 1 + if argcount: + matched = re.findall('\[default: (.*)\]', description, flags=re.I) + value = matched[0] if matched else None + return class_(short, long, argcount, value) + + def single_match(self, left): + for n, p in enumerate(left): + if self.name == p.name: + return n, p + return None, None + + @property + def name(self): + return self.long or self.short + + def __repr__(self): + return 'Option(%r, %r, %r, %r)' % (self.short, self.long, + self.argcount, self.value) + + +class Required(ParentPattern): + + def match(self, left, collected=None): + collected = [] if collected is None else collected + l = left + c = collected + for p in self.children: + matched, l, c = p.match(l, c) + if not matched: + return False, left, collected + return True, l, c + + +class Optional(ParentPattern): + + def match(self, left, collected=None): + collected = [] if collected is None else collected + for p in self.children: + m, left, collected = p.match(left, collected) + return True, left, collected + + +class AnyOptions(Optional): + + """Marker/placeholder for [options] shortcut.""" + + +class OneOrMore(ParentPattern): + + def match(self, left, collected=None): + assert len(self.children) == 1 + collected = [] if collected is None else collected + l = left + c = collected + l_ = None + matched = True + times = 0 + while matched: + # could it be that something didn't match but changed l or c? + matched, l, c = self.children[0].match(l, c) + times += 1 if matched else 0 + if l_ == l: + break + l_ = l + if times >= 1: + return True, l, c + return False, left, collected + + +class Either(ParentPattern): + + def match(self, left, collected=None): + collected = [] if collected is None else collected + outcomes = [] + for p in self.children: + matched, _, _ = outcome = p.match(left, collected) + if matched: + outcomes.append(outcome) + if outcomes: + return min(outcomes, key=lambda outcome: len(outcome[1])) + return False, left, collected + + +class TokenStream(list): + + def __init__(self, source, error): + self += source.split() if hasattr(source, 'split') else source + self.error = error + + def move(self): + return self.pop(0) if len(self) else None + + def current(self): + return self[0] if len(self) else None + + +def parse_long(tokens, options): + """long ::= '--' chars [ ( ' ' | '=' ) chars ] ;""" + long, eq, value = tokens.move().partition('=') + assert long.startswith('--') + value = None if eq == value == '' else value + similar = [o for o in options if o.long == long] + if tokens.error is DocoptExit and similar == []: # if no exact match + similar = [o for o in options if o.long and o.long.startswith(long)] + if len(similar) > 1: # might be simply specified ambiguously 2+ times? + raise tokens.error('%s is not a unique prefix: %s?' % + (long, ', '.join(o.long for o in similar))) + elif len(similar) < 1: + argcount = 1 if eq == '=' else 0 + o = Option(None, long, argcount) + options.append(o) + if tokens.error is DocoptExit: + o = Option(None, long, argcount, value if argcount else True) + else: + o = Option(similar[0].short, similar[0].long, + similar[0].argcount, similar[0].value) + if o.argcount == 0: + if value is not None: + raise tokens.error('%s must not have an argument' % o.long) + else: + if value is None: + if tokens.current() is None: + raise tokens.error('%s requires argument' % o.long) + value = tokens.move() + if tokens.error is DocoptExit: + o.value = value if value is not None else True + return [o] + + +def parse_shorts(tokens, options): + """shorts ::= '-' ( chars )* [ [ ' ' ] chars ] ;""" + token = tokens.move() + assert token.startswith('-') and not token.startswith('--') + left = token.lstrip('-') + parsed = [] + while left != '': + short, left = '-' + left[0], left[1:] + similar = [o for o in options if o.short == short] + if len(similar) > 1: + raise tokens.error('%s is specified ambiguously %d times' % + (short, len(similar))) + elif len(similar) < 1: + o = Option(short, None, 0) + options.append(o) + if tokens.error is DocoptExit: + o = Option(short, None, 0, True) + else: # why copying is necessary here? + o = Option(short, similar[0].long, + similar[0].argcount, similar[0].value) + value = None + if o.argcount != 0: + if left == '': + if tokens.current() is None: + raise tokens.error('%s requires argument' % short) + value = tokens.move() + else: + value = left + left = '' + if tokens.error is DocoptExit: + o.value = value if value is not None else True + parsed.append(o) + return parsed + + +def parse_pattern(source, options): + tokens = TokenStream(re.sub(r'([\[\]\(\)\|]|\.\.\.)', r' \1 ', source), + DocoptLanguageError) + result = parse_expr(tokens, options) + if tokens.current() is not None: + raise tokens.error('unexpected ending: %r' % ' '.join(tokens)) + return Required(*result) + + +def parse_expr(tokens, options): + """expr ::= seq ( '|' seq )* ;""" + seq = parse_seq(tokens, options) + if tokens.current() != '|': + return seq + result = [Required(*seq)] if len(seq) > 1 else seq + while tokens.current() == '|': + tokens.move() + seq = parse_seq(tokens, options) + result += [Required(*seq)] if len(seq) > 1 else seq + return [Either(*result)] if len(result) > 1 else result + + +def parse_seq(tokens, options): + """seq ::= ( atom [ '...' ] )* ;""" + result = [] + while tokens.current() not in [None, ']', ')', '|']: + atom = parse_atom(tokens, options) + if tokens.current() == '...': + atom = [OneOrMore(*atom)] + tokens.move() + result += atom + return result + + +def parse_atom(tokens, options): + """atom ::= '(' expr ')' | '[' expr ']' | 'options' + | long | shorts | argument | command ; + """ + token = tokens.current() + result = [] + if token in '([': + tokens.move() + matching, pattern = {'(': [')', Required], '[': [']', Optional]}[token] + result = pattern(*parse_expr(tokens, options)) + if tokens.move() != matching: + raise tokens.error("unmatched '%s'" % token) + return [result] + elif token == 'options': + tokens.move() + return [AnyOptions()] + elif token.startswith('--') and token != '--': + return parse_long(tokens, options) + elif token.startswith('-') and token not in ('-', '--'): + return parse_shorts(tokens, options) + elif token.startswith('<') and token.endswith('>') or token.isupper(): + return [Argument(tokens.move())] + else: + return [Command(tokens.move())] + + +def parse_argv(tokens, options, options_first=False): + """Parse command-line argument vector. + + If options_first: + argv ::= [ long | shorts ]* [ argument ]* [ '--' [ argument ]* ] ; + else: + argv ::= [ long | shorts | argument ]* [ '--' [ argument ]* ] ; + + """ + parsed = [] + while tokens.current() is not None: + if tokens.current() == '--': + return parsed + [Argument(None, v) for v in tokens] + elif tokens.current().startswith('--'): + parsed += parse_long(tokens, options) + elif tokens.current().startswith('-') and tokens.current() != '-': + parsed += parse_shorts(tokens, options) + elif options_first: + return parsed + [Argument(None, v) for v in tokens] + else: + parsed.append(Argument(None, tokens.move())) + return parsed + + +def parse_defaults(doc): + # in python < 2.7 you can't pass flags=re.MULTILINE + split = re.split('\n *(<\S+?>|-\S+?)', doc)[1:] + split = [s1 + s2 for s1, s2 in zip(split[::2], split[1::2])] + options = [Option.parse(s) for s in split if s.startswith('-')] + #arguments = [Argument.parse(s) for s in split if s.startswith('<')] + #return options, arguments + return options + + +def printable_usage(doc): + # in python < 2.7 you can't pass flags=re.IGNORECASE + usage_split = re.split(r'([Uu][Ss][Aa][Gg][Ee]:)', doc) + if len(usage_split) < 3: + raise DocoptLanguageError('"usage:" (case-insensitive) not found.') + if len(usage_split) > 3: + raise DocoptLanguageError('More than one "usage:" (case-insensitive).') + return re.split(r'\n\s*\n', ''.join(usage_split[1:]))[0].strip() + + +def formal_usage(printable_usage): + pu = printable_usage.split()[1:] # split and drop "usage:" + return '( ' + ' '.join(') | (' if s == pu[0] else s for s in pu[1:]) + ' )' + + +def extras(help, version, options, doc): + if help and any((o.name in ('-h', '--help')) and o.value for o in options): + print(doc.strip("\n")) + sys.exit() + if version and any(o.name == '--version' and o.value for o in options): + print(version) + sys.exit() + + +class Dict(dict): + def __repr__(self): + return '{%s}' % ',\n '.join('%r: %r' % i for i in sorted(self.items())) + + +def docopt(doc, argv=None, help=True, version=None, options_first=False): + """Parse `argv` based on command-line interface described in `doc`. + + `docopt` creates your command-line interface based on its + description that you pass as `doc`. Such description can contain + --options, , commands, which could be + [optional], (required), (mutually | exclusive) or repeated... + + Parameters + ---------- + doc : str + Description of your command-line interface. + argv : list of str, optional + Argument vector to be parsed. sys.argv[1:] is used if not + provided. + help : bool (default: True) + Set to False to disable automatic help on -h or --help + options. + version : any object + If passed, the object will be printed if --version is in + `argv`. + options_first : bool (default: False) + Set to True to require options preceed positional arguments, + i.e. to forbid options and positional arguments intermix. + + Returns + ------- + args : dict + A dictionary, where keys are names of command-line elements + such as e.g. "--verbose" and "", and values are the + parsed values of those elements. + + Example + ------- + >>> from docopt import docopt + >>> doc = ''' + Usage: + my_program tcp [--timeout=] + my_program serial [--baud=] [--timeout=] + my_program (-h | --help | --version) + + Options: + -h, --help Show this screen and exit. + --baud= Baudrate [default: 9600] + ''' + >>> argv = ['tcp', '127.0.0.1', '80', '--timeout', '30'] + >>> docopt(doc, argv) + {'--baud': '9600', + '--help': False, + '--timeout': '30', + '--version': False, + '': '127.0.0.1', + '': '80', + 'serial': False, + 'tcp': True} + + See also + -------- + * For video introduction see http://docopt.org + * Full documentation is available in README.rst as well as online + at https://github.com/docopt/docopt#readme + + """ + if argv is None: + argv = sys.argv[1:] + DocoptExit.usage = printable_usage(doc) + options = parse_defaults(doc) + pattern = parse_pattern(formal_usage(DocoptExit.usage), options) + # [default] syntax for argument is disabled + #for a in pattern.flat(Argument): + # same_name = [d for d in arguments if d.name == a.name] + # if same_name: + # a.value = same_name[0].value + argv = parse_argv(TokenStream(argv, DocoptExit), list(options), + options_first) + pattern_options = set(pattern.flat(Option)) + for ao in pattern.flat(AnyOptions): + doc_options = parse_defaults(doc) + ao.children = list(set(doc_options) - pattern_options) + #if any_options: + # ao.children += [Option(o.short, o.long, o.argcount) + # for o in argv if type(o) is Option] + extras(help, version, argv, doc) + matched, left, collected = pattern.fix().match(argv) + if matched and left == []: # better error message if left? + return Dict((a.name, a.value) for a in (pattern.flat() + collected)) + raise DocoptExit() diff --git a/src/lib/pasteboard.py b/src/lib/pasteboard.py index caf002d..140984c 100644 --- a/src/lib/pasteboard.py +++ b/src/lib/pasteboard.py @@ -1,4 +1,3 @@ -#!/usr/bin/env python # encoding: utf-8 # # Copyright (c) 2017 Dean Jackson @@ -8,18 +7,14 @@ # Created on 2017-12-20 # -""" -""" +"""Put multiple data formats on the macOS pasteboard at the same time.""" from __future__ import print_function, absolute_import -import os -import sys - from AppKit import NSPasteboard from Foundation import NSData - +# Some common UTIs UTI_HTML = 'public.html' UTI_TEXT = 'public.rtf' UTI_PLAIN = 'public.utf8-plain-text' diff --git a/src/lib/rtfunicode.py b/src/lib/rtfunicode.py new file mode 100644 index 0000000..39ccfb4 --- /dev/null +++ b/src/lib/rtfunicode.py @@ -0,0 +1,71 @@ +# Encode unicode strings to RTF 1.5-compatible command codes. +# Command codes are of the form `\uN?`, where N is a signed 16-bit integer and +# ? is a placeholder character for pre-1.5 RTF readers. + +import codecs +import re +import sys + +# Encode everything < 0x20, the \, { and } characters and everything > 0x7f +_charescape = '([\x00-\x1f\\\\{}\x80-\uffff])' + +if sys.version_info[0] < 3: + # Python 2 + _charescape = re.compile(_charescape.decode('raw_unicode_escape')) + + # We can use % interpolation (faster). + def _replace(match): + cp = ord(match.group(1)) + # Convert codepoint into a signed integer, insert into escape sequence + return '\\u%s?' % (cp > 32767 and cp - 65536 or cp) + +else: + # Python 3 + _charescape = re.compile(_charescape) + + # This triggers a pyflakes warnings (redefinition), please ignore. + # Use a `.format()` string formatter. + def _replace(match): + cp = ord(match.group(1)) + # Convert codepoint into a signed integer, insert into escape sequence + return '\\u{0}?'.format(cp > 32767 and cp - 65536 or cp) + + +def _rtfunicode_encode(text, errors): + # Encode to RTF \uDDDDD? signed 16 integers and replacement char + return _charescape.sub(_replace, text).encode('ascii', errors) + + + +class Codec(codecs.Codec): + def encode(self, input, errors='strict'): + return _rtfunicode_encode(input, errors), len(input) + +try: + class IncrementalEncoder(codecs.IncrementalEncoder): + def encode(self, input, final=False): + return _rtfunicode_encode(input, self.errors) +except AttributeError: + # Python 2.4, ignore + pass + + +class StreamWriter(Codec, codecs.StreamWriter): + pass + + +def rtfunicode(name): + if name == 'rtfunicode': + try: + return codecs.CodecInfo( + name='rtfunicode', + encode=Codec().encode, + decode=Codec().decode, # raises NotImplementedError + incrementalencoder=IncrementalEncoder, + streamwriter=StreamWriter, + ) + except AttributeError: + # Python 2.4 + return (Codec().encode, Codec().decode, StreamWriter, None) + +codecs.register(rtfunicode) diff --git a/src/lib/workflow/Notify.tgz b/src/lib/workflow/Notify.tgz new file mode 100644 index 0000000000000000000000000000000000000000..174e9a7b5c395385905cabf43d625a98acbb407c GIT binary patch literal 35556 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 literal 0 HcmV?d00001 diff --git a/src/lib/workflow/__init__.py b/src/lib/workflow/__init__.py new file mode 100644 index 0000000..2c4f8c0 --- /dev/null +++ b/src/lib/workflow/__init__.py @@ -0,0 +1,108 @@ +#!/usr/bin/env python +# encoding: utf-8 +# +# Copyright (c) 2014 Dean Jackson +# +# MIT Licence. See http://opensource.org/licenses/MIT +# +# Created on 2014-02-15 +# + +"""A helper library for `Alfred `_ workflows.""" + +import os + +# Workflow objects +from .workflow import Workflow, manager +from .workflow3 import Variables, Workflow3 + +# Exceptions +from .workflow import PasswordNotFound, KeychainError + +# Icons +from .workflow import ( + ICON_ACCOUNT, + ICON_BURN, + ICON_CLOCK, + ICON_COLOR, + ICON_COLOUR, + ICON_EJECT, + ICON_ERROR, + ICON_FAVORITE, + ICON_FAVOURITE, + ICON_GROUP, + ICON_HELP, + ICON_HOME, + ICON_INFO, + ICON_NETWORK, + ICON_NOTE, + ICON_SETTINGS, + ICON_SWIRL, + ICON_SWITCH, + ICON_SYNC, + ICON_TRASH, + ICON_USER, + ICON_WARNING, + ICON_WEB, +) + +# Filter matching rules +from .workflow import ( + MATCH_ALL, + MATCH_ALLCHARS, + MATCH_ATOM, + MATCH_CAPITALS, + MATCH_INITIALS, + MATCH_INITIALS_CONTAIN, + MATCH_INITIALS_STARTSWITH, + MATCH_STARTSWITH, + MATCH_SUBSTRING, +) + + +__title__ = 'Alfred-Workflow' +__version__ = open(os.path.join(os.path.dirname(__file__), 'version')).read() +__author__ = 'Dean Jackson' +__licence__ = 'MIT' +__copyright__ = 'Copyright 2014-2017 Dean Jackson' + +__all__ = [ + 'Variables', + 'Workflow', + 'Workflow3', + 'manager', + 'PasswordNotFound', + 'KeychainError', + 'ICON_ACCOUNT', + 'ICON_BURN', + 'ICON_CLOCK', + 'ICON_COLOR', + 'ICON_COLOUR', + 'ICON_EJECT', + 'ICON_ERROR', + 'ICON_FAVORITE', + 'ICON_FAVOURITE', + 'ICON_GROUP', + 'ICON_HELP', + 'ICON_HOME', + 'ICON_INFO', + 'ICON_NETWORK', + 'ICON_NOTE', + 'ICON_SETTINGS', + 'ICON_SWIRL', + 'ICON_SWITCH', + 'ICON_SYNC', + 'ICON_TRASH', + 'ICON_USER', + 'ICON_WARNING', + 'ICON_WEB', + 'MATCH_ALL', + 'MATCH_ALLCHARS', + 'MATCH_ATOM', + 'MATCH_CAPITALS', + 'MATCH_INITIALS', + 'MATCH_INITIALS_CONTAIN', + 'MATCH_INITIALS_STARTSWITH', + 'MATCH_STARTSWITH', + 'MATCH_SUBSTRING', +] diff --git a/src/lib/workflow/background.py b/src/lib/workflow/background.py new file mode 100644 index 0000000..cd5400b --- /dev/null +++ b/src/lib/workflow/background.py @@ -0,0 +1,293 @@ +#!/usr/bin/env python +# encoding: utf-8 +# +# Copyright (c) 2014 deanishe@deanishe.net +# +# MIT Licence. See http://opensource.org/licenses/MIT +# +# Created on 2014-04-06 +# + +""" +This module provides an API to run commands in background processes. +Combine with the :ref:`caching API ` to work from cached data +while you fetch fresh data in the background. + +See :ref:`the User Manual ` for more information +and examples. +""" + +from __future__ import print_function, unicode_literals + +import signal +import sys +import os +import subprocess +import pickle + +from workflow import Workflow + +__all__ = ['is_running', 'run_in_background'] + +_wf = None + + +def wf(): + global _wf + if _wf is None: + _wf = Workflow() + return _wf + + +def _log(): + return wf().logger + + +def _arg_cache(name): + """Return path to pickle cache file for arguments. + + :param name: name of task + :type name: ``unicode`` + :returns: Path to cache file + :rtype: ``unicode`` filepath + + """ + return wf().cachefile(name + '.argcache') + + +def _pid_file(name): + """Return path to PID file for ``name``. + + :param name: name of task + :type name: ``unicode`` + :returns: Path to PID file for task + :rtype: ``unicode`` filepath + + """ + return wf().cachefile(name + '.pid') + + +def _process_exists(pid): + """Check if a process with PID ``pid`` exists. + + :param pid: PID to check + :type pid: ``int`` + :returns: ``True`` if process exists, else ``False`` + :rtype: ``Boolean`` + + """ + try: + os.kill(pid, 0) + except OSError: # not running + return False + return True + + +def _job_pid(name): + """Get PID of job or `None` if job does not exist. + + Args: + name (str): Name of job. + + Returns: + int: PID of job process (or `None` if job doesn't exist). + """ + pidfile = _pid_file(name) + if not os.path.exists(pidfile): + return + + with open(pidfile, 'rb') as fp: + pid = int(fp.read()) + + if _process_exists(pid): + return pid + + try: + os.unlink(pidfile) + except Exception: # pragma: no cover + pass + + +def is_running(name): + """Test whether task ``name`` is currently running. + + :param name: name of task + :type name: unicode + :returns: ``True`` if task with name ``name`` is running, else ``False`` + :rtype: bool + + """ + if _job_pid(name) is not None: + return True + + return False + + +def _background(pidfile, stdin='/dev/null', stdout='/dev/null', + stderr='/dev/null'): # pragma: no cover + """Fork the current process into a background daemon. + + :param pidfile: file to write PID of daemon process to. + :type pidfile: filepath + :param stdin: where to read input + :type stdin: filepath + :param stdout: where to write stdout output + :type stdout: filepath + :param stderr: where to write stderr output + :type stderr: filepath + + """ + def _fork_and_exit_parent(errmsg, wait=False, write=False): + try: + pid = os.fork() + if pid > 0: + if write: # write PID of child process to `pidfile` + tmp = pidfile + '.tmp' + with open(tmp, 'wb') as fp: + fp.write(str(pid)) + os.rename(tmp, pidfile) + if wait: # wait for child process to exit + os.waitpid(pid, 0) + os._exit(0) + except OSError as err: + _log().critical('%s: (%d) %s', errmsg, err.errno, err.strerror) + raise err + + # Do first fork and wait for second fork to finish. + _fork_and_exit_parent('fork #1 failed', wait=True) + + # Decouple from parent environment. + os.chdir(wf().workflowdir) + os.setsid() + + # Do second fork and write PID to pidfile. + _fork_and_exit_parent('fork #2 failed', write=True) + + # Now I am a daemon! + # Redirect standard file descriptors. + si = open(stdin, 'r', 0) + so = open(stdout, 'a+', 0) + se = open(stderr, 'a+', 0) + if hasattr(sys.stdin, 'fileno'): + os.dup2(si.fileno(), sys.stdin.fileno()) + if hasattr(sys.stdout, 'fileno'): + os.dup2(so.fileno(), sys.stdout.fileno()) + if hasattr(sys.stderr, 'fileno'): + os.dup2(se.fileno(), sys.stderr.fileno()) + + +def kill(name, sig=signal.SIGTERM): + """Send a signal to job ``name`` via :func:`os.kill`. + + .. versionadded:: 1.29 + + Args: + name (str): Name of the job + sig (int, optional): Signal to send (default: SIGTERM) + + Returns: + bool: `False` if job isn't running, `True` if signal was sent. + """ + pid = _job_pid(name) + if pid is None: + return False + + os.kill(pid, sig) + return True + + +def run_in_background(name, args, **kwargs): + r"""Cache arguments then call this script again via :func:`subprocess.call`. + + :param name: name of job + :type name: unicode + :param args: arguments passed as first argument to :func:`subprocess.call` + :param \**kwargs: keyword arguments to :func:`subprocess.call` + :returns: exit code of sub-process + :rtype: int + + When you call this function, it caches its arguments and then calls + ``background.py`` in a subprocess. The Python subprocess will load the + cached arguments, fork into the background, and then run the command you + specified. + + This function will return as soon as the ``background.py`` subprocess has + forked, returning the exit code of *that* process (i.e. not of the command + you're trying to run). + + If that process fails, an error will be written to the log file. + + If a process is already running under the same name, this function will + return immediately and will not run the specified command. + + """ + if is_running(name): + _log().info('[%s] job already running', name) + return + + argcache = _arg_cache(name) + + # Cache arguments + with open(argcache, 'wb') as fp: + pickle.dump({'args': args, 'kwargs': kwargs}, fp) + _log().debug('[%s] command cached: %s', name, argcache) + + # Call this script + cmd = ['/usr/bin/python', __file__, name] + _log().debug('[%s] passing job to background runner: %r', name, cmd) + retcode = subprocess.call(cmd) + + if retcode: # pragma: no cover + _log().error('[%s] background runner failed with %d', name, retcode) + else: + _log().debug('[%s] background job started', name) + + return retcode + + +def main(wf): # pragma: no cover + """Run command in a background process. + + Load cached arguments, fork into background, then call + :meth:`subprocess.call` with cached arguments. + + """ + log = wf.logger + name = wf.args[0] + argcache = _arg_cache(name) + if not os.path.exists(argcache): + msg = '[{0}] command cache not found: {1}'.format(name, argcache) + log.critical(msg) + raise IOError(msg) + + # Fork to background and run command + pidfile = _pid_file(name) + _background(pidfile) + + # Load cached arguments + with open(argcache, 'rb') as fp: + data = pickle.load(fp) + + # Cached arguments + args = data['args'] + kwargs = data['kwargs'] + + # Delete argument cache file + os.unlink(argcache) + + try: + # Run the command + log.debug('[%s] running command: %r', name, args) + + retcode = subprocess.call(args, **kwargs) + + if retcode: + log.error('[%s] command failed with status %d', name, retcode) + finally: + os.unlink(pidfile) + + log.debug('[%s] job complete', name) + + +if __name__ == '__main__': # pragma: no cover + wf().run(main) diff --git a/src/lib/workflow/notify.py b/src/lib/workflow/notify.py new file mode 100644 index 0000000..4542c78 --- /dev/null +++ b/src/lib/workflow/notify.py @@ -0,0 +1,345 @@ +#!/usr/bin/env python +# encoding: utf-8 +# +# Copyright (c) 2015 deanishe@deanishe.net +# +# MIT Licence. See http://opensource.org/licenses/MIT +# +# Created on 2015-11-26 +# + +# TODO: Exclude this module from test and code coverage in py2.6 + +""" +Post notifications via the macOS Notification Center. This feature +is only available on Mountain Lion (10.8) and later. It will +silently fail on older systems. + +The main API is a single function, :func:`~workflow.notify.notify`. + +It works by copying a simple application to your workflow's data +directory. It replaces the application's icon with your workflow's +icon and then calls the application to post notifications. +""" + +from __future__ import print_function, unicode_literals + +import os +import plistlib +import shutil +import subprocess +import sys +import tarfile +import tempfile +import uuid + +import workflow + + +_wf = None +_log = None + + +#: Available system sounds from System Preferences > Sound > Sound Effects +SOUNDS = ( + 'Basso', + 'Blow', + 'Bottle', + 'Frog', + 'Funk', + 'Glass', + 'Hero', + 'Morse', + 'Ping', + 'Pop', + 'Purr', + 'Sosumi', + 'Submarine', + 'Tink', +) + + +def wf(): + """Return Workflow object for this module. + + Returns: + workflow.Workflow: Workflow object for current workflow. + """ + global _wf + if _wf is None: + _wf = workflow.Workflow() + return _wf + + +def log(): + """Return logger for this module. + + Returns: + logging.Logger: Logger for this module. + """ + global _log + if _log is None: + _log = wf().logger + return _log + + +def notifier_program(): + """Return path to notifier applet executable. + + Returns: + unicode: Path to Notify.app ``applet`` executable. + """ + return wf().datafile('Notify.app/Contents/MacOS/applet') + + +def notifier_icon_path(): + """Return path to icon file in installed Notify.app. + + Returns: + unicode: Path to ``applet.icns`` within the app bundle. + """ + return wf().datafile('Notify.app/Contents/Resources/applet.icns') + + +def install_notifier(): + """Extract ``Notify.app`` from the workflow to data directory. + + Changes the bundle ID of the installed app and gives it the + workflow's icon. + """ + archive = os.path.join(os.path.dirname(__file__), 'Notify.tgz') + destdir = wf().datadir + app_path = os.path.join(destdir, 'Notify.app') + n = notifier_program() + log().debug('installing Notify.app to %r ...', destdir) + # z = zipfile.ZipFile(archive, 'r') + # z.extractall(destdir) + tgz = tarfile.open(archive, 'r:gz') + tgz.extractall(destdir) + assert os.path.exists(n), \ + 'Notify.app could not be installed in %s' % destdir + + # Replace applet icon + icon = notifier_icon_path() + workflow_icon = wf().workflowfile('icon.png') + if os.path.exists(icon): + os.unlink(icon) + + png_to_icns(workflow_icon, icon) + + # Set file icon + # PyObjC isn't available for 2.6, so this is 2.7 only. Actually, + # none of this code will "work" on pre-10.8 systems. Let it run + # until I figure out a better way of excluding this module + # from coverage in py2.6. + if sys.version_info >= (2, 7): # pragma: no cover + from AppKit import NSWorkspace, NSImage + + ws = NSWorkspace.sharedWorkspace() + img = NSImage.alloc().init() + img.initWithContentsOfFile_(icon) + ws.setIcon_forFile_options_(img, app_path, 0) + + # Change bundle ID of installed app + ip_path = os.path.join(app_path, 'Contents/Info.plist') + bundle_id = '{0}.{1}'.format(wf().bundleid, uuid.uuid4().hex) + data = plistlib.readPlist(ip_path) + log().debug('changing bundle ID to %r', bundle_id) + data['CFBundleIdentifier'] = bundle_id + plistlib.writePlist(data, ip_path) + + +def validate_sound(sound): + """Coerce ``sound`` to valid sound name. + + Returns ``None`` for invalid sounds. Sound names can be found + in ``System Preferences > Sound > Sound Effects``. + + Args: + sound (str): Name of system sound. + + Returns: + str: Proper name of sound or ``None``. + """ + if not sound: + return None + + # Case-insensitive comparison of `sound` + if sound.lower() in [s.lower() for s in SOUNDS]: + # Title-case is correct for all system sounds as of macOS 10.11 + return sound.title() + return None + + +def notify(title='', text='', sound=None): + """Post notification via Notify.app helper. + + Args: + title (str, optional): Notification title. + text (str, optional): Notification body text. + sound (str, optional): Name of sound to play. + + Raises: + ValueError: Raised if both ``title`` and ``text`` are empty. + + Returns: + bool: ``True`` if notification was posted, else ``False``. + """ + if title == text == '': + raise ValueError('Empty notification') + + sound = validate_sound(sound) or '' + + n = notifier_program() + + if not os.path.exists(n): + install_notifier() + + env = os.environ.copy() + enc = 'utf-8' + env['NOTIFY_TITLE'] = title.encode(enc) + env['NOTIFY_MESSAGE'] = text.encode(enc) + env['NOTIFY_SOUND'] = sound.encode(enc) + cmd = [n] + retcode = subprocess.call(cmd, env=env) + if retcode == 0: + return True + + log().error('Notify.app exited with status {0}.'.format(retcode)) + return False + + +def convert_image(inpath, outpath, size): + """Convert an image file using ``sips``. + + Args: + inpath (str): Path of source file. + outpath (str): Path to destination file. + size (int): Width and height of destination image in pixels. + + Raises: + RuntimeError: Raised if ``sips`` exits with non-zero status. + """ + cmd = [ + b'sips', + b'-z', str(size), str(size), + inpath, + b'--out', outpath] + # log().debug(cmd) + with open(os.devnull, 'w') as pipe: + retcode = subprocess.call(cmd, stdout=pipe, stderr=subprocess.STDOUT) + + if retcode != 0: + raise RuntimeError('sips exited with %d' % retcode) + + +def png_to_icns(png_path, icns_path): + """Convert PNG file to ICNS using ``iconutil``. + + Create an iconset from the source PNG file. Generate PNG files + in each size required by macOS, then call ``iconutil`` to turn + them into a single ICNS file. + + Args: + png_path (str): Path to source PNG file. + icns_path (str): Path to destination ICNS file. + + Raises: + RuntimeError: Raised if ``iconutil`` or ``sips`` fail. + """ + tempdir = tempfile.mkdtemp(prefix='aw-', dir=wf().datadir) + + try: + iconset = os.path.join(tempdir, 'Icon.iconset') + + assert not os.path.exists(iconset), \ + 'iconset already exists: ' + iconset + os.makedirs(iconset) + + # Copy source icon to icon set and generate all the other + # sizes needed + configs = [] + for i in (16, 32, 128, 256, 512): + configs.append(('icon_{0}x{0}.png'.format(i), i)) + configs.append((('icon_{0}x{0}@2x.png'.format(i), i * 2))) + + shutil.copy(png_path, os.path.join(iconset, 'icon_256x256.png')) + shutil.copy(png_path, os.path.join(iconset, 'icon_128x128@2x.png')) + + for name, size in configs: + outpath = os.path.join(iconset, name) + if os.path.exists(outpath): + continue + convert_image(png_path, outpath, size) + + cmd = [ + b'iconutil', + b'-c', b'icns', + b'-o', icns_path, + iconset] + + retcode = subprocess.call(cmd) + if retcode != 0: + raise RuntimeError('iconset exited with %d' % retcode) + + assert os.path.exists(icns_path), \ + 'generated ICNS file not found: ' + repr(icns_path) + finally: + try: + shutil.rmtree(tempdir) + except OSError: # pragma: no cover + pass + + +if __name__ == '__main__': # pragma: nocover + # Simple command-line script to test module with + # This won't work on 2.6, as `argparse` isn't available + # by default. + import argparse + + from unicodedata import normalize + + def ustr(s): + """Coerce `s` to normalised Unicode.""" + return normalize('NFD', s.decode('utf-8')) + + p = argparse.ArgumentParser() + p.add_argument('-p', '--png', help="PNG image to convert to ICNS.") + p.add_argument('-l', '--list-sounds', help="Show available sounds.", + action='store_true') + p.add_argument('-t', '--title', + help="Notification title.", type=ustr, + default='') + p.add_argument('-s', '--sound', type=ustr, + help="Optional notification sound.", default='') + p.add_argument('text', type=ustr, + help="Notification body text.", default='', nargs='?') + o = p.parse_args() + + # List available sounds + if o.list_sounds: + for sound in SOUNDS: + print(sound) + sys.exit(0) + + # Convert PNG to ICNS + if o.png: + icns = os.path.join( + os.path.dirname(o.png), + os.path.splitext(os.path.basename(o.png))[0] + '.icns') + + print('converting {0!r} to {1!r} ...'.format(o.png, icns), + file=sys.stderr) + + assert not os.path.exists(icns), \ + 'destination file already exists: ' + icns + + png_to_icns(o.png, icns) + sys.exit(0) + + # Post notification + if o.title == o.text == '': + print('ERROR: empty notification.', file=sys.stderr) + sys.exit(1) + else: + notify(o.title, o.text, o.sound) diff --git a/src/lib/workflow/update.py b/src/lib/workflow/update.py new file mode 100644 index 0000000..37569bb --- /dev/null +++ b/src/lib/workflow/update.py @@ -0,0 +1,426 @@ +#!/usr/bin/env python +# encoding: utf-8 +# +# Copyright (c) 2014 Fabio Niephaus , +# Dean Jackson +# +# MIT Licence. See http://opensource.org/licenses/MIT +# +# Created on 2014-08-16 +# + +"""Self-updating from GitHub. + +.. versionadded:: 1.9 + +.. note:: + + This module is not intended to be used directly. Automatic updates + are controlled by the ``update_settings`` :class:`dict` passed to + :class:`~workflow.workflow.Workflow` objects. + +""" + +from __future__ import print_function, unicode_literals + +import os +import tempfile +import re +import subprocess + +import workflow +import web + +# __all__ = [] + + +RELEASES_BASE = 'https://api.github.com/repos/{0}/releases' + + +_wf = None + + +def wf(): + """Lazy `Workflow` object.""" + global _wf + if _wf is None: + _wf = workflow.Workflow() + return _wf + + +class Version(object): + """Mostly semantic versioning. + + The main difference to proper :ref:`semantic versioning ` + is that this implementation doesn't require a minor or patch version. + + Version strings may also be prefixed with "v", e.g.: + + >>> v = Version('v1.1.1') + >>> v.tuple + (1, 1, 1, '') + + >>> v = Version('2.0') + >>> v.tuple + (2, 0, 0, '') + + >>> Version('3.1-beta').tuple + (3, 1, 0, 'beta') + + >>> Version('1.0.1') > Version('0.0.1') + True + """ + + #: Match version and pre-release/build information in version strings + match_version = re.compile(r'([0-9\.]+)(.+)?').match + + def __init__(self, vstr): + """Create new `Version` object. + + Args: + vstr (basestring): Semantic version string. + """ + self.vstr = vstr + self.major = 0 + self.minor = 0 + self.patch = 0 + self.suffix = '' + self.build = '' + self._parse(vstr) + + def _parse(self, vstr): + if vstr.startswith('v'): + m = self.match_version(vstr[1:]) + else: + m = self.match_version(vstr) + if not m: + raise ValueError('invalid version number: {0}'.format(vstr)) + + version, suffix = m.groups() + parts = self._parse_dotted_string(version) + self.major = parts.pop(0) + if len(parts): + self.minor = parts.pop(0) + if len(parts): + self.patch = parts.pop(0) + if not len(parts) == 0: + raise ValueError('invalid version (too long) : {0}'.format(vstr)) + + if suffix: + # Build info + idx = suffix.find('+') + if idx > -1: + self.build = suffix[idx+1:] + suffix = suffix[:idx] + if suffix: + if not suffix.startswith('-'): + raise ValueError( + 'suffix must start with - : {0}'.format(suffix)) + self.suffix = suffix[1:] + + # wf().logger.debug('version str `{}` -> {}'.format(vstr, repr(self))) + + def _parse_dotted_string(self, s): + """Parse string ``s`` into list of ints and strings.""" + parsed = [] + parts = s.split('.') + for p in parts: + if p.isdigit(): + p = int(p) + parsed.append(p) + return parsed + + @property + def tuple(self): + """Version number as a tuple of major, minor, patch, pre-release.""" + return (self.major, self.minor, self.patch, self.suffix) + + def __lt__(self, other): + """Implement comparison.""" + if not isinstance(other, Version): + raise ValueError('not a Version instance: {0!r}'.format(other)) + t = self.tuple[:3] + o = other.tuple[:3] + if t < o: + return True + if t == o: # We need to compare suffixes + if self.suffix and not other.suffix: + return True + if other.suffix and not self.suffix: + return False + return (self._parse_dotted_string(self.suffix) < + self._parse_dotted_string(other.suffix)) + # t > o + return False + + def __eq__(self, other): + """Implement comparison.""" + if not isinstance(other, Version): + raise ValueError('not a Version instance: {0!r}'.format(other)) + return self.tuple == other.tuple + + def __ne__(self, other): + """Implement comparison.""" + return not self.__eq__(other) + + def __gt__(self, other): + """Implement comparison.""" + if not isinstance(other, Version): + raise ValueError('not a Version instance: {0!r}'.format(other)) + return other.__lt__(self) + + def __le__(self, other): + """Implement comparison.""" + if not isinstance(other, Version): + raise ValueError('not a Version instance: {0!r}'.format(other)) + return not other.__lt__(self) + + def __ge__(self, other): + """Implement comparison.""" + return not self.__lt__(other) + + def __str__(self): + """Return semantic version string.""" + vstr = '{0}.{1}.{2}'.format(self.major, self.minor, self.patch) + if self.suffix: + vstr = '{0}-{1}'.format(vstr, self.suffix) + if self.build: + vstr = '{0}+{1}'.format(vstr, self.build) + return vstr + + def __repr__(self): + """Return 'code' representation of `Version`.""" + return "Version('{0}')".format(str(self)) + + +def download_workflow(url): + """Download workflow at ``url`` to a local temporary file. + + :param url: URL to .alfredworkflow file in GitHub repo + :returns: path to downloaded file + + """ + filename = url.split('/')[-1] + + if (not filename.endswith('.alfredworkflow') and + not filename.endswith('.alfred3workflow')): + raise ValueError('attachment not a workflow: {0}'.format(filename)) + + local_path = os.path.join(tempfile.gettempdir(), filename) + + wf().logger.debug( + 'downloading updated workflow from `%s` to `%s` ...', url, local_path) + + response = web.get(url) + + with open(local_path, 'wb') as output: + output.write(response.content) + + return local_path + + +def build_api_url(slug): + """Generate releases URL from GitHub slug. + + :param slug: Repo name in form ``username/repo`` + :returns: URL to the API endpoint for the repo's releases + + """ + if len(slug.split('/')) != 2: + raise ValueError('invalid GitHub slug: {0}'.format(slug)) + + return RELEASES_BASE.format(slug) + + +def _validate_release(release): + """Return release for running version of Alfred.""" + alf3 = wf().alfred_version.major == 3 + + downloads = {'.alfredworkflow': [], '.alfred3workflow': []} + dl_count = 0 + version = release['tag_name'] + + for asset in release.get('assets', []): + url = asset.get('browser_download_url') + if not url: # pragma: nocover + continue + + ext = os.path.splitext(url)[1].lower() + if ext not in downloads: + continue + + # Ignore Alfred 3-only files if Alfred 2 is running + if ext == '.alfred3workflow' and not alf3: + continue + + downloads[ext].append(url) + dl_count += 1 + + # download_urls.append(url) + + if dl_count == 0: + wf().logger.warning( + 'invalid release (no workflow file): %s', version) + return None + + for k in downloads: + if len(downloads[k]) > 1: + wf().logger.warning( + 'invalid release (multiple %s files): %s', k, version) + return None + + # Prefer .alfred3workflow file if there is one and Alfred 3 is + # running. + if alf3 and len(downloads['.alfred3workflow']): + download_url = downloads['.alfred3workflow'][0] + + else: + download_url = downloads['.alfredworkflow'][0] + + wf().logger.debug('release %s: %s', version, download_url) + + return { + 'version': version, + 'download_url': download_url, + 'prerelease': release['prerelease'] + } + + +def get_valid_releases(github_slug, prereleases=False): + """Return list of all valid releases. + + :param github_slug: ``username/repo`` for workflow's GitHub repo + :param prereleases: Whether to include pre-releases. + :returns: list of dicts. Each :class:`dict` has the form + ``{'version': '1.1', 'download_url': 'http://github.com/...', + 'prerelease': False }`` + + + A valid release is one that contains one ``.alfredworkflow`` file. + + If the GitHub version (i.e. tag) is of the form ``v1.1``, the leading + ``v`` will be stripped. + + """ + api_url = build_api_url(github_slug) + releases = [] + + wf().logger.debug('retrieving releases list: %s', api_url) + + def retrieve_releases(): + wf().logger.info( + 'retrieving releases: %s', github_slug) + return web.get(api_url).json() + + slug = github_slug.replace('/', '-') + for release in wf().cached_data('gh-releases-' + slug, retrieve_releases): + + release = _validate_release(release) + if release is None: + wf().logger.debug('invalid release: %r', release) + continue + + elif release['prerelease'] and not prereleases: + wf().logger.debug('ignoring prerelease: %s', release['version']) + continue + + wf().logger.debug('release: %r', release) + + releases.append(release) + + return releases + + +def check_update(github_slug, current_version, prereleases=False): + """Check whether a newer release is available on GitHub. + + :param github_slug: ``username/repo`` for workflow's GitHub repo + :param current_version: the currently installed version of the + workflow. :ref:`Semantic versioning ` is required. + :param prereleases: Whether to include pre-releases. + :type current_version: ``unicode`` + :returns: ``True`` if an update is available, else ``False`` + + If an update is available, its version number and download URL will + be cached. + + """ + releases = get_valid_releases(github_slug, prereleases) + + if not len(releases): + raise ValueError('no valid releases for %s', github_slug) + + wf().logger.info('%d releases for %s', len(releases), github_slug) + + # GitHub returns releases newest-first + latest_release = releases[0] + + # (latest_version, download_url) = get_latest_release(releases) + vr = Version(latest_release['version']) + vl = Version(current_version) + wf().logger.debug('latest=%r, installed=%r', vr, vl) + if vr > vl: + + wf().cache_data('__workflow_update_status', { + 'version': latest_release['version'], + 'download_url': latest_release['download_url'], + 'available': True + }) + + return True + + wf().cache_data('__workflow_update_status', {'available': False}) + return False + + +def install_update(): + """If a newer release is available, download and install it. + + :returns: ``True`` if an update is installed, else ``False`` + + """ + update_data = wf().cached_data('__workflow_update_status', max_age=0) + + if not update_data or not update_data.get('available'): + wf().logger.info('no update available') + return False + + local_file = download_workflow(update_data['download_url']) + + wf().logger.info('installing updated workflow ...') + subprocess.call(['open', local_file]) + + update_data['available'] = False + wf().cache_data('__workflow_update_status', update_data) + return True + + +if __name__ == '__main__': # pragma: nocover + import sys + + def show_help(status=0): + """Print help message.""" + print('Usage : update.py (check|install) ' + '[--prereleases] ') + sys.exit(status) + + argv = sys.argv[:] + if '-h' in argv or '--help' in argv: + show_help() + + prereleases = '--prereleases' in argv + + if prereleases: + argv.remove('--prereleases') + + if len(argv) != 4: + show_help(1) + + action, github_slug, version = argv[1:] + + if action == 'check': + check_update(github_slug, version, prereleases) + elif action == 'install': + install_update() + else: + show_help(1) diff --git a/src/lib/workflow/util.py b/src/lib/workflow/util.py new file mode 100644 index 0000000..f00ac36 --- /dev/null +++ b/src/lib/workflow/util.py @@ -0,0 +1,457 @@ +#!/usr/bin/env python +# encoding: utf-8 +# +# Copyright (c) 2017 Dean Jackson +# +# MIT Licence. See http://opensource.org/licenses/MIT +# +# Created on 2017-12-17 +# + +"""A selection of helper functions useful for building workflows.""" + +from __future__ import print_function, absolute_import + +import atexit +from collections import namedtuple +from contextlib import contextmanager +import errno +import fcntl +import functools +import os +import signal +import subprocess +import sys +from threading import Event +import time + +# AppleScript to call an External Trigger in Alfred +AS_TRIGGER = """ +tell application "Alfred 3" +run trigger "{name}" in workflow "{bundleid}" {arg} +end tell +""" + + +class AcquisitionError(Exception): + """Raised if a lock cannot be acquired.""" + + +AppInfo = namedtuple('AppInfo', ['name', 'path', 'bundleid']) +"""Information about an installed application. + +Returned by :func:`appinfo`. All attributes are Unicode. + +.. py:attribute:: name + + Name of the application, e.g. ``u'Safari'``. + +.. py:attribute:: path + + Path to the application bundle, e.g. ``u'/Applications/Safari.app'``. + +.. py:attribute:: bundleid + + Application's bundle ID, e.g. ``u'com.apple.Safari'``. +""" + + +def unicodify(s, encoding='utf-8', norm=None): + """Ensure string is Unicode. + + .. versionadded:: 1.31 + + Decode encoded strings using ``encoding`` and normalise Unicode + to form ``norm`` if specified. + + Args: + s (str): String to decode. May also be Unicode. + encoding (str, optional): Encoding to use on bytestrings. + norm (None, optional): Normalisation form to apply to Unicode string. + + Returns: + unicode: Decoded, optionally normalised, Unicode string. + + """ + if not isinstance(s, unicode): + s = unicode(s, encoding) + + if norm: + from unicodedata import normalize + s = normalize(norm, s) + + return s + + +def utf8ify(s): + """Ensure string is a bytestring. + + .. versionadded:: 1.31 + + Returns `str` objects unchanced, encodes `unicode` objects to + UTF-8, and calls :func:`str` on anything else. + + Args: + s (object): A Python object + + Returns: + str: UTF-8 string or string representation of s. + """ + if isinstance(s, str): + return s + + if isinstance(s, unicode): + return s.encode('utf-8') + + return str(s) + + +def applescriptify(s): + """Escape string for insertion into an AppleScript string. + + .. versionadded:: 1.31 + + Replaces ``"`` with `"& quote &"`. Use this function if you want + + to insert a string into an AppleScript script: + >>> script = 'tell application "Alfred 3" to search "{}"' + >>> query = 'g "python" test' + >>> script.format(applescriptify(query)) + 'tell application "Alfred 3" to search "g " & quote & "python" & quote & "test"' + + Args: + s (unicode): Unicode string to escape. + + Returns: + unicode: Escaped string + """ + return s.replace(u'"', u'" & quote & "') + + +def run_command(cmd, **kwargs): + """Run a command and return the output. + + .. versionadded:: 1.31 + + A thin wrapper around :func:`subprocess.check_output` that ensures + all arguments are encoded to UTF-8 first. + + Args: + cmd (list): Command arguments to pass to ``check_output``. + **kwargs: Keyword arguments to pass to ``check_output``. + + Returns: + str: Output returned by ``check_output``. + """ + cmd = [utf8ify(s) for s in cmd] + return subprocess.check_output(cmd, **kwargs) + + +def run_applescript(script, *args, **kwargs): + """Execute an AppleScript script and return its output. + + .. versionadded:: 1.31 + + Run AppleScript either by filepath or code. If ``script`` is a valid + filepath, that script will be run, otherwise ``script`` is treated + as code. + + Args: + script (str, optional): Filepath of script or code to run. + *args: Optional command-line arguments to pass to the script. + **kwargs: Pass ``lang`` to run a language other than AppleScript. + + Returns: + str: Output of run command. + + """ + cmd = ['/usr/bin/osascript', '-l', kwargs.get('lang', 'AppleScript')] + + if os.path.exists(script): + cmd += [script] + else: + cmd += ['-e', script] + + cmd.extend(args) + + return run_command(cmd) + + +def run_jxa(script, *args): + """Execute a JXA script and return its output. + + .. versionadded:: 1.31 + + Wrapper around :func:`run_applescript` that passes ``lang=JavaScript``. + + Args: + script (str): Filepath of script or code to run. + *args: Optional command-line arguments to pass to script. + + Returns: + str: Output of script. + """ + return run_applescript(script, *args, lang='JavaScript') + + +def run_trigger(name, bundleid=None, arg=None): + """Call an Alfred External Trigger. + + .. versionadded:: 1.31 + + If ``bundleid`` is not specified, reads the bundle ID of the current + workflow from Alfred's environment variables. + + Args: + name (str): Name of External Trigger to call. + bundleid (str, optional): Bundle ID of workflow trigger belongs to. + arg (str, optional): Argument to pass to trigger. + """ + if not bundleid: + bundleid = os.getenv('alfred_workflow_bundleid') + + if arg: + arg = 'with argument "{}"'.format(applescriptify(arg)) + else: + arg = '' + + script = AS_TRIGGER.format(name=name, bundleid=bundleid, + arg=arg) + + run_applescript(script) + + +def appinfo(name): + """Get information about an installed application. + + .. versionadded:: 1.31 + + Args: + name (str): Name of application to look up. + + Returns: + AppInfo: :class:`AppInfo` tuple or ``None`` if app isn't found. + """ + cmd = ['mdfind', '-onlyin', '/', + '(kMDItemContentTypeTree == com.apple.application &&' + '(kMDItemDisplayName == "{0}" || kMDItemFSName == "{0}.app"))' + .format(name)] + + path = run_command(cmd).strip() + if not path: + return None + + cmd = ['mdls', '-raw', '-name', 'kMDItemCFBundleIdentifier', path] + bid = run_command(cmd).strip() + if not bid: # pragma: no cover + return None + + return AppInfo(unicodify(name), unicodify(path), unicodify(bid)) + + +@contextmanager +def atomic_writer(fpath, mode): + """Atomic file writer. + + .. versionadded:: 1.12 + + Context manager that ensures the file is only written if the write + succeeds. The data is first written to a temporary file. + + :param fpath: path of file to write to. + :type fpath: ``unicode`` + :param mode: sames as for :func:`open` + :type mode: string + + """ + suffix = '.{}.tmp'.format(os.getpid()) + temppath = fpath + suffix + with open(temppath, mode) as fp: + try: + yield fp + os.rename(temppath, fpath) + finally: + try: + os.remove(temppath) + except (OSError, IOError): + pass + + +class LockFile(object): + """Context manager to protect filepaths with lockfiles. + + .. versionadded:: 1.13 + + Creates a lockfile alongside ``protected_path``. Other ``LockFile`` + instances will refuse to lock the same path. + + >>> path = '/path/to/file' + >>> with LockFile(path): + >>> with open(path, 'wb') as fp: + >>> fp.write(data) + + Args: + protected_path (unicode): File to protect with a lockfile + timeout (float, optional): Raises an :class:`AcquisitionError` + if lock cannot be acquired within this number of seconds. + If ``timeout`` is 0 (the default), wait forever. + delay (float, optional): How often to check (in seconds) if + lock has been released. + + Attributes: + delay (float): How often to check (in seconds) whether the lock + can be acquired. + lockfile (unicode): Path of the lockfile. + timeout (float): How long to wait to acquire the lock. + + """ + + def __init__(self, protected_path, timeout=0.0, delay=0.05): + """Create new :class:`LockFile` object.""" + self.lockfile = protected_path + '.lock' + self._lockfile = None + self.timeout = timeout + self.delay = delay + self._lock = Event() + atexit.register(self.release) + + @property + def locked(self): + """``True`` if file is locked by this instance.""" + return self._lock.is_set() + + def acquire(self, blocking=True): + """Acquire the lock if possible. + + If the lock is in use and ``blocking`` is ``False``, return + ``False``. + + Otherwise, check every :attr:`delay` seconds until it acquires + lock or exceeds attr:`timeout` and raises an :class:`AcquisitionError`. + + """ + if self.locked and not blocking: + return False + + start = time.time() + while True: + + # Raise error if we've been waiting too long to acquire the lock + if self.timeout and (time.time() - start) >= self.timeout: + raise AcquisitionError('lock acquisition timed out') + + # If already locked, wait then try again + if self.locked: + time.sleep(self.delay) + continue + + # Create in append mode so we don't lose any contents + if self._lockfile is None: + self._lockfile = open(self.lockfile, 'a') + + # Try to acquire the lock + try: + fcntl.lockf(self._lockfile, fcntl.LOCK_EX | fcntl.LOCK_NB) + self._lock.set() + break + except IOError as err: # pragma: no cover + if err.errno not in (errno.EACCES, errno.EAGAIN): + raise + + # Don't try again + if not blocking: # pragma: no cover + return False + + # Wait, then try again + time.sleep(self.delay) + + return True + + def release(self): + """Release the lock by deleting `self.lockfile`.""" + if not self._lock.is_set(): + return False + + try: + fcntl.lockf(self._lockfile, fcntl.LOCK_UN) + except IOError: # pragma: no cover + pass + finally: + self._lock.clear() + self._lockfile = None + try: + os.unlink(self.lockfile) + except (IOError, OSError): # pragma: no cover + pass + + return True + + def __enter__(self): + """Acquire lock.""" + self.acquire() + return self + + def __exit__(self, typ, value, traceback): + """Release lock.""" + self.release() + + def __del__(self): + """Clear up `self.lockfile`.""" + self.release() # pragma: no cover + + +class uninterruptible(object): + """Decorator that postpones SIGTERM until wrapped function returns. + + .. versionadded:: 1.12 + + .. important:: This decorator is NOT thread-safe. + + As of version 2.7, Alfred allows Script Filters to be killed. If + your workflow is killed in the middle of critical code (e.g. + writing data to disk), this may corrupt your workflow's data. + + Use this decorator to wrap critical functions that *must* complete. + If the script is killed while a wrapped function is executing, + the SIGTERM will be caught and handled after your function has + finished executing. + + Alfred-Workflow uses this internally to ensure its settings, data + and cache writes complete. + + """ + + def __init__(self, func, class_name=''): + """Decorate `func`.""" + self.func = func + functools.update_wrapper(self, func) + self._caught_signal = None + + def signal_handler(self, signum, frame): + """Called when process receives SIGTERM.""" + self._caught_signal = (signum, frame) + + def __call__(self, *args, **kwargs): + """Trap ``SIGTERM`` and call wrapped function.""" + self._caught_signal = None + # Register handler for SIGTERM, then call `self.func` + self.old_signal_handler = signal.getsignal(signal.SIGTERM) + signal.signal(signal.SIGTERM, self.signal_handler) + + self.func(*args, **kwargs) + + # Restore old signal handler + signal.signal(signal.SIGTERM, self.old_signal_handler) + + # Handle any signal caught during execution + if self._caught_signal is not None: + signum, frame = self._caught_signal + if callable(self.old_signal_handler): + self.old_signal_handler(signum, frame) + elif self.old_signal_handler == signal.SIG_DFL: + sys.exit(0) + + def __get__(self, obj=None, klass=None): + """Decorator API.""" + return self.__class__(self.func.__get__(obj, klass), + klass.__name__) diff --git a/src/lib/workflow/version b/src/lib/workflow/version new file mode 100644 index 0000000..6de2df8 --- /dev/null +++ b/src/lib/workflow/version @@ -0,0 +1 @@ +1.32 \ No newline at end of file diff --git a/src/lib/workflow/web.py b/src/lib/workflow/web.py new file mode 100644 index 0000000..d64bb6f --- /dev/null +++ b/src/lib/workflow/web.py @@ -0,0 +1,678 @@ +# encoding: utf-8 +# +# Copyright (c) 2014 Dean Jackson +# +# MIT Licence. See http://opensource.org/licenses/MIT +# +# Created on 2014-02-15 +# + +"""Lightweight HTTP library with a requests-like interface.""" + +import codecs +import json +import mimetypes +import os +import random +import re +import socket +import string +import unicodedata +import urllib +import urllib2 +import urlparse +import zlib + + +USER_AGENT = u'Alfred-Workflow/1.19 (+http://www.deanishe.net/alfred-workflow)' + +# Valid characters for multipart form data boundaries +BOUNDARY_CHARS = string.digits + string.ascii_letters + +# HTTP response codes +RESPONSES = { + 100: 'Continue', + 101: 'Switching Protocols', + 200: 'OK', + 201: 'Created', + 202: 'Accepted', + 203: 'Non-Authoritative Information', + 204: 'No Content', + 205: 'Reset Content', + 206: 'Partial Content', + 300: 'Multiple Choices', + 301: 'Moved Permanently', + 302: 'Found', + 303: 'See Other', + 304: 'Not Modified', + 305: 'Use Proxy', + 307: 'Temporary Redirect', + 400: 'Bad Request', + 401: 'Unauthorized', + 402: 'Payment Required', + 403: 'Forbidden', + 404: 'Not Found', + 405: 'Method Not Allowed', + 406: 'Not Acceptable', + 407: 'Proxy Authentication Required', + 408: 'Request Timeout', + 409: 'Conflict', + 410: 'Gone', + 411: 'Length Required', + 412: 'Precondition Failed', + 413: 'Request Entity Too Large', + 414: 'Request-URI Too Long', + 415: 'Unsupported Media Type', + 416: 'Requested Range Not Satisfiable', + 417: 'Expectation Failed', + 500: 'Internal Server Error', + 501: 'Not Implemented', + 502: 'Bad Gateway', + 503: 'Service Unavailable', + 504: 'Gateway Timeout', + 505: 'HTTP Version Not Supported' +} + + +def str_dict(dic): + """Convert keys and values in ``dic`` into UTF-8-encoded :class:`str`. + + :param dic: Mapping of Unicode strings + :type dic: dict + :returns: Dictionary containing only UTF-8 strings + :rtype: dict + + """ + if isinstance(dic, CaseInsensitiveDictionary): + dic2 = CaseInsensitiveDictionary() + else: + dic2 = {} + for k, v in dic.items(): + if isinstance(k, unicode): + k = k.encode('utf-8') + if isinstance(v, unicode): + v = v.encode('utf-8') + dic2[k] = v + return dic2 + + +class NoRedirectHandler(urllib2.HTTPRedirectHandler): + """Prevent redirections.""" + + def redirect_request(self, *args): + return None + + +# Adapted from https://gist.github.com/babakness/3901174 +class CaseInsensitiveDictionary(dict): + """Dictionary with caseless key search. + + Enables case insensitive searching while preserving case sensitivity + when keys are listed, ie, via keys() or items() methods. + + Works by storing a lowercase version of the key as the new key and + stores the original key-value pair as the key's value + (values become dictionaries). + + """ + + def __init__(self, initval=None): + """Create new case-insensitive dictionary.""" + if isinstance(initval, dict): + for key, value in initval.iteritems(): + self.__setitem__(key, value) + + elif isinstance(initval, list): + for (key, value) in initval: + self.__setitem__(key, value) + + def __contains__(self, key): + return dict.__contains__(self, key.lower()) + + def __getitem__(self, key): + return dict.__getitem__(self, key.lower())['val'] + + def __setitem__(self, key, value): + return dict.__setitem__(self, key.lower(), {'key': key, 'val': value}) + + def get(self, key, default=None): + try: + v = dict.__getitem__(self, key.lower()) + except KeyError: + return default + else: + return v['val'] + + def update(self, other): + for k, v in other.items(): + self[k] = v + + def items(self): + return [(v['key'], v['val']) for v in dict.itervalues(self)] + + def keys(self): + return [v['key'] for v in dict.itervalues(self)] + + def values(self): + return [v['val'] for v in dict.itervalues(self)] + + def iteritems(self): + for v in dict.itervalues(self): + yield v['key'], v['val'] + + def iterkeys(self): + for v in dict.itervalues(self): + yield v['key'] + + def itervalues(self): + for v in dict.itervalues(self): + yield v['val'] + + +class Response(object): + """ + Returned by :func:`request` / :func:`get` / :func:`post` functions. + + Simplified version of the ``Response`` object in the ``requests`` library. + + >>> r = request('http://www.google.com') + >>> r.status_code + 200 + >>> r.encoding + ISO-8859-1 + >>> r.content # bytes + ... + >>> r.text # unicode, decoded according to charset in HTTP header/meta tag + u' ...' + >>> r.json() # content parsed as JSON + + """ + + def __init__(self, request, stream=False): + """Call `request` with :mod:`urllib2` and process results. + + :param request: :class:`urllib2.Request` instance + :param stream: Whether to stream response or retrieve it all at once + :type stream: bool + + """ + self.request = request + self._stream = stream + self.url = None + self.raw = None + self._encoding = None + self.error = None + self.status_code = None + self.reason = None + self.headers = CaseInsensitiveDictionary() + self._content = None + self._content_loaded = False + self._gzipped = False + + # Execute query + try: + self.raw = urllib2.urlopen(request) + except urllib2.HTTPError as err: + self.error = err + try: + self.url = err.geturl() + # sometimes (e.g. when authentication fails) + # urllib can't get a URL from an HTTPError + # This behaviour changes across Python versions, + # so no test cover (it isn't important). + except AttributeError: # pragma: no cover + pass + self.status_code = err.code + else: + self.status_code = self.raw.getcode() + self.url = self.raw.geturl() + self.reason = RESPONSES.get(self.status_code) + + # Parse additional info if request succeeded + if not self.error: + headers = self.raw.info() + self.transfer_encoding = headers.getencoding() + self.mimetype = headers.gettype() + for key in headers.keys(): + self.headers[key.lower()] = headers.get(key) + + # Is content gzipped? + # Transfer-Encoding appears to not be used in the wild + # (contrary to the HTTP standard), but no harm in testing + # for it + if ('gzip' in headers.get('content-encoding', '') or + 'gzip' in headers.get('transfer-encoding', '')): + self._gzipped = True + + @property + def stream(self): + """Whether response is streamed. + + Returns: + bool: `True` if response is streamed. + """ + return self._stream + + @stream.setter + def stream(self, value): + if self._content_loaded: + raise RuntimeError("`content` has already been read from " + "this Response.") + + self._stream = value + + def json(self): + """Decode response contents as JSON. + + :returns: object decoded from JSON + :rtype: list, dict or unicode + + """ + return json.loads(self.content, self.encoding or 'utf-8') + + @property + def encoding(self): + """Text encoding of document or ``None``. + + :returns: Text encoding if found. + :rtype: str or ``None`` + + """ + if not self._encoding: + self._encoding = self._get_encoding() + + return self._encoding + + @property + def content(self): + """Raw content of response (i.e. bytes). + + :returns: Body of HTTP response + :rtype: str + + """ + if not self._content: + + # Decompress gzipped content + if self._gzipped: + decoder = zlib.decompressobj(16 + zlib.MAX_WBITS) + self._content = decoder.decompress(self.raw.read()) + + else: + self._content = self.raw.read() + + self._content_loaded = True + + return self._content + + @property + def text(self): + """Unicode-decoded content of response body. + + If no encoding can be determined from HTTP headers or the content + itself, the encoded response body will be returned instead. + + :returns: Body of HTTP response + :rtype: unicode or str + + """ + if self.encoding: + return unicodedata.normalize('NFC', unicode(self.content, + self.encoding)) + return self.content + + def iter_content(self, chunk_size=4096, decode_unicode=False): + """Iterate over response data. + + .. versionadded:: 1.6 + + :param chunk_size: Number of bytes to read into memory + :type chunk_size: int + :param decode_unicode: Decode to Unicode using detected encoding + :type decode_unicode: bool + :returns: iterator + + """ + if not self.stream: + raise RuntimeError("You cannot call `iter_content` on a " + "Response unless you passed `stream=True`" + " to `get()`/`post()`/`request()`.") + + if self._content_loaded: + raise RuntimeError( + "`content` has already been read from this Response.") + + def decode_stream(iterator, r): + + decoder = codecs.getincrementaldecoder(r.encoding)(errors='replace') + + for chunk in iterator: + data = decoder.decode(chunk) + if data: + yield data + + data = decoder.decode(b'', final=True) + if data: # pragma: no cover + yield data + + def generate(): + + if self._gzipped: + decoder = zlib.decompressobj(16 + zlib.MAX_WBITS) + + while True: + chunk = self.raw.read(chunk_size) + if not chunk: + break + + if self._gzipped: + chunk = decoder.decompress(chunk) + + yield chunk + + chunks = generate() + + if decode_unicode and self.encoding: + chunks = decode_stream(chunks, self) + + return chunks + + def save_to_path(self, filepath): + """Save retrieved data to file at ``filepath``. + + .. versionadded: 1.9.6 + + :param filepath: Path to save retrieved data. + + """ + filepath = os.path.abspath(filepath) + dirname = os.path.dirname(filepath) + if not os.path.exists(dirname): + os.makedirs(dirname) + + self.stream = True + + with open(filepath, 'wb') as fileobj: + for data in self.iter_content(): + fileobj.write(data) + + def raise_for_status(self): + """Raise stored error if one occurred. + + error will be instance of :class:`urllib2.HTTPError` + """ + if self.error is not None: + raise self.error + return + + def _get_encoding(self): + """Get encoding from HTTP headers or content. + + :returns: encoding or `None` + :rtype: unicode or ``None`` + + """ + headers = self.raw.info() + encoding = None + + if headers.getparam('charset'): + encoding = headers.getparam('charset') + + # HTTP Content-Type header + for param in headers.getplist(): + if param.startswith('charset='): + encoding = param[8:] + break + + if not self.stream: # Try sniffing response content + # Encoding declared in document should override HTTP headers + if self.mimetype == 'text/html': # sniff HTML headers + m = re.search("""""", + self.content) + if m: + encoding = m.group(1) + + elif ((self.mimetype.startswith('application/') or + self.mimetype.startswith('text/')) and + 'xml' in self.mimetype): + m = re.search("""]*\?>""", + self.content) + if m: + encoding = m.group(1) + + # Format defaults + if self.mimetype == 'application/json' and not encoding: + # The default encoding for JSON + encoding = 'utf-8' + + elif self.mimetype == 'application/xml' and not encoding: + # The default for 'application/xml' + encoding = 'utf-8' + + if encoding: + encoding = encoding.lower() + + return encoding + + +def request(method, url, params=None, data=None, headers=None, cookies=None, + files=None, auth=None, timeout=60, allow_redirects=False, + stream=False): + """Initiate an HTTP(S) request. Returns :class:`Response` object. + + :param method: 'GET' or 'POST' + :type method: unicode + :param url: URL to open + :type url: unicode + :param params: mapping of URL parameters + :type params: dict + :param data: mapping of form data ``{'field_name': 'value'}`` or + :class:`str` + :type data: dict or str + :param headers: HTTP headers + :type headers: dict + :param cookies: cookies to send to server + :type cookies: dict + :param files: files to upload (see below). + :type files: dict + :param auth: username, password + :type auth: tuple + :param timeout: connection timeout limit in seconds + :type timeout: int + :param allow_redirects: follow redirections + :type allow_redirects: bool + :param stream: Stream content instead of fetching it all at once. + :type stream: bool + :returns: Response object + :rtype: :class:`Response` + + + The ``files`` argument is a dictionary:: + + {'fieldname' : { 'filename': 'blah.txt', + 'content': '', + 'mimetype': 'text/plain'} + } + + * ``fieldname`` is the name of the field in the HTML form. + * ``mimetype`` is optional. If not provided, :mod:`mimetypes` will + be used to guess the mimetype, or ``application/octet-stream`` + will be used. + + """ + # TODO: cookies + socket.setdefaulttimeout(timeout) + + # Default handlers + openers = [] + + if not allow_redirects: + openers.append(NoRedirectHandler()) + + if auth is not None: # Add authorisation handler + username, password = auth + password_manager = urllib2.HTTPPasswordMgrWithDefaultRealm() + password_manager.add_password(None, url, username, password) + auth_manager = urllib2.HTTPBasicAuthHandler(password_manager) + openers.append(auth_manager) + + # Install our custom chain of openers + opener = urllib2.build_opener(*openers) + urllib2.install_opener(opener) + + if not headers: + headers = CaseInsensitiveDictionary() + else: + headers = CaseInsensitiveDictionary(headers) + + if 'user-agent' not in headers: + headers['user-agent'] = USER_AGENT + + # Accept gzip-encoded content + encodings = [s.strip() for s in + headers.get('accept-encoding', '').split(',')] + if 'gzip' not in encodings: + encodings.append('gzip') + + headers['accept-encoding'] = ', '.join(encodings) + + # Force POST by providing an empty data string + if method == 'POST' and not data: + data = '' + + if files: + if not data: + data = {} + new_headers, data = encode_multipart_formdata(data, files) + headers.update(new_headers) + elif data and isinstance(data, dict): + data = urllib.urlencode(str_dict(data)) + + # Make sure everything is encoded text + headers = str_dict(headers) + + if isinstance(url, unicode): + url = url.encode('utf-8') + + if params: # GET args (POST args are handled in encode_multipart_formdata) + + scheme, netloc, path, query, fragment = urlparse.urlsplit(url) + + if query: # Combine query string and `params` + url_params = urlparse.parse_qs(query) + # `params` take precedence over URL query string + url_params.update(params) + params = url_params + + query = urllib.urlencode(str_dict(params), doseq=True) + url = urlparse.urlunsplit((scheme, netloc, path, query, fragment)) + + req = urllib2.Request(url, data, headers) + return Response(req, stream) + + +def get(url, params=None, headers=None, cookies=None, auth=None, + timeout=60, allow_redirects=True, stream=False): + """Initiate a GET request. Arguments as for :func:`request`. + + :returns: :class:`Response` instance + + """ + return request('GET', url, params, headers=headers, cookies=cookies, + auth=auth, timeout=timeout, allow_redirects=allow_redirects, + stream=stream) + + +def post(url, params=None, data=None, headers=None, cookies=None, files=None, + auth=None, timeout=60, allow_redirects=False, stream=False): + """Initiate a POST request. Arguments as for :func:`request`. + + :returns: :class:`Response` instance + + """ + return request('POST', url, params, data, headers, cookies, files, auth, + timeout, allow_redirects, stream) + + +def encode_multipart_formdata(fields, files): + """Encode form data (``fields``) and ``files`` for POST request. + + :param fields: mapping of ``{name : value}`` pairs for normal form fields. + :type fields: dict + :param files: dictionary of fieldnames/files elements for file data. + See below for details. + :type files: dict of :class:`dict` + :returns: ``(headers, body)`` ``headers`` is a + :class:`dict` of HTTP headers + :rtype: 2-tuple ``(dict, str)`` + + The ``files`` argument is a dictionary:: + + {'fieldname' : { 'filename': 'blah.txt', + 'content': '', + 'mimetype': 'text/plain'} + } + + - ``fieldname`` is the name of the field in the HTML form. + - ``mimetype`` is optional. If not provided, :mod:`mimetypes` will + be used to guess the mimetype, or ``application/octet-stream`` + will be used. + + """ + def get_content_type(filename): + """Return or guess mimetype of ``filename``. + + :param filename: filename of file + :type filename: unicode/str + :returns: mime-type, e.g. ``text/html`` + :rtype: str + + """ + + return mimetypes.guess_type(filename)[0] or 'application/octet-stream' + + boundary = '-----' + ''.join(random.choice(BOUNDARY_CHARS) + for i in range(30)) + CRLF = '\r\n' + output = [] + + # Normal form fields + for (name, value) in fields.items(): + if isinstance(name, unicode): + name = name.encode('utf-8') + if isinstance(value, unicode): + value = value.encode('utf-8') + output.append('--' + boundary) + output.append('Content-Disposition: form-data; name="%s"' % name) + output.append('') + output.append(value) + + # Files to upload + for name, d in files.items(): + filename = d[u'filename'] + content = d[u'content'] + if u'mimetype' in d: + mimetype = d[u'mimetype'] + else: + mimetype = get_content_type(filename) + if isinstance(name, unicode): + name = name.encode('utf-8') + if isinstance(filename, unicode): + filename = filename.encode('utf-8') + if isinstance(mimetype, unicode): + mimetype = mimetype.encode('utf-8') + output.append('--' + boundary) + output.append('Content-Disposition: form-data; ' + 'name="%s"; filename="%s"' % (name, filename)) + output.append('Content-Type: %s' % mimetype) + output.append('') + output.append(content) + + output.append('--' + boundary + '--') + output.append('') + body = CRLF.join(output) + headers = { + 'Content-Type': 'multipart/form-data; boundary=%s' % boundary, + 'Content-Length': str(len(body)), + } + return (headers, body) diff --git a/src/lib/workflow/workflow.py b/src/lib/workflow/workflow.py new file mode 100644 index 0000000..c2c1616 --- /dev/null +++ b/src/lib/workflow/workflow.py @@ -0,0 +1,2818 @@ +# encoding: utf-8 +# +# Copyright (c) 2014 Dean Jackson +# +# MIT Licence. See http://opensource.org/licenses/MIT +# +# Created on 2014-02-15 +# + +"""The :class:`Workflow` object is the main interface to this library. + +:class:`Workflow` is targeted at Alfred 2. Use +:class:`~workflow.Workflow3` if you want to use Alfred 3's new +features, such as :ref:`workflow variables ` or +more powerful modifiers. + +See :ref:`setup` in the :ref:`user-manual` for an example of how to set +up your Python script to best utilise the :class:`Workflow` object. + +""" + +from __future__ import print_function, unicode_literals + +import binascii +import cPickle +from copy import deepcopy +import json +import logging +import logging.handlers +import os +import pickle +import plistlib +import re +import shutil +import string +import subprocess +import sys +import time +import unicodedata + +try: + import xml.etree.cElementTree as ET +except ImportError: # pragma: no cover + import xml.etree.ElementTree as ET + +from util import ( + AcquisitionError, # imported to maintain API + atomic_writer, + LockFile, + uninterruptible, +) + +#: Sentinel for properties that haven't been set yet (that might +#: correctly have the value ``None``) +UNSET = object() + +#################################################################### +# Standard system icons +#################################################################### + +# These icons are default macOS icons. They are super-high quality, and +# will be familiar to users. +# This library uses `ICON_ERROR` when a workflow dies in flames, so +# in my own workflows, I use `ICON_WARNING` for less fatal errors +# (e.g. bad user input, no results etc.) + +# The system icons are all in this directory. There are many more than +# are listed here + +ICON_ROOT = '/System/Library/CoreServices/CoreTypes.bundle/Contents/Resources' + +ICON_ACCOUNT = os.path.join(ICON_ROOT, 'Accounts.icns') +ICON_BURN = os.path.join(ICON_ROOT, 'BurningIcon.icns') +ICON_CLOCK = os.path.join(ICON_ROOT, 'Clock.icns') +ICON_COLOR = os.path.join(ICON_ROOT, 'ProfileBackgroundColor.icns') +ICON_COLOUR = ICON_COLOR # Queen's English, if you please +ICON_EJECT = os.path.join(ICON_ROOT, 'EjectMediaIcon.icns') +# Shown when a workflow throws an error +ICON_ERROR = os.path.join(ICON_ROOT, 'AlertStopIcon.icns') +ICON_FAVORITE = os.path.join(ICON_ROOT, 'ToolbarFavoritesIcon.icns') +ICON_FAVOURITE = ICON_FAVORITE +ICON_GROUP = os.path.join(ICON_ROOT, 'GroupIcon.icns') +ICON_HELP = os.path.join(ICON_ROOT, 'HelpIcon.icns') +ICON_HOME = os.path.join(ICON_ROOT, 'HomeFolderIcon.icns') +ICON_INFO = os.path.join(ICON_ROOT, 'ToolbarInfo.icns') +ICON_NETWORK = os.path.join(ICON_ROOT, 'GenericNetworkIcon.icns') +ICON_NOTE = os.path.join(ICON_ROOT, 'AlertNoteIcon.icns') +ICON_SETTINGS = os.path.join(ICON_ROOT, 'ToolbarAdvanced.icns') +ICON_SWIRL = os.path.join(ICON_ROOT, 'ErasingIcon.icns') +ICON_SWITCH = os.path.join(ICON_ROOT, 'General.icns') +ICON_SYNC = os.path.join(ICON_ROOT, 'Sync.icns') +ICON_TRASH = os.path.join(ICON_ROOT, 'TrashIcon.icns') +ICON_USER = os.path.join(ICON_ROOT, 'UserIcon.icns') +ICON_WARNING = os.path.join(ICON_ROOT, 'AlertCautionIcon.icns') +ICON_WEB = os.path.join(ICON_ROOT, 'BookmarkIcon.icns') + +#################################################################### +# non-ASCII to ASCII diacritic folding. +# Used by `fold_to_ascii` method +#################################################################### + +ASCII_REPLACEMENTS = { + 'À': 'A', + 'Á': 'A', + 'Â': 'A', + 'Ã': 'A', + 'Ä': 'A', + 'Å': 'A', + 'Æ': 'AE', + 'Ç': 'C', + 'È': 'E', + 'É': 'E', + 'Ê': 'E', + 'Ë': 'E', + 'Ì': 'I', + 'Í': 'I', + 'Î': 'I', + 'Ï': 'I', + 'Ð': 'D', + 'Ñ': 'N', + 'Ò': 'O', + 'Ó': 'O', + 'Ô': 'O', + 'Õ': 'O', + 'Ö': 'O', + 'Ø': 'O', + 'Ù': 'U', + 'Ú': 'U', + 'Û': 'U', + 'Ü': 'U', + 'Ý': 'Y', + 'Þ': 'Th', + 'ß': 'ss', + 'à': 'a', + 'á': 'a', + 'â': 'a', + 'ã': 'a', + 'ä': 'a', + 'å': 'a', + 'æ': 'ae', + 'ç': 'c', + 'è': 'e', + 'é': 'e', + 'ê': 'e', + 'ë': 'e', + 'ì': 'i', + 'í': 'i', + 'î': 'i', + 'ï': 'i', + 'ð': 'd', + 'ñ': 'n', + 'ò': 'o', + 'ó': 'o', + 'ô': 'o', + 'õ': 'o', + 'ö': 'o', + 'ø': 'o', + 'ù': 'u', + 'ú': 'u', + 'û': 'u', + 'ü': 'u', + 'ý': 'y', + 'þ': 'th', + 'ÿ': 'y', + 'Ł': 'L', + 'ł': 'l', + 'Ń': 'N', + 'ń': 'n', + 'Ņ': 'N', + 'ņ': 'n', + 'Ň': 'N', + 'ň': 'n', + 'Ŋ': 'ng', + 'ŋ': 'NG', + 'Ō': 'O', + 'ō': 'o', + 'Ŏ': 'O', + 'ŏ': 'o', + 'Ő': 'O', + 'ő': 'o', + 'Œ': 'OE', + 'œ': 'oe', + 'Ŕ': 'R', + 'ŕ': 'r', + 'Ŗ': 'R', + 'ŗ': 'r', + 'Ř': 'R', + 'ř': 'r', + 'Ś': 'S', + 'ś': 's', + 'Ŝ': 'S', + 'ŝ': 's', + 'Ş': 'S', + 'ş': 's', + 'Š': 'S', + 'š': 's', + 'Ţ': 'T', + 'ţ': 't', + 'Ť': 'T', + 'ť': 't', + 'Ŧ': 'T', + 'ŧ': 't', + 'Ũ': 'U', + 'ũ': 'u', + 'Ū': 'U', + 'ū': 'u', + 'Ŭ': 'U', + 'ŭ': 'u', + 'Ů': 'U', + 'ů': 'u', + 'Ű': 'U', + 'ű': 'u', + 'Ŵ': 'W', + 'ŵ': 'w', + 'Ŷ': 'Y', + 'ŷ': 'y', + 'Ÿ': 'Y', + 'Ź': 'Z', + 'ź': 'z', + 'Ż': 'Z', + 'ż': 'z', + 'Ž': 'Z', + 'ž': 'z', + 'ſ': 's', + 'Α': 'A', + 'Β': 'B', + 'Γ': 'G', + 'Δ': 'D', + 'Ε': 'E', + 'Ζ': 'Z', + 'Η': 'E', + 'Θ': 'Th', + 'Ι': 'I', + 'Κ': 'K', + 'Λ': 'L', + 'Μ': 'M', + 'Ν': 'N', + 'Ξ': 'Ks', + 'Ο': 'O', + 'Π': 'P', + 'Ρ': 'R', + 'Σ': 'S', + 'Τ': 'T', + 'Υ': 'U', + 'Φ': 'Ph', + 'Χ': 'Kh', + 'Ψ': 'Ps', + 'Ω': 'O', + 'α': 'a', + 'β': 'b', + 'γ': 'g', + 'δ': 'd', + 'ε': 'e', + 'ζ': 'z', + 'η': 'e', + 'θ': 'th', + 'ι': 'i', + 'κ': 'k', + 'λ': 'l', + 'μ': 'm', + 'ν': 'n', + 'ξ': 'x', + 'ο': 'o', + 'π': 'p', + 'ρ': 'r', + 'ς': 's', + 'σ': 's', + 'τ': 't', + 'υ': 'u', + 'φ': 'ph', + 'χ': 'kh', + 'ψ': 'ps', + 'ω': 'o', + 'А': 'A', + 'Б': 'B', + 'В': 'V', + 'Г': 'G', + 'Д': 'D', + 'Е': 'E', + 'Ж': 'Zh', + 'З': 'Z', + 'И': 'I', + 'Й': 'I', + 'К': 'K', + 'Л': 'L', + 'М': 'M', + 'Н': 'N', + 'О': 'O', + 'П': 'P', + 'Р': 'R', + 'С': 'S', + 'Т': 'T', + 'У': 'U', + 'Ф': 'F', + 'Х': 'Kh', + 'Ц': 'Ts', + 'Ч': 'Ch', + 'Ш': 'Sh', + 'Щ': 'Shch', + 'Ъ': "'", + 'Ы': 'Y', + 'Ь': "'", + 'Э': 'E', + 'Ю': 'Iu', + 'Я': 'Ia', + 'а': 'a', + 'б': 'b', + 'в': 'v', + 'г': 'g', + 'д': 'd', + 'е': 'e', + 'ж': 'zh', + 'з': 'z', + 'и': 'i', + 'й': 'i', + 'к': 'k', + 'л': 'l', + 'м': 'm', + 'н': 'n', + 'о': 'o', + 'п': 'p', + 'р': 'r', + 'с': 's', + 'т': 't', + 'у': 'u', + 'ф': 'f', + 'х': 'kh', + 'ц': 'ts', + 'ч': 'ch', + 'ш': 'sh', + 'щ': 'shch', + 'ъ': "'", + 'ы': 'y', + 'ь': "'", + 'э': 'e', + 'ю': 'iu', + 'я': 'ia', + # 'ᴀ': '', + # 'ᴁ': '', + # 'ᴂ': '', + # 'ᴃ': '', + # 'ᴄ': '', + # 'ᴅ': '', + # 'ᴆ': '', + # 'ᴇ': '', + # 'ᴈ': '', + # 'ᴉ': '', + # 'ᴊ': '', + # 'ᴋ': '', + # 'ᴌ': '', + # 'ᴍ': '', + # 'ᴎ': '', + # 'ᴏ': '', + # 'ᴐ': '', + # 'ᴑ': '', + # 'ᴒ': '', + # 'ᴓ': '', + # 'ᴔ': '', + # 'ᴕ': '', + # 'ᴖ': '', + # 'ᴗ': '', + # 'ᴘ': '', + # 'ᴙ': '', + # 'ᴚ': '', + # 'ᴛ': '', + # 'ᴜ': '', + # 'ᴝ': '', + # 'ᴞ': '', + # 'ᴟ': '', + # 'ᴠ': '', + # 'ᴡ': '', + # 'ᴢ': '', + # 'ᴣ': '', + # 'ᴤ': '', + # 'ᴥ': '', + 'ᴦ': 'G', + 'ᴧ': 'L', + 'ᴨ': 'P', + 'ᴩ': 'R', + 'ᴪ': 'PS', + 'ẞ': 'Ss', + 'Ỳ': 'Y', + 'ỳ': 'y', + 'Ỵ': 'Y', + 'ỵ': 'y', + 'Ỹ': 'Y', + 'ỹ': 'y', +} + +#################################################################### +# Smart-to-dumb punctuation mapping +#################################################################### + +DUMB_PUNCTUATION = { + '‘': "'", + '’': "'", + '‚': "'", + '“': '"', + '”': '"', + '„': '"', + '–': '-', + '—': '-' +} + + +#################################################################### +# Used by `Workflow.filter` +#################################################################### + +# Anchor characters in a name +#: Characters that indicate the beginning of a "word" in CamelCase +INITIALS = string.ascii_uppercase + string.digits + +#: Split on non-letters, numbers +split_on_delimiters = re.compile('[^a-zA-Z0-9]').split + +# Match filter flags +#: Match items that start with ``query`` +MATCH_STARTSWITH = 1 +#: Match items whose capital letters start with ``query`` +MATCH_CAPITALS = 2 +#: Match items with a component "word" that matches ``query`` +MATCH_ATOM = 4 +#: Match items whose initials (based on atoms) start with ``query`` +MATCH_INITIALS_STARTSWITH = 8 +#: Match items whose initials (based on atoms) contain ``query`` +MATCH_INITIALS_CONTAIN = 16 +#: Combination of :const:`MATCH_INITIALS_STARTSWITH` and +#: :const:`MATCH_INITIALS_CONTAIN` +MATCH_INITIALS = 24 +#: Match items if ``query`` is a substring +MATCH_SUBSTRING = 32 +#: Match items if all characters in ``query`` appear in the item in order +MATCH_ALLCHARS = 64 +#: Combination of all other ``MATCH_*`` constants +MATCH_ALL = 127 + + +#################################################################### +# Used by `Workflow.check_update` +#################################################################### + +# Number of days to wait between checking for updates to the workflow +DEFAULT_UPDATE_FREQUENCY = 1 + + +#################################################################### +# Keychain access errors +#################################################################### + + +class KeychainError(Exception): + """Raised for unknown Keychain errors. + + Raised by methods :meth:`Workflow.save_password`, + :meth:`Workflow.get_password` and :meth:`Workflow.delete_password` + when ``security`` CLI app returns an unknown error code. + + """ + + +class PasswordNotFound(KeychainError): + """Password not in Keychain. + + Raised by method :meth:`Workflow.get_password` when ``account`` + is unknown to the Keychain. + + """ + + +class PasswordExists(KeychainError): + """Raised when trying to overwrite an existing account password. + + You should never receive this error: it is used internally + by the :meth:`Workflow.save_password` method to know if it needs + to delete the old password first (a Keychain implementation detail). + + """ + + +#################################################################### +# Helper functions +#################################################################### + +def isascii(text): + """Test if ``text`` contains only ASCII characters. + + :param text: text to test for ASCII-ness + :type text: ``unicode`` + :returns: ``True`` if ``text`` contains only ASCII characters + :rtype: ``Boolean`` + + """ + try: + text.encode('ascii') + except UnicodeEncodeError: + return False + return True + + +#################################################################### +# Implementation classes +#################################################################### + +class SerializerManager(object): + """Contains registered serializers. + + .. versionadded:: 1.8 + + A configured instance of this class is available at + :attr:`workflow.manager`. + + Use :meth:`register()` to register new (or replace + existing) serializers, which you can specify by name when calling + :class:`~workflow.Workflow` data storage methods. + + See :ref:`guide-serialization` and :ref:`guide-persistent-data` + for further information. + + """ + + def __init__(self): + """Create new SerializerManager object.""" + self._serializers = {} + + def register(self, name, serializer): + """Register ``serializer`` object under ``name``. + + Raises :class:`AttributeError` if ``serializer`` in invalid. + + .. note:: + + ``name`` will be used as the file extension of the saved files. + + :param name: Name to register ``serializer`` under + :type name: ``unicode`` or ``str`` + :param serializer: object with ``load()`` and ``dump()`` + methods + + """ + # Basic validation + getattr(serializer, 'load') + getattr(serializer, 'dump') + + self._serializers[name] = serializer + + def serializer(self, name): + """Return serializer object for ``name``. + + :param name: Name of serializer to return + :type name: ``unicode`` or ``str`` + :returns: serializer object or ``None`` if no such serializer + is registered. + + """ + return self._serializers.get(name) + + def unregister(self, name): + """Remove registered serializer with ``name``. + + Raises a :class:`ValueError` if there is no such registered + serializer. + + :param name: Name of serializer to remove + :type name: ``unicode`` or ``str`` + :returns: serializer object + + """ + if name not in self._serializers: + raise ValueError('No such serializer registered : {0}'.format( + name)) + + serializer = self._serializers[name] + del self._serializers[name] + + return serializer + + @property + def serializers(self): + """Return names of registered serializers.""" + return sorted(self._serializers.keys()) + + +class JSONSerializer(object): + """Wrapper around :mod:`json`. Sets ``indent`` and ``encoding``. + + .. versionadded:: 1.8 + + Use this serializer if you need readable data files. JSON doesn't + support Python objects as well as ``cPickle``/``pickle``, so be + careful which data you try to serialize as JSON. + + """ + + @classmethod + def load(cls, file_obj): + """Load serialized object from open JSON file. + + .. versionadded:: 1.8 + + :param file_obj: file handle + :type file_obj: ``file`` object + :returns: object loaded from JSON file + :rtype: object + + """ + return json.load(file_obj) + + @classmethod + def dump(cls, obj, file_obj): + """Serialize object ``obj`` to open JSON file. + + .. versionadded:: 1.8 + + :param obj: Python object to serialize + :type obj: JSON-serializable data structure + :param file_obj: file handle + :type file_obj: ``file`` object + + """ + return json.dump(obj, file_obj, indent=2, encoding='utf-8') + + +class CPickleSerializer(object): + """Wrapper around :mod:`cPickle`. Sets ``protocol``. + + .. versionadded:: 1.8 + + This is the default serializer and the best combination of speed and + flexibility. + + """ + + @classmethod + def load(cls, file_obj): + """Load serialized object from open pickle file. + + .. versionadded:: 1.8 + + :param file_obj: file handle + :type file_obj: ``file`` object + :returns: object loaded from pickle file + :rtype: object + + """ + return cPickle.load(file_obj) + + @classmethod + def dump(cls, obj, file_obj): + """Serialize object ``obj`` to open pickle file. + + .. versionadded:: 1.8 + + :param obj: Python object to serialize + :type obj: Python object + :param file_obj: file handle + :type file_obj: ``file`` object + + """ + return cPickle.dump(obj, file_obj, protocol=-1) + + +class PickleSerializer(object): + """Wrapper around :mod:`pickle`. Sets ``protocol``. + + .. versionadded:: 1.8 + + Use this serializer if you need to add custom pickling. + + """ + + @classmethod + def load(cls, file_obj): + """Load serialized object from open pickle file. + + .. versionadded:: 1.8 + + :param file_obj: file handle + :type file_obj: ``file`` object + :returns: object loaded from pickle file + :rtype: object + + """ + return pickle.load(file_obj) + + @classmethod + def dump(cls, obj, file_obj): + """Serialize object ``obj`` to open pickle file. + + .. versionadded:: 1.8 + + :param obj: Python object to serialize + :type obj: Python object + :param file_obj: file handle + :type file_obj: ``file`` object + + """ + return pickle.dump(obj, file_obj, protocol=-1) + + +# Set up default manager and register built-in serializers +manager = SerializerManager() +manager.register('cpickle', CPickleSerializer) +manager.register('pickle', PickleSerializer) +manager.register('json', JSONSerializer) + + +class Item(object): + """Represents a feedback item for Alfred. + + Generates Alfred-compliant XML for a single item. + + You probably shouldn't use this class directly, but via + :meth:`Workflow.add_item`. See :meth:`~Workflow.add_item` + for details of arguments. + + """ + + def __init__(self, title, subtitle='', modifier_subtitles=None, + arg=None, autocomplete=None, valid=False, uid=None, + icon=None, icontype=None, type=None, largetext=None, + copytext=None, quicklookurl=None): + """Same arguments as :meth:`Workflow.add_item`.""" + self.title = title + self.subtitle = subtitle + self.modifier_subtitles = modifier_subtitles or {} + self.arg = arg + self.autocomplete = autocomplete + self.valid = valid + self.uid = uid + self.icon = icon + self.icontype = icontype + self.type = type + self.largetext = largetext + self.copytext = copytext + self.quicklookurl = quicklookurl + + @property + def elem(self): + """Create and return feedback item for Alfred. + + :returns: :class:`ElementTree.Element ` + instance for this :class:`Item` instance. + + """ + # Attributes on element + attr = {} + if self.valid: + attr['valid'] = 'yes' + else: + attr['valid'] = 'no' + # Allow empty string for autocomplete. This is a useful value, + # as TABing the result will revert the query back to just the + # keyword + if self.autocomplete is not None: + attr['autocomplete'] = self.autocomplete + + # Optional attributes + for name in ('uid', 'type'): + value = getattr(self, name, None) + if value: + attr[name] = value + + root = ET.Element('item', attr) + ET.SubElement(root, 'title').text = self.title + ET.SubElement(root, 'subtitle').text = self.subtitle + + # Add modifier subtitles + for mod in ('cmd', 'ctrl', 'alt', 'shift', 'fn'): + if mod in self.modifier_subtitles: + ET.SubElement(root, 'subtitle', + {'mod': mod}).text = self.modifier_subtitles[mod] + + # Add arg as element instead of attribute on , as it's more + # flexible (newlines aren't allowed in attributes) + if self.arg: + ET.SubElement(root, 'arg').text = self.arg + + # Add icon if there is one + if self.icon: + if self.icontype: + attr = dict(type=self.icontype) + else: + attr = {} + ET.SubElement(root, 'icon', attr).text = self.icon + + if self.largetext: + ET.SubElement(root, 'text', + {'type': 'largetype'}).text = self.largetext + + if self.copytext: + ET.SubElement(root, 'text', + {'type': 'copy'}).text = self.copytext + + if self.quicklookurl: + ET.SubElement(root, 'quicklookurl').text = self.quicklookurl + + return root + + +class Settings(dict): + """A dictionary that saves itself when changed. + + Dictionary keys & values will be saved as a JSON file + at ``filepath``. If the file does not exist, the dictionary + (and settings file) will be initialised with ``defaults``. + + :param filepath: where to save the settings + :type filepath: :class:`unicode` + :param defaults: dict of default settings + :type defaults: :class:`dict` + + + An appropriate instance is provided by :class:`Workflow` instances at + :attr:`Workflow.settings`. + + """ + + def __init__(self, filepath, defaults=None): + """Create new :class:`Settings` object.""" + super(Settings, self).__init__() + self._filepath = filepath + self._nosave = False + self._original = {} + if os.path.exists(self._filepath): + self._load() + elif defaults: + for key, val in defaults.items(): + self[key] = val + self.save() # save default settings + + def _load(self): + """Load cached settings from JSON file `self._filepath`.""" + data = {} + with LockFile(self._filepath, 0.5): + with open(self._filepath, 'rb') as fp: + data.update(json.load(fp)) + + self._original = deepcopy(data) + + self._nosave = True + self.update(data) + self._nosave = False + + @uninterruptible + def save(self): + """Save settings to JSON file specified in ``self._filepath``. + + If you're using this class via :attr:`Workflow.settings`, which + you probably are, ``self._filepath`` will be ``settings.json`` + in your workflow's data directory (see :attr:`~Workflow.datadir`). + """ + if self._nosave: + return + + data = {} + data.update(self) + + with LockFile(self._filepath, 0.5): + with atomic_writer(self._filepath, 'wb') as fp: + json.dump(data, fp, sort_keys=True, indent=2, + encoding='utf-8') + + # dict methods + def __setitem__(self, key, value): + """Implement :class:`dict` interface.""" + if self._original.get(key) != value: + super(Settings, self).__setitem__(key, value) + self.save() + + def __delitem__(self, key): + """Implement :class:`dict` interface.""" + super(Settings, self).__delitem__(key) + self.save() + + def update(self, *args, **kwargs): + """Override :class:`dict` method to save on update.""" + super(Settings, self).update(*args, **kwargs) + self.save() + + def setdefault(self, key, value=None): + """Override :class:`dict` method to save on update.""" + ret = super(Settings, self).setdefault(key, value) + self.save() + return ret + + +class Workflow(object): + """The ``Workflow`` object is the main interface to Alfred-Workflow. + + It provides APIs for accessing the Alfred/workflow environment, + storing & caching data, using Keychain, and generating Script + Filter feedback. + + ``Workflow`` is compatible with both Alfred 2 and 3. The + :class:`~workflow.Workflow3` subclass provides additional, + Alfred 3-only features, such as workflow variables. + + :param default_settings: default workflow settings. If no settings file + exists, :class:`Workflow.settings` will be pre-populated with + ``default_settings``. + :type default_settings: :class:`dict` + :param update_settings: settings for updating your workflow from + GitHub releases. The only required key is ``github_slug``, + whose value must take the form of ``username/repo``. + If specified, ``Workflow`` will check the repo's releases + for updates. Your workflow must also have a semantic version + number. Please see the :ref:`User Manual ` and + `update API docs ` for more information. + :type update_settings: :class:`dict` + :param input_encoding: encoding of command line arguments. You + should probably leave this as the default (``utf-8``), which + is the encoding Alfred uses. + :type input_encoding: :class:`unicode` + :param normalization: normalisation to apply to CLI args. + See :meth:`Workflow.decode` for more details. + :type normalization: :class:`unicode` + :param capture_args: Capture and act on ``workflow:*`` arguments. See + :ref:`Magic arguments ` for details. + :type capture_args: :class:`Boolean` + :param libraries: sequence of paths to directories containing + libraries. These paths will be prepended to ``sys.path``. + :type libraries: :class:`tuple` or :class:`list` + :param help_url: URL to webpage where a user can ask for help with + the workflow, report bugs, etc. This could be the GitHub repo + or a page on AlfredForum.com. If your workflow throws an error, + this URL will be displayed in the log and Alfred's debugger. It can + also be opened directly in a web browser with the ``workflow:help`` + :ref:`magic argument `. + :type help_url: :class:`unicode` or :class:`str` + + """ + + # Which class to use to generate feedback items. You probably + # won't want to change this + item_class = Item + + def __init__(self, default_settings=None, update_settings=None, + input_encoding='utf-8', normalization='NFC', + capture_args=True, libraries=None, + help_url=None): + """Create new :class:`Workflow` object.""" + self._default_settings = default_settings or {} + self._update_settings = update_settings or {} + self._input_encoding = input_encoding + self._normalizsation = normalization + self._capture_args = capture_args + self.help_url = help_url + self._workflowdir = None + self._settings_path = None + self._settings = None + self._bundleid = None + self._debugging = None + self._name = None + self._cache_serializer = 'cpickle' + self._data_serializer = 'cpickle' + self._info = None + self._info_loaded = False + self._logger = None + self._items = [] + self._alfred_env = None + # Version number of the workflow + self._version = UNSET + # Version from last workflow run + self._last_version_run = UNSET + # Cache for regex patterns created for filter keys + self._search_pattern_cache = {} + # Magic arguments + #: The prefix for all magic arguments. Default is ``workflow:`` + self.magic_prefix = 'workflow:' + #: Mapping of available magic arguments. The built-in magic + #: arguments are registered by default. To add your own magic arguments + #: (or override built-ins), add a key:value pair where the key is + #: what the user should enter (prefixed with :attr:`magic_prefix`) + #: and the value is a callable that will be called when the argument + #: is entered. If you would like to display a message in Alfred, the + #: function should return a ``unicode`` string. + #: + #: By default, the magic arguments documented + #: :ref:`here ` are registered. + self.magic_arguments = {} + + self._register_default_magic() + + if libraries: + sys.path = libraries + sys.path + + #################################################################### + # API methods + #################################################################### + + # info.plist contents and alfred_* environment variables ---------- + + @property + def alfred_version(self): + """Alfred version as :class:`~workflow.update.Version` object.""" + from update import Version + return Version(self.alfred_env.get('version')) + + @property + def alfred_env(self): + """Dict of Alfred's environmental variables minus ``alfred_`` prefix. + + .. versionadded:: 1.7 + + The variables Alfred 2.4+ exports are: + + ============================ ========================================= + Variable Description + ============================ ========================================= + debug Set to ``1`` if Alfred's debugger is + open, otherwise unset. + preferences Path to Alfred.alfredpreferences + (where your workflows and settings are + stored). + preferences_localhash Machine-specific preferences are stored + in ``Alfred.alfredpreferences/preferences/local/`` + (see ``preferences`` above for + the path to ``Alfred.alfredpreferences``) + theme ID of selected theme + theme_background Background colour of selected theme in + format ``rgba(r,g,b,a)`` + theme_subtext Show result subtext. + ``0`` = Always, + ``1`` = Alternative actions only, + ``2`` = Selected result only, + ``3`` = Never + version Alfred version number, e.g. ``'2.4'`` + version_build Alfred build number, e.g. ``277`` + workflow_bundleid Bundle ID, e.g. + ``net.deanishe.alfred-mailto`` + workflow_cache Path to workflow's cache directory + workflow_data Path to workflow's data directory + workflow_name Name of current workflow + workflow_uid UID of workflow + workflow_version The version number specified in the + workflow configuration sheet/info.plist + ============================ ========================================= + + **Note:** all values are Unicode strings except ``version_build`` and + ``theme_subtext``, which are integers. + + :returns: ``dict`` of Alfred's environmental variables without the + ``alfred_`` prefix, e.g. ``preferences``, ``workflow_data``. + + """ + if self._alfred_env is not None: + return self._alfred_env + + data = {} + + for key in ( + 'alfred_debug', + 'alfred_preferences', + 'alfred_preferences_localhash', + 'alfred_theme', + 'alfred_theme_background', + 'alfred_theme_subtext', + 'alfred_version', + 'alfred_version_build', + 'alfred_workflow_bundleid', + 'alfred_workflow_cache', + 'alfred_workflow_data', + 'alfred_workflow_name', + 'alfred_workflow_uid', + 'alfred_workflow_version'): + + value = os.getenv(key) + + if isinstance(value, str): + if key in ('alfred_debug', 'alfred_version_build', + 'alfred_theme_subtext'): + value = int(value) + else: + value = self.decode(value) + + data[key[7:]] = value + + self._alfred_env = data + + return self._alfred_env + + @property + def info(self): + """:class:`dict` of ``info.plist`` contents.""" + if not self._info_loaded: + self._load_info_plist() + return self._info + + @property + def bundleid(self): + """Workflow bundle ID from environmental vars or ``info.plist``. + + :returns: bundle ID + :rtype: ``unicode`` + + """ + if not self._bundleid: + if self.alfred_env.get('workflow_bundleid'): + self._bundleid = self.alfred_env.get('workflow_bundleid') + else: + self._bundleid = unicode(self.info['bundleid'], 'utf-8') + + return self._bundleid + + @property + def debugging(self): + """Whether Alfred's debugger is open. + + :returns: ``True`` if Alfred's debugger is open. + :rtype: ``bool`` + + """ + if self._debugging is None: + if self.alfred_env.get('debug') == 1: + self._debugging = True + else: + self._debugging = False + return self._debugging + + @property + def name(self): + """Workflow name from Alfred's environmental vars or ``info.plist``. + + :returns: workflow name + :rtype: ``unicode`` + + """ + if not self._name: + if self.alfred_env.get('workflow_name'): + self._name = self.decode(self.alfred_env.get('workflow_name')) + else: + self._name = self.decode(self.info['name']) + + return self._name + + @property + def version(self): + """Return the version of the workflow. + + .. versionadded:: 1.9.10 + + Get the workflow version from environment variable, + the ``update_settings`` dict passed on + instantiation, the ``version`` file located in the workflow's + root directory or ``info.plist``. Return ``None`` if none + exists or :class:`ValueError` if the version number is invalid + (i.e. not semantic). + + :returns: Version of the workflow (not Alfred-Workflow) + :rtype: :class:`~workflow.update.Version` object + + """ + if self._version is UNSET: + + version = None + # environment variable has priority + if self.alfred_env.get('workflow_version'): + version = self.alfred_env['workflow_version'] + + # Try `update_settings` + elif self._update_settings: + version = self._update_settings.get('version') + + # `version` file + if not version: + filepath = self.workflowfile('version') + + if os.path.exists(filepath): + with open(filepath, 'rb') as fileobj: + version = fileobj.read() + + # info.plist + if not version: + version = self.info.get('version') + + if version: + from update import Version + version = Version(version) + + self._version = version + + return self._version + + # Workflow utility methods ----------------------------------------- + + @property + def args(self): + """Return command line args as normalised unicode. + + Args are decoded and normalised via :meth:`~Workflow.decode`. + + The encoding and normalisation are the ``input_encoding`` and + ``normalization`` arguments passed to :class:`Workflow` (``UTF-8`` + and ``NFC`` are the defaults). + + If :class:`Workflow` is called with ``capture_args=True`` + (the default), :class:`Workflow` will look for certain + ``workflow:*`` args and, if found, perform the corresponding + actions and exit the workflow. + + See :ref:`Magic arguments ` for details. + + """ + msg = None + args = [self.decode(arg) for arg in sys.argv[1:]] + + # Handle magic args + if len(args) and self._capture_args: + for name in self.magic_arguments: + key = '{0}{1}'.format(self.magic_prefix, name) + if key in args: + msg = self.magic_arguments[name]() + + if msg: + self.logger.debug(msg) + if not sys.stdout.isatty(): # Show message in Alfred + self.add_item(msg, valid=False, icon=ICON_INFO) + self.send_feedback() + sys.exit(0) + return args + + @property + def cachedir(self): + """Path to workflow's cache directory. + + The cache directory is a subdirectory of Alfred's own cache directory + in ``~/Library/Caches``. The full path is: + + ``~/Library/Caches/com.runningwithcrayons.Alfred-X/Workflow Data/`` + + ``Alfred-X`` may be ``Alfred-2`` or ``Alfred-3``. + + :returns: full path to workflow's cache directory + :rtype: ``unicode`` + + """ + if self.alfred_env.get('workflow_cache'): + dirpath = self.alfred_env.get('workflow_cache') + + else: + dirpath = self._default_cachedir + + return self._create(dirpath) + + @property + def _default_cachedir(self): + """Alfred 2's default cache directory.""" + return os.path.join( + os.path.expanduser( + '~/Library/Caches/com.runningwithcrayons.Alfred-2/' + 'Workflow Data/'), + self.bundleid) + + @property + def datadir(self): + """Path to workflow's data directory. + + The data directory is a subdirectory of Alfred's own data directory in + ``~/Library/Application Support``. The full path is: + + ``~/Library/Application Support/Alfred 2/Workflow Data/`` + + :returns: full path to workflow data directory + :rtype: ``unicode`` + + """ + if self.alfred_env.get('workflow_data'): + dirpath = self.alfred_env.get('workflow_data') + + else: + dirpath = self._default_datadir + + return self._create(dirpath) + + @property + def _default_datadir(self): + """Alfred 2's default data directory.""" + return os.path.join(os.path.expanduser( + '~/Library/Application Support/Alfred 2/Workflow Data/'), + self.bundleid) + + @property + def workflowdir(self): + """Path to workflow's root directory (where ``info.plist`` is). + + :returns: full path to workflow root directory + :rtype: ``unicode`` + + """ + if not self._workflowdir: + # Try the working directory first, then the directory + # the library is in. CWD will be the workflow root if + # a workflow is being run in Alfred + candidates = [ + os.path.abspath(os.getcwdu()), + os.path.dirname(os.path.abspath(os.path.dirname(__file__)))] + + # climb the directory tree until we find `info.plist` + for dirpath in candidates: + + # Ensure directory path is Unicode + dirpath = self.decode(dirpath) + + while True: + if os.path.exists(os.path.join(dirpath, 'info.plist')): + self._workflowdir = dirpath + break + + elif dirpath == '/': + # no `info.plist` found + break + + # Check the parent directory + dirpath = os.path.dirname(dirpath) + + # No need to check other candidates + if self._workflowdir: + break + + if not self._workflowdir: + raise IOError("'info.plist' not found in directory tree") + + return self._workflowdir + + def cachefile(self, filename): + """Path to ``filename`` in workflow's cache directory. + + Return absolute path to ``filename`` within your workflow's + :attr:`cache directory `. + + :param filename: basename of file + :type filename: ``unicode`` + :returns: full path to file within cache directory + :rtype: ``unicode`` + + """ + return os.path.join(self.cachedir, filename) + + def datafile(self, filename): + """Path to ``filename`` in workflow's data directory. + + Return absolute path to ``filename`` within your workflow's + :attr:`data directory `. + + :param filename: basename of file + :type filename: ``unicode`` + :returns: full path to file within data directory + :rtype: ``unicode`` + + """ + return os.path.join(self.datadir, filename) + + def workflowfile(self, filename): + """Return full path to ``filename`` in workflow's root directory. + + :param filename: basename of file + :type filename: ``unicode`` + :returns: full path to file within data directory + :rtype: ``unicode`` + + """ + return os.path.join(self.workflowdir, filename) + + @property + def logfile(self): + """Path to logfile. + + :returns: path to logfile within workflow's cache directory + :rtype: ``unicode`` + + """ + return self.cachefile('%s.log' % self.bundleid) + + @property + def logger(self): + """Logger that logs to both console and a log file. + + If Alfred's debugger is open, log level will be ``DEBUG``, + else it will be ``INFO``. + + Use :meth:`open_log` to open the log file in Console. + + :returns: an initialised :class:`~logging.Logger` + + """ + if self._logger: + return self._logger + + # Initialise new logger and optionally handlers + logger = logging.getLogger('') + + # Only add one set of handlers + # Exclude from coverage, as pytest will have configured the + # root logger already + if not len(logger.handlers): # pragma: no cover + + fmt = logging.Formatter( + '%(asctime)s %(filename)s:%(lineno)s' + ' %(levelname)-8s %(message)s', + datefmt='%H:%M:%S') + + logfile = logging.handlers.RotatingFileHandler( + self.logfile, + maxBytes=1024 * 1024, + backupCount=1) + logfile.setFormatter(fmt) + logger.addHandler(logfile) + + console = logging.StreamHandler() + console.setFormatter(fmt) + logger.addHandler(console) + + if self.debugging: + logger.setLevel(logging.DEBUG) + else: + logger.setLevel(logging.INFO) + + self._logger = logger + + return self._logger + + @logger.setter + def logger(self, logger): + """Set a custom logger. + + :param logger: The logger to use + :type logger: `~logging.Logger` instance + + """ + self._logger = logger + + @property + def settings_path(self): + """Path to settings file within workflow's data directory. + + :returns: path to ``settings.json`` file + :rtype: ``unicode`` + + """ + if not self._settings_path: + self._settings_path = self.datafile('settings.json') + return self._settings_path + + @property + def settings(self): + """Return a dictionary subclass that saves itself when changed. + + See :ref:`guide-settings` in the :ref:`user-manual` for more + information on how to use :attr:`settings` and **important + limitations** on what it can do. + + :returns: :class:`~workflow.workflow.Settings` instance + initialised from the data in JSON file at + :attr:`settings_path` or if that doesn't exist, with the + ``default_settings`` :class:`dict` passed to + :class:`Workflow` on instantiation. + :rtype: :class:`~workflow.workflow.Settings` instance + + """ + if not self._settings: + self.logger.debug('reading settings from %s', self.settings_path) + self._settings = Settings(self.settings_path, + self._default_settings) + return self._settings + + @property + def cache_serializer(self): + """Name of default cache serializer. + + .. versionadded:: 1.8 + + This serializer is used by :meth:`cache_data()` and + :meth:`cached_data()` + + See :class:`SerializerManager` for details. + + :returns: serializer name + :rtype: ``unicode`` + + """ + return self._cache_serializer + + @cache_serializer.setter + def cache_serializer(self, serializer_name): + """Set the default cache serialization format. + + .. versionadded:: 1.8 + + This serializer is used by :meth:`cache_data()` and + :meth:`cached_data()` + + The specified serializer must already by registered with the + :class:`SerializerManager` at `~workflow.workflow.manager`, + otherwise a :class:`ValueError` will be raised. + + :param serializer_name: Name of default serializer to use. + :type serializer_name: + + """ + if manager.serializer(serializer_name) is None: + raise ValueError( + 'Unknown serializer : `{0}`. Register your serializer ' + 'with `manager` first.'.format(serializer_name)) + + self.logger.debug('default cache serializer: %s', serializer_name) + + self._cache_serializer = serializer_name + + @property + def data_serializer(self): + """Name of default data serializer. + + .. versionadded:: 1.8 + + This serializer is used by :meth:`store_data()` and + :meth:`stored_data()` + + See :class:`SerializerManager` for details. + + :returns: serializer name + :rtype: ``unicode`` + + """ + return self._data_serializer + + @data_serializer.setter + def data_serializer(self, serializer_name): + """Set the default cache serialization format. + + .. versionadded:: 1.8 + + This serializer is used by :meth:`store_data()` and + :meth:`stored_data()` + + The specified serializer must already by registered with the + :class:`SerializerManager` at `~workflow.workflow.manager`, + otherwise a :class:`ValueError` will be raised. + + :param serializer_name: Name of serializer to use by default. + + """ + if manager.serializer(serializer_name) is None: + raise ValueError( + 'Unknown serializer : `{0}`. Register your serializer ' + 'with `manager` first.'.format(serializer_name)) + + self.logger.debug('default data serializer: %s', serializer_name) + + self._data_serializer = serializer_name + + def stored_data(self, name): + """Retrieve data from data directory. + + Returns ``None`` if there are no data stored under ``name``. + + .. versionadded:: 1.8 + + :param name: name of datastore + + """ + metadata_path = self.datafile('.{0}.alfred-workflow'.format(name)) + + if not os.path.exists(metadata_path): + self.logger.debug('no data stored for `%s`', name) + return None + + with open(metadata_path, 'rb') as file_obj: + serializer_name = file_obj.read().strip() + + serializer = manager.serializer(serializer_name) + + if serializer is None: + raise ValueError( + 'Unknown serializer `{0}`. Register a corresponding ' + 'serializer with `manager.register()` ' + 'to load this data.'.format(serializer_name)) + + self.logger.debug('data `%s` stored as `%s`', name, serializer_name) + + filename = '{0}.{1}'.format(name, serializer_name) + data_path = self.datafile(filename) + + if not os.path.exists(data_path): + self.logger.debug('no data stored: %s', name) + if os.path.exists(metadata_path): + os.unlink(metadata_path) + + return None + + with open(data_path, 'rb') as file_obj: + data = serializer.load(file_obj) + + self.logger.debug('stored data loaded: %s', data_path) + + return data + + def store_data(self, name, data, serializer=None): + """Save data to data directory. + + .. versionadded:: 1.8 + + If ``data`` is ``None``, the datastore will be deleted. + + Note that the datastore does NOT support mutliple threads. + + :param name: name of datastore + :param data: object(s) to store. **Note:** some serializers + can only handled certain types of data. + :param serializer: name of serializer to use. If no serializer + is specified, the default will be used. See + :class:`SerializerManager` for more information. + :returns: data in datastore or ``None`` + + """ + # Ensure deletion is not interrupted by SIGTERM + @uninterruptible + def delete_paths(paths): + """Clear one or more data stores""" + for path in paths: + if os.path.exists(path): + os.unlink(path) + self.logger.debug('deleted data file: %s', path) + + serializer_name = serializer or self.data_serializer + + # In order for `stored_data()` to be able to load data stored with + # an arbitrary serializer, yet still have meaningful file extensions, + # the format (i.e. extension) is saved to an accompanying file + metadata_path = self.datafile('.{0}.alfred-workflow'.format(name)) + filename = '{0}.{1}'.format(name, serializer_name) + data_path = self.datafile(filename) + + if data_path == self.settings_path: + raise ValueError( + 'Cannot save data to' + + '`{0}` with format `{1}`. '.format(name, serializer_name) + + "This would overwrite Alfred-Workflow's settings file.") + + serializer = manager.serializer(serializer_name) + + if serializer is None: + raise ValueError( + 'Invalid serializer `{0}`. Register your serializer with ' + '`manager.register()` first.'.format(serializer_name)) + + if data is None: # Delete cached data + delete_paths((metadata_path, data_path)) + return + + # Ensure write is not interrupted by SIGTERM + @uninterruptible + def _store(): + # Save file extension + with atomic_writer(metadata_path, 'wb') as file_obj: + file_obj.write(serializer_name) + + with atomic_writer(data_path, 'wb') as file_obj: + serializer.dump(data, file_obj) + + _store() + + self.logger.debug('saved data: %s', data_path) + + def cached_data(self, name, data_func=None, max_age=60): + """Return cached data if younger than ``max_age`` seconds. + + Retrieve data from cache or re-generate and re-cache data if + stale/non-existant. If ``max_age`` is 0, return cached data no + matter how old. + + :param name: name of datastore + :param data_func: function to (re-)generate data. + :type data_func: ``callable`` + :param max_age: maximum age of cached data in seconds + :type max_age: ``int`` + :returns: cached data, return value of ``data_func`` or ``None`` + if ``data_func`` is not set + + """ + serializer = manager.serializer(self.cache_serializer) + + cache_path = self.cachefile('%s.%s' % (name, self.cache_serializer)) + age = self.cached_data_age(name) + + if (age < max_age or max_age == 0) and os.path.exists(cache_path): + + with open(cache_path, 'rb') as file_obj: + self.logger.debug('loading cached data: %s', cache_path) + return serializer.load(file_obj) + + if not data_func: + return None + + data = data_func() + self.cache_data(name, data) + + return data + + def cache_data(self, name, data): + """Save ``data`` to cache under ``name``. + + If ``data`` is ``None``, the corresponding cache file will be + deleted. + + :param name: name of datastore + :param data: data to store. This may be any object supported by + the cache serializer + + """ + serializer = manager.serializer(self.cache_serializer) + + cache_path = self.cachefile('%s.%s' % (name, self.cache_serializer)) + + if data is None: + if os.path.exists(cache_path): + os.unlink(cache_path) + self.logger.debug('deleted cache file: %s', cache_path) + return + + with atomic_writer(cache_path, 'wb') as file_obj: + serializer.dump(data, file_obj) + + self.logger.debug('cached data: %s', cache_path) + + def cached_data_fresh(self, name, max_age): + """Whether cache `name` is less than `max_age` seconds old. + + :param name: name of datastore + :param max_age: maximum age of data in seconds + :type max_age: ``int`` + :returns: ``True`` if data is less than ``max_age`` old, else + ``False`` + + """ + age = self.cached_data_age(name) + + if not age: + return False + + return age < max_age + + def cached_data_age(self, name): + """Return age in seconds of cache `name` or 0 if cache doesn't exist. + + :param name: name of datastore + :type name: ``unicode`` + :returns: age of datastore in seconds + :rtype: ``int`` + + """ + cache_path = self.cachefile('%s.%s' % (name, self.cache_serializer)) + + if not os.path.exists(cache_path): + return 0 + + return time.time() - os.stat(cache_path).st_mtime + + def filter(self, query, items, key=lambda x: x, ascending=False, + include_score=False, min_score=0, max_results=0, + match_on=MATCH_ALL, fold_diacritics=True): + """Fuzzy search filter. Returns list of ``items`` that match ``query``. + + ``query`` is case-insensitive. Any item that does not contain the + entirety of ``query`` is rejected. + + If ``query`` is an empty string or contains only whitespace, + all items will match. + + :param query: query to test items against + :type query: ``unicode`` + :param items: iterable of items to test + :type items: ``list`` or ``tuple`` + :param key: function to get comparison key from ``items``. + Must return a ``unicode`` string. The default simply returns + the item. + :type key: ``callable`` + :param ascending: set to ``True`` to get worst matches first + :type ascending: ``Boolean`` + :param include_score: Useful for debugging the scoring algorithm. + If ``True``, results will be a list of tuples + ``(item, score, rule)``. + :type include_score: ``Boolean`` + :param min_score: If non-zero, ignore results with a score lower + than this. + :type min_score: ``int`` + :param max_results: If non-zero, prune results list to this length. + :type max_results: ``int`` + :param match_on: Filter option flags. Bitwise-combined list of + ``MATCH_*`` constants (see below). + :type match_on: ``int`` + :param fold_diacritics: Convert search keys to ASCII-only + characters if ``query`` only contains ASCII characters. + :type fold_diacritics: ``Boolean`` + :returns: list of ``items`` matching ``query`` or list of + ``(item, score, rule)`` `tuples` if ``include_score`` is ``True``. + ``rule`` is the ``MATCH_*`` rule that matched the item. + :rtype: ``list`` + + **Matching rules** + + By default, :meth:`filter` uses all of the following flags (i.e. + :const:`MATCH_ALL`). The tests are always run in the given order: + + 1. :const:`MATCH_STARTSWITH` + Item search key starts with ``query`` (case-insensitive). + 2. :const:`MATCH_CAPITALS` + The list of capital letters in item search key starts with + ``query`` (``query`` may be lower-case). E.g., ``of`` + would match ``OmniFocus``, ``gc`` would match ``Google Chrome``. + 3. :const:`MATCH_ATOM` + Search key is split into "atoms" on non-word characters + (.,-,' etc.). Matches if ``query`` is one of these atoms + (case-insensitive). + 4. :const:`MATCH_INITIALS_STARTSWITH` + Initials are the first characters of the above-described + "atoms" (case-insensitive). + 5. :const:`MATCH_INITIALS_CONTAIN` + ``query`` is a substring of the above-described initials. + 6. :const:`MATCH_INITIALS` + Combination of (4) and (5). + 7. :const:`MATCH_SUBSTRING` + ``query`` is a substring of item search key (case-insensitive). + 8. :const:`MATCH_ALLCHARS` + All characters in ``query`` appear in item search key in + the same order (case-insensitive). + 9. :const:`MATCH_ALL` + Combination of all the above. + + + :const:`MATCH_ALLCHARS` is considerably slower than the other + tests and provides much less accurate results. + + **Examples:** + + To ignore :const:`MATCH_ALLCHARS` (tends to provide the worst + matches and is expensive to run), use + ``match_on=MATCH_ALL ^ MATCH_ALLCHARS``. + + To match only on capitals, use ``match_on=MATCH_CAPITALS``. + + To match only on startswith and substring, use + ``match_on=MATCH_STARTSWITH | MATCH_SUBSTRING``. + + **Diacritic folding** + + .. versionadded:: 1.3 + + If ``fold_diacritics`` is ``True`` (the default), and ``query`` + contains only ASCII characters, non-ASCII characters in search keys + will be converted to ASCII equivalents (e.g. **ü** -> **u**, + **ß** -> **ss**, **é** -> **e**). + + See :const:`ASCII_REPLACEMENTS` for all replacements. + + If ``query`` contains non-ASCII characters, search keys will not be + altered. + + """ + if not query: + return items + + # Remove preceding/trailing spaces + query = query.strip() + + if not query: + return items + + # Use user override if there is one + fold_diacritics = self.settings.get('__workflow_diacritic_folding', + fold_diacritics) + + results = [] + + for item in items: + skip = False + score = 0 + words = [s.strip() for s in query.split(' ')] + value = key(item).strip() + if value == '': + continue + for word in words: + if word == '': + continue + s, rule = self._filter_item(value, word, match_on, + fold_diacritics) + + if not s: # Skip items that don't match part of the query + skip = True + score += s + + if skip: + continue + + if score: + # use "reversed" `score` (i.e. highest becomes lowest) and + # `value` as sort key. This means items with the same score + # will be sorted in alphabetical not reverse alphabetical order + results.append(((100.0 / score, value.lower(), score), + (item, score, rule))) + + # sort on keys, then discard the keys + results.sort(reverse=ascending) + results = [t[1] for t in results] + + if min_score: + results = [r for r in results if r[1] > min_score] + + if max_results and len(results) > max_results: + results = results[:max_results] + + # return list of ``(item, score, rule)`` + if include_score: + return results + # just return list of items + return [t[0] for t in results] + + def _filter_item(self, value, query, match_on, fold_diacritics): + """Filter ``value`` against ``query`` using rules ``match_on``. + + :returns: ``(score, rule)`` + + """ + query = query.lower() + + if not isascii(query): + fold_diacritics = False + + if fold_diacritics: + value = self.fold_to_ascii(value) + + # pre-filter any items that do not contain all characters + # of ``query`` to save on running several more expensive tests + if not set(query) <= set(value.lower()): + + return (0, None) + + # item starts with query + if match_on & MATCH_STARTSWITH and value.lower().startswith(query): + score = 100.0 - (len(value) / len(query)) + + return (score, MATCH_STARTSWITH) + + # query matches capitalised letters in item, + # e.g. of = OmniFocus + if match_on & MATCH_CAPITALS: + initials = ''.join([c for c in value if c in INITIALS]) + if initials.lower().startswith(query): + score = 100.0 - (len(initials) / len(query)) + + return (score, MATCH_CAPITALS) + + # split the item into "atoms", i.e. words separated by + # spaces or other non-word characters + if (match_on & MATCH_ATOM or + match_on & MATCH_INITIALS_CONTAIN or + match_on & MATCH_INITIALS_STARTSWITH): + atoms = [s.lower() for s in split_on_delimiters(value)] + # print('atoms : %s --> %s' % (value, atoms)) + # initials of the atoms + initials = ''.join([s[0] for s in atoms if s]) + + if match_on & MATCH_ATOM: + # is `query` one of the atoms in item? + # similar to substring, but scores more highly, as it's + # a word within the item + if query in atoms: + score = 100.0 - (len(value) / len(query)) + + return (score, MATCH_ATOM) + + # `query` matches start (or all) of the initials of the + # atoms, e.g. ``himym`` matches "How I Met Your Mother" + # *and* "how i met your mother" (the ``capitals`` rule only + # matches the former) + if (match_on & MATCH_INITIALS_STARTSWITH and + initials.startswith(query)): + score = 100.0 - (len(initials) / len(query)) + + return (score, MATCH_INITIALS_STARTSWITH) + + # `query` is a substring of initials, e.g. ``doh`` matches + # "The Dukes of Hazzard" + elif (match_on & MATCH_INITIALS_CONTAIN and + query in initials): + score = 95.0 - (len(initials) / len(query)) + + return (score, MATCH_INITIALS_CONTAIN) + + # `query` is a substring of item + if match_on & MATCH_SUBSTRING and query in value.lower(): + score = 90.0 - (len(value) / len(query)) + + return (score, MATCH_SUBSTRING) + + # finally, assign a score based on how close together the + # characters in `query` are in item. + if match_on & MATCH_ALLCHARS: + search = self._search_for_query(query) + match = search(value) + if match: + score = 100.0 / ((1 + match.start()) * + (match.end() - match.start() + 1)) + + return (score, MATCH_ALLCHARS) + + # Nothing matched + return (0, None) + + def _search_for_query(self, query): + if query in self._search_pattern_cache: + return self._search_pattern_cache[query] + + # Build pattern: include all characters + pattern = [] + for c in query: + # pattern.append('[^{0}]*{0}'.format(re.escape(c))) + pattern.append('.*?{0}'.format(re.escape(c))) + pattern = ''.join(pattern) + search = re.compile(pattern, re.IGNORECASE).search + + self._search_pattern_cache[query] = search + return search + + def run(self, func, text_errors=False): + """Call ``func`` to run your workflow. + + :param func: Callable to call with ``self`` (i.e. the :class:`Workflow` + instance) as first argument. + :param text_errors: Emit error messages in plain text, not in + Alfred's XML/JSON feedback format. Use this when you're not + running Alfred-Workflow in a Script Filter and would like + to pass the error message to, say, a notification. + :type text_errors: ``Boolean`` + + ``func`` will be called with :class:`Workflow` instance as first + argument. + + ``func`` should be the main entry point to your workflow. + + Any exceptions raised will be logged and an error message will be + output to Alfred. + + """ + start = time.time() + + # Write to debugger to ensure "real" output starts on a new line + print('.', file=sys.stderr) + + # Call workflow's entry function/method within a try-except block + # to catch any errors and display an error message in Alfred + try: + if self.version: + self.logger.debug('---------- %s (%s) ----------', + self.name, self.version) + else: + self.logger.debug('---------- %s ----------', self.name) + + # Run update check if configured for self-updates. + # This call has to go in the `run` try-except block, as it will + # initialise `self.settings`, which will raise an exception + # if `settings.json` isn't valid. + if self._update_settings: + self.check_update() + + # Run workflow's entry function/method + func(self) + + # Set last version run to current version after a successful + # run + self.set_last_version() + + except Exception as err: + self.logger.exception(err) + if self.help_url: + self.logger.info('for assistance, see: %s', self.help_url) + + if not sys.stdout.isatty(): # Show error in Alfred + if text_errors: + print(unicode(err).encode('utf-8'), end='') + else: + self._items = [] + if self._name: + name = self._name + elif self._bundleid: # pragma: no cover + name = self._bundleid + else: # pragma: no cover + name = os.path.dirname(__file__) + self.add_item("Error in workflow '%s'" % name, + unicode(err), + icon=ICON_ERROR) + self.send_feedback() + return 1 + + finally: + self.logger.debug('---------- finished in %0.3fs ----------', + time.time() - start) + + return 0 + + # Alfred feedback methods ------------------------------------------ + + def add_item(self, title, subtitle='', modifier_subtitles=None, arg=None, + autocomplete=None, valid=False, uid=None, icon=None, + icontype=None, type=None, largetext=None, copytext=None, + quicklookurl=None): + """Add an item to be output to Alfred. + + :param title: Title shown in Alfred + :type title: ``unicode`` + :param subtitle: Subtitle shown in Alfred + :type subtitle: ``unicode`` + :param modifier_subtitles: Subtitles shown when modifier + (CMD, OPT etc.) is pressed. Use a ``dict`` with the lowercase + keys ``cmd``, ``ctrl``, ``shift``, ``alt`` and ``fn`` + :type modifier_subtitles: ``dict`` + :param arg: Argument passed by Alfred as ``{query}`` when item is + actioned + :type arg: ``unicode`` + :param autocomplete: Text expanded in Alfred when item is TABbed + :type autocomplete: ``unicode`` + :param valid: Whether or not item can be actioned + :type valid: ``Boolean`` + :param uid: Used by Alfred to remember/sort items + :type uid: ``unicode`` + :param icon: Filename of icon to use + :type icon: ``unicode`` + :param icontype: Type of icon. Must be one of ``None`` , ``'filetype'`` + or ``'fileicon'``. Use ``'filetype'`` when ``icon`` is a filetype + such as ``'public.folder'``. Use ``'fileicon'`` when you wish to + use the icon of the file specified as ``icon``, e.g. + ``icon='/Applications/Safari.app', icontype='fileicon'``. + Leave as `None` if ``icon`` points to an actual + icon file. + :type icontype: ``unicode`` + :param type: Result type. Currently only ``'file'`` is supported + (by Alfred). This will tell Alfred to enable file actions for + this item. + :type type: ``unicode`` + :param largetext: Text to be displayed in Alfred's large text box + if user presses CMD+L on item. + :type largetext: ``unicode`` + :param copytext: Text to be copied to pasteboard if user presses + CMD+C on item. + :type copytext: ``unicode`` + :param quicklookurl: URL to be displayed using Alfred's Quick Look + feature (tapping ``SHIFT`` or ``⌘+Y`` on a result). + :type quicklookurl: ``unicode`` + :returns: :class:`Item` instance + + See :ref:`icons` for a list of the supported system icons. + + .. note:: + + Although this method returns an :class:`Item` instance, you don't + need to hold onto it or worry about it. All generated :class:`Item` + instances are also collected internally and sent to Alfred when + :meth:`send_feedback` is called. + + The generated :class:`Item` is only returned in case you want to + edit it or do something with it other than send it to Alfred. + + """ + item = self.item_class(title, subtitle, modifier_subtitles, arg, + autocomplete, valid, uid, icon, icontype, type, + largetext, copytext, quicklookurl) + self._items.append(item) + return item + + def send_feedback(self): + """Print stored items to console/Alfred as XML.""" + root = ET.Element('items') + for item in self._items: + root.append(item.elem) + sys.stdout.write('\n') + sys.stdout.write(ET.tostring(root).encode('utf-8')) + sys.stdout.flush() + + #################################################################### + # Updating methods + #################################################################### + + @property + def first_run(self): + """Return ``True`` if it's the first time this version has run. + + .. versionadded:: 1.9.10 + + Raises a :class:`ValueError` if :attr:`version` isn't set. + + """ + if not self.version: + raise ValueError('No workflow version set') + + if not self.last_version_run: + return True + + return self.version != self.last_version_run + + @property + def last_version_run(self): + """Return version of last version to run (or ``None``). + + .. versionadded:: 1.9.10 + + :returns: :class:`~workflow.update.Version` instance + or ``None`` + + """ + if self._last_version_run is UNSET: + + version = self.settings.get('__workflow_last_version') + if version: + from update import Version + version = Version(version) + + self._last_version_run = version + + self.logger.debug('last run version: %s', self._last_version_run) + + return self._last_version_run + + def set_last_version(self, version=None): + """Set :attr:`last_version_run` to current version. + + .. versionadded:: 1.9.10 + + :param version: version to store (default is current version) + :type version: :class:`~workflow.update.Version` instance + or ``unicode`` + :returns: ``True`` if version is saved, else ``False`` + + """ + if not version: + if not self.version: + self.logger.warning( + "Can't save last version: workflow has no version") + return False + + version = self.version + + if isinstance(version, basestring): + from update import Version + version = Version(version) + + self.settings['__workflow_last_version'] = str(version) + + self.logger.debug('set last run version: %s', version) + + return True + + @property + def update_available(self): + """Whether an update is available. + + .. versionadded:: 1.9 + + See :ref:`guide-updates` in the :ref:`user-manual` for detailed + information on how to enable your workflow to update itself. + + :returns: ``True`` if an update is available, else ``False`` + + """ + # Create a new workflow object to ensure standard serialiser + # is used (update.py is called without the user's settings) + update_data = Workflow().cached_data('__workflow_update_status', + max_age=0) + + self.logger.debug('update_data: %r', update_data) + + if not update_data or not update_data.get('available'): + return False + + return update_data['available'] + + @property + def prereleases(self): + """Whether workflow should update to pre-release versions. + + .. versionadded:: 1.16 + + :returns: ``True`` if pre-releases are enabled with the :ref:`magic + argument ` or the ``update_settings`` dict, else + ``False``. + + """ + if self._update_settings.get('prereleases'): + return True + + return self.settings.get('__workflow_prereleases') or False + + def check_update(self, force=False): + """Call update script if it's time to check for a new release. + + .. versionadded:: 1.9 + + The update script will be run in the background, so it won't + interfere in the execution of your workflow. + + See :ref:`guide-updates` in the :ref:`user-manual` for detailed + information on how to enable your workflow to update itself. + + :param force: Force update check + :type force: ``Boolean`` + + """ + frequency = self._update_settings.get('frequency', + DEFAULT_UPDATE_FREQUENCY) + + if not force and not self.settings.get('__workflow_autoupdate', True): + self.logger.debug('Auto update turned off by user') + return + + # Check for new version if it's time + if (force or not self.cached_data_fresh( + '__workflow_update_status', frequency * 86400)): + + github_slug = self._update_settings['github_slug'] + # version = self._update_settings['version'] + version = str(self.version) + + from background import run_in_background + + # update.py is adjacent to this file + update_script = os.path.join(os.path.dirname(__file__), + b'update.py') + + cmd = ['/usr/bin/python', update_script, 'check', github_slug, + version] + + if self.prereleases: + cmd.append('--prereleases') + + self.logger.info('checking for update ...') + + run_in_background('__workflow_update_check', cmd) + + else: + self.logger.debug('update check not due') + + def start_update(self): + """Check for update and download and install new workflow file. + + .. versionadded:: 1.9 + + See :ref:`guide-updates` in the :ref:`user-manual` for detailed + information on how to enable your workflow to update itself. + + :returns: ``True`` if an update is available and will be + installed, else ``False`` + + """ + import update + + github_slug = self._update_settings['github_slug'] + # version = self._update_settings['version'] + version = str(self.version) + + if not update.check_update(github_slug, version, self.prereleases): + return False + + from background import run_in_background + + # update.py is adjacent to this file + update_script = os.path.join(os.path.dirname(__file__), + b'update.py') + + cmd = ['/usr/bin/python', update_script, 'install', github_slug, + version] + + if self.prereleases: + cmd.append('--prereleases') + + self.logger.debug('downloading update ...') + run_in_background('__workflow_update_install', cmd) + + return True + + #################################################################### + # Keychain password storage methods + #################################################################### + + def save_password(self, account, password, service=None): + """Save account credentials. + + If the account exists, the old password will first be deleted + (Keychain throws an error otherwise). + + If something goes wrong, a :class:`KeychainError` exception will + be raised. + + :param account: name of the account the password is for, e.g. + "Pinboard" + :type account: ``unicode`` + :param password: the password to secure + :type password: ``unicode`` + :param service: Name of the service. By default, this is the + workflow's bundle ID + :type service: ``unicode`` + + """ + if not service: + service = self.bundleid + + try: + self._call_security('add-generic-password', service, account, + '-w', password) + self.logger.debug('saved password : %s:%s', service, account) + + except PasswordExists: + self.logger.debug('password exists : %s:%s', service, account) + current_password = self.get_password(account, service) + + if current_password == password: + self.logger.debug('password unchanged') + + else: + self.delete_password(account, service) + self._call_security('add-generic-password', service, + account, '-w', password) + self.logger.debug('save_password : %s:%s', service, account) + + def get_password(self, account, service=None): + """Retrieve the password saved at ``service/account``. + + Raise :class:`PasswordNotFound` exception if password doesn't exist. + + :param account: name of the account the password is for, e.g. + "Pinboard" + :type account: ``unicode`` + :param service: Name of the service. By default, this is the workflow's + bundle ID + :type service: ``unicode`` + :returns: account password + :rtype: ``unicode`` + + """ + if not service: + service = self.bundleid + + output = self._call_security('find-generic-password', service, + account, '-g') + + # Parsing of `security` output is adapted from python-keyring + # by Jason R. Coombs + # https://pypi.python.org/pypi/keyring + m = re.search( + r'password:\s*(?:0x(?P[0-9A-F]+)\s*)?(?:"(?P.*)")?', + output) + + if m: + groups = m.groupdict() + h = groups.get('hex') + password = groups.get('pw') + if h: + password = unicode(binascii.unhexlify(h), 'utf-8') + + self.logger.debug('got password : %s:%s', service, account) + + return password + + def delete_password(self, account, service=None): + """Delete the password stored at ``service/account``. + + Raise :class:`PasswordNotFound` if account is unknown. + + :param account: name of the account the password is for, e.g. + "Pinboard" + :type account: ``unicode`` + :param service: Name of the service. By default, this is the workflow's + bundle ID + :type service: ``unicode`` + + """ + if not service: + service = self.bundleid + + self._call_security('delete-generic-password', service, account) + + self.logger.debug('deleted password : %s:%s', service, account) + + #################################################################### + # Methods for workflow:* magic args + #################################################################### + + def _register_default_magic(self): + """Register the built-in magic arguments.""" + # TODO: refactor & simplify + # Wrap callback and message with callable + def callback(func, msg): + def wrapper(): + func() + return msg + + return wrapper + + self.magic_arguments['delcache'] = callback(self.clear_cache, + 'Deleted workflow cache') + self.magic_arguments['deldata'] = callback(self.clear_data, + 'Deleted workflow data') + self.magic_arguments['delsettings'] = callback( + self.clear_settings, 'Deleted workflow settings') + self.magic_arguments['reset'] = callback(self.reset, + 'Reset workflow') + self.magic_arguments['openlog'] = callback(self.open_log, + 'Opening workflow log file') + self.magic_arguments['opencache'] = callback( + self.open_cachedir, 'Opening workflow cache directory') + self.magic_arguments['opendata'] = callback( + self.open_datadir, 'Opening workflow data directory') + self.magic_arguments['openworkflow'] = callback( + self.open_workflowdir, 'Opening workflow directory') + self.magic_arguments['openterm'] = callback( + self.open_terminal, 'Opening workflow root directory in Terminal') + + # Diacritic folding + def fold_on(): + self.settings['__workflow_diacritic_folding'] = True + return 'Diacritics will always be folded' + + def fold_off(): + self.settings['__workflow_diacritic_folding'] = False + return 'Diacritics will never be folded' + + def fold_default(): + if '__workflow_diacritic_folding' in self.settings: + del self.settings['__workflow_diacritic_folding'] + return 'Diacritics folding reset' + + self.magic_arguments['foldingon'] = fold_on + self.magic_arguments['foldingoff'] = fold_off + self.magic_arguments['foldingdefault'] = fold_default + + # Updates + def update_on(): + self.settings['__workflow_autoupdate'] = True + return 'Auto update turned on' + + def update_off(): + self.settings['__workflow_autoupdate'] = False + return 'Auto update turned off' + + def prereleases_on(): + self.settings['__workflow_prereleases'] = True + return 'Prerelease updates turned on' + + def prereleases_off(): + self.settings['__workflow_prereleases'] = False + return 'Prerelease updates turned off' + + def do_update(): + if self.start_update(): + return 'Downloading and installing update ...' + else: + return 'No update available' + + self.magic_arguments['autoupdate'] = update_on + self.magic_arguments['noautoupdate'] = update_off + self.magic_arguments['prereleases'] = prereleases_on + self.magic_arguments['noprereleases'] = prereleases_off + self.magic_arguments['update'] = do_update + + # Help + def do_help(): + if self.help_url: + self.open_help() + return 'Opening workflow help URL in browser' + else: + return 'Workflow has no help URL' + + def show_version(): + if self.version: + return 'Version: {0}'.format(self.version) + else: + return 'This workflow has no version number' + + def list_magic(): + """Display all available magic args in Alfred.""" + isatty = sys.stderr.isatty() + for name in sorted(self.magic_arguments.keys()): + if name == 'magic': + continue + arg = self.magic_prefix + name + self.logger.debug(arg) + + if not isatty: + self.add_item(arg, icon=ICON_INFO) + + if not isatty: + self.send_feedback() + + self.magic_arguments['help'] = do_help + self.magic_arguments['magic'] = list_magic + self.magic_arguments['version'] = show_version + + def clear_cache(self, filter_func=lambda f: True): + """Delete all files in workflow's :attr:`cachedir`. + + :param filter_func: Callable to determine whether a file should be + deleted or not. ``filter_func`` is called with the filename + of each file in the data directory. If it returns ``True``, + the file will be deleted. + By default, *all* files will be deleted. + :type filter_func: ``callable`` + """ + self._delete_directory_contents(self.cachedir, filter_func) + + def clear_data(self, filter_func=lambda f: True): + """Delete all files in workflow's :attr:`datadir`. + + :param filter_func: Callable to determine whether a file should be + deleted or not. ``filter_func`` is called with the filename + of each file in the data directory. If it returns ``True``, + the file will be deleted. + By default, *all* files will be deleted. + :type filter_func: ``callable`` + """ + self._delete_directory_contents(self.datadir, filter_func) + + def clear_settings(self): + """Delete workflow's :attr:`settings_path`.""" + if os.path.exists(self.settings_path): + os.unlink(self.settings_path) + self.logger.debug('deleted : %r', self.settings_path) + + def reset(self): + """Delete workflow settings, cache and data. + + File :attr:`settings ` and directories + :attr:`cache ` and :attr:`data ` are deleted. + + """ + self.clear_cache() + self.clear_data() + self.clear_settings() + + def open_log(self): + """Open :attr:`logfile` in default app (usually Console.app).""" + subprocess.call(['open', self.logfile]) + + def open_cachedir(self): + """Open the workflow's :attr:`cachedir` in Finder.""" + subprocess.call(['open', self.cachedir]) + + def open_datadir(self): + """Open the workflow's :attr:`datadir` in Finder.""" + subprocess.call(['open', self.datadir]) + + def open_workflowdir(self): + """Open the workflow's :attr:`workflowdir` in Finder.""" + subprocess.call(['open', self.workflowdir]) + + def open_terminal(self): + """Open a Terminal window at workflow's :attr:`workflowdir`.""" + subprocess.call(['open', '-a', 'Terminal', + self.workflowdir]) + + def open_help(self): + """Open :attr:`help_url` in default browser.""" + subprocess.call(['open', self.help_url]) + + return 'Opening workflow help URL in browser' + + #################################################################### + # Helper methods + #################################################################### + + def decode(self, text, encoding=None, normalization=None): + """Return ``text`` as normalised unicode. + + If ``encoding`` and/or ``normalization`` is ``None``, the + ``input_encoding``and ``normalization`` parameters passed to + :class:`Workflow` are used. + + :param text: string + :type text: encoded or Unicode string. If ``text`` is already a + Unicode string, it will only be normalised. + :param encoding: The text encoding to use to decode ``text`` to + Unicode. + :type encoding: ``unicode`` or ``None`` + :param normalization: The nomalisation form to apply to ``text``. + :type normalization: ``unicode`` or ``None`` + :returns: decoded and normalised ``unicode`` + + :class:`Workflow` uses "NFC" normalisation by default. This is the + standard for Python and will work well with data from the web (via + :mod:`~workflow.web` or :mod:`json`). + + macOS, on the other hand, uses "NFD" normalisation (nearly), so data + coming from the system (e.g. via :mod:`subprocess` or + :func:`os.listdir`/:mod:`os.path`) may not match. You should either + normalise this data, too, or change the default normalisation used by + :class:`Workflow`. + + """ + encoding = encoding or self._input_encoding + normalization = normalization or self._normalizsation + if not isinstance(text, unicode): + text = unicode(text, encoding) + return unicodedata.normalize(normalization, text) + + def fold_to_ascii(self, text): + """Convert non-ASCII characters to closest ASCII equivalent. + + .. versionadded:: 1.3 + + .. note:: This only works for a subset of European languages. + + :param text: text to convert + :type text: ``unicode`` + :returns: text containing only ASCII characters + :rtype: ``unicode`` + + """ + if isascii(text): + return text + text = ''.join([ASCII_REPLACEMENTS.get(c, c) for c in text]) + return unicode(unicodedata.normalize('NFKD', + text).encode('ascii', 'ignore')) + + def dumbify_punctuation(self, text): + """Convert non-ASCII punctuation to closest ASCII equivalent. + + This method replaces "smart" quotes and n- or m-dashes with their + workaday ASCII equivalents. This method is currently not used + internally, but exists as a helper method for workflow authors. + + .. versionadded: 1.9.7 + + :param text: text to convert + :type text: ``unicode`` + :returns: text with only ASCII punctuation + :rtype: ``unicode`` + + """ + if isascii(text): + return text + + text = ''.join([DUMB_PUNCTUATION.get(c, c) for c in text]) + return text + + def _delete_directory_contents(self, dirpath, filter_func): + """Delete all files in a directory. + + :param dirpath: path to directory to clear + :type dirpath: ``unicode`` or ``str`` + :param filter_func function to determine whether a file shall be + deleted or not. + :type filter_func ``callable`` + + """ + if os.path.exists(dirpath): + for filename in os.listdir(dirpath): + if not filter_func(filename): + continue + path = os.path.join(dirpath, filename) + if os.path.isdir(path): + shutil.rmtree(path) + else: + os.unlink(path) + self.logger.debug('deleted : %r', path) + + def _load_info_plist(self): + """Load workflow info from ``info.plist``.""" + # info.plist should be in the directory above this one + self._info = plistlib.readPlist(self.workflowfile('info.plist')) + self._info_loaded = True + + def _create(self, dirpath): + """Create directory `dirpath` if it doesn't exist. + + :param dirpath: path to directory + :type dirpath: ``unicode`` + :returns: ``dirpath`` argument + :rtype: ``unicode`` + + """ + if not os.path.exists(dirpath): + os.makedirs(dirpath) + return dirpath + + def _call_security(self, action, service, account, *args): + """Call ``security`` CLI program that provides access to keychains. + + May raise `PasswordNotFound`, `PasswordExists` or `KeychainError` + exceptions (the first two are subclasses of `KeychainError`). + + :param action: The ``security`` action to call, e.g. + ``add-generic-password`` + :type action: ``unicode`` + :param service: Name of the service. + :type service: ``unicode`` + :param account: name of the account the password is for, e.g. + "Pinboard" + :type account: ``unicode`` + :param password: the password to secure + :type password: ``unicode`` + :param *args: list of command line arguments to be passed to + ``security`` + :type *args: `list` or `tuple` + :returns: ``(retcode, output)``. ``retcode`` is an `int`, ``output`` a + ``unicode`` string. + :rtype: `tuple` (`int`, ``unicode``) + + """ + cmd = ['security', action, '-s', service, '-a', account] + list(args) + p = subprocess.Popen(cmd, stdout=subprocess.PIPE, + stderr=subprocess.STDOUT) + stdout, _ = p.communicate() + if p.returncode == 44: # password does not exist + raise PasswordNotFound() + elif p.returncode == 45: # password already exists + raise PasswordExists() + elif p.returncode > 0: + err = KeychainError('Unknown Keychain error : %s' % stdout) + err.retcode = p.returncode + raise err + return stdout.strip().decode('utf-8') diff --git a/src/lib/workflow/workflow3.py b/src/lib/workflow/workflow3.py new file mode 100644 index 0000000..3ffd95b --- /dev/null +++ b/src/lib/workflow/workflow3.py @@ -0,0 +1,712 @@ +# encoding: utf-8 +# +# Copyright (c) 2016 Dean Jackson +# +# MIT Licence. See http://opensource.org/licenses/MIT +# +# Created on 2016-06-25 +# + +"""An Alfred 3-only version of :class:`~workflow.Workflow`. + +:class:`~workflow.Workflow3` supports Alfred 3's new features, such as +setting :ref:`workflow-variables` and +:class:`the more advanced modifiers ` supported by Alfred 3. + +In order for the feedback mechanism to work correctly, it's important +to create :class:`Item3` and :class:`Modifier` objects via the +:meth:`Workflow3.add_item()` and :meth:`Item3.add_modifier()` methods +respectively. If you instantiate :class:`Item3` or :class:`Modifier` +objects directly, the current :class:`Workflow3` object won't be aware +of them, and they won't be sent to Alfred when you call +:meth:`Workflow3.send_feedback()`. + +""" + +from __future__ import print_function, unicode_literals, absolute_import + +import json +import os +import sys + +from .workflow import ICON_WARNING, Workflow + + +class Variables(dict): + """Workflow variables for Run Script actions. + + .. versionadded: 1.26 + + This class allows you to set workflow variables from + Run Script actions. + + It is a subclass of :class:`dict`. + + >>> v = Variables(username='deanishe', password='hunter2') + >>> v.arg = u'output value' + >>> print(v) + + See :ref:`variables-run-script` in the User Guide for more + information. + + Args: + arg (unicode, optional): Main output/``{query}``. + **variables: Workflow variables to set. + + + Attributes: + arg (unicode): Output value (``{query}``). + config (dict): Configuration for downstream workflow element. + + """ + + def __init__(self, arg=None, **variables): + """Create a new `Variables` object.""" + self.arg = arg + self.config = {} + super(Variables, self).__init__(**variables) + + @property + def obj(self): + """Return ``alfredworkflow`` `dict`.""" + o = {} + if self: + d2 = {} + for k, v in self.items(): + d2[k] = v + o['variables'] = d2 + + if self.config: + o['config'] = self.config + + if self.arg is not None: + o['arg'] = self.arg + + return {'alfredworkflow': o} + + def __unicode__(self): + """Convert to ``alfredworkflow`` JSON object. + + Returns: + unicode: ``alfredworkflow`` JSON object + + """ + if not self and not self.config: + if self.arg: + return self.arg + else: + return u'' + + return json.dumps(self.obj) + + def __str__(self): + """Convert to ``alfredworkflow`` JSON object. + + Returns: + str: UTF-8 encoded ``alfredworkflow`` JSON object + + """ + return unicode(self).encode('utf-8') + + +class Modifier(object): + """Modify :class:`Item3` arg/icon/variables when modifier key is pressed. + + Don't use this class directly (as it won't be associated with any + :class:`Item3`), but rather use :meth:`Item3.add_modifier()` + to add modifiers to results. + + >>> it = wf.add_item('Title', 'Subtitle', valid=True) + >>> it.setvar('name', 'default') + >>> m = it.add_modifier('cmd') + >>> m.setvar('name', 'alternate') + + See :ref:`workflow-variables` in the User Guide for more information + and :ref:`example usage `. + + Args: + key (unicode): Modifier key, e.g. ``"cmd"``, ``"alt"`` etc. + subtitle (unicode, optional): Override default subtitle. + arg (unicode, optional): Argument to pass for this modifier. + valid (bool, optional): Override item's validity. + icon (unicode, optional): Filepath/UTI of icon to use + icontype (unicode, optional): Type of icon. See + :meth:`Workflow.add_item() ` + for valid values. + + Attributes: + arg (unicode): Arg to pass to following action. + config (dict): Configuration for a downstream element, such as + a File Filter. + icon (unicode): Filepath/UTI of icon. + icontype (unicode): Type of icon. See + :meth:`Workflow.add_item() ` + for valid values. + key (unicode): Modifier key (see above). + subtitle (unicode): Override item subtitle. + valid (bool): Override item validity. + variables (dict): Workflow variables set by this modifier. + + """ + + def __init__(self, key, subtitle=None, arg=None, valid=None, icon=None, + icontype=None): + """Create a new :class:`Modifier`. + + Don't use this class directly (as it won't be associated with any + :class:`Item3`), but rather use :meth:`Item3.add_modifier()` + to add modifiers to results. + + Args: + key (unicode): Modifier key, e.g. ``"cmd"``, ``"alt"`` etc. + subtitle (unicode, optional): Override default subtitle. + arg (unicode, optional): Argument to pass for this modifier. + valid (bool, optional): Override item's validity. + icon (unicode, optional): Filepath/UTI of icon to use + icontype (unicode, optional): Type of icon. See + :meth:`Workflow.add_item() ` + for valid values. + + """ + self.key = key + self.subtitle = subtitle + self.arg = arg + self.valid = valid + self.icon = icon + self.icontype = icontype + + self.config = {} + self.variables = {} + + def setvar(self, name, value): + """Set a workflow variable for this Item. + + Args: + name (unicode): Name of variable. + value (unicode): Value of variable. + + """ + self.variables[name] = value + + def getvar(self, name, default=None): + """Return value of workflow variable for ``name`` or ``default``. + + Args: + name (unicode): Variable name. + default (None, optional): Value to return if variable is unset. + + Returns: + unicode or ``default``: Value of variable if set or ``default``. + + """ + return self.variables.get(name, default) + + @property + def obj(self): + """Modifier formatted for JSON serialization for Alfred 3. + + Returns: + dict: Modifier for serializing to JSON. + + """ + o = {} + + if self.subtitle is not None: + o['subtitle'] = self.subtitle + + if self.arg is not None: + o['arg'] = self.arg + + if self.valid is not None: + o['valid'] = self.valid + + if self.variables: + o['variables'] = self.variables + + if self.config: + o['config'] = self.config + + icon = self._icon() + if icon: + o['icon'] = icon + + return o + + def _icon(self): + """Return `icon` object for item. + + Returns: + dict: Mapping for item `icon` (may be empty). + + """ + icon = {} + if self.icon is not None: + icon['path'] = self.icon + + if self.icontype is not None: + icon['type'] = self.icontype + + return icon + + +class Item3(object): + """Represents a feedback item for Alfred 3. + + Generates Alfred-compliant JSON for a single item. + + Don't use this class directly (as it then won't be associated with + any :class:`Workflow3 ` object), but rather use + :meth:`Workflow3.add_item() `. + See :meth:`~workflow.Workflow3.add_item` for details of arguments. + + """ + + def __init__(self, title, subtitle='', arg=None, autocomplete=None, + match=None, valid=False, uid=None, icon=None, icontype=None, + type=None, largetext=None, copytext=None, quicklookurl=None): + """Create a new :class:`Item3` object. + + Use same arguments as for + :class:`Workflow.Item `. + + Argument ``subtitle_modifiers`` is not supported. + + """ + self.title = title + self.subtitle = subtitle + self.arg = arg + self.autocomplete = autocomplete + self.match = match + self.valid = valid + self.uid = uid + self.icon = icon + self.icontype = icontype + self.type = type + self.quicklookurl = quicklookurl + self.largetext = largetext + self.copytext = copytext + + self.modifiers = {} + + self.config = {} + self.variables = {} + + def setvar(self, name, value): + """Set a workflow variable for this Item. + + Args: + name (unicode): Name of variable. + value (unicode): Value of variable. + + """ + self.variables[name] = value + + def getvar(self, name, default=None): + """Return value of workflow variable for ``name`` or ``default``. + + Args: + name (unicode): Variable name. + default (None, optional): Value to return if variable is unset. + + Returns: + unicode or ``default``: Value of variable if set or ``default``. + + """ + return self.variables.get(name, default) + + def add_modifier(self, key, subtitle=None, arg=None, valid=None, icon=None, + icontype=None): + """Add alternative values for a modifier key. + + Args: + key (unicode): Modifier key, e.g. ``"cmd"`` or ``"alt"`` + subtitle (unicode, optional): Override item subtitle. + arg (unicode, optional): Input for following action. + valid (bool, optional): Override item validity. + icon (unicode, optional): Filepath/UTI of icon. + icontype (unicode, optional): Type of icon. See + :meth:`Workflow.add_item() ` + for valid values. + + Returns: + Modifier: Configured :class:`Modifier`. + + """ + mod = Modifier(key, subtitle, arg, valid, icon, icontype) + + # Add Item variables to Modifier + mod.variables.update(self.variables) + + self.modifiers[key] = mod + + return mod + + @property + def obj(self): + """Item formatted for JSON serialization. + + Returns: + dict: Data suitable for Alfred 3 feedback. + + """ + # Required values + o = { + 'title': self.title, + 'subtitle': self.subtitle, + 'valid': self.valid, + } + + # Optional values + if self.arg is not None: + o['arg'] = self.arg + + if self.autocomplete is not None: + o['autocomplete'] = self.autocomplete + + if self.match is not None: + o['match'] = self.match + + if self.uid is not None: + o['uid'] = self.uid + + if self.type is not None: + o['type'] = self.type + + if self.quicklookurl is not None: + o['quicklookurl'] = self.quicklookurl + + if self.variables: + o['variables'] = self.variables + + if self.config: + o['config'] = self.config + + # Largetype and copytext + text = self._text() + if text: + o['text'] = text + + icon = self._icon() + if icon: + o['icon'] = icon + + # Modifiers + mods = self._modifiers() + if mods: + o['mods'] = mods + + return o + + def _icon(self): + """Return `icon` object for item. + + Returns: + dict: Mapping for item `icon` (may be empty). + + """ + icon = {} + if self.icon is not None: + icon['path'] = self.icon + + if self.icontype is not None: + icon['type'] = self.icontype + + return icon + + def _text(self): + """Return `largetext` and `copytext` object for item. + + Returns: + dict: `text` mapping (may be empty) + + """ + text = {} + if self.largetext is not None: + text['largetype'] = self.largetext + + if self.copytext is not None: + text['copy'] = self.copytext + + return text + + def _modifiers(self): + """Build `mods` dictionary for JSON feedback. + + Returns: + dict: Modifier mapping or `None`. + + """ + if self.modifiers: + mods = {} + for k, mod in self.modifiers.items(): + mods[k] = mod.obj + + return mods + + return None + + +class Workflow3(Workflow): + """Workflow class that generates Alfred 3 feedback. + + It is a subclass of :class:`~workflow.Workflow` and most of its + methods are documented there. + + Attributes: + item_class (class): Class used to generate feedback items. + variables (dict): Top level workflow variables. + + """ + + item_class = Item3 + + def __init__(self, **kwargs): + """Create a new :class:`Workflow3` object. + + See :class:`~workflow.Workflow` for documentation. + + """ + Workflow.__init__(self, **kwargs) + self.variables = {} + self._rerun = 0 + # Get session ID from environment if present + self._session_id = os.getenv('_WF_SESSION_ID') or None + if self._session_id: + self.setvar('_WF_SESSION_ID', self._session_id) + + @property + def _default_cachedir(self): + """Alfred 3's default cache directory.""" + return os.path.join( + os.path.expanduser( + '~/Library/Caches/com.runningwithcrayons.Alfred-3/' + 'Workflow Data/'), + self.bundleid) + + @property + def _default_datadir(self): + """Alfred 3's default data directory.""" + return os.path.join(os.path.expanduser( + '~/Library/Application Support/Alfred 3/Workflow Data/'), + self.bundleid) + + @property + def rerun(self): + """How often (in seconds) Alfred should re-run the Script Filter.""" + return self._rerun + + @rerun.setter + def rerun(self, seconds): + """Interval at which Alfred should re-run the Script Filter. + + Args: + seconds (int): Interval between runs. + """ + self._rerun = seconds + + @property + def session_id(self): + """A unique session ID every time the user uses the workflow. + + .. versionadded:: 1.25 + + The session ID persists while the user is using this workflow. + It expires when the user runs a different workflow or closes + Alfred. + + """ + if not self._session_id: + from uuid import uuid4 + self._session_id = uuid4().hex + self.setvar('_WF_SESSION_ID', self._session_id) + + return self._session_id + + def setvar(self, name, value): + """Set a "global" workflow variable. + + These variables are always passed to downstream workflow objects. + + If you have set :attr:`rerun`, these variables are also passed + back to the script when Alfred runs it again. + + Args: + name (unicode): Name of variable. + value (unicode): Value of variable. + + """ + self.variables[name] = value + + def getvar(self, name, default=None): + """Return value of workflow variable for ``name`` or ``default``. + + Args: + name (unicode): Variable name. + default (None, optional): Value to return if variable is unset. + + Returns: + unicode or ``default``: Value of variable if set or ``default``. + + """ + return self.variables.get(name, default) + + def add_item(self, title, subtitle='', arg=None, autocomplete=None, + valid=False, uid=None, icon=None, icontype=None, type=None, + largetext=None, copytext=None, quicklookurl=None, match=None): + """Add an item to be output to Alfred. + + Args: + match (unicode, optional): If you have "Alfred filters results" + turned on for your Script Filter, Alfred (version 3.5 and + above) will filter against this field, not ``title``. + + See :meth:`Workflow.add_item() ` for + the main documentation and other parameters. + + The key difference is that this method does not support the + ``modifier_subtitles`` argument. Use the :meth:`~Item3.add_modifier()` + method instead on the returned item instead. + + Returns: + Item3: Alfred feedback item. + + """ + item = self.item_class(title, subtitle, arg, autocomplete, + match, valid, uid, icon, icontype, type, + largetext, copytext, quicklookurl) + + # Add variables to child item + item.variables.update(self.variables) + + self._items.append(item) + return item + + @property + def _session_prefix(self): + """Filename prefix for current session.""" + return '_wfsess-{0}-'.format(self.session_id) + + def _mk_session_name(self, name): + """New cache name/key based on session ID.""" + return self._session_prefix + name + + def cache_data(self, name, data, session=False): + """Cache API with session-scoped expiry. + + .. versionadded:: 1.25 + + Args: + name (str): Cache key + data (object): Data to cache + session (bool, optional): Whether to scope the cache + to the current session. + + ``name`` and ``data`` are the same as for the + :meth:`~workflow.Workflow.cache_data` method on + :class:`~workflow.Workflow`. + + If ``session`` is ``True``, then ``name`` is prefixed + with :attr:`session_id`. + + """ + if session: + name = self._mk_session_name(name) + + return super(Workflow3, self).cache_data(name, data) + + def cached_data(self, name, data_func=None, max_age=60, session=False): + """Cache API with session-scoped expiry. + + .. versionadded:: 1.25 + + Args: + name (str): Cache key + data_func (callable): Callable that returns fresh data. It + is called if the cache has expired or doesn't exist. + max_age (int): Maximum allowable age of cache in seconds. + session (bool, optional): Whether to scope the cache + to the current session. + + ``name``, ``data_func`` and ``max_age`` are the same as for the + :meth:`~workflow.Workflow.cached_data` method on + :class:`~workflow.Workflow`. + + If ``session`` is ``True``, then ``name`` is prefixed + with :attr:`session_id`. + + """ + if session: + name = self._mk_session_name(name) + + return super(Workflow3, self).cached_data(name, data_func, max_age) + + def clear_session_cache(self, current=False): + """Remove session data from the cache. + + .. versionadded:: 1.25 + .. versionchanged:: 1.27 + + By default, data belonging to the current session won't be + deleted. Set ``current=True`` to also clear current session. + + Args: + current (bool, optional): If ``True``, also remove data for + current session. + + """ + def _is_session_file(filename): + if current: + return filename.startswith('_wfsess-') + return filename.startswith('_wfsess-') \ + and not filename.startswith(self._session_prefix) + + self.clear_cache(_is_session_file) + + @property + def obj(self): + """Feedback formatted for JSON serialization. + + Returns: + dict: Data suitable for Alfred 3 feedback. + + """ + items = [] + for item in self._items: + items.append(item.obj) + + o = {'items': items} + if self.variables: + o['variables'] = self.variables + if self.rerun: + o['rerun'] = self.rerun + return o + + def warn_empty(self, title, subtitle=u'', icon=None): + """Add a warning to feedback if there are no items. + + .. versionadded:: 1.31 + + Add a "warning" item to Alfred feedback if no other items + have been added. This is a handy shortcut to prevent Alfred + from showing its fallback searches, which is does if no + items are returned. + + Args: + title (unicode): Title of feedback item. + subtitle (unicode, optional): Subtitle of feedback item. + icon (str, optional): Icon for feedback item. If not + specified, ``ICON_WARNING`` is used. + + Returns: + Item3: Newly-created item. + """ + if len(self._items): + return + + icon = icon or ICON_WARNING + return self.add_item(title, subtitle, icon=icon) + + def send_feedback(self): + """Print stored items to console/Alfred as JSON.""" + json.dump(self.obj, sys.stdout) + sys.stdout.flush() diff --git a/src/lib/zothero/__init__.py b/src/lib/zothero/__init__.py index 9dfe2b6..40717d5 100644 --- a/src/lib/zothero/__init__.py +++ b/src/lib/zothero/__init__.py @@ -12,8 +12,6 @@ from __future__ import print_function, absolute_import from .core import ZotHero -# These global variables are populated by `zq` when it runs. -# Not a best practice, but it saves having to pass a Context -# around everywhere. +# Populated by `zh` when it runs. Not a best practice, but it saves +# having to pass a Context around everywhere. app = None -wf = None diff --git a/src/lib/zothero/cache.py b/src/lib/zothero/cache.py index b1bec66..ce0ef04 100644 --- a/src/lib/zothero/cache.py +++ b/src/lib/zothero/cache.py @@ -1,4 +1,3 @@ -#!/usr/bin/env python # encoding: utf-8 # # Copyright (c) 2016 Dean Jackson @@ -10,14 +9,13 @@ """Simple key-value store based on sqlite3. -Data is stored via sub-objects assigned to each table. +Data is stored via `Store` sub-objects assigned to each table. """ from __future__ import print_function, absolute_import from contextlib import contextmanager -from datetime import datetime import logging import os import re @@ -26,6 +24,7 @@ log = logging.getLogger(__name__) +log.addHandler(logging.NullHandler()) # Create a new database SQL_SCHEMA = u""" diff --git a/src/lib/zothero/core.py b/src/lib/zothero/core.py index 686fd6e..5327384 100644 --- a/src/lib/zothero/core.py +++ b/src/lib/zothero/core.py @@ -7,7 +7,7 @@ # Created on 2017-12-15 # -"""Core classes and functions representing the main zothero API.""" +"""Main ZotHero API.""" from __future__ import print_function, absolute_import diff --git a/src/lib/zothero/csl.py b/src/lib/zothero/csl.py index bafd7a5..50d797a 100644 --- a/src/lib/zothero/csl.py +++ b/src/lib/zothero/csl.py @@ -1,4 +1,3 @@ -#!/usr/bin/env python # encoding: utf-8 # # Copyright (c) 2017 Dean Jackson @@ -19,6 +18,7 @@ log = logging.getLogger(__name__) +log.addHandler(logging.NullHandler()) # CSL fields that should be formatted as dates diff --git a/src/lib/zothero/formatting.py b/src/lib/zothero/formatting.py index ca051fb..8c812c6 100644 --- a/src/lib/zothero/formatting.py +++ b/src/lib/zothero/formatting.py @@ -1,4 +1,3 @@ -#!/usr/bin/env python # encoding: utf-8 # # Copyright (c) 2017 Dean Jackson @@ -8,13 +7,14 @@ # Created on 2017-12-16 # -"""Formatting classes & functions for citations etc.""" +"""Format `models.Entry` for display.""" from __future__ import print_function, absolute_import import logging log = logging.getLogger(__name__) +log.addHandler(logging.NullHandler()) class EntryFormatter(object): diff --git a/src/lib/zothero/index.py b/src/lib/zothero/index.py index b955db4..d494cd0 100644 --- a/src/lib/zothero/index.py +++ b/src/lib/zothero/index.py @@ -7,7 +7,7 @@ # Created on 2017-12-15 # -"""Search index database.""" +"""Search index based on SQLite.""" from __future__ import print_function, absolute_import @@ -24,7 +24,7 @@ # Version of the database schema/data format. # Increment this every time the schema or JSON format changes to # invalidate the existing cache. -DB_VERSION = 5 +DB_VERSION = 6 # SQL schema for the search database. The Entry is also stored in the # database as JSON for speed (it takes 7 SQL queries to retrieve an diff --git a/src/lib/zothero/models.py b/src/lib/zothero/models.py index 14eb142..659da50 100644 --- a/src/lib/zothero/models.py +++ b/src/lib/zothero/models.py @@ -1,5 +1,3 @@ -#!/usr/bin/env python -# encoding: utf-8 # # Copyright (c) 2017 Dean Jackson # @@ -19,6 +17,7 @@ log = logging.getLogger(__name__) +log.addHandler(logging.NullHandler()) class AttrDict(dict): @@ -79,7 +78,6 @@ class Entry(AttrDict): type (unicode): The type of Entry, e.g. "journalArticle". creators (list): Sequence of `Creator` objects. zdata (dict): All Zotero data using unprocessed keys and values. - csl (dict): CSL data for exporting to CSL JSON. collections (list): `Collection` objects the Entry belongs to. tags (list): Unicode tags belonging to Entry. attachments (list): Sequence of `Attachment` objects. @@ -102,22 +100,65 @@ def from_json(cls, js): return e def __init__(self, *args, **kwargs): + """Create new `Entry`. + + Args: + *args: Optional initialisation data. As for `dict`. + **kwargs: Optional initialisation data. As for `dict`. + """ super(Entry, self).__init__(*args, **kwargs) @property def authors(self): - """Creators whose type is ``author``.""" + """Creators whose type is ``author``. + + Returns: + list: Sequence of `Creator` objects. + """ return [c for c in self.creators if c.type == 'author'] @property def editors(self): - """Creators whose type is ``editor``.""" + """Creators whose type is ``editor``. + + Returns: + list: Sequence of `Creator` objects. + """ return [c for c in self.creators if c.type == 'editor'] + @property + def csl(self): + """CSL data for `Entry` for converting to CSL-JSON. + + Returns: + dict: Entry data converted to CSL types. + """ + from .csl import entry_data + return entry_data(self) + + @property + def csljson(self): + """CSL-JSON for `Entry`. + + Returns: + str: JSON array containing CSL data for one `Entry`. + """ + return json.dumps([self.csl], indent=2, sort_keys=True) + def __str__(self): + """Title, year and author(s) of `Entry`. + + Returns: + str: UTF8-encoded string. + """ return unicode(self).encode('utf-8', 'replace') def __unicode__(self): + """Title, year and author(s) of `Entry`. + + Returns: + unicode: Description of `Entry`. + """ s = self.title if self.year: s += u' ({})'.format(self.year) @@ -130,7 +171,11 @@ def __unicode__(self): return s def json(self): - """Serialise `Entry` to JSON.""" + """Serialise `Entry` to JSON. + + Returns: + str: JSON-encoded `Entry`. + """ return json.dumps(self, indent=2, sort_keys=True, default=json_serialise) @@ -150,7 +195,12 @@ class Attachment(AttrDict): """ def __init__(self, *args, **kwargs): - """Create new `Attachment` object.""" + """Create new `Attachment` object. + + Args: + *args: Optional initialisation data. As for `dict`. + **kwargs: Optional initialisation data. As for `dict`. + """ super(Attachment, self).__init__(*args, **kwargs) @@ -164,7 +214,12 @@ class Collection(AttrDict): """ def __init__(self, *args, **kwargs): - """Create new `Collection` object.""" + """Create new `Collection` object. + + Args: + *args: Optional initialisation data. As for `dict`. + **kwargs: Optional initialisation data. As for `dict`. + """ super(Collection, self).__init__(*args, **kwargs) @@ -180,7 +235,12 @@ class Creator(AttrDict): """ def __init__(self, *args, **kwargs): - """Create new `Creator` object.""" + """Create new `Creator` object. + + Args: + *args: Optional initialisation data. As for `dict`. + **kwargs: Optional initialisation data. As for `dict`. + """ super(Creator, self).__init__(*args, **kwargs) @@ -202,7 +262,12 @@ def from_json(cls, js): return cls(json.loads(js)) def __init__(self, *args, **kwargs): - """Create a new style.""" + """Create a new style. + + Args: + *args: Optional initialisation data. As for `dict`. + **kwargs: Optional initialisation data. As for `dict`. + """ super(CSLStyle, self).__init__(*args, **kwargs) @property diff --git a/src/lib/zothero/styles.py b/src/lib/zothero/styles.py index 2a017ae..f3cbe8e 100644 --- a/src/lib/zothero/styles.py +++ b/src/lib/zothero/styles.py @@ -1,4 +1,3 @@ -#!/usr/bin/env python # encoding: utf-8 # # Copyright (c) 2017 Dean Jackson @@ -27,6 +26,7 @@ from .util import safename, shortpath, unicodify log = logging.getLogger(__name__) +log.addHandler(logging.NullHandler()) # CSL stylesheet namespace diff --git a/src/lib/zothero/tests/test_util.py b/src/lib/zothero/tests/test_util.py index 95dd9c2..16da374 100644 --- a/src/lib/zothero/tests/test_util.py +++ b/src/lib/zothero/tests/test_util.py @@ -1,4 +1,3 @@ -#!/usr/bin/env python # encoding: utf-8 # # Copyright (c) 2017 Dean Jackson diff --git a/src/lib/zothero/util.py b/src/lib/zothero/util.py index 7be814e..b97e7ff 100644 --- a/src/lib/zothero/util.py +++ b/src/lib/zothero/util.py @@ -88,6 +88,7 @@ def strip(cls, html): return unicode(p) def __init__(self): + """Create new HTMLText.""" self.reset() self.data = [] @@ -108,6 +109,18 @@ def __unicode__(self): return u''.join(self.data) +def strip_tags(html): + """Strip tags from HTML. + + Args: + html (unicode): HTML text. + + Returns: + unicode: Text contained in HTML. + """ + return HTMLText.strip(html) + + def copyifnewer(source, copy): """Replace path `copy` with a copy of file at `source`. diff --git a/src/lib/zothero/zotero.py b/src/lib/zothero/zotero.py index b7f9c57..ab43b91 100644 --- a/src/lib/zothero/zotero.py +++ b/src/lib/zothero/zotero.py @@ -24,8 +24,6 @@ import os import sqlite3 -from . import csl - from .models import ( Entry, Attachment, @@ -35,25 +33,19 @@ from .util import ( dt2sqlite, - HTMLText, parse_date, shortpath, + strip_tags, sqlite2dt, time_since, ) log = logging.getLogger(__name__) - -# Accepted extensions for attachments -# ATTACHMENT_EXTS = { -# '.doc', -# '.docx', -# '.epub', -# '.pdf', -# } +log.addHandler(logging.NullHandler()) +# Retrieve all items, excluding notes and attachments ITEMS_SQL = u""" SELECT items.itemID AS id, items.dateModified AS modified, @@ -70,6 +62,7 @@ AND deletedItems.dateDeleted IS NULL """ +# Retrieve creators for a given item CREATORS_SQL = u""" SELECT creators.firstName AS given, creators.lastName AS family, @@ -84,6 +77,7 @@ ORDER BY `index` ASC """ +# Retrieve collections for a given item COLLECTIONS_SQL = u""" SELECT collections.collectionName AS name, collections.key AS key @@ -93,6 +87,7 @@ WHERE collectionItems.itemID = ? """ +# Retrieve attachments for a given item ATTACHMENTS_SQL = u""" SELECT items.key AS key, @@ -119,7 +114,7 @@ WHERE itemAttachments.parentItemID = ? """ -# Return ID of items whose attachments have been modified +# Retrieve IDs of items whose attachments have been modified MODIFIED_ATTACHMENTS_SQL = u""" SELECT (SELECT items.key FROM items @@ -133,6 +128,7 @@ GROUP BY itemAttachments.parentItemID """ +# Retrieve all data for given item METADATA_SQL = u""" SELECT fields.fieldName AS name, itemDataValues.value AS value @@ -144,6 +140,7 @@ WHERE itemData.itemID = ? """ +# Retrieve notes for given item NOTES_SQL = u""" SELECT itemNotes.note AS note FROM itemNotes @@ -152,6 +149,7 @@ WHERE itemNotes.parentItemID = ? """ +# Retrieve tags for given item TAGS_SQL = u""" SELECT tags.name AS name FROM tags @@ -240,10 +238,7 @@ def entry(self, key): if not row: return None - e = Entry(**row) - self._populate_entry(e) - - return e + return self._load_entry(row) def modified_since(self, dt): """Iterate Entries modified since datetime.""" @@ -262,13 +257,11 @@ def modified_since(self, dt): def all_entries(self): """Return all database entries.""" for row in self.conn.execute(ITEMS_SQL): - e = Entry(**row) - self._populate_entry(e) - yield e + yield self._load_entry(row) - def _populate_entry(self, e): - """Populate Entry's attributes from other tables.""" - # -------------------------------------------------- + def _load_entry(self, row): + """Create an `Entry` from a SQLite database row.""" + e = Entry(**row) # Defaults & empty attributes for k in ('collections', 'creators', 'attachments', 'notes', 'tags'): @@ -284,23 +277,38 @@ def _populate_entry(self, e): e.modified = sqlite2dt(e.modified) # -------------------------------------------------- - # Creators - for row in self.conn.execute(CREATORS_SQL, (e.id,)): - e.creators.append(Creator(**row)) + # Other data + for row in self.conn.execute(METADATA_SQL, (e.id,)): + k, v = row['name'], row['value'] - # -------------------------------------------------- - # Tags - for row in self.conn.execute(TAGS_SQL, (e.id,)): - e.tags.append(row['name']) + # everything goes in the `zdata` dict + e.zdata[k] = v - # -------------------------------------------------- - # Collections - for row in self.conn.execute(COLLECTIONS_SQL, (e.id,)): - e.collections.append(Collection(**row)) + if k == 'title': + log.debug(u'[zotero] + "%s"', v) + e.title = v + + elif k == 'date': + e.date = parse_date(v) + e.year = int(v[:4]) + + elif k == 'abstractNote': + e.abstract = v # -------------------------------------------------- - # Attachments - for row in self.conn.execute(ATTACHMENTS_SQL, (e.id,)): + # Data from other tables + e.attachments = self._entry_attachments(e.id) + e.collections = self._entry_collections(e.id) + e.creators = self._entry_creators(e.id) + e.notes = self._entry_notes(e.id) + e.tags = self._entry_tags(e.id) + + return e + + def _entry_attachments(self, entry_id): + """Fetch attachments for an entry.""" + attachments = [] + for row in self.conn.execute(ATTACHMENTS_SQL, (entry_id,)): key, path, title, url = (row['key'], row['path'], row['title'], row['url']) @@ -322,36 +330,26 @@ def _populate_entry(self, e): a = Attachment(key=key, name=title, path=path, url=url) log.debug('[zotero] attachment=%r', a) - e.attachments.append(a) - - # -------------------------------------------------- - # Notes - for row in self.conn.execute(NOTES_SQL, (e.id,)): - html = row['note'] - e.notes.append(HTMLText.strip(html)) - - # -------------------------------------------------- - # Other data - for row in self.conn.execute(METADATA_SQL, (e.id,)): - k, v = row['name'], row['value'] + attachments.append(a) - if k == 'title': - log.debug(u'[zotero] + "%s"', v) - e.title = v - - elif k == 'date': - # e.zdata['date'] = v - # e.zdata['date_words'] = v.split()[-1] - e.date = parse_date(v) - e.year = int(v[:4]) + return attachments - elif k == 'abstractNote': - e.abstract = v + def _entry_collections(self, entry_id): + """Fetch collections for an entry.""" + rows = self.conn.execute(COLLECTIONS_SQL, (entry_id,)) + return [Collection(**row) for row in rows] - # everything goes in the `zdata` dict - e.zdata[k] = v + def _entry_creators(self, entry_id): + """Fetch creators for an entry.""" + rows = self.conn.execute(CREATORS_SQL, (entry_id,)) + return [Creator(**row) for row in rows] - # Extract and set CSL data - e.csl = csl.entry_data(e) + def _entry_notes(self, entry_id): + """Fetch notes for an entry.""" + rows = self.conn.execute(NOTES_SQL, (entry_id,)) + return [strip_tags(row['note']) for row in rows] - return e + def _entry_tags(self, entry_id): + """Fetch tags for an entry.""" + rows = self.conn.execute(TAGS_SQL, (entry_id,)) + return [row['name'] for row in rows] diff --git a/src/zh b/src/zh index b9ceb4d..93da333 100755 --- a/src/zh +++ b/src/zh @@ -13,21 +13,24 @@ ZotHero - Alfred workflow for Zotero. Usage: - zh search - zh fields [] zh attachments [] zh citations [] - zh copy [--bibliography]