From 3bdec751368df22dd77daf3770d9781e6609b5ce Mon Sep 17 00:00:00 2001 From: Dean Jackson Date: Fri, 6 Sep 2019 16:16:32 +0200 Subject: [PATCH] Support all StackExchange sites with advanced search --- .gitignore | 105 +--- README.md | 68 ++- StackExchange-Search-2.0.0.alfredworkflow | Bin 0 -> 125441 bytes StackOverflow-1.3.alfredworkflow | Bin 190318 -> 0 bytes check.acorn | Bin 0 -> 65536 bytes check.afdesign | Bin 0 -> 24835 bytes env.sh | 29 + src/3F754589-2F2D-44DE-85D6-A1F60CE8B365.png | Bin 0 -> 6946 bytes src/answered.png | Bin 13598 -> 0 bytes src/check.png | Bin 0 -> 1408 bytes src/docopt.py | 579 +++++++++++++++++++ src/icon.png | Bin 25044 -> 5173 bytes src/icons.py | 45 ++ src/info.plist | 427 +++++++++++++- src/so.py | 466 ++++++++++++--- src/version | 1 - src/workflow/__init__.py | 2 +- src/workflow/background.py | 161 ++++-- src/workflow/notify.py | 119 ++-- src/workflow/update.py | 481 +++++++++------ src/workflow/util.py | 552 ++++++++++++++++++ src/workflow/version | 2 +- src/workflow/web.py | 98 ++-- src/workflow/workflow.py | 512 ++++++---------- src/workflow/workflow3.py | 329 ++++++++--- 25 files changed, 2974 insertions(+), 1002 deletions(-) create mode 100644 StackExchange-Search-2.0.0.alfredworkflow delete mode 100644 StackOverflow-1.3.alfredworkflow create mode 100644 check.acorn create mode 100644 check.afdesign create mode 100644 env.sh create mode 100644 src/3F754589-2F2D-44DE-85D6-A1F60CE8B365.png delete mode 100644 src/answered.png create mode 100644 src/check.png create mode 100644 src/docopt.py create mode 100644 src/icons.py mode change 100644 => 100755 src/so.py delete mode 100644 src/version create mode 100644 src/workflow/util.py diff --git a/.gitignore b/.gitignore index 957c1b5..8f52fc6 100644 --- a/.gitignore +++ b/.gitignore @@ -1,107 +1,4 @@ - -# Created by https://www.gitignore.io/api/python,vim,sublimetext - -### Python ### -# Byte-compiled / optimized / DLL files __pycache__/ *.py[cod] *$py.class - -# C extensions -*.so - -# Distribution / packaging -.Python -env/ -build/ -develop-eggs/ -dist/ -downloads/ -eggs/ -.eggs/ -lib/ -lib64/ -parts/ -sdist/ -var/ -*.egg-info/ -.installed.cfg -*.egg - -# PyInstaller -# Usually these files are written by a python script from a template -# before PyInstaller builds the exe, so as to inject date/other infos into it. -*.manifest -*.spec - -# Installer logs -pip-log.txt -pip-delete-this-directory.txt - -# Unit test / coverage reports -htmlcov/ -.tox/ -.coverage -.coverage.* -.cache -nosetests.xml -coverage.xml -*,cover -.hypothesis/ - -# Translations -*.mo -*.pot - -# Django stuff: -*.log -local_settings.py - -# Flask instance folder -instance/ - -# Sphinx documentation -docs/_build/ - -# PyBuilder -target/ - -# IPython Notebook -.ipynb_checkpoints - -# pyenv -.python-version - -# dotenv -.env - - -### Vim ### -# swap -[._]*.s[a-w][a-z] -[._]s[a-w][a-z] -# session -Session.vim -# temporary -.netrwhist -*~ -# auto-generated tag files -tags - - -### SublimeText ### -# cache files for sublime text -*.tmlanguage.cache -*.tmPreferences.cache -*.stTheme.cache - -# workspace files are user-specific -*.sublime-workspace - -# project files should be checked into the repository, unless a significant -# proportion of contributors will probably not be using SublimeText -# *.sublime-project - -# sftp configuration file -sftp-config.json - +*.dist-info/ diff --git a/README.md b/README.md index 868826f..728bd39 100644 --- a/README.md +++ b/README.md @@ -1,43 +1,90 @@ -StackOverflow Search for Alfred +StackExchange Search for Alfred =============================== -Search for answers on StackOverflow.com from [Alfred 2 & 3][alfred]. +Search for answers on StackExchange sites from [Alfred 4+][alfred]. ![](demo.gif "") + +- [Download](#download) +- [Usage](#usage) +- [Query syntax](#query-syntax) +- [Results](#results) +- [Adding custom searches](#adding-custom-searches) +- [Licensing, thanks](#licensing-thanks) + + + + + Download -------- -Get StackOverflow for Alfred from [GitHub][gh-releases] or -[Packal][packal-page]. +Get StackExchange for Alfred from [GitHub releases][gh-releases]. + Usage ----- +The main action (keyword `stack`) shows a list of all StackExchange +sites. Choose one to search it. + +There is also a search for StackOverflow.com configured (keyword +`.so`), but it is easy to add searches for your own favourite +StackExchange sites. + +- `stack []` — Choose a StackExchange site to search. + - `↩` — Select site + - `⌘↩` — Set as default site + - `⌥↩` — Reveal site icon in Finder + - `⌘C` — Copy site ID to clipboard (for adding Script Filters) - `.so ` — Search StackOverflow.com for ``. See below for syntax. - `↩` or ` ⌘+NUM` — Open result in default browser - - `⌘+L` — Show full question title in Alfred's Large Text window + - `⌘L` — Show full question title in Alfred's Large Text window + Query syntax ------------ -By default, words in `` will be search for in the title of posts. To -specify a tag, prefix it with `.`, e.g. `python` will search for `python` in -the post title, `.python` will search for the tag `python`. +Prefix a word in your `` with `.` (full stop) to indicate that +it's a tag, e.g `requests .python` will search for answers tagged +`python` with the query `requests`. + Results ------- -Answered questions will be shown first in the list of results (and have a -tick on their icon). +Answered questions will be shown first in the list of results (and have +a green check mark on their icon). + + + +Adding custom searches +---------------------- + +You can easily add your own searches for specific sites by adding your +own Script Filter with the following Script: + +```bash +/usr/bin/python so.py search --site "$1" +``` + +The easiest way to do this is to make and edit a copy of the built-in +StackOverflow.com search. + +To get a site ID, use the site search (keyword `stack`) and hit `⌘C` on +the desired site to copy its ID to the clipboard. + +You can also use `⌥↩` on a site to reveal its icon in Finder. + Licensing, thanks ----------------- @@ -51,5 +98,4 @@ It is heavily based on [Alfred-Workflow][alfred-workflow], also [mit]: http://opensource.org/licenses/MIT [alfred-workflow]: http://www.deanishe.net/alfred-workflow/ [gh-releases]: https://github.com/deanishe/alfred-stackoverflow/releases -[packal-page]: http://www.packal.org/workflow/stackoverflow-search [demo]: https://raw.githubusercontent.com/deanishe/alfred-stackoverflow/master/demo.gif diff --git a/StackExchange-Search-2.0.0.alfredworkflow b/StackExchange-Search-2.0.0.alfredworkflow new file mode 100644 index 0000000000000000000000000000000000000000..8f30f51226261559fe52c994306b5fdf9fe34883 GIT binary patch literal 125441 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�Z`th`Nb0Y9y>v1% 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

Q&aWO(hKjbca{e+l6yzKyQ~{+9BtivN70mV z6A!G@Aqs>kBg+pDm5m&(WzMAbY;BEv2tI6*_28NHV4JW(`PM*Ig-@&js@ur@r#Zo% z@k%O&9>CLp!X|tZ; zdnY!N*Ek8^8xE5*8y{Mr+&!nd7gsg(RwPT=dgEWrq%CP(XACA7@V`3au%mW(dQ#6` z#(tTgl4HWT*;9Wo?9VL&L&xztzstz?Dy+Lji?amAe!IjFPI5_3s-h0l@NR$14vWrJ zvlYZ~=O=kUs8u3=Tk#^hFi_h~SJazpOU{RNE+)p%nzsbmL!HoXlhwV?T9$Vbis&lnr%u zhrFVNWrcAu`?hMA7N~mV(rEPf)?2`XyIe@Fpdfd8$52;w8@U$Hts?6t-8IIg+r1WV z#SIm|U;PdWhsrj;EmkZ_hV`|}TVEIQ_)cvY&kiE-G8c5s=XpPFZ3D}#qd5k$zSnPNG?vX@NIPyCy;Ed8Vyd5K}XAw238 z+ky92SPS(^Y4zXS55**>KgeA}y0mP)B!T$o9b3Snp;yda80%eZ(hbeVTY0N+;JL3x zzA0XRZ@L^@39(1V+Ofaaannd6X1a9fE}h!%o361|%qGYuMfx@tsCf$Q-d;tjf2h7) z;Kfh6=q1T^Kg*q-mIBD4H=#iZ*M`#;H<>AISxJ5Wpz_y8ZL$nI*JTSoid43UK8qGH z5~^%Tbu?+kj%UxlzJff=pB*#^E~fp6D}we$`zSi*lgvS~2pg%!If5f0;SzHguV)@g zr%GM7`5-8uYUle`U20lN(m5t`_4J))h2d=WeHht|YQXvHK~wqWWkFRIDfc0e9rc-$!G$`sl~aZtcv)j4OHv<1=Yw`1?Os ziAR@iQmx_8uekQ8NS_>5r_)9@IO-E@(~4}^k4DNJPq%Jzk7YHdb4>`kWj?gHDzW<^ zO83pBq>VH3V(l#85!u{~_Q-Q5Gp}uWlzeKK2&g$k9*V8dVITf%;Xu}J&W=l; z(5iLx@7d&^XQP_)rOKZLNLx#+8S5+wG{$ojl12)$DQ9|vq+p-N)~~{D9}B_oce0ls z+UUHf*0;$JwjT>*`fiq@RRI04mzPEJ!J5pl6)djMaG$nl+H$=<0Y_6_4@mEMi9aNT z_^0=!mAFn8XIwYpBFE17%}F1^b^^&;moDkQU@%%`#i4mI|Ax?!l~OssW*e%c7j23~ zE;ws3K8IItwZW8@{nInT_A11$yUF$8EFNLBsq3zD1OJ)8vE6+R!khV*2>tqu4C(@h zyz1_gEZ2D0mI-*vebGPBW+QW@{iRyeAD`nWz($+r+HFT3y;bd59BL1AMZN}dx1;YB zL_+~%p5JseOs*P!&AS1u>1N(Nlig3Hox3a6kM6OAaWyNizS(8$oi)ktev-dr(KFc# zimJka0xMq*<}Z)+=xLbmccfAbE$=m`ZUuwmwBu@We=5g+UbM*g6nFFHdv_=I)pdmc zzGU1K_IViEP>#+XZm}Z6zK+{oSElojF^*1yfJL(E3Yl68mu1@>ljj5U^w^Epn9>pK zt3nUK>shy;kazi~GZ|kyK`ZM`&W3wazdJ-~t%!OW70=1-P2@jsN1rRJ%w+F+E+T%9 zAlQ25xO=|edH1zsLPjK?YUi)@8o^%^`DozJ_2wL?y$9ddQQ7gyvdFPKFVC-+q+e@N z=bCBh=&>d^IO=+w<&$i8cgG3zZBFcU`E7(tK9-qy96^@yJEg|Wl0!mYgk=}V*;l%| z?U8DG-!5FdqmAk7mg<(v#rAa|v0HSlplYI({Z3c%I>mOQ# zyzPcl4k$RCpSTCa!EzBZC5=jpPSU;Z`DhA{+bHY#P_SWeL&&AsX#mc<0xHFAxT`p9 z%I7JM>HX2n914QyqjO^RY}2JT$Vw zREsOQ>9sCS&r8B+<;a;XvZtj2G50aTwWxZ~=f+fTP21`I(X=hxw3vIRvO9z%oY%LD zaI!(K>TySpFHG9ZoB1S{j)Zn9{XUG9p$AT9r7|izc?TTR$FW0=P~y4`@4OwZPCneG zKyr$-As6j5XMB6x3B7lh4VJf4+c%Nh4%1g*g~y`0b4s|+w2E?<;^y2#zjzA4s)~e> z)|w_i;tXO)|9c;Y7)f1!nhn3l|1O%_KUSM3%&*N9d&(PLS2RusMM1lJFrLrs`GQzl zpMy7-kJnlHKKo1EK3STk^8{NBrEIR%$^y(ICj*!5TrG&2ymxn`+~I?lIzk|vdRp>@ zkz!X6gIKI{L$!3`((*o6QT<1mMxwB@2O?eQto3mV_KrO+hO}a13c-Zkm zLFDX9Tim3mPRHoi1=QY#bGl#L`aqitp^OpUi=Czq+iq7?g zo1-E&c1LfpHzi=J0MWG$&0Ejw6yK`KUnJSleDI>2jc9os4eI{>^*)kBll;%MJv+8_ zxd06wTRnWt6t$f#%|1d&G>aW@Y1uyptKB0$pDV92RRmqwKY%p3NQC?Vv8Q~BDQZ9p zIY=kyRi65nk4|={Sz}J^1%$nHA%IH$ouk7s`<0qiCMnw#{sUyuA$P=NaI)d2{=2+* z2P(NGot;=p6pG9pf{gQ$v4K^(Pn%D2+B6fV^1(rbqDov+#MN0yd1aYyR0%t%D=SA8 z{kpF{@Gg(-=Gyfm&E+P^cr}1z&ZiVqEKM09iFIpp$w)uRF+L7FLRtte&Dt<~{?{Ju z?NJ`Ccy`9BFXfEy{)`wCG&B>uK}Zy8MmNzdFCq-}SDbUo$$=Hn2Vxao*Ey9pvMEr!(Uw zU7o!5_RyNXRBBnPL#Q{v6fBbK)M_6&WAzC*+B4i5;O!Lhup)>vS{alLPSjH28F5(s zkGZ<~77jwnIww_(j%dgkoFv(VFZ?6FxAH=8QPw5*XM}u8)b zsS|~pC zZ(dimd_M;^J0>gSvXEbakg=)Z#fi`h&kM&SSk06jWemHb(`aH!u}yw zaJb%)PD&foR8o7HTEAp_$8Q&6+)r{Fy{;0-Dv#6jla_hM=*KemO>XW@eA?Su9GWhV zgI|PJX0gr2BZT$x>hyix84X9HvDTFj>HR(W(IHfmQY{K{hLp0vq@!;4QtYM+1lfPa0z>5XqrE^ldsTwe*l$gbbmPyIbX zQH%PY`htR*ex|>F=>WXtwDTwKPnvW;o$rUf(J)dQsfw4R_6pA---4l-Ci9Q(YbkNaZAL_g2^6z*R;mi%(N)_<-vtKse$a2`wjEl zK(xfvv=xzFPt7fTgRW+R4_KL*rht&T+L|N?)sZ;SXW7IQ7zoJ3qOUK8c^7&@B88Q3 z-`4>|X`fF(1`8#@k+3r&z$&fc514zuF1njp5-p^uWh`sj|7KSf;70hLCVUrG?-YnU z26q$w3KZqU9~p92<%Gd(u@&*uV5!;Yt5dcDuj3>#RTb{XO%)Kl_@$e#<}A z<71RRtG^SJ6SeEVejqn)B;Dy&*+9vJbYVI+2l!^N3JfR>A1;(4>l%W%M~&HdLEx#7 zuyaB%wSaRTOE0*==zAcZ_#pJa*5)dOg1URRV9zi^!@!;T=--|eyh$8|dEF+-S znlKGbz|Y_lO%Jd4vZE z+`z%n2?JS2j_alo(9sod$tjb25Oqy?5@ROF z^MOis*r@>SGJ=1B2#L8Mn?kTHl{B@g2|6MOPr$X!DcJBvb^DcP_$m4 zAr-Y|cj30hQ4SnZP~$&#VbY}G1cn^=nIYaya2$V0co;Hw{qph*gn;CY3uXW`2n|cf zys$tKJK%3kLq!Ns{3KoX@z6TJjgo>H;y~2>OK$lvkVJ)x3iKEy za{gnX;}6VzSYPp;y+nsSsE=qnI@p?+WDsf|pLP*+*#P-Jdgw_AbuGZv;`h%(UffAK zxVbzJBQ*To#c331t& z*)oH-U_yazUk1uKhvW!Mp19XG(hMw(A|dQFi$ckSlz*vc8*9pWy7SI3D!cwKun2vDfHya3zR0BA|RS_0>I@I ztKN+*V_!dcxD+y8$W3zsgYg2=4gs|!31>rC3SY%30O*$Ei7{Uf++vS<-| z0Bj`1B_m*25RjaYU~2eJMjiQqLN=m-01?#y*RafK$ER}tz&OArX&(Ae4|EfOl|U|| zmXF1n-6dq>0^~7S6sTAf=uOoE=0P^+jYCulY-<2$VgirB1l*{{^U#=q z(PYtK-3f;MxALCt$^$$UP4&7@0}J!VrL)a2E|gBSu+}8ML$J;nV^w zWS9kO?#U&ff5%~h_84nh|FIxvgtu%6xC55CI|*^hdki= zGwqH7wF~+P59hMQ8!rk5o4bws#b^n><3;`+owQyvl_vl(M zD*xxQ8{p`xfVbvml?uutl$DESi`_}hQRqhKp3MyLjG|uToH_x{Q#N(y3C)#a+cTW z^mSw~v%W-7yKmk6;X4F0_<$*-CZqpuw}^xUnq6Skf%kt%MK4IvNdxm60&O(_3mPD& zxJ|~v*Z*yH6bKi<&RQh%w$D;5Vzli3cT8r%tTP6*_EY75;1wcB?XV#X_ur9IY)%Qd zx=`zVD-@k*8CF(^DlsRnfGNZ}BTzLEW7zYlK)_QF&f(MqXzGXpR?D}xATaJ}D1=yW zgYJDOw2nh`o`xV(LRlJ5g9)9DfOMdLPDcPo7%<9brD)1wZUZL<890VugGp8%N0Q-* zk{F7x$689TZ>3bJgsAVd(BH4@zQX{xf#>^71}?mrf&qqL$y|Y`B$gm;fKzW_pngx$ zjbi{|)VSYRk3ss3!2rWC94<8pYf6T!61aX7K>gpL12Fg0CcE__$IhBb_T(l2{Q_me zW(ePMe0QZ-ZbDoRl+Ze#+8_7-*9N`EGrcfy99LtLG$P5Z&5*<>#4^mSMwDBp=;Bfs zrz0xm%rMRUxTmHIwp^N$I5;IXm&hfZATX^d^Z=lt=!o`0V6dcFVpyuN>Z z6Fw+)LySYfZ3@Czvg{HmY8tV>VgABe+XvZ*iH{6~45xbs16LJ4tF$|zx~dYmkC?&n5a zul#|{zfPI8b9=Sg0(E?tNP-Iq zOL3B1yCb?Z3CyZI1lGh6mG95bKHR_na|!!4jX;p2zcso4SYR;J?G z*zN}J0N)?#)Gvo4bKII}$t*+cia6(3<4(hxe*uJ56p5P~=zJPO+6VL+xvm(cMDpl1 z1_c>DXE4&=6u%FQ@m5|ZoRh*!O?7lw< z?r&%L_>RzrsnFWrtcfhp2FIM3wpmWs#n4)wwV61fOF*mDzB4}{N0Ea8J|#Qk#+#s&s{S!0WKHsx_D%}vT=Et zVMB~cRY>Q%n?I^?HF@wz;sD|%V!D!OY+h(2NS)=psj8l4?MCd6>?Gi)8AQDdT|r-< z&}`3;|BP#6O)N9oj-Tqc&XDoKtQbHU9wUrS;Lp@vwye5xY@fNqm9OTx&hPO(E4QN&D5agj z(aM^P$a=4fL`ZP+cN;b)uPT8Gccq@3@{v5*?} zx?_qCwj(s4#kbXDk5IR-t6jk12ql@K97KO7ESz-ZNK4p>to22?SFQg;glOJl-o?gh zWm9XhV}Z=qsu`w1R!#2m%ByleOLk|yw7PECIh3&(&Yr_Hok2oRc?@GyYOq^X*+apN zshe+c58uFjKtfZkp4?O;%vthQAXu77#&S!+9%CFqyS}>1r|Y#EIw8U06i5uS8P)qT z?ZM*=kJOUij>ZqBFF6N#WGAI8DnE`tz5eFj%hIS9xajo2iK`uH2{AnF$lVsSQ(UOY zBqNb^@~dH9V>|W0pl_xRPbb&SDYoLRxxu{ym3`ohV?}!Dfl?f2XvbS8hZ=bD)vH%o ziq*UKV_7u^d^ABj;gQl0xyXvd?`${epSjj?nuNT+zT})%q+D(`pE;iY&G2G~tzDyA zwEB_3qI=MmFGVNqad$YSQM5dI8lbiMq;Exqn*9nHaMM=Z&%ND8eLrYq4}OHRM+Z{I z$~B5R>v~i7+GJZf>OLc)&r8!_h?d?_Kt3<<%RY!As20+$!J)c*RF7?{xZ!*Tpk)x#EGxHeCjSB%X=l|an@!)+Ki#ycwX3jdRzeZ|f zD(k(6^9~B3^bi&F^7#D1ENTs$PB@WGSKA4|t@fdp9UslC#eEmw2Rjik_Jp1Qfw!pJ zt5DE`T%c`=DKiF`4`#$aIO2WSi2>1ObB5^Sq4%&g@8E9BU%vWVV_PS>y`D}j&^5Ol z1pg&5i5q(ldpan{VSQ#F5m>7L%3M*{6f$}>G zVEbf8YLNpOLIZK7&6ewI9z)XM|GCt7kS%iEf{0>oOu5Ij*rKJ76m;%C8-gUB2)4WN zxVXoi>%ZLPUy^#eju!q(LcsU*u6JX~x$%w)++j0fbaR5(M7&kNr}SyStFKD=3nban zGu2!d$peX&Kk#)F^PabDt;h&C(5}g(q~LkT#ouaPZhuT z)VD5qd7HSv^=Ik_6s(a;C2o$Gav;XfUOMU>>z3_zv080!29L(+CLbz0XsL(*zWtr^ zW6!=Nucy9pj=2i!8ypRfUg5F+>cFS`NeVIGQizzxw1o57ne87e!)C$T`=%Xy1=lS` z*T(@AyOqyTOJxNgv;b0ah$l*4ShXCwxTI2 z&l;#fgKaMAujhJN^jFVT)b;CTj{jb#XMe|A$M!C(?r6o_Q_4@1CNa)x{eo)AoQB4Y zceCVObITOd=;DgC`9w$mAJ_Iu+bjN;kRVdlwSejAQhNdU?x~;5i5=aO!}s$~+%NpG zsP&y!;;EWdjQD+^6VzB55bdx!H zKE41Bo70do48L>qoM|H6<;SO5TbX#oHf02}~!Z*ps9Y;SijcW-iQW^8YFE^v8OR0#kB z26%2=*=cfJb$AN^0R;5{000CO0002&T8Q%5KJHIgSd?kk7E_5k!!~lk=XDdH|zMx;VzCeZ15Daq3 z37QAy_)7!nM$+ksp63e~I(1qOhK>?mPxPU6FdAwWq9OLf7ptSN4~`Ek-yTwrHdPQp zK-i8AT?^;9zf1#EDD-@9AlmI-guQOJg*_O0ekg`M3<+>uE3`d#QADl{;ilS-4Fe^e zpiqblZrZL4EZa_KYt^>49i{bJ5RZw*u2Ms!lY)0bKqk+Qx3vYKoFmJ9>2@7(T*CLv z(@-~(P|({D0w$q-BMJKG3qyr|rj;Pt9QvN60;4q;na9u`7$tGvyE2r8Lg-oUon zyFQNdBC(b|Yx}tEC{2Mg5UYMP4DC&1E`V7TNEmKtyUL-k1-A~BAKD5L4gl@T9px4w zR+Mrve8mXA9-YStx8Y*Xu2DG!EbrHoOmi z;MDaH0!{i|41iD#1Pr$u?2mHL4oMKONIHdt#L!he89C5(X|1elei;jmNE$@ox}`q2 zMcf5>zz#=?kOsP-XV-QdaG~hQ0l-`OaRS4D&a_E&y9X=?I1K1r8G> zRo*I#P1z;GK;bY77ctBsp+c7fp+c*?5Ico=oBA%HgOm`VFI^kM!Gjq9%c9W7xxyU@ z%B~PRE~r5!f*$~Zg$f0-b8Te>6mU$Ix4q%d3Sy^6Ln^$Gk_j&;0W3Up~^1;+@&2v0|O2-B& z$!LV6@#_d+3$tV0-2zwl7n4a8W+e&ptq!xB>$SQ5sUu`hs;(`wy#?s?Dc*A78TNe$ zKAQe8vL_0 zt!%8$Yv3ku`?P5%>dSL$olwqg=(rMr2Q7;o%JiQyV~86u!8OK`llLe%X6dC zm%%I`Ld90?#AW*|9bW6UW^G=b^^t3_3az#3`rKApU|)aAx{dYvTs**PczXQf9Ddn> zsL2SI4%7AP$L6Lq&)XhIKKlDLO}n1ER9&w%8aVUm2goO|^bKtbrX&a7hHx%~es{&@ zNOX|b4!t%lP&;CvV6oiYr+J;)Z?Dx?m#ek<$$GPe(RmLok&6F&U$FviEH1|6{hWM& zlMiz8Ax=Kb$w!E+8~RbCYleIb$yE9{C!gTtlbn1C$%Y}H=HxS+e3p~XA$g-ApGUH3 z$loEkV#wcf@&!)5$jO&Dd4`j(Ah}`4S2_6_Ctv5}8%W+}$TyK}^$q~H ze20^N;N-iUe21!?KFXz!aVg=@-7+)*v3ZlBpJG9N{%Pi)^UrYUvt0Td zmp;#>8i@w;=Lw3QiI?+)#Wh0`7JWm$#HBBD=@~A4g-Z#V>xLv~8gQL|olD=~(l@#E zEiQeVOW)yA0%psQ1kBKo?{Vq-T>1f*e#oUCv2=3&V-|_$|H!4EaOtO9`Wcu0iA(>? zrJr-@7hFonJ7q{h-mW3PVma^p*BlSua47-tH-;o2-fhTpT>5t|{f%E2 zbKIDM^q3(jMh!T|FR-a*{34sg#xJpU$1ii~8J^?EudrEcOfhs~oZ%O;~7Q^9~f^^l8?=Y;4-(?{@=21C*pAGn!qH;Cu1cl`-DNS*?np*NPx8w^p z`HU%#ZyJ*FxXDc8vuq9+f5~Q-@mFkA$6s^lH$3@{zh%?Qn8In>kmp$P9aA_B4EY^P zpkoTB(}w(kCAkZ<`WhPYewK(XJiub_!h@WAh++J~!wg&(D9aB`mo8A6-%e@D^TSlz z?b_zCp_#YJnSbt z>?d!s;F`R}!hG^J3-if4EX*f7HBa7UVLl-c95>|qJjy3JHyc+^2nDrNPAFJU>5nyS zr5w!A2Z{$0@)MT)CZBTYXWZYEp&KSJCX}KZ233>K8OSDIFpy0Mb32CQn456SO*rNz z8gpqczGfJle8WIC;h39n%uP7vCLD7Uj=9PAJeGf8AiH=U1KGv<8LBQmz)*GZL58Y} zgt?v}ALgLCNT3T-Wdyo(94`{+f|Pz-)0q-au(7=OB%AdvKE?F3)&A&-h)Q@%udEg*@ZMJmaN2?1wCgUpo5{OU#$fe#|oSrL(kLT{XG+(%n!wh1Hk7v_LbRMM>exfx@%ETFR$G zLfh@ymJIc&;HKKLT|73yBXKDX?0SCp0M@TTZKp;@63s@dQC-FzIep|?rX9d`G#o15 zf)e826G7MBvco_hVGbQT#A^(=&*-QS+g}tegc2S>2PkcOZo8`-dtj4sM}@D-mNyvM zjw%&z{~x(@cXjDES1tY59mRz*Rlv@kl%drZ+J$)FwiRG&nhSacaVLWif>-R?VPAAQ zcSXt{bvlKU)mH69d%aa%YvEorZW15P*WT@W&?8F@Z9I#M4WFm3R$Xnhw0n+BDZ>g< zV5dA+xnbg8eOQYH@n|upu-aNV3CgaSZJF)bp)H+2ls09cFN)wPbFeVa#$*V2->?0# zEm)pDA>UJdZKc_&HW0ywe?_6^4e&+-B@KwL3Z6}dmCl|#a4teSh`T*g<_fLFK4QH9`th(ob%j*mU#?o%FlPPsVY1 zxptzuhSvS+ni<|e?H*M2L94FuZ=jbtE?q#8(Sq(g@}K|Aj0ACLZ3CdYkQVkYFEt75 z*wwBa1$fM`D{Z{D5bomD1!@#C51xPPwgY`(Ntv_D!j1Lg)s5v=dt>#+Y5-k8qQ9%& zKE77}^+vr}yN#f`ZyvctjbNNHYg%}N#T>!!hxS5&?hKhW==w;hPIp-#5*GCRmjee5 ztVtUOhP>f!yLggo?9v963sg2P2qUP^U;;oU`kRI=3qYvMMfmJH>e+n;Dg(#;=ODk}rJkL?m1z3H<3%_K z9Ta5Xkz$eV=`wU^);PwA6k@$(~^l-dfv>CnjS1K+m0SORQZ#}$joTd z_E2$sPZ^Pyp`#eswU5x{VHpHv-DVJB+;Q8njk$R$3 zY)*}K*3T7j&sFyp%R04}n5wBi8aD9FE>ydl1_KbnEgV8(Owx|I%o zQ_{h&mqOg6vLPGe3samklMkj$h|gK&Yy|N;OJ)S(YtQ(m0iBUuTHVm{K+hRuvFLg# zaEp4)6GTJ$v?BgWM|UB>S!h?mtR&IM_$Q`GHgG;aJYe-8Q*+N#+D`%%YlUwTHXe`_~IR13XR*NM;6UDjz^31jbky*4mAy%ADbW&w3!?Mc`x)V&$*JMK;PKJUo9pd z@nrG?W*L1z0dLC|-#LX>5L|w`I&^vtyti!H_;JrKgIAqc{@)@tW8P1}Y&@vHG;Dv4 zQ-1<*S?OO6rHONA0W|^7(WS#FGJhH{hd%?Cmz%7?vrtD^5xmC7!A4&S{0n(M7kR^f z0q>s%yx|q&?jV9jM8nLNrF!QFXC$*#u^HJ;xMXM7{y`xrd346s;X)!Uo43oNrL8J1 zPEWwIiks3`QW)0*P?WFx)4b9M)nF=@tf`@|0{m(d-cox2_DyMR>$6STucmMN;~>$W zYT=QcW-s9(w`1c^0sQyLW&ORqz|X)OeL9*s(*TEW!dht*A8z2c%u$kbv~~J(RcEva zeh$TsE%nA??j!>uvyG}d`WF^r@o%T)W^YiRNYFc$^tU41J`OIsIk+f7J9Kc%F50B0 zqeXCR@;e0Wgc}^i9gD^3S5jz6i-e3Y&~W2AR56P-kdD$``J#y6aStWMWPy$S;xrt*aAE#%$_)&lZorl`0J_D(3UBN z`?7lf-n84xga+Te!os%~Nl?U%+2RO4b5EoSKz*6=u2;+&=-}ttYA_5(@r^2-M>Ek{ zHt$UmlP2zE&<{H-X4C*sTh(K9;@ns9j|J$RdmoRHLt@iC7D1y3Q}&&(nnQL*%eETf zG4GTc7?fzYG8C9QX7w~%ws=Rf>&DQRX>o-vL`a7!>wz*-^aE`x!jxMo0tg`m7ZEwd z1>Ug!nTw;DE%x-xg;E@ksh+ODb(jt$8}3vlv+d`32)ueLiPTaNg9%K+T4@VVU_IJQ z%3v)t8go~1p&X+(O_uYkC0Q?5(wahB$TMJ#HE#ejYoBcn<0GQgx&a@8)p@hJL{4P3iOL@gcPW&(F%8aMtHcg;+< zK&jja<6M^O5luPS69b6rsrInY)X=esX?D; zKuMnUnKO8>DIha4GBYwVA~G&=<9=C80BVSYz1t%k^o70y9=drzV6kWbAHM3L`&Z5( zVh!#Abr%T4sSOX2V1RXl86CZE^AC^_XASV#LBQy8msUb}K$2hA_JozGBysXi1<`d#kfja}inO%}oQ9!G?%5`b}E9Xav$V7Ld?s{1y9^ zEWjnt2zW;GgKJtuC&Meuw;#$WdCVn}!Ewtv@HBDmV~omp2fazA-M82#v<&5KA?OI5 z+3aebb^$4!y3(YNG~655ksXtwM=`;{P`msYv{+QQb;rtM$^BTZ%F7aDl29a+oE-&u z0s4alcP9NvP6tXlEHB(HdhOwcHs=DhL%3F?)c`${yS*79yIl7J#<7Nj|wM^!f2#h_bQ23cgl|4_xs7YO^K3UKe^t4K2x_Pn-7}4@BJ>dJ&7H`9AfMD0(upPJh7LVF^dqB*y-0zV#76RhRsLzy=pd3FV}aBj3Q z$4Eo{#ITmT!cPQefDg+~xijcu`bF^Eoa|>MyAcUH%Kaca#QlU z2Yv_SxY9zMnrv_%zWO}E^>P8m6nx!6!R~DjkTQIA*~gdv5nP_fK!fU;uSM2KJOIMi zcj&$mhbN)H(a3BVa2(6eg(qzS7H)kp{kzEJAsr<5MUERf;TYJx>>rL(>R1!Ucjzg^ znpmH{q#)=hnAhh_s0lwe3=Hs9D^iNk`q{n_Jq?`w{rA`Kmyg>Eqr$Ju1s#$16z!M1R6t#FjcAP#vI z$4)xho@|$G;g&_wdY!IC>Z&2TXiZif3^fre4Rt)UIs1ymhjLXdfClMAgVQWD{uN%r z@E7p{;^5+fkJ&A=OR~+w53ezoEkbz0F>`FZW8A#y!8K6L4M##v7ulAi1O9rD8La}> zi{!$##K3m8`E**cQOBkN#_s5-?%bLo?J8#u{@UdVj&QaEq@NG_J4m1}HId*{HV zx2Sy4-^pSq#PuV2*j;`08e6W4gJrec%rH$eERls`)dhJ*A1t*wF|gy~@uiu?=6qDoHkaeE zyFe%$kPK>bG!W+RNyP#8JJ3(Ym}D8OWQVI_S;=&f<}aK;()XzhmlC7D*g(0gI<>{r zvr}0xQ-t!Ef5Mg9b_*Ncm{HW%McAI{jz76Av(LS z(nUWQTjvtoSHc30u2C^3b#^~rmIsX5gE1S_z!IZf&fUI8o7uSSnBsNha*@klu-4{a z&f#!_?Mb~}!OA#(N6|u7CNqS8YICP@Uh(ooK2ZJDh_9KtSPyA7^(e+G+m#UDHH_L z^~MNI=tC^uKrUeq@vCCC9D%_qd-Lik280&pO9%xaD@sm@jv>khRD$ zG7rd`z5$s4@*&gv$OO;9IURP(3YV3Ig3r@9bR}2MlWMh@Ljd}K6{J;T3f;cK#*7A& zk=2`)^>UWqkQN4`&#FtLB^m^Do5ElVkM$rIn7LY5$j}T3P;pIvc?73uezQ{9IUpe( z=4+HqEMdYz`EJ{W80Q`_CTLM_soR|Ju;@Jn@9@C#b0_;Fy3>*{#f1RO|5ywu{P#j) zS(ZmJgzE}S=~796tcAF^_&bWx1pXLZ7aC1Y;T_8_-2n@3d}a4|ny5*ApP3wYov>*X06N~lco`6(RVY9MP&!#Fr;t+(3TN=m3TKF1uFzE-N84hUjBl?OSkt$WB{RM zWX6B&uWQg)uO_^5tAF|}WeH6q`7;0|hs2yH)9AT=EfLRon&XHqg)L3ezf#h3bP!1V zN++HcDDgACYbJj|dz

hbLok8VbiS+Q4otK}tyv2fvKip)G9=g<29t!y;1JgyZb( zyWoc$IiDel4`IhU*-s>|v79EsV>bNX2gJgifr7;g5@66EY0iq$09Kojvfy`tH8MXZ z;GMw2;{~)TE{l(FLqcq|xmdV93q~4}LIp;ch*DE353t8R;>%?gcGr@bNH)H@ z_|{4+4>D|R1YQ7;!+H&AHJ7>J4E&N~FeJrDL%N1nE%*snj>YT(H29k2yxq;(FoZnMe}wt<4~CFqst_6`UOucX#x3;_-ht`zC_SDF&@w{wITM4fM(dh z-UnFS2ekq^XrSc~f8N(dCsmj!JFuT7&oPF;JT>ub!8)Wc@VrjgkJ$9btUM{=P?;Ul z#<|eWPl3YEMEjFMW#BF#G&Oe^jgGtkHBQL%NKEDtzs_2TUaea`Q!6(w7aQQy3~daC zF<=N={H%ZHem+A+A@FQzu5Z82ijOdTDIwD}#H4N(M&xtc26oQyAAA~*KQDnrSo<#% zoa(Y84qdu~Jl&Jds1-kR<(1U_0gG`l?IovR1UYlPT;=tZZT<|+%EbX&?Izxgv6d3T z+i`Gwf^1riL;W{ma(Ewbc@Tu)w=5JG@*u9o!U4O?IRs@Jd1^->a6v738jtLxkJ zm^YjS^ErJ)f!8y`wu&h=_PdVGZNVVFt1BdASn~`;n-G#&(jDhTMo2TI)#Z8KUG*>f z=lxu#Hy~WVYYyCi!VeS?60cEiGuUzD@%YH>!?8IA*ZEDo&9l$-y2rgRf6*FJ9OabP z2QAjS!}$i`yq0z2N!$*`uMx)c;)6;vAoo`K6I^bj%Jeg=-ZdU~47={A#TUf`p{XW?LO#QAlV8k!WF;3K?HJ?B$9 z`<@>I!squL0Qr6aF&tE-!;hpym~2)n5N#su(stjJ@s4C~=v+7VN>T^j+`e+_IcR9v zyZvJ|SxFU?vyfgC>q95geeoOE0^Hw+I#R>^ebiIgQx9$g&H}|cK`qIl#$%7h$H8mL z*keCq@hU-x@R)k(GAF@Dr@q1mlkrZn7bs)ZW*x0_EREUo7b;OFh_RObhiBLq=8gJ+^)tS)RorUhW9$vKxFae zpNNW54I&oU+6b9YYYSNW)&{^{S{rP(;9xb6AiR@`zS5+?s?_p+?Lc%x=QL20m#=aNQZHogVE3h}Rz0U3o9+P>X~Gkt)YZ zgVqBTD|Wyy6DpnWmVz(aj)NhhM&}AlUVux;31m|=hLa3L==efbv)ib#73d)0&CfW!# z&y~ywuxf8R7T`N`hCDyIXg8&4(~jDAfz*~>6_~~@rO~3U+Hgg>?2s)z<4rxUAUnYJ z$h(rl$#9vyEs`XhV8!zSVan+-nW=Gl>`TW8IE$@q%b1T7Kx!>~I%w zyHjq{07SV6?OhYG;(|5oV6$P5Q&+8(v>UwPY%zBIVQ}xrwfLb}dz~%NkeyjcPd~+j zNg#N&G)DoQTOn&L<}!C%O?kGzk>^q}sU>5^4?K-0s9Gi7Y%*4vhfB+qnC?uL3mB;B74= z#^4~^^$0!0wxJSs2+Z0cE|#o)uSZ@V*m!Ob53IsxaAcYI1r}*&7?A-7AuGI{yT>&X3v zU5nmodC7d&BcF`bB}Td5)DVLG;qATQJ1?~SM@&xSUbvl10I$i0jbRW4Ki-56O>w-R zBsWOCYR5bT)cfPC^S7hF|LvYjhZ?zSaPHa`13`?8zg{VHC@n(BTOlz(ec2$HlHbq( zwS}%}mP84K7qi^;dRlGP12~WCn{ICitBsEmkqbi-ak{KIGYt$DWZA(~I#^}>^!bw) zF(wv9T`Z;}@m=i34FOjm;OOi6>m+ug#s%WY*WEaX|7I32kRZ@@JO2nfERqND;nK+16OyN1Q{Lv7 zm$<}Ht(+tQ>+o~=N8dgEf5N!gC$W(1Ph)c16w>v%NA}s=BYYkGG}eKSAfL!NsPCsR z4yNcY#5bDHM}lnx=VKe!*v2S2J5kU#hhKsZD985QctK#U>I#K=j~%6_bbJaS`orvC zYE={Q2O>j?Xb2egYO%)xRCtmXoa!YMY6t>G;n0?l{4&T+{`koH*?ML$#Js!+Ampxr z0dQUb9^g2h7DOk8E=nqAXOxTR1`q#=VoB*x=h`jxI6jqaz=;FCnot@68>fYTJa- z6zogIE*;UNbigg_pk;Qu@e}w^&5_d=RB&WZ?>>USg~hx(-XYm*dO1;pxwteGMlU2k z2<1YG3&{wJrkqw>WXX)YlLE+gG{Xq086>e=rhtK18Yft>FgRQx)Fbb^(x5DYKS)#t zl3|7!REk}&o0Xsb+UCECs?E4I_Hn|yP4ESV(QndPcYfGQ-Q>7?GC#FLZWBQ?_!4{A zD1v{%Eer&6w}UJU{r}y-2FJb6-#?yRa{Ii;incA}ZSb&f*-l@)`473Qil;?O8_S`y z>e8-p`fzZIVk-mmV~V43V>cXyPx$&8uIj)o2v7{6s2VHEVa zx$m%?b2Z~^0vHP(EW>GwqedS)%!&`iOr_C!^!WQXKj=Iipk+bTR@Vd!o1QkQ3PJ*4 zh~sn>03=Es7avN$6VA!K$`@XmMEf2LD+6(1v=GhS6*`Qx#WRu`Xmk6i9Tg*@IS>_= zwc@nFvl}iLuyVZ7#;Xc`M$#q}yPiMYo$LiBq?v+?047+26B~guGVRC7Y%^tdl?enF z=9dK~jfF&=HE#lDB~g_<{mjb9K4bzjc&EJ4O9UbaydSX5T#z6;_|l9w&mn~djqb}p z7xT56>l1txSSKx6ce{B#S(oNa*V)~!J>d25ZWrF;7FDlK*se@dq(*Fe@O$XWHu+x4 z#}uSIgVJ&5?vKN}&xUtjhtH&P;vLR1+rg`9jX7>0#Tq@eB&H#63jib@ex85)9yaCp z-qAPTX8RfZFKz|K{mt?O3NRnv>!r|xEI@88&4i*>uuq0|1W)c4OjcNdo9t^NR_1f* z)l0R$_1N6c4{l_2ioMN-DG+9yr?9nMK@QnW&to#Xb);7n+cXFq4^MXEvHvd){+dHE z0v6ooe}n~3)(}!lO>?@INvDbfs_X+Tcc_=U zDsf9TN}2Ih8zo~*7p=LSznnLZloM>2X2A+@bQ^mpbs9WmJs8_owAuL}*Ex%8PHeVY z@?!YJ#fl|Q7`uwmk1D5>%U0wT&!vlkEHv=K$;ne#q<2u^p4;CiZ;@PufX~W#Nfof` z{e1v}f$AmZmC2@6Ye5F*!)51;DoGC)mAf z?pAq`R%@6@b*ZzIyw+#H@40I*oNuBR5L*sr>$A7YP?9*C5~$@r=p}33ZmCao78Wq8 zsbn?eye2W2&;jCw%IMm$M>m*Ci{R+nMAbo=rzS^~WEI^{b5ZsmMuJ7<#Sgy@FVW;) z=$hoCSVw-%uDR*WAudMz>=&_3aI?FBJ2eL94n(mV22yE8BF@vY&k$gn;167gOKE2= zqC8#sS+q8^N={=@CD;^K;W<$>ldccN&`^j8AvAImZ!qyP`-;Vx{F4A084NY9CMM4E3C%3shZtw;)P##b|x}hBEv)d*>|MBFtStnO)!qoH zk|O>V2WtWBcYL=VcT!Hk%sSB<+Wz1oFuak2FpNM$6$ZykPhE0}DH+!V^ zyzO9%$(P;82ilLkp|5mpruyKasF}1snXH*%#S|U;dbAxM_?YIK#jISs4_bb8o0GEp zDdEHpN*GBMdTv+*-d=>kLFTj&DYO}77bkD|a>$nZTtvVjl`I1*oO)d~^XV-d_7pK@vCbTN4uE=dvglP#jW=0g!@(%td|=toil)#TgWcz*wsJW<4vHm`oA4PaTUA zO>91B20uvM?rz;f3oNu7sDvnWHP?!R@6rM`ILx?Dj~Y`6r@@M^wTwLo$JMvz#&LXW!TIs;n>wn123pM4?@rPiMKuj#jJ}d!XAQbaJKrPG6&Od!6L6%AD@$G9V68 z^#WhFjR1xzOZhI-qKB8S{SLet=d1H_jSiS@w0?GDbg6o6A57<}pRsnZW6Igxo<2^`Qu$hxC|YDCRp^BBd;R6|-yF zyf473N60wB!iIM;6g_-i;I&8;Rtr^^>sFx*K2}*l2rcx}Fyie-Q}Um#=oU+XvL@|v zA#yvCRFd+b3ph;6ej`Zw%taFB`NxqV$K&4~rQ@|7O#$f{B44o26NCQ zB#Qp&Cw*V~u6*VIWOp-r7o~tX#s=%Dq0sq&W$VV*Mi*M&mvu#9k^eLo@eu`i2ZEnN zHq7`UW6^#J)GEM5#M0R98Pm)f63@wM>+hION#Kuu^-F z^<2DVqn%ybnDCTT|BE|}jiSsJ(~ftz!ZmPuRofY8(X8A?Z#he$V3ZIJyd&N&9qcR_ zBv5ZZ|0zjeWF+qT$~#TW)6#k9Xi?|@!8Xkb@|Rj<_5zmM=(8@?ri<^hZ#|4aEsgLRMEU z&}Ds8o9nEQBq;N8!CxHF!KYm5wfSe*A4>*}s>SiMhi4~0jvhXJYPga)Bco}VPYjnU zCzNK$r?@AZzy1}hJx~aVr!%mRd02ylvaG_S;HC!4E)^#lk8#4@HEqA6bVqdog?vCE zgk<0T8=%0b} zL0fsDOjo?B%lQ)P)*|tEfI!}X5kf5s5p2`1?4iNZy5thg_XAJox?0stl0{8cnP3nF zV{Gem#@nEe-w+~k(7=h#F;W%|rUAcWLbBNf;FJ=&v@jqNjI6>bZJ&w#>-#jv+llEDj9ktPF#?TvS-ANst3+h(^t3)phVh zf!8j)fQE=D@X>AVWCR{1Kw-JsEF1>7C_wF3c-Jp34I57g4i;47aKr$IQbL;|j$?5W5i_82CM=WJcO{V55;ON zJQvE+VM&_TC#R1~;xZ#nAhGTmtk9)*4fwNPR#2kyT zNS+D+d1)?7e%4VoiF<6UFH6V)Jwwku%sy5&;}LAJ#mW823N`Yh13=ZR+vCCI0O~zd z7lDaO*GwFbU(6TflWMZz>JXQcpsM0{{6ke;8qztrGIyUxalZ~H{_yO@Gk>htZbJBa zJ1fzqUS)frQPz79w*ZU|N<69)>A~m@`Um|E)3 z856k-EQxjG)Ign!zii46`3!U6cCmQT{{FxHpZ)#p;DPyTv%lY0>+)~^OMa-0DAI>- z{7dOqW7uSr7>n`TG{PFZ14ywoq&uZlSo2VAa-Ndd%hxL)Pu3}fv;U3be)8u&5& zKXzQb{m77d0jmbvO2pQKneJlSHXy((@bRErdn21}$Tb}?#ixqWw|s)}yf+w9ps<*? z!f!>)o|%3a&-lJvMrFhC2h;$Mv!g(^T1_eYvaB)=faif1A7r3zC+qayc|E19kRcva z37mhiZYAZBFtb)7u@(?$x!Cxq0tP5xQDpTr?c;?l8o)M!#+4wo#b!Sw*`E>>BeH#j z-M8A`m)cN;JU-D(uU$1*!@QedB#^oQw z>r4$^q=vTS1Cr6&^>8@@Hj4m7(bN3A&oK zK5ATRbidMkh~6BS8}ZYFWk(T<@ooNO9vkyv8jI;#i3OY5+C`MK*HFyKEL^Z;Nol~p zviT%LS9Vz&f-K7}whG>E;+r>kg~R#=zNssDB_UhKmg{On#`W^@N z-Ys%Z|56aVw+rwX0IvsgRyh^5K?4#K&B&!$X$YXtgzI9&3tp4#{xSZ`<0zr`3e!~g zsE;r8-o!`~R8}GX=D@>88=n0tiv)Z)jNZ@#r!*vYP2>tXnY@ z5Yh_q@Mc7$B`OzdLYV&|ut#YRWt7Ox79D5SV$`|@qCo{-4`Mh0IfF8@y`4~14j7au z4jyaaUt)TA7s)`@Zn5K{HZH6HYF*pL^_4mLR}31t#J1{LyZRYk;v^*21(>`8mzO&% zxr4o!GK;oZ$H0jzT6i$RWr=d(QNz%bbh}Q9w*0lmsgelHyW>P)TpI&!G%Ya6iY&w*p_9YrNfO$VrIj zBuYYp;o+g+CdpR;;ss2AB0`c#d>j&c0#F``I3N%a#x{L9Xp{YDYE^EI5P)B6&IS-kR>% z(IjvK+{n}#$Hy{paFSBHWo;2l+vTFziJv8RDRr<@o0hQA@|boGRF`6SuN!i7`LS&G#3t>LZs5(5tw zlr^R$^=Yd4TLkIpnBPMg?~GdwMS*Nm8Mqx8^yEt`OD3$DcchEh9XfCS^>0Uif46V` zV`Gz6#h|DS_b?aTAfGmNWFLGcEfZ{N)X2GaCQt+0#Qx49I2FBsUJ4#nCSZGc205=wLbzKXst! zvq5|yN@Uqd33q>2dKJ{Y?p-68 zxvzG51wx?85!%+3)s0$8jkn>WQE>xBrFdT%9>`^IsXho8GhEK>3l360pf>d&=#IvD zWQkDx8JspN@pBp*zA=vWkySw?>9iUQvA<*Q&28KVpI)=!cn&B!7&ckXQV8b)`s>8H zMz)1V6$}|3B=>!L@n`Z>hb7{+aam(n%WV|yTRb5$3)9Yppdi7S;a9d8GTv1{_?s1$ zijlAL3(AsHZzdB%?H8MHQBA)<5T%730dy%stf#`8^;i}c_RAcn<_s}*8@hPpQ>%Mb z%$B3gYSvE1kkX>t!RKuwyAy8)(k+H6`Ko}5>z-~cTuMx#xoj!C2&+3Ld47r6v8Oan zcz~6Oi*9GLzBu@Or)RXv#q_w-iG!We2idN|h)mF)aF|+5P9K?S0w0@aLYgL9spF6~`K+sCh7 zy?FJBC2d*My{B_Tp+>tkMU!Ixrb}60(W~d(qrtB)>f78*ey9xI{c&U{N7&qv+L2bY zymj6311Hei?IWpvU9M-q0XFCOmpN4ZY+g+vpU!F|-_{&AZ)7(5E1q4xSy!N?Kwu%a z_G%Gt%%Ai%?qLHI_zeV6ZmRyAnXwCC9sKV}1!XAYpE0DrY|6=dDDQ3fSR&Qa!zqe@ z6iS0RURvZmQ5Rq-hS?eX4@A`KR9QThqp4|2%!(}SFni5^Z2{>zv_Oq_&cUyF08~Sy zp|^0|lV^|m*^8HF6viHmXMbX{QkyYK2YO}c`-jPR)^>;;Xl3;=nVmG4$_)%T!}3c1>dBL zQBd10z$hx=4B9iW0fk$^VP0^02Tr94M^O z!ig;Hx%-UiMZPM*T-E72e(TL&19@7&i#v>iOUbb(vtqDp)|uF=i+KaxH>^o(7Gd-mY>Ogtc3yo9#c%YkB$ixf zhFO386l**rkWyo|U?!KShnV@Yq-8ODbX}ZR;0P5A?jZ()88h^dFBVGdLXPOclDywqpy%jlusja@b%E!^1`Npy*~Zt>$pg`a z7;uhg_-3JLx#pFaR+s{l9#c^If$#ZgD+jwdL@8{y7vd$&IvxByLJYfs7@m^BQT*Pj zBxxCfMQ{|piPt-hPr~(9aF&laiM#I|ks#*{DcJHDf%i0RtAoq&Y+m-IVocZ zB~|O(|L)^_CbpyFy?cYBy$sD4khfqD4H$dhJ@^-0_9+5luwGa6M%)DiA_GXW@5O9W zUx}IN&KLNw_W1@(arlNvYUh`OkC5V`5%^Frl9#7seh;1F1e{(}z#VAS#1+MW2WC?P zZA%W{KMd}vloqeR0$Mku@Hc~UttW;e*3Y_V$;5BVBqa^tQ9{Pfb5&|@;CsHGo{ljq@T+?QS?V9&YMyM`)vn#(6c2)Yd-mUhkt>PEikq1B7 zeM*)4+M2i5)$f&jN<0^N)EuCGrnaL(Hc^7Lrp&`_9!o+_& zYGWN-W~#`TlKONdod?J${y=VrSsxc5pF_B95~}8tf~e#UrqoZ{(mgSYNs{7LrWTUR zb-sdU?l{>jj(URnD8%fYKKp7A|tAXi=>uCmNU{vpC-DA zLr?nMj^HlG&tnm98`%RoZLC*K0D^p}^0*bB%D8`YImB$9-|q4cd5LZs2{te0sNBAG zf|*1*Y&&Bqt%*ub^0Vl+ij!1g<_Pk8fHU~hC55?Iqr6%AawjV z^S2oS7VJjbmUps~Re||p(Ivp5%Lx*lD*;gL6!dgX@Kr0z?j2iYsmnZNdE?Y4)MY@u zgO!CfRVk^Jl({yFHN2aNXGgcElfQM%lw4NbBj5EsrcGWs0&0kI1y=?BqZhIr9+)kh z^e?(Z?V@+m>B-XB#{#%IM?g{&>@Z2!4y*OY1LhkjJLvZi6 z+vrXKCEc3H*_E>5(=pF4%ZYE>7VG$Z{Ov&gT|YqM2st*a#4`uEV_MtEG8St8qwq>^$X*$lIF>5 z#xQ#V|MT2s0-1^1CB4%=jm=)Hioa}(hJ9ln+mlplo82<{Jj)(Ee)90m)3ec=myaHv zJsv%I_4uFOJbr%i&#@+llS8wZ6|5Qw9!x!isNtVMUPAaJIPb%a+XuFRRTmfV)Pt;l zTQ>X?OY=bSR-RNRL(iv6lM&t>CJd#ttax*{4cO0q|J!emjuOFm%c^O2-gYhx^V^({ z>e=S969x?ha$nrpidRkI;+k^=r}ZY31KlwdSj>V`GOmQ-wg3Crs7h;Ia0E+UhwsAr6>L%upWF`d}~!J4PGioh_c2 z%*UXk-M1nqqh=w8t_e&nz9~A&%^rO|^mP>6K=!CHAoRYht`}H?22Yf)+S#&u%`6)$GJ(_-^3y>B%wPLF-2cYbVk8_8jb1 z-0NrMTn$`ncaFvM(!#U0@~fSARVoWRpJw1y9-p$?wF`@K6Y!Z-BuIY|i#_fBKNdHW zs~oF?)is8fg5?X`z<-`60_2zZ2go8#Wv@1ib>HHFm6<-2lcK4*ANR;6t6~ZX zlJi-R*9l{Cxe+D8rV0ra#vt)*k@3)LgDc@@p>*x?tglwpb?uzxZE4`1Kd5_Iyo8L- z*Q*NReBIlF0OaQf>kaICc(>FP<{7yx=6ag&x1Cyvo)57zNw)X0T%a$2W1j4_B(Pf^ z_yzpX9}G;UMqP<=sk`QF9(1(Ru0Habib24a126w5xo*^63?h7#A31r~W~Yw=Oza?A zYjj&%D0K+L1N>4h2J6ae8%41aQg?ke8{rC->zi)J+~HJ0$f)nKL>)`=?l^2^ot=a0 zjyp8Hc;r;=CA({2MjT2tWpCuz#r-9BdW=VDtI%Y}prhA1lm^9ScFP}RrH#tuc!uQ` z3@dhTkHH)}T5L6Jhxl(6=D;p4i)ko!wnUoPl4XtfCcE8|N_M(e?a*zM(y#^|qux#| zz}vlT3RrtHL$}4YJf1?t3YGiD-1U%QdB!Sy-?a=@$n<%&egYS*=CNRP6X07aMg0F} zv!BEg6&q}%ja#ut+r-tq;3bght0uAc+?VIB?Am>tJ}(#L;`0xTJ~5Xa&j9{1U)3D! zKbBF)f)h&5IhGPcF`VSogZIS^JUJ;S=Qr7Z&7tDJt3h^BRr7P5MB!?^Ue?1yBjqm3 z0f87)t4sX%VF+tZA;lc>?&}AZfertq-tT@lJo?!E?&bZf;^Tw2M+bkEopn?kUAFcc zch}(V4Fq?0f;$9vx5nKyKnU(3I0+iu-5o-s!5ta`!AU+cxpOD)-22Vksa|Jw{q?JT zp0n$$l2iNf_CDWPTNJ)jga}@)kUf5G4`c^JPQQ1eIGAyDP$NhF;m8;pL{<~CR&NhoNg;L}0pBttfe7mK(0EWdmp`^Q9~ylhud3Tt zsuT;-`{eASSeN896|oz=X;{Olu~U~JqPUZMm_LRiPQ3pPRYgHl?}up1Mpt@L#*UE` zLtAu&L5dnHQlsEgAl7$uC~+gQcazpa1suBb?TSl;dmaaAfHze-CJE8sdb{b%G#JSDB;j9kFrq$JbVAfIvC!E7 zPGb_?&S>BhI#I*;Z9}%T-b8R3Y;n@d~~nd1ukrJzZn^n&s51&Gath&|2alryC(2`GuU)~n0u%^zUz$WR7~iZK)OYh-A0Yqn0d zA?oD?nL3_iEhiN=^gBmf`d8p zJNbvgOoN-UR~q?U`{KP<8wFzx>IF&XdJ_UzSv5=J;?{gG)LZi&Bj~`qS7&>tFxfZG zl4YZm1*sAmMu50rREygcOe^+4PU(_0OlZ`3$ETG|q>*$a*nwr!`LMB! zNWe)rbF<_&rO^ZY<;(y<2XV!5zI|iJtPz!$7`u+k@q1c3n|HbT&q1X)R(+d9(~QX6 z{5~A*+Ez3y@QLL~6>tNZDG~(BDmV#rmmbj-jj^v+ZuMG`Qh|<#4xgLcTQY-zI`1K& zNO^}hWCCvz_trv>0#0`du5_Vw*jUA{|IXZsv<43R%9v**VG%R8wtEtamkmDIQv<{s z9FMxjZpc#2wHwMmDF8lfEEX9jG^;NVpYUmB5VbP49vSDWJ?#P5ux^OIbCN$azswW^ z6)9l4-#?DTfuKLoC5^PdG*ISDYRuVX4se^Bunl?NL7f9M6oLeKn5CFk&V3rFPOTsb zu4BVXVT*hpSHOwCcbg^rAw23xErr@f>bYW+KhK(2ApDT6c&IU0y#Pk{~?jdO%OuCUODOkE19^SI|ma#RNuKiyRk z?aP14Q*`M<*LsHY++!l~n8H{JL^m1Tn}pn4P_TO<(C!NJ^K0p^fBwo6e|smgz=hv3 zN9Pd3ATL&fBV+0MAjD}MK+TEaYns)dnS##f*t;-%<_9B6=>F~1a*lerZ`P32%`S;M zf=7GZLwf`UgGwW9u2t6bjRf0woNr+}Y-!l@$uY&OwRRL@%id#0*wG{ba@WQ8=+{2fU6jj((D!Iv*aGC+YU@fE!w4 zKPK5ZH@0VU;Nf-7g<;Y-wH5<$Krm~lJmOMu*&$m5+oT>mC)d*J6PTDxr2|LSSKo5* zZ;@3bkS&R8M>rWSzCvrZ>)q*G@u>L0sf8jQ2oDN)t-?uA+y(G_++{R>UQ{KCT6qnh zOjMpiQvhkfmH=MwS_!*}F_ao20%!}NO&I}tYma@P8ypY_lk&`me2~Kg+4&S?J+1rF2qg^VBg5V_-3w0YS z&47pk!GV7`frM+GhiFOyS>)xjBRqBnJfH17nTDvn^PZ20&qXVS8b#wM$TL;)w(!-S z8eisFZ!}4LHkk|`G!H(wD9fB8kz$Ckt_-_IJo&B5YtYAIEi|=YGU80^6vt*}^m1Xv z;_bYiYj`DSO%RM7Ow13p6r&J_Hm@Dd(CWcRlL`?QxE5cl3MV)AKBZHgt60xg@%VcB zeel!BNG}3){$Y3qc6nC9k1j{&yDav34#7-02Rc}@-d9y2%?U#*cglB<0t%1)6RQ4c zn{ic9(uUkqPH5qC*&G-1I;znb+vxq!o+oh(xB*+Mxh+{_3jF8T&q#;(;xd zb_;340Gz$Yv;AV9*Lc#Wc7lP*Zq7wFvd(z{qP}-~cOy&LQP!nwc@X7ObXI}lhHTe+ z6N%u;v8HW@2C(g=_UD(VZiw75RjPdTWcYGRdv55BBiGS86x8g4>KPIX+IC4hzv7fp1=Jg%6S z2BBPf9lQlGdxT0rgI;=lk6ot`o-}V`eNSmiS!n%Yv7b}ZESzTxR=Z3hMV|NP@M2|# zWfe-m@;7Q51!$@=Q-TFR+nb>f(UJ#wJOb>8>f)Qn_WN#Zqv8rkbh`)C%N|4v?K})I zS6^G#&vY>0G^e3A`?U6-gI)3lG*@v}AL%pBheS_%ETtGjNWPdm4US+o!Ig96-;gHw zgi4*j43edBofhr!?^Vyj4}+q#IIySo zmUL;TYGs1k^N84kp-wF<5g*`&A?!%m@6<@?h}lcC?PH=NxelB1&WV+XQ-2)u&OaI_ z54KN~xwnL+e1q=4BZ#`GK zLoz*R;%l&@u|x<3)DQ3RuXPu;Z(rnf44PriBg+9pGSWD~NqFvr5_HG6UphnDPV8SFvAQ9mI3htVCvzUKQCkc-VT*XeuG*gqGR>tYHt`9) zn~FNSx<8qT2_Tz8X!XoL3$z|4#$ZJh&9+opYvQAhpkOKxvb0(sf!w2vlD*TMyd8z8zP zvH97h19LLi7AJk~O{N%_3%#0Hxd*ks<>VUPVX#rn{O3Q_CBDKl&kw-?08Z5b0KEUL zE-~l7DNKC&+VR~=Bi4^9;}Cw8D9yrce$Ql2E`DC+*QMz(rwNc`e-}s(>25POX*VgDkVli@{fPL2=|Jm;?` zez={ul%_)!roWr4MBqc!&-LS`>Z4PdPfJ{&rty{y7ZGa!3FnLhkEIrh_BpA6#G=x` z04y1sHVYPY&oNO(Zwa2UvboX*C|gsHW2z-uPraxl%6DL?^&_9+tRpmz%BD^hkdu({ zVJqVPz8{3Vd)bkTh58-3M5DOfY^=^q&T+&?0KuuA+xTPBfW3A)>QE29rPhUXE`*+? z5~in)d-heVFDy5HzjR+lTvj#tobL0dJ~Pb)jD%vc1DF+P#RQ( z%SX9kWT_P7?<}>@X{qIeP{h1qJS*S)$!p_iSJKhOkVB})eFx!j&QKkTqSCBf3LK7du#B>qERtrQ2QkGx$);1}e~AZ#;hsXiZBcfqu!C2rw5MEz73E7&9T^QzCH|PPv(4!D z7GTNWUC;O9dwQhKgV)O%@utTEYR&@2V?BcwqUrLJhN?;j^jY3%-mBZuO?Z@Ck)g&p zX+0KB8(LZv9<;|LO)k+aZ~ZedNDtMgPbB9#)#BghALV1t6-UzxWcA)I)ax;LcjjzF zPa3Dex%6hPffERqM}=W%;NEyYhH+2Ml1RxJ>Btt^)oxb*)ScMLdAgs(=OSizh};Xe zOQ7bI^HOy~H+EtI?^O6YTfz1fjNE<*oaoWVWl6xP6VBpx9e-Y^(8v0uW~oRNRV-^L z{Ec}N;Vy_1>N{ZMJ%1r3!6w+5(V(m44hhkrBl(+>$sU1;>%Gl9S;W@L=QUN45^d!M zC->KAs#k>{U$BCr&{GVknr%uXX!UOGH|p6l>b~VNt1h2U`ldnc;JqSpgcer3INhyG z*N=DTaytwcRbLpn!snoFa!)7V3nC#qRlk>Ib0!`1SX8^{XCDJ@w`_y~vnUQ+@NeET zIDR1(&xtcZHcziD`0~@RL;^wM`f1^Eu1hW)+3)J1Mn^@B^(~1D4N@c&lo1&9%BuWA zmVt43EgAWmR1=OJe;D8T%OrOEbXoKoU;}Ws4xqsn(&7x1L4@UD0yB*dmb;>(-~d3Z z30Q@%Enwrl^w6e1Cw&L;OY&Q{ z6-$TqXld^^m&2z|v}=DgO&^}UtgP5HFQpAGA>zYBUyNy>pe5Nv}Gl}SoF`}dgT zwrUAjB)1PLb?%8<>zwr+_W9Mdk>gPIHcLf!DSgS#fnk1UKiR1&3S6Rhg}^7EoH-P- zk%(uolNriV^wG0-z2nQ<(8)mdw`?~88)`9hUQ>tY6d2+uOT3)ZY=VVXgN<*{V+O}% z$ng_XglFBQAp#ju_AN7SZW3n!lL!lAM;(qaL^EH1Ub5^HW6sn=s#!5-)szTPhAS6a z*PY?5f+A=uX!+CgMr_`D4h1}y+(Ta&-PnDuh<@&~$v za4$Qr;^i#w4hLZdVp1}f69Xm>=4smF0)#S(YPhc1=21v9(KmZ*Hr`6PT?7-ip(Rhx zt%s#-If=mIAL02cHw@}ZQ?OsDL}jx#jcQvf83(62GPcvY*Jo(#FT8{5PmsY68CKXa z59~y@FW6@kzyVX}(wig%>p>3M*Q+0w)e;I%u3vjX2(VTrZGWsmZ>_YLZVp$^90!h` zeYSniVJ?PCle`DxIwMurtMj19E-TLqZN7`z04boNwAFcMwB@X8p;SR#@J8ne!FOYU z+=!8Lkr#Zdl01Ue^se(vS>M(uaYRGpT05~IAH_8uWQHs;SX+ocxJ3*6Qek$wOtV7Yr)OUF_PrcQ5UZ{K?E4su7^*%msUk%6*j9CfY8rtRvnz@Tw z?UhpSL!D*W6ihn$DO=NYuYd?Jh|m%9~3I2p9&)rON{1+|O9Y)NDQvMvr0AXc;|q`kBqc@RNzoe47cW z_W%!S!AGu9C*?P%HaA zY%QtkBbk)U29KjILTHG?X)`^%6IHngq3?VAX*gKyhN0TMx(h>C3Z&xjy`me;of*u} z2tl1}Vjk&)W4ZZ(()!kA;y)ANThQ>hx{x03S&|~23#^kBgg(qw+w36QWkMYNfzoJp z2h~7WC&O3dxc>Z51XG+n+LhVC2KJ)LJKrmIDtXAaz=2`eNGi5?&^< z5tj@U-0b7|@m;`sz^ypK17G^Sp1S$Hk~XoyNAZrH2bi27fQ4!OV5?hhK-9`HbCSr_ zytrg%Zf)T8e3bMjyV<8)f%5@v?|s%oX4;3-+O_=ZGpL%dqMTTCC4w4{XvJyIXr_gl z9h%nTX}?KKFykKA-ew)STGt&r@T(I@b6kww7KwUz@iCp zmQcm1>Z1-`-fN~N-&kW&<;?nompr-1P|havM?}97OOr9ei*s(3fwDF!Or+z(KXMjE z8n3hKP_T0me-fi!$G36)u4?Bx1%#fB^I)`-7-{$%!!$=~LSt>)Qs9DF`uI(uZ93qP zYPc%%gsUhh<3U`MIAlVRGf=dI3Eh(Nbt-Y%C2-1*^aHV%1Rx0*M~hD+Q(2Bz6D1})p`^ad*7-`q=DPd!AM&lVTh(-KTE zNakLcWoucA*NRM&;$1jlX}qz*#b+MDit;pNf4I0i`R1ISPEc($$(jdeKCg`JNR2v% z9-;k%y2mi}{tFfF;b&5zgzWO*Zilxl+Cmc*WMf4syK`b0Nr(&Dwbymavci;z89*nO znJG){@E?=a3b!k0Wf&zpQKUFnj}Onc1V$lHLJvd_*w(?m)Vi6_4lg3l2(;>kh@sqE zti{tqYXJuzbKth+(}ONczJFYc~zq3&efZ&X9YwQH9Wp6eC{CF=mbj!uOsmWqU%R!YTQ*YEc*eEkCWHag9SO5C zKHrFk$;q@(PHCAt=L|F~AW5~#;ppYq_#Ie!sk&O3q8waDQQ@E_55fG?BY|7v=sRfPE=ka98!K&^9ZK8p#+~ zuL-gYz8F;Def5ZVxSr98mR4O`HW>00;uoQ(q9|_h#gT6mL#ZW7f%zb-$T1q{jt?}F z52LaiIF2-u0gxxxs~3hM&Kk+`7X`IGRjsM;TJvt!2&KX*^q=PjUji%Wg_V6rb20qd zSCLy$6A841rxJt?ldhU?I)i5STO&q%gGsh=J=@1`F8%V-x(a~ zBxy#h`r^3y$+sJ^ibNtw#LzaoyNs=z{gMRoYG;C zs3#y1*(lL6Bm9C@K~7b55FVU)`!ZR|GBB(2 z%5((73Q@+>@@kAHr8UdFx$44sVF89 zw1N9yTY`0V#h}&X-Ot7uho>a)OzpX}i;s_&Q9-a+ zrElvojWt8@-yV%tyS1eV_1!qQJYT3`orsd&4aDo)L=i8|#_|^sykC7vQ3Iu+jDOm7 zhPrsD(REddQZu4)uJ@=h8s#;l~#%2OaOLZi_ zdN=NtDu3@?I!k&X;(P=*r+i-+?0T9s2&a1U{CS`PT$5lZW@@_aXCP?a)EkR_g% zq%mHS-rq1em=(?|(flqkC?xVOcsg88RWu3-IS@wZ$~FG=GT2n;FrJ48c*O zsTtTXftQHtNRQhmdq0RTTlXO3w`SaQM|J9R$>Je(n3j_ZneMpvho0_hQmgD3hX+GF)487;;$Lv7&j+wIcXs-3 zn*4~X&Mu(8J<5FU_AigMfAUxRGtep! zoywuHL8~$}08j$^k8c0QaT)yXw)@{{h#LP=#Gz*qk5_VB%!mL0Dq;YD;V<3pHv|AU zWq7%{xcT^j95NhIKrSvRX&@iB6c14R<+Dkfq%@xdClB|3OOg7oMIH*FQxRYP)(D3U z09h<&6fz$B zEQ6EPGt9x(9rU+sinsWeLi`$~zFeE3Q!D`BQ3L?M{tK@p`Pm%r@1}Ua6XEZ1{+r?Y z#q}2Q!dxH#0GQPP0F1wIzZU($^|Cbk51_Z1T4MUo&&HdC0RYUuK%d(GfO>#z9sUFA zBbA9h4Ke^wLka-k|AqQ~`VXp^skyzio3n?L#ecy5L?>Hw`<%77i2pdferGM-${%cF zV_PR%kg@T9K&BUPK8ZmC0OV=^dEgAz{~$X#gKVvQ{w?>p`_J32f#V|#0>D4-|7w5L znEm7ruBWA&yREa+-_q>=kPcSwL&A%m6Ljaf;ry4zzm8ZG68tAs`FFG+Yv2DX_^&pO zzvr*t0=s%a{Ud+>p2+`Jh~LxpFCqT=BIZvr()9mA{{33!|2LPx{gU(f1bhBH?=5Zr H3i1B|Ux!}8 literal 0 HcmV?d00001 diff --git a/StackOverflow-1.3.alfredworkflow b/StackOverflow-1.3.alfredworkflow deleted file mode 100644 index bc5c5f0714a5862179d33cf289b8defb2f8ec39d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 190318 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 *Kt=9Zq{sDhJ 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⪻;DV7PXb` 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 literal 0 HcmV?d00001 diff --git a/check.afdesign b/check.afdesign new file mode 100644 index 0000000000000000000000000000000000000000..61576f29ab5cf492d538f5d28b33afa153d71905 GIT binary patch literal 24835 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

_6qOR62Kl4bVWX@};Ut$|$5v4|jsun!gx)I0 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 | Read a value from info.plist +getvar() { + local v="$1" + /usr/libexec/PlistBuddy -c "Print :$v" ./src/info.plist +} + +export alfred_workflow_bundleid=$( getvar "bundleid" ) +export alfred_workflow_version=$( getvar "version" ) +export alfred_workflow_name=$( getvar "name" ) + +# Alfred 4 +export alfred_workflow_cache="${HOME}/Library/Caches/com.runningwithcrayons.Alfred/Workflow Data/${alfred_workflow_bundleid}" +export alfred_workflow_data="${HOME}/Library/Application Support/Alfred/Workflow Data/${alfred_workflow_bundleid}" + +# Alfred 3 +if [[ ! -f "$HOME/Library/Preferences/com.runningwithcrayons.Alfred.plist" ]]; then + export alfred_workflow_cache="${HOME}/Library/Caches/com.runningwithcrayons.Alfred-3/Workflow Data/${alfred_workflow_bundleid}" + export alfred_workflow_data="${HOME}/Library/Application Support/Alfred 3/Workflow Data/${alfred_workflow_bundleid}" + export alfred_version="3.8.1" +fi + +export cache_max_age=$( getvar "variables:cache_max_age" ) +export site_id=$( getvar "variables:site_id" ) +export site_name=$( getvar "variables:site_name" ) +export result_count=$( getvar "variables:result_count" ) +export ignore_meta_sites=$( getvar "variables:ignore_meta_sites" ) diff --git a/src/3F754589-2F2D-44DE-85D6-A1F60CE8B365.png b/src/3F754589-2F2D-44DE-85D6-A1F60CE8B365.png new file mode 100644 index 0000000000000000000000000000000000000000..98275d0fc83dfd80d30cb3298999361b96da5103 GIT binary patch literal 6946 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 C^e-v^ literal 0 HcmV?d00001 diff --git a/src/answered.png b/src/answered.png deleted file mode 100644 index f895dc9aedf186d85e72120c813745831cddbd0c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 13598 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 diff --git a/src/check.png b/src/check.png new file mode 100644 index 0000000000000000000000000000000000000000..68e8c256463303f9e485137ab546dce0ac5d3bcd GIT binary patch literal 1408 zcmcIk`!^E`9JecCth&mxnbWzOXci&l{k+}XB=2V^k2y&rGa-+QW6Slri>_PFXq;T8 z8I2fi+`Cd^HZ|I9ZAJ)V9-F8MS3lf8;eO8fd_L!V&gXl+zkN#m{mz4cMnDx66%g_# z@4$Vp|3(ej5s_!0en_NC*5GIpM4fn2+(L&i``%-2MoSur)u1a`*5-;R<7U zhH1e=*_IeAH`k4gEVrVfxYY{gyfRX6|L^~XSJ7p2G$DnmdZREWdZVGb;NWaUc&r*k zowA5fi!79gppn`pNzi z;Q-YwWWe6rhOT^Fu0)y|dR0Roo?&vYV~;dYYSiLRmKOxWVv5EXmN#SDRu3jO$|L&% zai?`%BbmUQ<{(|jm+w4l`($!X7=R&&%Y-^(9me-6fYzV%`t1?|@21J5ldvij1UWK* zc+!M9FXUBwA*{xPQ)yktNbkk8sOBcVd{R*||72%Nc5NnCls>xr!qv=YVRK`daDSmZ z#n#U4cZjPC3xH_}fnu}k)iEK-x07LD&;?WC9=7=+^-Rz8(ChjZnF~^g014Im-f5<6 zreS*-l*~DhoE=!%=IdO`sM;D%NqK9RG14}YKD}7N%getD3o#X;CWO6lxOQew%*Qy) zQ&JiA`P>IunIV+~0U5Q>|bM@_hCyU%?ez|K!s2ao8;@2pvfdy5v`yY)k`2d&L$%`*k2)TTCZl(A0Ct(R()C znkQM1(qOuC<~iL;r=z!=@vH6n7>HBupt&Y`)ZDT}3*BQEQ2+hE$bx>~X(9R3)tljOcIb+c?lzI-g>c4j)B0Q!8 zBo2&2`WbMeYb7m@dtG?_BJ?b=RiP= z?i%}Q#q!;&;}<4jlWg|MlNc!s({{EC6CjR3MDwF7r~7w5+_ZyoZ9)OLVr3QU3o;QL`9P6uYdf_;Aurcpp+}#( z71U+HU#eHlCAmKU%*y9c!@hW`y$Js94T+D4W1>9%u(ly3Eu|9%n>R1M(O*%39rLzb ztka-WeyW9zRUtkxz%f^q01%M)j41KQsN$LBNTYTR7sEJ`f!RhGmTUI`i4Y!qut-&} z$OzLP?Ub1^ap5x#g}27}@xs9?ZkO+jb#90ULwS5u1Hw2eAuH1Xk&%NA<-OKR$kwgP z)2?~3IYcpzN=!h{R*x-Cn3XsVmCGtV9-?GTjxi|lbs}Ofe21_*8^`lRKoh-s*yE%- z%HBJcat*CRDYhaZ$>r)Hna6r69UO$y*-XEXXBA&wYzXh33!+?PS2lva9B(ZInxM>4 z_+nPidSSl!7bETzR@E$G>CdFYcP)L`^ID;v%H zJ321ic7B$e@wOrXt7Z|FQ?0zUv1%&dcXnxJKeC^0F}~6&z)8hdQaFJBMof3Lps#)h Typ`aQ{VhWJ_<6T`UMcz);kKBc literal 0 HcmV?d00001 diff --git a/src/docopt.py b/src/docopt.py new file mode 100644 index 0000000..7b927e2 --- /dev/null +++ b/src/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/icon.png b/src/icon.png index cd804fb87b674f4a18f01dafb25022f9aeca277a..6a1b4e23b77969f6159b7e8b831b3614ca8cdcae 100644 GIT binary patch literal 5173 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 literal 25044 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 +# +# MIT Licence. See http://opensource.org/licenses/MIT +# +# Created on 2019-09-06 +# + +"""Overlay check mark on icons.""" + +from __future__ import print_function, absolute_import + + +from Cocoa import ( + NSBitmapImageRep, + NSPNGFileType, + NSImage, + NSMakeSize, + NSCompositeCopy, + NSSizeToCGSize, + NSZeroPoint, +) +from CoreGraphics import CGRectZero + + +def overlay(src, overlay, dest): + """Create image ``dest`` by putting ``overlay`` on top of ``src``. + + Args: + src (str): Path to source image. + overlay (str): Path to overlay image. + dest (str): Path to save combined image to. + """ + src = NSImage.alloc().initWithContentsOfFile_(src) + overlay = NSImage.alloc().initWithContentsOfFile_(overlay) + img = NSImage.alloc().initWithSize_(src.size()) + img.lockFocus() + rect = (0, 0), src.size() + src.drawInRect_(rect) + overlay.drawInRect_(rect) + img.unlockFocus() + rep = NSBitmapImageRep.imageRepWithData_(img.TIFFRepresentation()) + data = rep.representationUsingType_properties_(NSPNGFileType,{}) + data.writeToFile_atomically_(dest, False) diff --git a/src/info.plist b/src/info.plist index caa835e..527b359 100644 --- a/src/info.plist +++ b/src/info.plist @@ -6,6 +6,98 @@ net.deanishe.alfred-stackoverflow connections + 09E8507C-FEF5-4584-BE56-D4EFE259D6AD + + + destinationuid + F06B92D5-06C7-4D06-9264-44CBC672D3B6 + modifiers + 0 + modifiersubtext + + vitoclose + + + + 3F754589-2F2D-44DE-85D6-A1F60CE8B365 + + + destinationuid + 7CB1FB83-BEB2-4F88-9D77-273835D81E22 + modifiers + 0 + modifiersubtext + + vitoclose + + + + 5AF67880-C672-4985-94D1-FD3266D73515 + + + destinationuid + F06B92D5-06C7-4D06-9264-44CBC672D3B6 + modifiers + 0 + modifiersubtext + + sourceoutputuid + EBC08033-F36D-46FC-A88E-CBD0F6C16283 + vitoclose + + + + destinationuid + 7C20D5A2-D1BD-455F-921D-355DC7ABD9EE + modifiers + 0 + modifiersubtext + + vitoclose + + + + 5ED4335E-5456-4B56-93F0-A53B7D020AC7 + + + destinationuid + 5AF67880-C672-4985-94D1-FD3266D73515 + modifiers + 0 + modifiersubtext + + vitoclose + + + + 7C20D5A2-D1BD-455F-921D-355DC7ABD9EE + + + destinationuid + DA778324-0AF2-426F-BE77-E9DECA04F387 + modifiers + 0 + modifiersubtext + + vitoclose + + + + C7066333-36BB-4B34-928A-BA1FD40C5FE2 + + + destinationuid + 5AF67880-C672-4985-94D1-FD3266D73515 + modifiers + 0 + modifiersubtext + + vitoclose + + + + DA778324-0AF2-426F-BE77-E9DECA04F387 + F06B92D5-06C7-4D06-9264-44CBC672D3B6 @@ -15,24 +107,77 @@ 0 modifiersubtext + vitoclose + createdby Dean Jackson description - Search StackOverflow Questions + Search StackExchange sites disabled name - StackOverflow + StackExchange Search objects config - plusspaces + alfredfiltersresults + alfredfiltersresultsmatchmode + 0 + argumenttreatemptyqueryasnil + + argumenttrimmode + 0 + argumenttype + 0 + escaping + 102 + keyword + .so + queuedelaycustom + 2 + queuedelayimmediatelyinitially + + queuedelaymode + 2 + queuemode + 1 + runningsubtext + Loading results from StackOverflow … + script + /usr/bin/python so.py search --site stackoverflow "$1" + scriptargtype + 1 + scriptfile + + subtext + Search StackOverflow for “{query}” + title + Search StackOverflow + type + 5 + withspace + + + type + alfred.workflow.input.scriptfilter + uid + 3F754589-2F2D-44DE-85D6-A1F60CE8B365 + version + 3 + + + config + + browser + + spaces + url {query} utf8 @@ -43,31 +188,94 @@ uid 7CB1FB83-BEB2-4F88-9D77-273835D81E22 version - 0 + 1 config + alfredfiltersresults + + alfredfiltersresultsmatchmode + 0 + argumenttreatemptyqueryasnil + + argumenttrimmode + 0 argumenttype 0 escaping 102 - keyword - .so queuedelaycustom - 3 + 2 queuedelayimmediatelyinitially - + queuedelaymode + 2 + queuemode 1 + runningsubtext + Loading results from {var:site_name} … + script + echo "site_id=$site_id, site_name=$site_name" >&2 + +/usr/bin/python so.py search --site $site_id "$1" + scriptargtype + 1 + scriptfile + + subtext + Search {var:site_name} for “{query}” + title + Search {var:site_name} + type + 5 + withspace + + + type + alfred.workflow.input.scriptfilter + uid + F06B92D5-06C7-4D06-9264-44CBC672D3B6 + version + 3 + + + config + + alfredfiltersresults + + alfredfiltersresultsmatchmode + 0 + argumenttreatemptyqueryasnil + + argumenttrimmode + 0 + argumenttype + 1 + escaping + 102 + keyword + stack + queuedelaycustom + 1 + queuedelayimmediatelyinitially + + queuedelaymode + 2 queuemode 1 runningsubtext - Querying StackOverflow.com… + Loading sites… script - /usr/bin/python so.py "{query}" + /usr/bin/python so.py sites "$1" + scriptargtype + 1 + scriptfile + + subtext + Choose a StackExchange site to search title - Search StackOverflow + Search StackExchange Site… type 0 withspace @@ -76,27 +284,214 @@ type alfred.workflow.input.scriptfilter uid - F06B92D5-06C7-4D06-9264-44CBC672D3B6 + C7066333-36BB-4B34-928A-BA1FD40C5FE2 + version + 3 + + + config + + conditions + + + inputstring + {var:action} + matchcasesensitive + + matchmode + 0 + matchstring + + outputlabel + Search + uid + EBC08033-F36D-46FC-A88E-CBD0F6C16283 + + + elselabel + else + + type + alfred.workflow.utility.conditional + uid + 5AF67880-C672-4985-94D1-FD3266D73515 + version + 1 + + + config + + concurrently + + escaping + 102 + script + /usr/bin/python so.py "$action" + scriptargtype + 1 + scriptfile + + type + 0 + + type + alfred.workflow.action.script + uid + DA778324-0AF2-426F-BE77-E9DECA04F387 version - 0 + 2 + + + config + + action + 0 + argument + 1 + focusedappvariable + + focusedappvariablename + + hotkey + 0 + hotmod + 0 + hotstring + + leftcursor + + modsmode + 0 + relatedAppsMode + 0 + + type + alfred.workflow.trigger.hotkey + uid + 5ED4335E-5456-4B56-93F0-A53B7D020AC7 + version + 2 + + + config + + triggerid + search + + type + alfred.workflow.trigger.external + uid + 09E8507C-FEF5-4584-BE56-D4EFE259D6AD + version + 1 + + + type + alfred.workflow.utility.hidealfred + uid + 7C20D5A2-D1BD-455F-921D-355DC7ABD9EE + version + 1 readme uidata + 09E8507C-FEF5-4584-BE56-D4EFE259D6AD + + note + Search default site + xpos + 380 + ypos + 395 + + 3F754589-2F2D-44DE-85D6-A1F60CE8B365 + + note + Search StackOverflow.com + xpos + 95 + ypos + 30 + + 5AF67880-C672-4985-94D1-FD3266D73515 + + xpos + 380 + ypos + 235 + + 5ED4335E-5456-4B56-93F0-A53B7D020AC7 + + note + Search for current selection in default StackExchange site. + xpos + 95 + ypos + 395 + + 7C20D5A2-D1BD-455F-921D-355DC7ABD9EE + + xpos + 575 + ypos + 425 + 7CB1FB83-BEB2-4F88-9D77-273835D81E22 + note + Open answer in browser + xpos + 880 + ypos + 205 + + C7066333-36BB-4B34-928A-BA1FD40C5FE2 + + note + Choose a StackExchange site to search + xpos + 95 + ypos + 215 + + DA778324-0AF2-426F-BE77-E9DECA04F387 + + note + Run alternate actions + xpos + 650 ypos - 10 + 395 F06B92D5-06C7-4D06-9264-44CBC672D3B6 + note + Search chosen StackExchange site + xpos + 650 ypos - 10 + 205 + variables + + cache_max_age + 300 + ignore_meta_sites + 1 + result_count + 50 + site_id + stackoverflow + site_name + Stack Overflow + + version + 2.0.0 webaddress - + https://github.com/deanishe/alfred-stackoverflow diff --git a/src/so.py b/src/so.py old mode 100644 new mode 100755 index 4952697..2f0f67a --- a/src/so.py +++ b/src/so.py @@ -1,25 +1,31 @@ #!/usr/bin/python # encoding: utf-8 # -# Copyright © 2014 deanishe@deanishe.net +# Copyright (c) 2014 deanishe@deanishe.net # # MIT Licence. See http://opensource.org/licenses/MIT # # Created on 2014-12-29 # -""" -Search StackOverflow API -""" +"""Search StackOverflow API.""" -from __future__ import print_function, unicode_literals, absolute_import +from __future__ import print_function, absolute_import +from collections import namedtuple import functools +import hashlib from HTMLParser import HTMLParser +from unicodedata import normalize +import os import re import sys -from workflow import Workflow, web, ICON_WARNING +from workflow import Workflow3, web, ICON_WARNING +from workflow.background import run_in_background, is_running + +from common import CLIENT_ID, CLIENT_KEY +from util import asciify USER_AGENT = 'Alfred-StackOverflow/{version} ({url})' @@ -31,105 +37,379 @@ # Shown in error logs. Users can find help here HELP_URL = 'https://github.com/deanishe/alfred-stackoverflow' -# Can be any Stack Exchange site -SITE = 'stackoverflow' +# Can be any StackExchange site +DEFAULT_SITE = os.getenv('site_id') or 'stackoverflow' -# API endpoint for all Stack Exchange sites +# API endpoint for all StackExchange sites API_URL = 'https://api.stackexchange.com/2.2/search/advanced' +# Returns list of all StackExchange sites +SITES_URL = 'https://api.stackexchange.com/2.2/sites' + +# Cache key for sites list +SITES_KEY = 'all-sites' # Number of results to fetch from API -RESULT_COUNT = 50 +RESULT_COUNT = int(os.getenv('result_count') or 50) # How long to cache results for -CACHE_MAX_AGE = 20 # seconds +CACHE_MAX_AGE = int(os.getenv('cache_max_age') or 20) # seconds + +# Don't list meta sites in results +IGNORE_META = os.getenv('ignore_meta_sites') in ('1', 'true', 'yes') + +# Check mark to overlay on icons +CHECK_MARK = 'check.png' + +USAGE = """so.py [options] + +Search StackExchange sites. + +Usage: + so.py search [--site ] + so.py sites [] + so.py set-default + so.py reveal-icon + so.py cache-sites + so.py (-h | --help) + so.py --version + +Options: + -s, --site API name of site to search [default: {default}] + -h, --help show this message and exit + --version show version number and exit +""".format(default=DEFAULT_SITE) -# h.unescape() turns HTML escapes back into real characters -h = HTMLParser() +# Used to unescape HTML entities +h = HTMLParser() +# Logger populated in if __name__ == '__main__' clause log = None -def cache_key(query, tags): - """Make filesystem-friendly cache key""" - key = query + '_' + ';'.join(tags) +# API responses +Site = namedtuple('Site', 'id name audience icon is_meta') +Answer = namedtuple('Answer', 'title link tags answered') + + +def site_from_env(): + """Return a ``Site`` based on environment/workflow variables.""" + return Site( + os.getenv('site_id'), + os.getenv('site_name'), + os.getenv('site_audience'), + os.getenv('site_icon'), + os.getenv('site_is_meta') == '1', + ) + + +def unicodify(s, encoding='utf-8'): + """Ensure ``s`` is Unicode. + + Returns Unicode unchanged, decodes bytestrings and calls `unicode()` + on anything else. + + Args: + s (basestring): String to convert to Unicode. + encoding (str, optional): Encoding to use to decode bytestrings. + + Returns: + unicode: Decoded Unicode string. + + """ + if isinstance(s, unicode): + return s + + if isinstance(s, str): + return s.decode(encoding, 'replace') + + return unicode(s) + + +def asciify(s): + """Ensure string only contains ASCII characters. + + Args: + s (basestring): Unicode or bytestring. + + Returns: + unicode: String containing only ASCII characters. + + """ + u = normalize('NFD', unicodify(s)) + s = u.encode('us-ascii', 'ignore') + return unicodify(s) + + +def _hash(s): + """Return hash of string.""" + if isinstance(s, unicode): + s = s.encode('utf-8') + h = hashlib.md5(s) + return h.hexdigest()[:12] + + +def cache_key(site_id, query, tags): + """Make filesystem-friendly cache key.""" + key = query + if tags: + key += '_' + '+'.join(tags) + h = _hash(key) + key = asciify(key) key = key.lower() - key = re.sub(r'[^a-z0-9-_;\.]', '-', key) - key = re.sub(r'-+', '-', key) - log.debug('Cache key : {!r} {!r} -> {!r}'.format(query, tags, key)) + key = re.sub(r'[^a-z0-9-_;\.]', '-', key) + '-' + h + key = 'search/' + site_id + '/' + re.sub(r'-+', '-', key) + dirpath = os.path.dirname(wf.cachefile(key)) + if not os.path.exists(dirpath): + os.makedirs(dirpath) + log.debug('cache key : %r %r %r -> %r', site_id, query, tags, key) return key -def handle_answer(api_dict): - """Extract relevant info from API result""" - result = {} +def get_url(url, **params): + """Retrieve URL using API headers and parameters. + + Args: + url (str): URL to fetch. + **params: Query-string parameters. + """ + # Application ID. Allows up to 10K API hits/day per IP. + params.update({'key': 'FgLEU6zgwYULvStDmrgqxg((', 'client_id': '16105'}) + headers = { + 'User-Agent': USER_AGENT.format(version=wf.version, url=wf.help_url) + } + r = web.get(url, params, headers=headers) + log.debug(u'[%d] %s', r.status_code, r.url) + r.raise_for_status() + return r + - for key in ('title', 'link', 'tags'): - result[key] = h.unescape(api_dict[key]) - result['answered'] = api_dict['is_answered'] +def api_call(url, **params): + """Return response from API.""" + data = get_url(url, **params).json() + remaining = data.get('quota_remaining') or 0 + total = data.get('quota_max') or 0 + if total and remaining: + log.info(u'%d/%d API requests remaining', remaining, total) + return data - return result +def get_sites(): + """Retrieve list of available StackExchange sites.""" + sites = [] + page = 1 + while True: + log.debug(u'[sites] fetching page %d ...', page) + data = api_call(SITES_URL, pagesize=100, page=page) -def get_answers(query=None, tags=None, limit=RESULT_COUNT): - """Return list of answers from API""" - headers = {} - headers['user-agent'] = USER_AGENT.format(version=wf.version, - url=wf.help_url) + for d in data.get('items', []): + if d['site_state'] == 'closed_beta': + log.debug('[sites] ignored %r (closed beta)', + d['api_site_parameter']) + continue + + sites.append(Site( + h.unescape(d['api_site_parameter']), + h.unescape(d['name']), + h.unescape(d['audience']), + d['icon_url'], + d['site_type'] == 'meta_site', + )) + + if not data.get('has_more'): + break + + page += 1 + + return sites + + +def handle_answer(api_dict): + """Extract relevant info from API result.""" + return Answer( + h.unescape(api_dict['title']), + h.unescape(api_dict['link']), + tuple(h.unescape(api_dict['tags'])), + api_dict['is_answered'], + ) + + +def get_answers(site_id, query=None, tags=None, limit=RESULT_COUNT): + """Return list of answers from API.""" params = { 'page': 1, 'pagesize': limit, 'order': 'desc', 'sort': 'relevance', - 'site': SITE + 'site': site_id } if query: params['q'] = query if tags: params['tagged'] = ';'.join(tags) - r = web.get(API_URL, params, headers=headers) - - log.debug('[{}] {}'.format(r.status_code, r.url)) - - r.raise_for_status() - - data = r.json() - - results = [handle_answer(d) for d in data['items']] + data = api_call(API_URL, **params) + answers = [handle_answer(d) for d in data['items']] # Sort with answered first - answered = [] - unanswered = [] - for d in results: - if d['answered']: - answered.append(d) - else: - unanswered.append(d) + answers.sort(key=lambda a: not a.answered) + return answers + + +def icon_path(site_id, answered=False): + """Return local path for site icon. + + Args: + site_id (str): Site whose icon path should be returned. + answered (bool, optional): Return version of icon with check mark. + + Returns: + str: Path to icon. + """ + suffix = '-answered' if answered else '' + return wf.cachefile('icons/%s%s.png' % (site_id, suffix)) + + +def site_icon(site_id, answered=False, default=None): + """Return locally-cached icon for ``site`` or ``default``. + + Args: + site_id (str): Site whose icon should be returned. + answered (bool, optional): Return version of icon with check mark. + default (None, optional): Default to return if icon is not cached. + + Returns: + str: Path to icon file. + """ + p = icon_path(site_id, answered) + if os.path.exists(p): + return p + + return default + + +def do_cache_sites(args): + """Update cached list of sites and download icons.""" + sites = get_sites() + log.debug(u'[sites] retrieved %d StackExchange sites', len(sites)) + wf.cache_data(SITES_KEY, sites) + icons = [s for s in sites if site_icon(s) is None] + if icons: + from icons import overlay + dirpath = wf.cachefile('icons') + if not os.path.exists(dirpath): + os.makedirs(dirpath) + log.debug('[sites] caching %d icons', len(icons)) + for s in icons: + p = icon_path(s.id) + try: + r = get_url(s.icon) + r.save_to_path(p) + overlay(p, CHECK_MARK, icon_path(s.id, True)) + except Exception as err: + log.error('[icons] failed to cache icon for %r: %s', s.id, err) + + +def do_reveal_icon(args): + """Reveal site icon in Finder.""" + from workflow.notify import notify + from workflow.util import applescriptify, run_applescript + s = site_from_env() + log.debug('[reveal] site=%r', s) + p = icon_path(s.id) + if not os.path.exists(p): + notify(u'Error', + u'Icon for “{s.name}” has not been downloaded'.format(s=s)) + script = u""" + tell application "Finder" + reveal POSIX file "{}" + activate + end tell + """.format(applescriptify(p)) + run_applescript(script) + + +def do_set_default(args): + """Set site as default.""" + from workflow.util import run_trigger, set_config + from workflow.notify import notify + s = site_from_env() + log.debug('[default] site=%r', s) + set_config('site_id', s.id, exportable=True) + set_config('site_name', s.name, exportable=True) + run_trigger('search') + notify(u'Updated Settings', + u'Default site changed to “{s.name}”'.format(s=s)) + + +def do_sites(args): + """Script Filter to choose a StackExchange site.""" + updating = False + sites = wf.cached_data(SITES_KEY, None, 0) + if not sites: + updating = True + wf.add_item(u'Updating List of Sites…', + u'Please wait a few moments', + valid=False) + wf.rerun = 0.2 + wf.send_feedback() + return - return answered + unanswered + # Set rerun in case sites/icons are being updated + if updating or is_running('sites'): + wf.rerun = 0.3 + if IGNORE_META: + sites = [s for s in sites if not s.is_meta] + + query = args[''].strip() + if query: + sites = wf.filter(query, sites, key=lambda s: s.name) + + for s in sites: + it = wf.add_item(s.name, + s.audience, + icon=site_icon(s.id, default='icon.png'), + uid=s.id, + copytext=s.id, + valid=True) + + it.setvar('site_id', s.id) + it.setvar('site_name', s.name) + it.setvar('site_audience', s.audience) + it.setvar('site_icon', s.icon) + it.setvar('site_is_meta', '1' if s.is_meta else '0') + + # Alternate actions + mod = it.add_modifier('cmd', u'Set as default site') + mod.setvar('action', 'set-default') + mod = it.add_modifier('alt', u'Reveal icon in Finder') + mod.setvar('action', 'reveal-icon') + + wf.warn_empty(u'No Matching Sites', u'Try a different query') + wf.send_feedback() -def main(wf): +def do_search(args): + """Script Filter to search StackExchange site.""" # Update available? if wf.update_available: - wf.add_item('A newer version is available', - '↩ to install update', + wf.add_item(u'A newer version is available', + u'↩ to install update', autocomplete='workflow:update', icon=ICON_UPDATE) - query = wf.args[0].strip() + query = args[''].strip() + site_id = args['--site'] + + # Set rerun in case sites/icons are being updated + if is_running('sites'): + wf.rerun = 0.3 # Tag prefix only. Treat as blank query if query == '.': query = '' - log.debug('query : {!r}'.format(query)) - - if not query: - wf.add_item('Search StackOverflow') - wf.send_feedback() - return 0 + log.debug(u'site=%r, query=%r', site_id, query) # Parse query into query string and tags words = query.split(' ') @@ -146,43 +426,57 @@ def main(wf): query = ' '.join(query) - key = cache_key(query, tags) - # Fetch answers from API + answers = wf.cached_data( + cache_key(site_id, query, tags), + functools.partial(get_answers, site_id, query, tags), + max_age=CACHE_MAX_AGE, + ) + log.info(u'%d answers for query %r and tags %r', + len(answers), query, ', '.join(tags)) - answers = wf.cached_data(key, functools.partial(get_answers, query, tags), - max_age=CACHE_MAX_AGE) + # Show results + for a in answers: + wf.add_item(a.title, + ', '.join(a.tags), + arg=a.link, + uid=a.link, + valid=True, + largetext=a.title, + icon=site_icon(site_id, a.answered, 'icon.png')) - log.debug('{} answers for {!r}, tagged {!r}'.format(len(answers), - query, - tags)) + wf.warn_empty(u'No Answers Found', u'Try a different query') + wf.send_feedback() - # Show results - if not answers: - wf.add_item('No matching answers found', - 'Try a different query', - icon=ICON_WARNING) +def main(wf): + """Run workflow.""" + from docopt import docopt + args = docopt(USAGE, wf.args, version=wf.version) + log.debug('args=%r', args) - for answer in answers: - if answer['answered']: - icon = ICON_ANSWERED - else: - icon = 'icon.png' + if not wf.cached_data_fresh(SITES_KEY, 86400) and not is_running('sites'): + log.debug(u'Updating list of sites…') + run_in_background('sites', ('/usr/bin/python', 'so.py', 'cache-sites')) - wf.add_item(answer['title'], - ', '.join(answer['tags']), - arg=answer['link'], - valid=True, - largetext=answer['title'], - icon=icon) - # log.debug(answer) + if args['search']: + return do_search(args) - wf.send_feedback() + if args['sites']: + return do_sites(args) + + if args['cache-sites']: + return do_cache_sites(args) + + if args['reveal-icon']: + return do_reveal_icon(args) + + if args['set-default']: + return do_set_default(args) if __name__ == '__main__': - wf = Workflow(help_url=HELP_URL, - update_settings=UPDATE_SETTINGS) + wf = Workflow3(help_url=HELP_URL, + update_settings=UPDATE_SETTINGS) log = wf.logger sys.exit(wf.run(main)) diff --git a/src/version b/src/version deleted file mode 100644 index a58941b..0000000 --- a/src/version +++ /dev/null @@ -1 +0,0 @@ -1.3 \ No newline at end of file diff --git a/src/workflow/__init__.py b/src/workflow/__init__.py index 3069e51..17636a4 100644 --- a/src/workflow/__init__.py +++ b/src/workflow/__init__.py @@ -64,7 +64,7 @@ __version__ = open(os.path.join(os.path.dirname(__file__), 'version')).read() __author__ = 'Dean Jackson' __licence__ = 'MIT' -__copyright__ = 'Copyright 2014 Dean Jackson' +__copyright__ = 'Copyright 2014-2019 Dean Jackson' __all__ = [ 'Variables', diff --git a/src/workflow/background.py b/src/workflow/background.py index 7bda3f5..ba5c52a 100644 --- a/src/workflow/background.py +++ b/src/workflow/background.py @@ -8,10 +8,18 @@ # Created on 2014-04-06 # -"""Run background tasks.""" +"""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 @@ -31,6 +39,10 @@ def wf(): return _wf +def _log(): + return wf().logger + + def _arg_cache(name): """Return path to pickle cache file for arguments. @@ -40,7 +52,7 @@ def _arg_cache(name): :rtype: ``unicode`` filepath """ - return wf().cachefile('{0}.argcache'.format(name)) + return wf().cachefile(name + '.argcache') def _pid_file(name): @@ -52,7 +64,7 @@ def _pid_file(name): :rtype: ``unicode`` filepath """ - return wf().cachefile('{0}.pid'.format(name)) + return wf().cachefile(name + '.pid') def _process_exists(pid): @@ -71,35 +83,52 @@ def _process_exists(pid): return True -def is_running(name): - """Test whether task is running under ``name``. +def _job_pid(name): + """Get PID of job or `None` if job does not exist. - :param name: name of task - :type name: ``unicode`` - :returns: ``True`` if task with name ``name`` is running, else ``False`` - :rtype: ``Boolean`` + 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 False + return - with open(pidfile, 'rb') as file_obj: - pid = int(file_obj.read().strip()) + with open(pidfile, 'rb') as fp: + pid = int(fp.read()) - if _process_exists(pid): - return True + if _process_exists(pid): + return pid - elif os.path.exists(pidfile): + 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(stdin='/dev/null', stdout='/dev/null', +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 @@ -108,25 +137,31 @@ def _background(stdin='/dev/null', stdout='/dev/null', :type stderr: filepath """ - def _fork_and_exit_parent(errmsg): + 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: - wf().logger.critical('%s: (%d) %s', errmsg, err.errno, - err.strerror) + _log().critical('%s: (%d) %s', errmsg, err.errno, err.strerror) raise err - # Do first fork. - _fork_and_exit_parent('fork #1 failed') + # 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. - _fork_and_exit_parent('fork #2 failed') + # 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. @@ -141,15 +176,35 @@ def _fork_and_exit_parent(errmsg): 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 task - :type name: ``unicode`` + :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`` + :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 @@ -167,24 +222,26 @@ def run_in_background(name, args, **kwargs): """ if is_running(name): - wf().logger.info('Task `{0}` is already running'.format(name)) + _log().info('[%s] job already running', name) return argcache = _arg_cache(name) # Cache arguments - with open(argcache, 'wb') as file_obj: - pickle.dump({'args': args, 'kwargs': kwargs}, file_obj) - wf().logger.debug('Command arguments cached to `{0}`'.format(argcache)) + 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] - wf().logger.debug('Calling {0!r} ...'.format(cmd)) + _log().debug('[%s] passing job to background runner: %r', name, cmd) retcode = subprocess.call(cmd) + if retcode: # pragma: no cover - wf().logger.error('Failed to call task in background') + _log().error('[%s] background runner failed with %d', name, retcode) else: - wf().logger.debug('Executing task `{0}` in background...'.format(name)) + _log().debug('[%s] background job started', name) + return retcode @@ -195,15 +252,21 @@ def main(wf): # pragma: no cover :meth:`subprocess.call` with cached arguments. """ + log = wf.logger name = wf.args[0] argcache = _arg_cache(name) if not os.path.exists(argcache): - wf.logger.critical('No arg cache found : {0!r}'.format(argcache)) - return 1 + 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 file_obj: - data = pickle.load(file_obj) + with open(argcache, 'rb') as fp: + data = pickle.load(fp) # Cached arguments args = data['args'] @@ -212,30 +275,18 @@ def main(wf): # pragma: no cover # Delete argument cache file os.unlink(argcache) - pidfile = _pid_file(name) - - # Fork to background - _background() - - # Write PID to file - with open(pidfile, 'wb') as file_obj: - file_obj.write('{0}'.format(os.getpid())) - - # Run the command try: - wf.logger.debug('Task `{0}` running'.format(name)) - wf.logger.debug('cmd : {0!r}'.format(args)) + # Run the command + log.debug('[%s] running command: %r', name, args) retcode = subprocess.call(args, **kwargs) if retcode: - wf.logger.error('Command failed with [{0}] : {1!r}'.format( - retcode, args)) - + log.error('[%s] command failed with status %d', name, retcode) finally: - if os.path.exists(pidfile): - os.unlink(pidfile) - wf.logger.debug('Task `{0}` finished'.format(name)) + os.unlink(pidfile) + + log.debug('[%s] job complete', name) if __name__ == '__main__': # pragma: no cover diff --git a/src/workflow/notify.py b/src/workflow/notify.py index 3ed1e5e..a4b7f40 100644 --- a/src/workflow/notify.py +++ b/src/workflow/notify.py @@ -11,9 +11,10 @@ # TODO: Exclude this module from test and code coverage in py2.6 """ -Post notifications via the OS X Notification Center. This feature -is only available on Mountain Lion (10.8) and later. It will -silently fail on older systems. +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`. @@ -60,10 +61,10 @@ def wf(): - """Return `Workflow` object for this module. + """Return Workflow object for this module. Returns: - workflow.Workflow: `Workflow` object for current workflow. + workflow.Workflow: Workflow object for current workflow. """ global _wf if _wf is None: @@ -87,7 +88,7 @@ def notifier_program(): """Return path to notifier applet executable. Returns: - unicode: Path to Notify.app `applet` executable. + unicode: Path to Notify.app ``applet`` executable. """ return wf().datafile('Notify.app/Contents/MacOS/applet') @@ -96,13 +97,13 @@ def notifier_icon_path(): """Return path to icon file in installed Notify.app. Returns: - unicode: Path to `applet.icns` within the app bundle. + 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. + """Extract ``Notify.app`` from the workflow to data directory. Changes the bundle ID of the installed app and gives it the workflow's icon. @@ -111,13 +112,13 @@ def install_notifier(): destdir = wf().datadir app_path = os.path.join(destdir, 'Notify.app') n = notifier_program() - log().debug("Installing Notify.app to %r ...", destdir) + 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 {0!r}.".format(destdir)) + assert os.path.exists(n), \ + 'Notify.app could not be installed in %s' % destdir # Replace applet icon icon = notifier_icon_path() @@ -144,29 +145,29 @@ def install_notifier(): 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 {0!r}'.format(bundle_id)) + 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. + """Coerce ``sound`` to valid sound name. - Returns `None` for invalid sounds. Sound names can be found - in `System Preferences > Sound > Sound Effects`. + 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`. + 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 OS X 10.11 + # Title-case is correct for all system sounds as of macOS 10.11 return sound.title() return None @@ -180,10 +181,10 @@ def notify(title='', text='', sound=None): sound (str, optional): Name of sound to play. Raises: - ValueError: Raised if both `title` and `text` are empty. + ValueError: Raised if both ``title`` and ``text`` are empty. Returns: - bool: `True` if notification was posted, else `False`. + bool: ``True`` if notification was posted, else ``False``. """ if title == text == '': raise ValueError('Empty notification') @@ -198,7 +199,7 @@ def notify(title='', text='', sound=None): env = os.environ.copy() enc = 'utf-8' env['NOTIFY_TITLE'] = title.encode(enc) - env['NOTIFY_MESSAGE'] = text.encode(enc) + env['NOTIFY_MESSAGE'] = text.encode(enc) env['NOTIFY_SOUND'] = sound.encode(enc) cmd = [n] retcode = subprocess.call(cmd, env=env) @@ -210,7 +211,7 @@ def notify(title='', text='', sound=None): def convert_image(inpath, outpath, size): - """Convert an image file using `sips`. + """Convert an image file using ``sips``. Args: inpath (str): Path of source file. @@ -218,11 +219,11 @@ def convert_image(inpath, outpath, size): size (int): Width and height of destination image in pixels. Raises: - RuntimeError: Raised if `sips` exits with non-zero status. + RuntimeError: Raised if ``sips`` exits with non-zero status. """ cmd = [ b'sips', - b'-z', b'{0}'.format(size), b'{0}'.format(size), + b'-z', str(size), str(size), inpath, b'--out', outpath] # log().debug(cmd) @@ -230,14 +231,14 @@ def convert_image(inpath, outpath, size): retcode = subprocess.call(cmd, stdout=pipe, stderr=subprocess.STDOUT) if retcode != 0: - raise RuntimeError('sips exited with {0}'.format(retcode)) + raise RuntimeError('sips exited with %d' % retcode) def png_to_icns(png_path, icns_path): - """Convert PNG file to ICNS using `iconutil`. + """Convert PNG file to ICNS using ``iconutil``. Create an iconset from the source PNG file. Generate PNG files - in each size required by OS X, then call `iconutil` to turn + in each size required by macOS, then call ``iconutil`` to turn them into a single ICNS file. Args: @@ -245,15 +246,15 @@ def png_to_icns(png_path, icns_path): icns_path (str): Path to destination ICNS file. Raises: - RuntimeError: Raised if `iconutil` or `sips` fail. + 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 path already exists : {0!r}".format(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 @@ -261,7 +262,7 @@ def png_to_icns(png_path, icns_path): 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))) + 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')) @@ -280,10 +281,10 @@ def png_to_icns(png_path, icns_path): retcode = subprocess.call(cmd) if retcode != 0: - raise RuntimeError("iconset exited with {0}".format(retcode)) + raise RuntimeError('iconset exited with %d' % retcode) - assert os.path.exists(icns_path), ( - "Generated ICNS file not found : {0!r}".format(icns_path)) + assert os.path.exists(icns_path), \ + 'generated ICNS file not found: ' + repr(icns_path) finally: try: shutil.rmtree(tempdir) @@ -291,36 +292,6 @@ def png_to_icns(png_path, icns_path): pass -# def notify_native(title='', text='', sound=''): -# """Post notification via the native API (via pyobjc). - -# At least one of `title` or `text` must be specified. - -# This method will *always* show the Python launcher icon (i.e. the -# rocket with the snakes on it). - -# Args: -# title (str, optional): Notification title. -# text (str, optional): Notification body text. -# sound (str, optional): Name of sound to play. - -# """ - -# if title == text == '': -# raise ValueError('Empty notification') - -# import Foundation - -# sound = sound or Foundation.NSUserNotificationDefaultSoundName - -# n = Foundation.NSUserNotification.alloc().init() -# n.setTitle_(title) -# n.setInformativeText_(text) -# n.setSoundName_(sound) -# nc = Foundation.NSUserNotificationCenter.defaultUserNotificationCenter() -# nc.deliverNotification_(n) - - 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 @@ -329,21 +300,20 @@ def png_to_icns(png_path, icns_path): from unicodedata import normalize - def uni(s): + def ustr(s): """Coerce `s` to normalised Unicode.""" - ustr = s.decode('utf-8') - return normalize('NFD', ustr) + 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=uni, + help="Notification title.", type=ustr, default='') - p.add_argument('-s', '--sound', type=uni, + p.add_argument('-s', '--sound', type=ustr, help="Optional notification sound.", default='') - p.add_argument('text', type=uni, + p.add_argument('text', type=ustr, help="Notification body text.", default='', nargs='?') o = p.parse_args() @@ -357,21 +327,20 @@ def uni(s): if o.png: icns = os.path.join( os.path.dirname(o.png), - b'{0}{1}'.format(os.path.splitext(os.path.basename(o.png))[0], - '.icns')) + os.path.splitext(os.path.basename(o.png))[0] + '.icns') - print('Converting {0!r} to {1!r} ...'.format(o.png, 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 : {0}".format(icns)) + 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) + print('ERROR: empty notification.', file=sys.stderr) sys.exit(1) else: notify(o.title, o.text, o.sound) diff --git a/src/workflow/update.py b/src/workflow/update.py index bb8e9da..6affc94 100644 --- a/src/workflow/update.py +++ b/src/workflow/update.py @@ -23,6 +23,9 @@ from __future__ import print_function, unicode_literals +from collections import defaultdict +from functools import total_ordering +import json import os import tempfile import re @@ -34,8 +37,8 @@ # __all__ = [] -RELEASES_BASE = 'https://api.github.com/repos/{0}/releases' - +RELEASES_BASE = 'https://api.github.com/repos/{}/releases' +match_workflow = re.compile(r'\.alfred(\d+)?workflow$').search _wf = None @@ -48,6 +51,153 @@ def wf(): return _wf +@total_ordering +class Download(object): + """A workflow file that is available for download. + + .. versionadded: 1.37 + + Attributes: + url (str): URL of workflow file. + filename (str): Filename of workflow file. + version (Version): Semantic version of workflow. + prerelease (bool): Whether version is a pre-release. + alfred_version (Version): Minimum compatible version + of Alfred. + + """ + + @classmethod + def from_dict(cls, d): + """Create a `Download` from a `dict`.""" + return cls(url=d['url'], filename=d['filename'], + version=Version(d['version']), + prerelease=d['prerelease']) + + @classmethod + def from_releases(cls, js): + """Extract downloads from GitHub releases. + + Searches releases with semantic tags for assets with + file extension .alfredworkflow or .alfredXworkflow where + X is a number. + + Files are returned sorted by latest version first. Any + releases containing multiple files with the same (workflow) + extension are rejected as ambiguous. + + Args: + js (str): JSON response from GitHub's releases endpoint. + + Returns: + list: Sequence of `Download`. + """ + releases = json.loads(js) + downloads = [] + for release in releases: + tag = release['tag_name'] + dupes = defaultdict(int) + try: + version = Version(tag) + except ValueError as err: + wf().logger.debug('ignored release: bad version "%s": %s', + tag, err) + continue + + dls = [] + for asset in release.get('assets', []): + url = asset.get('browser_download_url') + filename = os.path.basename(url) + m = match_workflow(filename) + if not m: + wf().logger.debug('unwanted file: %s', filename) + continue + + ext = m.group(0) + dupes[ext] = dupes[ext] + 1 + dls.append(Download(url, filename, version, + release['prerelease'])) + + valid = True + for ext, n in dupes.items(): + if n > 1: + wf().logger.debug('ignored release "%s": multiple assets ' + 'with extension "%s"', tag, ext) + valid = False + break + + if valid: + downloads.extend(dls) + + downloads.sort(reverse=True) + return downloads + + def __init__(self, url, filename, version, prerelease=False): + """Create a new Download. + + Args: + url (str): URL of workflow file. + filename (str): Filename of workflow file. + version (Version): Version of workflow. + prerelease (bool, optional): Whether version is + pre-release. Defaults to False. + + """ + if isinstance(version, basestring): + version = Version(version) + + self.url = url + self.filename = filename + self.version = version + self.prerelease = prerelease + + @property + def alfred_version(self): + """Minimum Alfred version based on filename extension.""" + m = match_workflow(self.filename) + if not m or not m.group(1): + return Version('0') + return Version(m.group(1)) + + @property + def dict(self): + """Convert `Download` to `dict`.""" + return dict(url=self.url, filename=self.filename, + version=str(self.version), prerelease=self.prerelease) + + def __str__(self): + """Format `Download` for printing.""" + u = ('Download(url={dl.url!r}, ' + 'filename={dl.filename!r}, ' + 'version={dl.version!r}, ' + 'prerelease={dl.prerelease!r})'.format(dl=self)) + + return u.encode('utf-8') + + def __repr__(self): + """Code-like representation of `Download`.""" + return str(self) + + def __eq__(self, other): + """Compare Downloads based on version numbers.""" + if self.url != other.url \ + or self.filename != other.filename \ + or self.version != other.version \ + or self.prerelease != other.prerelease: + return False + return True + + def __ne__(self, other): + """Compare Downloads based on version numbers.""" + return not self.__eq__(other) + + def __lt__(self, other): + """Compare Downloads based on version numbers.""" + if self.version != other.version: + return self.version < other.version + return self.alfred_version < other.alfred_version + + class Version(object): """Mostly semantic versioning. @@ -72,7 +222,7 @@ class Version(object): """ #: Match version and pre-release/build information in version strings - match_version = re.compile(r'([0-9\.]+)(.+)?').match + match_version = re.compile(r'([0-9][0-9\.]*)(.+)?').match def __init__(self, vstr): """Create new `Version` object. @@ -80,6 +230,9 @@ def __init__(self, vstr): Args: vstr (basestring): Semantic version string. """ + if not vstr: + raise ValueError('invalid version number: {!r}'.format(vstr)) + self.vstr = vstr self.major = 0 self.minor = 0 @@ -94,7 +247,7 @@ def _parse(self, vstr): else: m = self.match_version(vstr) if not m: - raise ValueError('Invalid version number: {0}'.format(vstr)) + raise ValueError('invalid version number: ' + vstr) version, suffix = m.groups() parts = self._parse_dotted_string(version) @@ -104,7 +257,7 @@ def _parse(self, vstr): if len(parts): self.patch = parts.pop(0) if not len(parts) == 0: - raise ValueError('Invalid version (too long) : {0}'.format(vstr)) + raise ValueError('version number too long: ' + vstr) if suffix: # Build info @@ -115,12 +268,9 @@ def _parse(self, vstr): if suffix: if not suffix.startswith('-'): raise ValueError( - 'Invalid suffix : `{0}`. Must start with `-`'.format( - suffix)) + 'suffix must start with - : ' + 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 = [] @@ -139,7 +289,7 @@ def tuple(self): def __lt__(self, other): """Implement comparison.""" if not isinstance(other, Version): - raise ValueError('Not a Version instance: {0!r}'.format(other)) + raise ValueError('not a Version instance: {0!r}'.format(other)) t = self.tuple[:3] o = other.tuple[:3] if t < o: @@ -149,15 +299,15 @@ def __lt__(self, other): return True if other.suffix and not self.suffix: return False - return (self._parse_dotted_string(self.suffix) < - self._parse_dotted_string(other.suffix)) + 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)) + raise ValueError('not a Version instance: {0!r}'.format(other)) return self.tuple == other.tuple def __ne__(self, other): @@ -167,13 +317,13 @@ def __ne__(self, other): def __gt__(self, other): """Implement comparison.""" if not isinstance(other, Version): - raise ValueError('Not a Version instance: {0!r}'.format(other)) + 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)) + raise ValueError('not a Version instance: {0!r}'.format(other)) return not other.__lt__(self) def __ge__(self, other): @@ -184,9 +334,9 @@ def __str__(self): """Return semantic version string.""" vstr = '{0}.{1}.{2}'.format(self.major, self.minor, self.patch) if self.suffix: - vstr += '-{0}'.format(self.suffix) + vstr = '{0}-{1}'.format(vstr, self.suffix) if self.build: - vstr += '+{0}'.format(self.build) + vstr = '{0}+{1}'.format(vstr, self.build) return vstr def __repr__(self): @@ -194,186 +344,151 @@ def __repr__(self): return "Version('{0}')".format(str(self)) -def download_workflow(url): - """Download workflow at ``url`` to a local temporary file. +def retrieve_download(dl): + """Saves a download to a temporary file and returns path. - :param url: URL to .alfredworkflow file in GitHub repo - :returns: path to downloaded file + .. versionadded: 1.37 - """ - filename = url.split("/")[-1] - - if (not filename.endswith('.alfredworkflow') and - not filename.endswith('.alfred3workflow')): - raise ValueError('Attachment `{0}` not a workflow'.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) + Args: + url (unicode): URL to .alfredworkflow file in GitHub repo - 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 + Returns: + unicode: path to downloaded file """ - 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 + if not match_workflow(dl.filename): + raise ValueError('attachment not a workflow: ' + dl.filename) - downloads[ext].append(url) - dl_count += 1 + path = os.path.join(tempfile.gettempdir(), dl.filename) + wf().logger.debug('downloading update from ' + '%r to %r ...', dl.url, path) - # download_urls.append(url) + r = web.get(dl.url) + r.raise_for_status() - if dl_count == 0: - wf().logger.warning( - 'Invalid release %s : No workflow file', version) - return None + r.save_to_path(path) - for k in downloads: - if len(downloads[k]) > 1: - wf().logger.warning( - 'Invalid release %s : multiple %s files', version, k) - return None + return path - # 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] +def build_api_url(repo): + """Generate releases URL from GitHub repo. - wf().logger.debug('Release `%s` : %s', version, download_url) + Args: + repo (unicode): Repo name in form ``username/repo`` - return { - 'version': version, - 'download_url': download_url, - 'prerelease': release['prerelease'] - } + Returns: + unicode: URL to the API endpoint for the repo's releases + """ + if len(repo.split('/')) != 2: + raise ValueError('invalid GitHub repo: {!r}'.format(repo)) -def get_valid_releases(github_slug, prereleases=False): - """Return list of all valid releases. + return RELEASES_BASE.format(repo) - :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 }`` +def get_downloads(repo): + """Load available ``Download``s for GitHub repo. - A valid release is one that contains one ``.alfredworkflow`` file. + .. versionadded: 1.37 - If the GitHub version (i.e. tag) is of the form ``v1.1``, the leading - ``v`` will be stripped. + Args: + repo (unicode): GitHub repo to load releases for. + Returns: + list: Sequence of `Download` contained in GitHub releases. """ - api_url = build_api_url(github_slug) - releases = [] + url = build_api_url(repo) - wf().logger.debug('Retrieving releases list from `%s` ...', api_url) + def _fetch(): + wf().logger.info('retrieving releases for %r ...', repo) + r = web.get(url) + r.raise_for_status() + return r.content - def retrieve_releases(): - wf().logger.info( - 'Retrieving releases for `%s` ...', github_slug) - return web.get(api_url).json() + key = 'github-releases-' + repo.replace('/', '-') + js = wf().cached_data(key, _fetch, max_age=60) - slug = github_slug.replace('/', '-') - for release in wf().cached_data('gh-releases-{0}'.format(slug), - retrieve_releases): + return Download.from_releases(js) - wf().logger.debug('Release : %r', release) - release = _validate_release(release) - if release is None: - wf().logger.debug('Invalid release') - continue +def latest_download(dls, alfred_version=None, prereleases=False): + """Return newest `Download`.""" + alfred_version = alfred_version or os.getenv('alfred_version') + version = None + if alfred_version: + version = Version(alfred_version) - elif release['prerelease'] and not prereleases: - wf().logger.debug('Ignoring prerelease : %s', release['version']) + dls.sort(reverse=True) + for dl in dls: + if dl.prerelease and not prereleases: + wf().logger.debug('ignored prerelease: %s', dl.version) + continue + if version and dl.alfred_version > version: + wf().logger.debug('ignored incompatible (%s > %s): %s', + dl.alfred_version, version, dl.filename) continue - releases.append(release) + wf().logger.debug('latest version: %s (%s)', dl.version, dl.filename) + return dl - return releases + return None -def check_update(github_slug, current_version, prereleases=False): +def check_update(repo, current_version, prereleases=False, + alfred_version=None): """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`` + Args: + repo (unicode): ``username/repo`` for workflow's GitHub repo + current_version (unicode): the currently installed version of the + workflow. :ref:`Semantic versioning ` is required. + prereleases (bool): Whether to include pre-releases. + alfred_version (unicode): version of currently-running Alfred. + if empty, defaults to ``$alfred_version`` environment variable. + + Returns: + bool: ``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) + key = '__workflow_latest_version' + # data stored when no update is available + no_update = { + 'available': False, + 'download': None, + 'version': None, + } + current = Version(current_version) - wf().logger.info('%d releases for %s', len(releases), github_slug) + dls = get_downloads(repo) + if not len(dls): + wf().logger.warning('no valid downloads for %s', repo) + wf().cache_data(key, no_update) + return False - if not len(releases): - raise ValueError('No valid releases for %s', github_slug) + wf().logger.info('%d download(s) for %s', len(dls), repo) - # GitHub returns releases newest-first - latest_release = releases[0] + dl = latest_download(dls, alfred_version, prereleases) - # (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: + if not dl: + wf().logger.warning('no compatible downloads for %s', repo) + wf().cache_data(key, no_update) + return False - wf().cache_data('__workflow_update_status', { - 'version': latest_release['version'], - 'download_url': latest_release['download_url'], - 'available': True - }) + wf().logger.debug('latest=%r, installed=%r', dl.version, current) + if dl.version > current: + wf().cache_data(key, { + 'version': str(dl.version), + 'download': dl.dict, + 'available': True, + }) return True - wf().cache_data('__workflow_update_status', { - 'available': False - }) + wf().cache_data(key, no_update) return False @@ -383,46 +498,68 @@ def install_update(): :returns: ``True`` if an update is installed, else ``False`` """ - update_data = wf().cached_data('__workflow_update_status', max_age=0) + key = '__workflow_latest_version' + # data stored when no update is available + no_update = { + 'available': False, + 'download': None, + 'version': None, + } + status = wf().cached_data(key, max_age=0) + + if not status or not status.get('available'): + wf().logger.info('no update available') + return False - if not update_data or not update_data.get('available'): - wf().logger.info('No update available') + dl = status.get('download') + if not dl: + wf().logger.info('no download information') return False - local_file = download_workflow(update_data['download_url']) + path = retrieve_download(Download.from_dict(dl)) - wf().logger.info('Installing updated workflow ...') - subprocess.call(['open', local_file]) + wf().logger.info('installing updated workflow ...') + subprocess.call(['open', path]) - update_data['available'] = False - wf().cache_data('__workflow_update_status', update_data) + wf().cache_data(key, no_update) return True if __name__ == '__main__': # pragma: nocover import sys - def show_help(): + prereleases = False + + def show_help(status=0): """Print help message.""" - print('Usage : update.py (check|install) github_slug version ' - '[--prereleases]') - sys.exit(1) + print('usage: update.py (check|install) ' + '[--prereleases] ') + sys.exit(status) argv = sys.argv[:] - prereleases = '--prereleases' in argv + if '-h' in argv or '--help' in argv: + show_help() - if prereleases: + if '--prereleases' in argv: argv.remove('--prereleases') + prereleases = True if len(argv) != 4: - show_help() + show_help(1) - action, github_slug, version = argv[1:] + action = argv[1] + repo = argv[2] + version = argv[3] - if action not in ('check', 'install'): - show_help() + try: + + if action == 'check': + check_update(repo, version, prereleases) + elif action == 'install': + install_update() + else: + show_help(1) - if action == 'check': - check_update(github_slug, version, prereleases) - elif action == 'install': - install_update() + except Exception as err: # ensure traceback is in log file + wf().logger.exception(err) + raise err diff --git a/src/workflow/util.py b/src/workflow/util.py new file mode 100644 index 0000000..27209d8 --- /dev/null +++ b/src/workflow/util.py @@ -0,0 +1,552 @@ +#!/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 json +import os +import signal +import subprocess +import sys +from threading import Event +import time + +# JXA scripts to call Alfred's API via the Scripting Bridge +# {app} is automatically replaced with "Alfred 3" or +# "com.runningwithcrayons.Alfred" depending on version. +# +# Open Alfred in search (regular) mode +JXA_SEARCH = "Application({app}).search({arg});" +# Open Alfred's File Actions on an argument +JXA_ACTION = "Application({app}).action({arg});" +# Open Alfred's navigation mode at path +JXA_BROWSE = "Application({app}).browse({arg});" +# Set the specified theme +JXA_SET_THEME = "Application({app}).setTheme({arg});" +# Call an External Trigger +JXA_TRIGGER = "Application({app}).runTrigger({arg}, {opts});" +# Save a variable to the workflow configuration sheet/info.plist +JXA_SET_CONFIG = "Application({app}).setConfiguration({arg}, {opts});" +# Delete a variable from the workflow configuration sheet/info.plist +JXA_UNSET_CONFIG = "Application({app}).removeConfiguration({arg}, {opts});" + + +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 jxa_app_name(): + """Return name of application to call currently running Alfred. + + .. versionadded: 1.37 + + Returns 'Alfred 3' or 'com.runningwithcrayons.Alfred' depending + on which version of Alfred is running. + + This name is suitable for use with ``Application(name)`` in JXA. + + Returns: + unicode: Application name or ID. + + """ + if os.getenv('alfred_version', '').startswith('3'): + # Alfred 3 + return u'Alfred 3' + # Alfred 4+ + return u'com.runningwithcrayons.Alfred' + + +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: + >>> query = 'g "python" test' + >>> applescriptify(query) + '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. + + """ + lang = 'AppleScript' + if 'lang' in kwargs: + lang = kwargs['lang'] + del kwargs['lang'] + + cmd = ['/usr/bin/osascript', '-l', lang] + + if os.path.exists(script): + cmd += [script] + else: + cmd += ['-e', script] + + cmd.extend(args) + + return run_command(cmd, **kwargs) + + +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. + + """ + bundleid = bundleid or os.getenv('alfred_workflow_bundleid') + appname = jxa_app_name() + opts = {'inWorkflow': bundleid} + if arg: + opts['withArgument'] = arg + + script = JXA_TRIGGER.format(app=json.dumps(appname), + arg=json.dumps(name), + opts=json.dumps(opts, sort_keys=True)) + + run_applescript(script, lang='JavaScript') + + +def set_config(name, value, bundleid=None, exportable=False): + """Set a workflow variable in ``info.plist``. + + .. versionadded:: 1.33 + + Args: + name (str): Name of variable to set. + value (str): Value to set variable to. + bundleid (str, optional): Bundle ID of workflow variable belongs to. + exportable (bool, optional): Whether variable should be marked + as exportable (Don't Export checkbox). + + """ + bundleid = bundleid or os.getenv('alfred_workflow_bundleid') + appname = jxa_app_name() + opts = { + 'toValue': value, + 'inWorkflow': bundleid, + 'exportable': exportable, + } + + script = JXA_SET_CONFIG.format(app=json.dumps(appname), + arg=json.dumps(name), + opts=json.dumps(opts, sort_keys=True)) + + run_applescript(script, lang='JavaScript') + + +def unset_config(name, bundleid=None): + """Delete a workflow variable from ``info.plist``. + + .. versionadded:: 1.33 + + Args: + name (str): Name of variable to delete. + bundleid (str, optional): Bundle ID of workflow variable belongs to. + + """ + bundleid = bundleid or os.getenv('alfred_workflow_bundleid') + appname = jxa_app_name() + opts = {'inWorkflow': bundleid} + + script = JXA_UNSET_CONFIG.format(app=json.dumps(appname), + arg=json.dumps(name), + opts=json.dumps(opts, sort_keys=True)) + + run_applescript(script, lang='JavaScript') + + +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', '/Applications', + '-onlyin', os.path.expanduser('~/Applications'), + '(kMDItemContentTypeTree == com.apple.application &&' + '(kMDItemDisplayName == "{0}" || kMDItemFSName == "{0}.app"))' + .format(name)] + + output = run_command(cmd).strip() + if not output: + return None + + path = output.split('\n')[0] + + 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/workflow/version b/src/workflow/version index c8d3893..673b6a6 100644 --- a/src/workflow/version +++ b/src/workflow/version @@ -1 +1 @@ -1.26 \ No newline at end of file +1.37.2 \ No newline at end of file diff --git a/src/workflow/web.py b/src/workflow/web.py index 748b199..0781911 100644 --- a/src/workflow/web.py +++ b/src/workflow/web.py @@ -24,7 +24,7 @@ import zlib -USER_AGENT = u'Alfred-Workflow/1.19 (+http://www.deanishe.net/alfred-workflow)' +USER_AGENT = u'Alfred-Workflow/1.36 (+http://www.deanishe.net/alfred-workflow)' # Valid characters for multipart form data boundaries BOUNDARY_CHARS = string.digits + string.ascii_letters @@ -77,8 +77,10 @@ def str_dict(dic): """Convert keys and values in ``dic`` into UTF-8-encoded :class:`str`. - :param dic: :class:`dict` of Unicode strings - :returns: :class:`dict` + :param dic: Mapping of Unicode strings + :type dic: dict + :returns: Dictionary containing only UTF-8 strings + :rtype: dict """ if isinstance(dic, CaseInsensitiveDictionary): @@ -98,6 +100,7 @@ class NoRedirectHandler(urllib2.HTTPRedirectHandler): """Prevent redirections.""" def redirect_request(self, *args): + """Ignore redirect.""" return None @@ -134,6 +137,7 @@ def __setitem__(self, key, value): return dict.__setitem__(self, key.lower(), {'key': key, 'val': value}) def get(self, key, default=None): + """Return value for case-insensitive key or default.""" try: v = dict.__getitem__(self, key.lower()) except KeyError: @@ -142,27 +146,34 @@ def get(self, key, default=None): return v['val'] def update(self, other): + """Update values from other ``dict``.""" for k, v in other.items(): self[k] = v def items(self): + """Return ``(key, value)`` pairs.""" return [(v['key'], v['val']) for v in dict.itervalues(self)] def keys(self): + """Return original keys.""" return [v['key'] for v in dict.itervalues(self)] def values(self): + """Return all values.""" return [v['val'] for v in dict.itervalues(self)] def iteritems(self): + """Iterate over ``(key, value)`` pairs.""" for v in dict.itervalues(self): yield v['key'], v['val'] def iterkeys(self): + """Iterate over original keys.""" for v in dict.itervalues(self): yield v['key'] def itervalues(self): + """Interate over values.""" for v in dict.itervalues(self): yield v['val'] @@ -191,7 +202,7 @@ def __init__(self, request, stream=False): :param request: :class:`urllib2.Request` instance :param stream: Whether to stream response or retrieve it all at once - :type stream: ``bool`` + :type stream: bool """ self.request = request @@ -238,8 +249,8 @@ def __init__(self, request, stream=False): # 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', '')): + if 'gzip' in headers.get('content-encoding', '') or \ + 'gzip' in headers.get('transfer-encoding', ''): self._gzipped = True @property @@ -248,6 +259,7 @@ def stream(self): Returns: bool: `True` if response is streamed. + """ return self._stream @@ -263,7 +275,7 @@ def json(self): """Decode response contents as JSON. :returns: object decoded from JSON - :rtype: :class:`list` / :class:`dict` + :rtype: list, dict or unicode """ return json.loads(self.content, self.encoding or 'utf-8') @@ -272,7 +284,8 @@ def json(self): def encoding(self): """Text encoding of document or ``None``. - :returns: :class:`str` or ``None`` + :returns: Text encoding if found. + :rtype: str or ``None`` """ if not self._encoding: @@ -285,7 +298,7 @@ def content(self): """Raw content of response (i.e. bytes). :returns: Body of HTTP response - :rtype: :class:`str` + :rtype: str """ if not self._content: @@ -310,7 +323,7 @@ def text(self): itself, the encoded response body will be returned instead. :returns: Body of HTTP response - :rtype: :class:`unicode` or :class:`str` + :rtype: unicode or str """ if self.encoding: @@ -324,9 +337,9 @@ def iter_content(self, chunk_size=4096, decode_unicode=False): .. versionadded:: 1.6 :param chunk_size: Number of bytes to read into memory - :type chunk_size: ``int`` + :type chunk_size: int :param decode_unicode: Decode to Unicode using detected encoding - :type decode_unicode: ``Boolean`` + :type decode_unicode: bool :returns: iterator """ @@ -340,20 +353,18 @@ def iter_content(self, chunk_size=4096, decode_unicode=False): "`content` has already been read from this Response.") def decode_stream(iterator, r): - - decoder = codecs.getincrementaldecoder(r.encoding)(errors='replace') + dec = codecs.getincrementaldecoder(r.encoding)(errors='replace') for chunk in iterator: - data = decoder.decode(chunk) + data = dec.decode(chunk) if data: yield data - data = decoder.decode(b'', final=True) + data = dec.decode(b'', final=True) if data: # pragma: no cover yield data def generate(): - if self._gzipped: decoder = zlib.decompressobj(16 + zlib.MAX_WBITS) @@ -406,7 +417,7 @@ def _get_encoding(self): """Get encoding from HTTP headers or content. :returns: encoding or `None` - :rtype: ``unicode`` or ``None`` + :rtype: unicode or ``None`` """ headers = self.raw.info() @@ -424,15 +435,15 @@ def _get_encoding(self): 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("""""", + m = re.search(r"""""", 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("""]*\?>""", + elif ((self.mimetype.startswith('application/') + or self.mimetype.startswith('text/')) + and 'xml' in self.mimetype): + m = re.search(r"""]*\?>""", self.content) if m: encoding = m.group(1) @@ -458,29 +469,30 @@ def request(method, url, params=None, data=None, headers=None, cookies=None, """Initiate an HTTP(S) request. Returns :class:`Response` object. :param method: 'GET' or 'POST' - :type method: ``unicode`` + :type method: unicode :param url: URL to open - :type url: ``unicode`` + :type url: unicode :param params: mapping of URL parameters - :type params: :class:`dict` + :type params: dict :param data: mapping of form data ``{'field_name': 'value'}`` or :class:`str` - :type data: :class:`dict` or :class:`str` + :type data: dict or str :param headers: HTTP headers - :type headers: :class:`dict` + :type headers: dict :param cookies: cookies to send to server - :type cookies: :class:`dict` + :type cookies: dict :param files: files to upload (see below). - :type files: :class:`dict` + :type files: dict :param auth: username, password - :type auth: ``tuple`` + :type auth: tuple :param timeout: connection timeout limit in seconds - :type timeout: ``int`` + :type timeout: int :param allow_redirects: follow redirections - :type allow_redirects: ``Boolean`` + :type allow_redirects: bool :param stream: Stream content instead of fetching it all at once. - :type stream: ``bool`` - :returns: :class:`Response` object + :type stream: bool + :returns: Response object + :rtype: :class:`Response` The ``files`` argument is a dictionary:: @@ -594,11 +606,12 @@ 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: :class:`dict` + :type fields: dict :param files: dictionary of fieldnames/files elements for file data. See below for details. - :type files: :class:`dict` of :class:`dicts` - :returns: ``(headers, body)`` ``headers`` is a :class:`dict` of HTTP headers + :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:: @@ -609,19 +622,20 @@ def encode_multipart_formdata(fields, files): } - ``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. + - ``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/string + :type filename: unicode/str :returns: mime-type, e.g. ``text/html`` - :rtype: :class::class:`str` + :rtype: str """ - return mimetypes.guess_type(filename)[0] or 'application/octet-stream' boundary = '-----' + ''.join(random.choice(BOUNDARY_CHARS) diff --git a/src/workflow/workflow.py b/src/workflow/workflow.py index 4fd8db4..2a057b0 100644 --- a/src/workflow/workflow.py +++ b/src/workflow/workflow.py @@ -10,7 +10,7 @@ """The :class:`Workflow` object is the main interface to this library. :class:`Workflow` is targeted at Alfred 2. Use -:class:`~workflow.workflow3.Workflow3` if you want to use Alfred 3's new +:class:`~workflow.Workflow3` if you want to use Alfred 3's new features, such as :ref:`workflow variables ` or more powerful modifiers. @@ -21,12 +21,9 @@ from __future__ import print_function, unicode_literals -import atexit import binascii -from contextlib import contextmanager import cPickle from copy import deepcopy -import errno import json import logging import logging.handlers @@ -35,7 +32,6 @@ import plistlib import re import shutil -import signal import string import subprocess import sys @@ -47,6 +43,13 @@ except ImportError: # pragma: no cover import xml.etree.ElementTree as ET +# imported to maintain API +from util import AcquisitionError # noqa: F401 +from util import ( + atomic_writer, + LockFile, + uninterruptible, +) #: Sentinel for properties that haven't been set yet (that might #: correctly have the value ``None``) @@ -56,7 +59,7 @@ # Standard system icons #################################################################### -# These icons are default OS X icons. They are super-high quality, and +# 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 @@ -443,12 +446,9 @@ #################################################################### -# Lockfile and Keychain access errors +# Keychain access errors #################################################################### -class AcquisitionError(Exception): - """Raised if a lock cannot be acquired.""" - class KeychainError(Exception): """Raised for unknown Keychain errors. @@ -456,6 +456,7 @@ class KeychainError(Exception): 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. + """ @@ -464,6 +465,7 @@ class PasswordNotFound(KeychainError): Raised by method :meth:`Workflow.get_password` when ``account`` is unknown to the Keychain. + """ @@ -473,6 +475,7 @@ class PasswordExists(KeychainError): 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). + """ @@ -506,13 +509,13 @@ class SerializerManager(object): .. versionadded:: 1.8 A configured instance of this class is available at - ``workflow.manager``. + :attr:`workflow.manager`. Use :meth:`register()` to register new (or replace existing) serializers, which you can specify by name when calling - :class:`Workflow` data storage methods. + :class:`~workflow.Workflow` data storage methods. - See :ref:`manual-serialization` and :ref:`manual-persistent-data` + See :ref:`guide-serialization` and :ref:`guide-persistent-data` for further information. """ @@ -796,187 +799,6 @@ def elem(self): return root -class LockFile(object): - """Context manager to create lock files.""" - - def __init__(self, protected_path, timeout=0, delay=0.05): - """Create new :class:`LockFile` object.""" - self.lockfile = protected_path + '.lock' - self.timeout = timeout - self.delay = delay - self._locked = False - atexit.register(self.release) - - @property - def locked(self): - """`True` if file is locked by this instance.""" - return self._locked - - 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 `self.delay` seconds until it acquires - lock or exceeds `self.timeout` and raises an `~AcquisitionError`. - - """ - start = time.time() - while True: - - self._validate_lockfile() - - try: - fd = os.open(self.lockfile, os.O_CREAT | os.O_EXCL | os.O_RDWR) - with os.fdopen(fd, 'w') as fd: - fd.write('{0}'.format(os.getpid())) - break - except OSError as err: - if err.errno != errno.EEXIST: # pragma: no cover - raise - - if self.timeout and (time.time() - start) >= self.timeout: - raise AcquisitionError('Lock acquisition timed out.') - if not blocking: - return False - time.sleep(self.delay) - - self._locked = True - return True - - def _validate_lockfile(self): - """Check existence and validity of lockfile. - - If the lockfile exists, but contains an invalid PID - or the PID of a non-existant process, it is removed. - - """ - try: - with open(self.lockfile) as fp: - s = fp.read() - except Exception: - return - - try: - pid = int(s) - except ValueError: - return self.release() - - from background import _process_exists - if not _process_exists(pid): - self.release() - - def release(self): - """Release the lock by deleting `self.lockfile`.""" - self._locked = False - try: - os.unlink(self.lockfile) - except (OSError, IOError) as err: # pragma: no cover - if err.errno != 2: - raise err - - 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`.""" - if self._locked: # pragma: no cover - self.release() - - -@contextmanager -def atomic_writer(file_path, mode): - """Atomic file writer. - - :param file_path: path of file to write to. - :type file_path: ``unicode`` - :param mode: sames as for `func:open` - :type mode: string - - .. 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. - - """ - temp_suffix = '.aw.temp' - temp_file_path = file_path + temp_suffix - with open(temp_file_path, mode) as file_obj: - try: - yield file_obj - os.rename(temp_file_path, file_path) - finally: - try: - os.remove(temp_file_path) - except (OSError, IOError): - pass - - -class uninterruptible(object): - """Decorator that postpones SIGTERM until wrapped function is complete. - - .. versionadded:: 1.12 - - Since 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. - - .. important:: - - This decorator is NOT thread-safe. - - """ - - def __init__(self, func, class_name=''): - """Decorate `func`.""" - self.func = 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__) - - class Settings(dict): """A dictionary that saves itself when changed. @@ -1010,13 +832,15 @@ def __init__(self, filepath, defaults=None): 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 - d = {} - with open(self._filepath, 'rb') as file_obj: - for key, value in json.load(file_obj, encoding='utf-8').items(): - d[key] = value - self.update(d) - self._original = deepcopy(d) + self.update(data) self._nosave = False @uninterruptible @@ -1029,13 +853,13 @@ def save(self): """ if self._nosave: return + data = {} data.update(self) - # for key, value in self.items(): - # data[key] = value - with LockFile(self._filepath): - with atomic_writer(self._filepath, 'wb') as file_obj: - json.dump(data, file_obj, sort_keys=True, indent=2, + + 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 @@ -1063,27 +887,36 @@ def setdefault(self, key, value=None): class Workflow(object): - """Create new :class:`Workflow` instance. + """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 Alfred 2+. Subclass + :class:`~workflow.Workflow3` provides additional features, + only available in Alfred 3+, 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. - This must be a :class:`dict` that contains ``github_slug`` and - ``version`` keys. ``github_slug`` is of the form ``username/repo`` - and ``version`` **must** correspond to the tag of a release. The - boolean ``prereleases`` key is optional and if ``True`` will - override the :ref:`magic argument ` preference. - This is only recommended when the installed workflow is a pre-release. - See :ref:`updates` for more information. + :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 + :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 + :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 @@ -1133,8 +966,9 @@ def __init__(self, default_settings=None, update_settings=None, 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:`` + #: Prefix for all magic arguments. + #: The default value is ``workflow:`` so keyword + #: ``config`` would match user query ``workflow:config``. self.magic_prefix = 'workflow:' #: Mapping of available magic arguments. The built-in magic #: arguments are registered by default. To add your own magic arguments @@ -1176,32 +1010,32 @@ def alfred_env(self): ============================ ========================================= Variable Description ============================ ========================================= - alfred_debug Set to ``1`` if Alfred's debugger is + debug Set to ``1`` if Alfred's debugger is open, otherwise unset. - alfred_preferences Path to Alfred.alfredpreferences + preferences Path to Alfred.alfredpreferences (where your workflows and settings are stored). - alfred_preferences_localhash Machine-specific preferences are stored + preferences_localhash Machine-specific preferences are stored in ``Alfred.alfredpreferences/preferences/local/`` - (see ``alfred_preferences`` above for + (see ``preferences`` above for the path to ``Alfred.alfredpreferences``) - alfred_theme ID of selected theme - alfred_theme_background Background colour of selected theme in + theme ID of selected theme + theme_background Background colour of selected theme in format ``rgba(r,g,b,a)`` - alfred_theme_subtext Show result subtext. + theme_subtext Show result subtext. ``0`` = Always, ``1`` = Alternative actions only, ``2`` = Selected result only, ``3`` = Never - alfred_version Alfred version number, e.g. ``'2.4'`` - alfred_version_build Alfred build number, e.g. ``277`` - alfred_workflow_bundleid Bundle ID, e.g. + 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`` - alfred_workflow_cache Path to workflow's cache directory - alfred_workflow_data Path to workflow's data directory - alfred_workflow_name Name of current workflow - alfred_workflow_uid UID of workflow - alfred_workflow_version The version number specified in the + 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 ============================ ========================================= @@ -1218,31 +1052,30 @@ def alfred_env(self): 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'): + 'debug', + 'preferences', + 'preferences_localhash', + 'theme', + 'theme_background', + 'theme_subtext', + 'version', + 'version_build', + 'workflow_bundleid', + 'workflow_cache', + 'workflow_data', + 'workflow_name', + 'workflow_uid', + 'workflow_version'): + + value = os.getenv('alfred_' + key, '') + + if value: + if key in ('debug', 'version_build', 'theme_subtext'): value = int(value) else: value = self.decode(value) - data[key[7:]] = value + data[key] = value self._alfred_env = data @@ -1279,12 +1112,7 @@ def debugging(self): :rtype: ``bool`` """ - if self._debugging is None: - if self.alfred_env.get('debug') == 1: - self._debugging = True - else: - self._debugging = False - return self._debugging + return self.alfred_env.get('debug') == 1 @property def name(self): @@ -1393,14 +1221,18 @@ 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: + in ``~/Library/Caches``. The full path is in Alfred 4+ is: + + ``~/Library/Caches/com.runningwithcrayons.Alfred/Workflow Data/`` + + For earlier versions: ``~/Library/Caches/com.runningwithcrayons.Alfred-X/Workflow Data/`` - ``Alfred-X`` may be ``Alfred-2`` or ``Alfred-3``. + where ``Alfred-X`` may be ``Alfred-2`` or ``Alfred-3``. - :returns: full path to workflow's cache directory - :rtype: ``unicode`` + Returns: + unicode: full path to workflow's cache directory """ if self.alfred_env.get('workflow_cache'): @@ -1425,12 +1257,18 @@ 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``. The full path for Alfred 4+ is: - ``~/Library/Application Support/Alfred 2/Workflow Data/`` + ``~/Library/Application Support/Alfred/Workflow Data/`` - :returns: full path to workflow data directory - :rtype: ``unicode`` + For earlier versions, the path is: + + ``~/Library/Application Support/Alfred X/Workflow Data/`` + + where ``Alfred X` is ``Alfred 2`` or ``Alfred 3``. + + Returns: + unicode: full path to workflow data directory """ if self.alfred_env.get('workflow_data'): @@ -1452,8 +1290,8 @@ def _default_datadir(self): def workflowdir(self): """Path to workflow's root directory (where ``info.plist`` is). - :returns: full path to workflow root directory - :rtype: ``unicode`` + Returns: + unicode: full path to workflow root directory """ if not self._workflowdir: @@ -1556,9 +1394,12 @@ def logger(self): return self._logger # Initialise new logger and optionally handlers - logger = logging.getLogger('workflow') + logger = logging.getLogger('') - if not len(logger.handlers): # Only add one set of handlers + # 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' @@ -1611,7 +1452,7 @@ def settings_path(self): def settings(self): """Return a dictionary subclass that saves itself when changed. - See :ref:`manual-settings` in the :ref:`user-manual` for more + 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. @@ -1624,8 +1465,7 @@ def settings(self): """ if not self._settings: - self.logger.debug('Reading settings from `{0}` ...'.format( - self.settings_path)) + self.logger.debug('reading settings from %s', self.settings_path) self._settings = Settings(self.settings_path, self._default_settings) return self._settings @@ -1669,8 +1509,7 @@ def cache_serializer(self, serializer_name): 'Unknown serializer : `{0}`. Register your serializer ' 'with `manager` first.'.format(serializer_name)) - self.logger.debug( - 'default cache serializer set to `{0}`'.format(serializer_name)) + self.logger.debug('default cache serializer: %s', serializer_name) self._cache_serializer = serializer_name @@ -1712,8 +1551,7 @@ def data_serializer(self, serializer_name): 'Unknown serializer : `{0}`. Register your serializer ' 'with `manager` first.'.format(serializer_name)) - self.logger.debug( - 'default data serializer set to `{0}`'.format(serializer_name)) + self.logger.debug('default data serializer: %s', serializer_name) self._data_serializer = serializer_name @@ -1730,7 +1568,7 @@ def stored_data(self, name): metadata_path = self.datafile('.{0}.alfred-workflow'.format(name)) if not os.path.exists(metadata_path): - self.logger.debug('No data stored for `{0}`'.format(name)) + self.logger.debug('no data stored for `%s`', name) return None with open(metadata_path, 'rb') as file_obj: @@ -1744,14 +1582,13 @@ def stored_data(self, name): 'serializer with `manager.register()` ' 'to load this data.'.format(serializer_name)) - self.logger.debug('Data `{0}` stored in `{1}` format'.format( - name, 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 for `{0}`'.format(name)) + self.logger.debug('no data stored: %s', name) if os.path.exists(metadata_path): os.unlink(metadata_path) @@ -1760,7 +1597,7 @@ def stored_data(self, name): with open(data_path, 'rb') as file_obj: data = serializer.load(file_obj) - self.logger.debug('Stored data loaded from : {0}'.format(data_path)) + self.logger.debug('stored data loaded: %s', data_path) return data @@ -1789,7 +1626,7 @@ def delete_paths(paths): for path in paths: if os.path.exists(path): os.unlink(path) - self.logger.debug('Deleted data file : {0}'.format(path)) + self.logger.debug('deleted data file: %s', path) serializer_name = serializer or self.data_serializer @@ -1829,7 +1666,7 @@ def _store(): _store() - self.logger.debug('Stored data saved at : {0}'.format(data_path)) + 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. @@ -1855,8 +1692,7 @@ def cached_data(self, name, data_func=None, max_age=60): 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 from : %s', - cache_path) + self.logger.debug('loading cached data: %s', cache_path) return serializer.load(file_obj) if not data_func: @@ -1885,13 +1721,13 @@ def cache_data(self, name, data): if data is None: if os.path.exists(cache_path): os.unlink(cache_path) - self.logger.debug('Deleted cache file : %s', 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 saved at : %s', cache_path) + 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. @@ -1934,10 +1770,8 @@ def filter(self, query, items, key=lambda x: x, ascending=False, ``query`` is case-insensitive. Any item that does not contain the entirety of ``query`` is rejected. - .. warning:: - - If ``query`` is an empty string or contains only whitespace, - a :class:`ValueError` will be raised. + If ``query`` is an empty string or contains only whitespace, + all items will match. :param query: query to test items against :type query: ``unicode`` @@ -2030,13 +1864,13 @@ def filter(self, query, items, key=lambda x: x, ascending=False, """ if not query: - raise ValueError('Empty `query`') + return items # Remove preceding/trailing spaces query = query.strip() if not query: - raise ValueError('`query` contains only whitespace') + return items # Use user override if there is one fold_diacritics = self.settings.get('__workflow_diacritic_folding', @@ -2216,19 +2050,22 @@ def run(self, func, text_errors=False): """ 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( - 'Workflow version : {0}'.format(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() @@ -2242,8 +2079,7 @@ def run(self, func, text_errors=False): except Exception as err: self.logger.exception(err) if self.help_url: - self.logger.info( - 'For assistance, see: {0}'.format(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: @@ -2252,7 +2088,7 @@ def run(self, func, text_errors=False): self._items = [] if self._name: name = self._name - elif self._bundleid: + elif self._bundleid: # pragma: no cover name = self._bundleid else: # pragma: no cover name = os.path.dirname(__file__) @@ -2263,8 +2099,8 @@ def run(self, func, text_errors=False): return 1 finally: - self.logger.debug('Workflow finished in {0:0.3f} seconds.'.format( - time.time() - start)) + self.logger.debug('---------- finished in %0.3fs ----------', + time.time() - start) return 0 @@ -2318,10 +2154,6 @@ def add_item(self, title, subtitle='', modifier_subtitles=None, arg=None, :type quicklookurl: ``unicode`` :returns: :class:`Item` instance - See the :ref:`script-filter-results` section of the documentation - for a detailed description of what the various parameters do and how - they interact with one another. - See :ref:`icons` for a list of the supported system icons. .. note:: @@ -2390,8 +2222,7 @@ def last_version_run(self): self._last_version_run = version - self.logger.debug('Last run version : {0}'.format( - self._last_version_run)) + self.logger.debug('last run version: %s', self._last_version_run) return self._last_version_run @@ -2420,7 +2251,7 @@ def set_last_version(self, version=None): self.settings['__workflow_last_version'] = str(version) - self.logger.debug('Set last run version : {0}'.format(version)) + self.logger.debug('set last run version: %s', version) return True @@ -2430,23 +2261,22 @@ def update_available(self): .. versionadded:: 1.9 - See :ref:`manual-updates` in the :ref:`user-manual` for detailed + 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`` """ + key = '__workflow_latest_version' # 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 : {0}'.format(update_data)) + status = Workflow().cached_data(key, max_age=0) - if not update_data or not update_data.get('available'): + # self.logger.debug('update status: %r', status) + if not status or not status.get('available'): return False - return update_data['available'] + return status['available'] @property def prereleases(self): @@ -2472,13 +2302,14 @@ def check_update(self, force=False): The update script will be run in the background, so it won't interfere in the execution of your workflow. - See :ref:`manual-updates` in the :ref:`user-manual` for detailed + 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`` """ + key = '__workflow_latest_version' frequency = self._update_settings.get('frequency', DEFAULT_UPDATE_FREQUENCY) @@ -2487,10 +2318,9 @@ def check_update(self, force=False): return # Check for new version if it's time - if (force or not self.cached_data_fresh( - '__workflow_update_status', frequency * 86400)): + if (force or not self.cached_data_fresh(key, frequency * 86400)): - github_slug = self._update_settings['github_slug'] + repo = self._update_settings['github_slug'] # version = self._update_settings['version'] version = str(self.version) @@ -2500,25 +2330,24 @@ def check_update(self, force=False): update_script = os.path.join(os.path.dirname(__file__), b'update.py') - cmd = ['/usr/bin/python', update_script, 'check', github_slug, - version] + cmd = ['/usr/bin/python', update_script, 'check', repo, version] if self.prereleases: cmd.append('--prereleases') - self.logger.info('Checking for update ...') + self.logger.info('checking for update ...') run_in_background('__workflow_update_check', cmd) else: - self.logger.debug('Update check not due') + 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:`manual-updates` in the :ref:`user-manual` for detailed + 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 @@ -2527,11 +2356,11 @@ def start_update(self): """ import update - github_slug = self._update_settings['github_slug'] + repo = self._update_settings['github_slug'] # version = self._update_settings['version'] version = str(self.version) - if not update.check_update(github_slug, version, self.prereleases): + if not update.check_update(repo, version, self.prereleases): return False from background import run_in_background @@ -2540,13 +2369,12 @@ def start_update(self): update_script = os.path.join(os.path.dirname(__file__), b'update.py') - cmd = ['/usr/bin/python', update_script, 'install', github_slug, - version] + cmd = ['/usr/bin/python', update_script, 'install', repo, version] if self.prereleases: cmd.append('--prereleases') - self.logger.debug('Downloading update ...') + self.logger.debug('downloading update ...') run_in_background('__workflow_update_install', cmd) return True @@ -2580,14 +2408,14 @@ def save_password(self, account, password, service=None): try: self._call_security('add-generic-password', service, account, '-w', password) - self.logger.debug('Saved password : %s:%s', service, account) + self.logger.debug('saved password : %s:%s', service, account) except PasswordExists: - self.logger.debug('Password exists : %s:%s', service, account) + 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') + self.logger.debug('password unchanged') else: self.delete_password(account, service) @@ -2630,7 +2458,7 @@ def get_password(self, account, service=None): if h: password = unicode(binascii.unhexlify(h), 'utf-8') - self.logger.debug('Got password : %s:%s', service, account) + self.logger.debug('got password : %s:%s', service, account) return password @@ -2652,7 +2480,7 @@ def delete_password(self, account, service=None): self._call_security('delete-generic-password', service, account) - self.logger.debug('Deleted password : %s:%s', service, account) + self.logger.debug('deleted password : %s:%s', service, account) #################################################################### # Methods for workflow:* magic args @@ -2755,7 +2583,7 @@ def list_magic(): for name in sorted(self.magic_arguments.keys()): if name == 'magic': continue - arg = '{0}{1}'.format(self.magic_prefix, name) + arg = self.magic_prefix + name self.logger.debug(arg) if not isatty: @@ -2796,7 +2624,7 @@ 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) + self.logger.debug('deleted : %r', self.settings_path) def reset(self): """Delete workflow settings, cache and data. @@ -2861,7 +2689,7 @@ def decode(self, text, encoding=None, normalization=None): standard for Python and will work well with data from the web (via :mod:`~workflow.web` or :mod:`json`). - OS X, on the other hand, uses "NFD" normalisation (nearly), so data + 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 @@ -2933,7 +2761,7 @@ def _delete_directory_contents(self, dirpath, filter_func): shutil.rmtree(path) else: os.unlink(path) - self.logger.debug('Deleted : %r', path) + self.logger.debug('deleted : %r', path) def _load_info_plist(self): """Load workflow info from ``info.plist``.""" diff --git a/src/workflow/workflow3.py b/src/workflow/workflow3.py index beee0ef..b92c4be 100644 --- a/src/workflow/workflow3.py +++ b/src/workflow/workflow3.py @@ -7,21 +7,20 @@ # Created on 2016-06-25 # -""" -:class:`Workflow3` supports Alfred 3's new features. - -It is an Alfred 3-only version of :class:`~workflow.workflow.Workflow`. +"""An Alfred 3+ version of :class:`~workflow.Workflow`. -It supports setting :ref:`workflow-variables` and -:class:`the more advanced modifiers ` supported by Alfred 3. +:class:`~workflow.Workflow3` supports 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:`~workflow.workflow3.Workflow3` -object won't be aware of them, and they won't be sent to Alfred when -you call :meth:`~workflow.workflow3.Workflow3.send_feedback()`. +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 @@ -30,7 +29,7 @@ import os import sys -from .workflow import Workflow +from .workflow import ICON_WARNING, Workflow class Variables(dict): @@ -41,12 +40,20 @@ class Variables(dict): This class allows you to set workflow variables from Run Script actions. - It is a subclass of `dict`. + 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. @@ -54,13 +61,7 @@ class Variables(dict): """ def __init__(self, arg=None, **variables): - """Create a new `Variables` object. - - Args: - arg (unicode, optional): Main output/``{query}``. - **variables: Workflow variables to set. - - """ + """Create a new `Variables` object.""" self.arg = arg self.config = {} super(Variables, self).__init__(**variables) @@ -88,6 +89,7 @@ def __unicode__(self): Returns: unicode: ``alfredworkflow`` JSON object + """ if not self and not self.config: if self.arg: @@ -102,45 +104,76 @@ def __str__(self): Returns: str: UTF-8 encoded ``alfredworkflow`` JSON object + """ return unicode(self).encode('utf-8') class Modifier(object): - """Modify ``Item3`` values for when specified modifier keys are pressed. - - Valid modifiers (i.e. values for ``key``) are: - - * cmd - * alt - * shift - * ctrl - * fn + """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): + def __init__(self, key, subtitle=None, arg=None, valid=None, icon=None, + icontype=None): """Create a new :class:`Modifier`. - You probably don't want to use this class directly, but rather - use :meth:`Item3.add_modifier()` to add modifiers to results. + 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 = {} @@ -151,6 +184,7 @@ def setvar(self, name, value): Args: name (unicode): Name of variable. value (unicode): Value of variable. + """ self.variables[name] = value @@ -163,6 +197,7 @@ def getvar(self, name, default=None): Returns: unicode or ``default``: Value of variable if set or ``default``. + """ return self.variables.get(name, default) @@ -172,6 +207,7 @@ def obj(self): Returns: dict: Modifier for serializing to JSON. + """ o = {} @@ -184,44 +220,63 @@ def obj(self): if self.valid is not None: o['valid'] = self.valid - # Variables and config - if self.variables or self.config: - d = {} - if self.variables: - d['variables'] = self.variables - - if self.config: - d['config'] = self.config + if self.variables: + o['variables'] = self.variables - if self.arg is not None: - d['arg'] = self.arg + if self.config: + o['config'] = self.config - o['arg'] = json.dumps({'alfredworkflow': d}) + 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. + """Represents a feedback item for Alfred 3+. Generates Alfred-compliant JSON for a single item. - You probably shouldn't use this class directly, but via - :meth:`Workflow3.add_item`. See :meth:`~Workflow3.add_item` - for details of arguments. + 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, - valid=False, uid=None, icon=None, icontype=None, + match=None, valid=False, uid=None, icon=None, icontype=None, type=None, largetext=None, copytext=None, quicklookurl=None): - """Use same arguments as for :meth:`Workflow.add_item`. + """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 @@ -255,10 +310,12 @@ def getvar(self, name, default=None): 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): + def add_modifier(self, key, subtitle=None, arg=None, valid=None, icon=None, + icontype=None): """Add alternative values for a modifier key. Args: @@ -266,14 +323,19 @@ def add_modifier(self, key, subtitle=None, arg=None, valid=None): 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) + mod = Modifier(key, subtitle, arg, valid, icon, icontype) - for k in self.variables: - mod.setvar(k, self.variables[k]) + # Add Item variables to Modifier + mod.variables.update(self.variables) self.modifiers[key] = mod @@ -285,26 +347,25 @@ def obj(self): Returns: dict: Data suitable for Alfred 3 feedback. + """ # Required values - o = {'title': self.title, - 'subtitle': self.subtitle, - 'valid': self.valid} - - icon = {} + o = { + 'title': self.title, + 'subtitle': self.subtitle, + 'valid': self.valid, + } # Optional values - - # arg & variables - v = Variables(self.arg, **self.variables) - v.config = self.config - arg = unicode(v) - if arg: - o['arg'] = arg + 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 @@ -314,6 +375,12 @@ def obj(self): 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: @@ -335,6 +402,7 @@ def _icon(self): Returns: dict: Mapping for item `icon` (may be empty). + """ icon = {} if self.icon is not None: @@ -350,6 +418,7 @@ def _text(self): Returns: dict: `text` mapping (may be empty) + """ text = {} if self.largetext is not None: @@ -365,6 +434,7 @@ def _modifiers(self): Returns: dict: Modifier mapping or `None`. + """ if self.modifiers: mods = {} @@ -377,11 +447,15 @@ def _modifiers(self): class Workflow3(Workflow): - """Workflow class that generates Alfred 3 feedback. + """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 @@ -389,27 +463,31 @@ class Workflow3(Workflow): def __init__(self, **kwargs): """Create a new :class:`Workflow3` object. - See :class:`~workflow.workflow.Workflow` for documentation. + See :class:`~workflow.Workflow` for documentation. + """ Workflow.__init__(self, **kwargs) self.variables = {} self._rerun = 0 - self._session_id = None + # 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.""" + """Alfred 4's default cache directory.""" return os.path.join( os.path.expanduser( - '~/Library/Caches/com.runningwithcrayons.Alfred-3/' + '~/Library/Caches/com.runningwithcrayons.Alfred/' 'Workflow Data/'), self.bundleid) @property def _default_datadir(self): - """Alfred 3's default data directory.""" + """Alfred 4's default data directory.""" return os.path.join(os.path.expanduser( - '~/Library/Application Support/Alfred 3/Workflow Data/'), + '~/Library/Application Support/Alfred/Workflow Data/'), self.bundleid) @property @@ -438,19 +516,17 @@ def session_id(self): """ if not self._session_id: - sid = os.getenv('_WF_SESSION_ID') - if not sid: - from uuid import uuid4 - sid = uuid4().hex - self.setvar('_WF_SESSION_ID', sid) - - self._session_id = sid + 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): + def setvar(self, name, value, persist=False): """Set a "global" workflow variable. + .. versionchanged:: 1.33 + These variables are always passed to downstream workflow objects. If you have set :attr:`rerun`, these variables are also passed @@ -459,8 +535,15 @@ def setvar(self, name, value): Args: name (unicode): Name of variable. value (unicode): Value of variable. + persist (bool, optional): Also save variable to ``info.plist``? + """ self.variables[name] = value + if persist: + from .util import set_config + set_config(name, value, self.bundleid) + self.logger.debug('saved variable %r with value %r to info.plist', + name, value) def getvar(self, name, default=None): """Return value of workflow variable for ``name`` or ``default``. @@ -471,16 +554,22 @@ def getvar(self, name, default=None): 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): + 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. - See :meth:`~workflow.workflow.Workflow.add_item` for the main - documentation. + 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()` @@ -488,17 +577,26 @@ def add_item(self, title, subtitle='', arg=None, autocomplete=None, Returns: Item3: Alfred feedback item. + """ - item = self.item_class(title, subtitle, arg, - autocomplete, valid, uid, icon, icontype, type, + 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 '_wfsess-{0}-{1}'.format(self.session_id, name) + return self._session_prefix + name def cache_data(self, name, data, session=False): """Cache API with session-scoped expiry. @@ -511,11 +609,11 @@ def cache_data(self, name, data, session=False): session (bool, optional): Whether to scope the cache to the current session. - ``name`` and ``data`` are as for the - :meth:`~workflow.workflow.Workflow.cache_data` on - :class:`~workflow.workflow.Workflow`. + ``name`` and ``data`` are the same as for the + :meth:`~workflow.Workflow.cache_data` method on + :class:`~workflow.Workflow`. - If ``session`` is ``True``, the ``name`` variable is prefixed + If ``session`` is ``True``, then ``name`` is prefixed with :attr:`session_id`. """ @@ -537,11 +635,11 @@ def cached_data(self, name, data_func=None, max_age=60, session=False): session (bool, optional): Whether to scope the cache to the current session. - ``name``, ``data_func`` and ``max_age`` are as for the - :meth:`~workflow.workflow.Workflow.cached_data` on - :class:`~workflow.workflow.Workflow`. + ``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``, the ``name`` variable is prefixed + If ``session`` is ``True``, then ``name`` is prefixed with :attr:`session_id`. """ @@ -550,13 +648,25 @@ def cached_data(self, name, data_func=None, max_age=60, session=False): return super(Workflow3, self).cached_data(name, data_func, max_age) - def clear_session_cache(self): - """Remove *all* session data from the cache. + 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): - return filename.startswith('_wfsess-') + if current: + return filename.startswith('_wfsess-') + return filename.startswith('_wfsess-') \ + and not filename.startswith(self._session_prefix) self.clear_cache(_is_session_file) @@ -566,6 +676,7 @@ def obj(self): Returns: dict: Data suitable for Alfred 3 feedback. + """ items = [] for item in self._items: @@ -578,6 +689,32 @@ def obj(self): 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)