From 97407f4ec8dbca5abbc6952b2b56cf3918624177 Mon Sep 17 00:00:00 2001 From: Dean Jackson Date: Fri, 31 Jul 2020 22:27:14 +0200 Subject: [PATCH] Update Alfred-Workflow --- {bin/hooks => .githooks}/pre-commit | 0 ...edworkflow => Convert-3.7.1.alfredworkflow | Bin 410860 -> 413234 bytes src/info.plist | 10 +- src/workflow/background.py | 5 +- src/workflow/notify.py | 18 +-- src/workflow/update.py | 2 +- src/workflow/util.py | 134 +++++++++++++++--- src/workflow/version | 2 +- src/workflow/web.py | 51 +++++-- src/workflow/workflow.py | 13 +- src/workflow/workflow3.py | 27 +++- 11 files changed, 203 insertions(+), 59 deletions(-) rename {bin/hooks => .githooks}/pre-commit (100%) rename Convert-3.7.0.alfredworkflow => Convert-3.7.1.alfredworkflow (88%) diff --git a/bin/hooks/pre-commit b/.githooks/pre-commit similarity index 100% rename from bin/hooks/pre-commit rename to .githooks/pre-commit diff --git a/Convert-3.7.0.alfredworkflow b/Convert-3.7.1.alfredworkflow similarity index 88% rename from Convert-3.7.0.alfredworkflow rename to Convert-3.7.1.alfredworkflow index b21b1ef46329fab87d9d26928ea1b2e014acd29c..a3497e9287df130390abd8ef01e299a368ceaa6f 100644 GIT binary patch delta 32340 zcmaI718`+q7cRQ9W81c^4mzEVZQJPB?j1Yn*tTuk>DWfcw)4*a_qp$)?t80huKL!h zQQyEEV`I)a&cbl(GH|~sNP|Pb0seFCN~tLP7yNsJ1P}o1Ep45dRaIaC;78x(^u#xl z^jzHG0bmgKU;qFF#y^7b<(>QxJKv!7>rXqmz{URWObGvj$=J@u-thmQ@IUq>%QHja zB=?ShkwFanL*0Bh0(K4Y7p_l&T|oVXzvsaeVE;n0O|V0}zYy^mECVc_zL(~|kM-)k z5r}`$!EX@cUrR0Lu`vI>3pl<9|BJlOY1#gZnoEhnNbp4d?~Wk<4@aC$ot&LqES*jN z|ALd8_5vpHm-OHT%;vAAX7vv+wtqc{f&fwj{|dA~0mc7?;IP0|$iHuQkbq%ef1xc3 za0mJ?RK@|y|4UYc50v~j2DcPIFSx$~j?6$O^1tv{3HTG`FSIfSR-pZb_^!ZP^uG`- z9LV#pV);m*z`tRRjRA`Mja&0dCeZI+d-V!{R{zRQ76FUFl1F*Kxc<_B^MaZED`g`H z)&ue1NH?>Jf|a8F71&e*Bm9@~(-=$~{;zTabTIXw3Z{LD-IAC9z=qoT&Cb!v%-YWFuO7;u z6#7*EjQ^u#|5IWADP0)Af7}m0u{F9y1ppwwCBO9p31R++!_A}vz)=)X9#UfB{#y51 zRsyP=BX3=Z2|Q?60xu#{x?EL6{d=RtVBnw<`sLU>0_TTk>EXY zM~N{dokIH6B1StSuAG5*4k`wH2ln8S!~AYUkeRa5R$YqHdbb6ZoL8~b%pdQI9hbqZ zyxT4V`Nma!cQhy=v=1(j9Y?U1Ug@&&8d}#tb@GbP^Z@TsJj$ zSUnS%D3*P6>hSU>M!y-?Jx7!xi>6{4sw{4�Kk%45F-X18fZx1-W@+TP~9g`Jyf} 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

!mhYZ-dGfF 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 diff --git a/src/info.plist b/src/info.plist index c88e6c0..40e45ce 100644 --- a/src/info.plist +++ b/src/info.plist @@ -231,7 +231,11 @@ runningsubtext Convertifying… script - /usr/bin/python convert.py "$1" + echo . >&2 +echo "http_proxy=$http_proxy">&2 +echo "https_proxy=$https_proxy">&2 + +/usr/bin/python convert.py "$1" scriptargtype 1 scriptfile @@ -476,6 +480,8 @@ variables={allvars} argument {var:query} + passthroughargument + variables @@ -653,7 +659,7 @@ UPDATE_INTERVAL is the number of minutes between exchange rate updates. APP_KEY version - 3.7.0 + 3.7.1 webaddress diff --git a/src/workflow/background.py b/src/workflow/background.py index ba5c52a..c2bd735 100644 --- a/src/workflow/background.py +++ b/src/workflow/background.py @@ -102,10 +102,7 @@ def _job_pid(name): if _process_exists(pid): return pid - try: - os.unlink(pidfile) - except Exception: # pragma: no cover - pass + os.unlink(pidfile) def is_running(name): diff --git a/src/workflow/notify.py b/src/workflow/notify.py index a4b7f40..28ec0b9 100644 --- a/src/workflow/notify.py +++ b/src/workflow/notify.py @@ -117,8 +117,8 @@ def install_notifier(): # z.extractall(destdir) tgz = tarfile.open(archive, 'r:gz') tgz.extractall(destdir) - assert os.path.exists(n), \ - 'Notify.app could not be installed in %s' % destdir + if not os.path.exists(n): # pragma: nocover + raise RuntimeError('Notify.app could not be installed in ' + destdir) # Replace applet icon icon = notifier_icon_path() @@ -253,8 +253,9 @@ def png_to_icns(png_path, icns_path): try: iconset = os.path.join(tempdir, 'Icon.iconset') - assert not os.path.exists(iconset), \ - 'iconset already exists: ' + iconset + if os.path.exists(iconset): # pragma: nocover + raise RuntimeError('iconset already exists: ' + iconset) + os.makedirs(iconset) # Copy source icon to icon set and generate all the other @@ -283,8 +284,9 @@ def png_to_icns(png_path, icns_path): if retcode != 0: raise RuntimeError('iconset exited with %d' % retcode) - assert os.path.exists(icns_path), \ - 'generated ICNS file not found: ' + repr(icns_path) + if not os.path.exists(icns_path): # pragma: nocover + raise ValueError( + 'generated ICNS file not found: ' + repr(icns_path)) finally: try: shutil.rmtree(tempdir) @@ -332,8 +334,8 @@ def ustr(s): print('converting {0!r} to {1!r} ...'.format(o.png, icns), file=sys.stderr) - assert not os.path.exists(icns), \ - 'destination file already exists: ' + icns + if os.path.exists(icns): + raise ValueError('destination file already exists: ' + icns) png_to_icns(o.png, icns) sys.exit(0) diff --git a/src/workflow/update.py b/src/workflow/update.py index 6affc94..c039f7a 100644 --- a/src/workflow/update.py +++ b/src/workflow/update.py @@ -519,7 +519,7 @@ def install_update(): path = retrieve_download(Download.from_dict(dl)) wf().logger.info('installing updated workflow ...') - subprocess.call(['open', path]) + subprocess.call(['open', path]) # nosec wf().cache_data(key, no_update) return True diff --git a/src/workflow/util.py b/src/workflow/util.py index 27209d8..ab5e954 100644 --- a/src/workflow/util.py +++ b/src/workflow/util.py @@ -31,19 +31,21 @@ # "com.runningwithcrayons.Alfred" depending on version. # # Open Alfred in search (regular) mode -JXA_SEARCH = "Application({app}).search({arg});" +JXA_SEARCH = 'Application({app}).search({arg});' # Open Alfred's File Actions on an argument -JXA_ACTION = "Application({app}).action({arg});" +JXA_ACTION = 'Application({app}).action({arg});' # Open Alfred's navigation mode at path -JXA_BROWSE = "Application({app}).browse({arg});" +JXA_BROWSE = 'Application({app}).browse({arg});' # Set the specified theme -JXA_SET_THEME = "Application({app}).setTheme({arg});" +JXA_SET_THEME = 'Application({app}).setTheme({arg});' # Call an External Trigger -JXA_TRIGGER = "Application({app}).runTrigger({arg}, {opts});" +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});" +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});" +JXA_UNSET_CONFIG = 'Application({app}).removeConfiguration({arg}, {opts});' +# Tell Alfred to reload a workflow from disk +JXA_RELOAD_WORKFLOW = 'Application({app}).reloadWorkflow({arg});' class AcquisitionError(Exception): @@ -148,17 +150,16 @@ def applescriptify(s): .. 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) + + >>> applescriptify('g "python" test') 'g " & quote & "python" & quote & "test' Args: s (unicode): Unicode string to escape. Returns: - unicode: Escaped string + unicode: Escaped string. """ return s.replace(u'"', u'" & quote & "') @@ -173,11 +174,11 @@ def run_command(cmd, **kwargs): 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``. + cmd (list): Command arguments to pass to :func:`~subprocess.check_output`. + **kwargs: Keyword arguments to pass to :func:`~subprocess.check_output`. Returns: - str: Output returned by ``check_output``. + str: Output returned by :func:`~subprocess.check_output`. """ cmd = [utf8ify(s) for s in cmd] @@ -197,6 +198,7 @@ def run_applescript(script, *args, **kwargs): 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. + Any other keyword arguments are passed to :func:`run_command`. Returns: str: Output of run command. @@ -242,8 +244,8 @@ def run_trigger(name, bundleid=None, arg=None): .. versionadded:: 1.31 - If ``bundleid`` is not specified, reads the bundle ID of the current - workflow from Alfred's environment variables. + If ``bundleid`` is not specified, the bundle ID of the calling + workflow is used. Args: name (str): Name of External Trigger to call. @@ -264,11 +266,29 @@ def run_trigger(name, bundleid=None, arg=None): run_applescript(script, lang='JavaScript') +def set_theme(theme_name): + """Change Alfred's theme. + + .. versionadded:: 1.39.0 + + Args: + theme_name (unicode): Name of theme Alfred should use. + + """ + appname = jxa_app_name() + script = JXA_SET_THEME.format(app=json.dumps(appname), + arg=json.dumps(theme_name)) + run_applescript(script, lang='JavaScript') + + def set_config(name, value, bundleid=None, exportable=False): """Set a workflow variable in ``info.plist``. .. versionadded:: 1.33 + If ``bundleid`` is not specified, the bundle ID of the calling + workflow is used. + Args: name (str): Name of variable to set. value (str): Value to set variable to. @@ -297,6 +317,9 @@ def unset_config(name, bundleid=None): .. versionadded:: 1.33 + If ``bundleid`` is not specified, the bundle ID of the calling + workflow is used. + Args: name (str): Name of variable to delete. bundleid (str, optional): Bundle ID of workflow variable belongs to. @@ -313,6 +336,71 @@ def unset_config(name, bundleid=None): run_applescript(script, lang='JavaScript') +def search_in_alfred(query=None): + """Open Alfred with given search query. + + .. versionadded:: 1.39.0 + + Omit ``query`` to simply open Alfred's main window. + + Args: + query (unicode, optional): Search query. + + """ + query = query or u'' + appname = jxa_app_name() + script = JXA_SEARCH.format(app=json.dumps(appname), arg=json.dumps(query)) + run_applescript(script, lang='JavaScript') + + +def browse_in_alfred(path): + """Open Alfred's filesystem navigation mode at ``path``. + + .. versionadded:: 1.39.0 + + Args: + path (unicode): File or directory path. + + """ + appname = jxa_app_name() + script = JXA_BROWSE.format(app=json.dumps(appname), arg=json.dumps(path)) + run_applescript(script, lang='JavaScript') + + +def action_in_alfred(paths): + """Action the give filepaths in Alfred. + + .. versionadded:: 1.39.0 + + Args: + paths (list): Unicode paths to files/directories to action. + + """ + appname = jxa_app_name() + script = JXA_ACTION.format(app=json.dumps(appname), arg=json.dumps(paths)) + run_applescript(script, lang='JavaScript') + + +def reload_workflow(bundleid=None): + """Tell Alfred to reload a workflow from disk. + + .. versionadded:: 1.39.0 + + If ``bundleid`` is not specified, the bundle ID of the calling + workflow is used. + + Args: + bundleid (unicode, optional): Bundle ID of workflow to reload. + + """ + bundleid = bundleid or os.getenv('alfred_workflow_bundleid') + appname = jxa_app_name() + script = JXA_RELOAD_WORKFLOW.format(app=json.dumps(appname), + arg=json.dumps(bundleid)) + + run_applescript(script, lang='JavaScript') + + def appinfo(name): """Get information about an installed application. @@ -325,11 +413,15 @@ def appinfo(name): 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)] + cmd = [ + 'mdfind', + '-onlyin', '/Applications', + '-onlyin', '/System/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: diff --git a/src/workflow/version b/src/workflow/version index 673b6a6..ebc91b4 100644 --- a/src/workflow/version +++ b/src/workflow/version @@ -1 +1 @@ -1.37.2 \ No newline at end of file +1.40.0 \ No newline at end of file diff --git a/src/workflow/web.py b/src/workflow/web.py index 0781911..83212a8 100644 --- a/src/workflow/web.py +++ b/src/workflow/web.py @@ -9,6 +9,8 @@ """Lightweight HTTP library with a requests-like interface.""" +from __future__ import absolute_import, print_function + import codecs import json import mimetypes @@ -23,8 +25,10 @@ import urlparse import zlib +__version__ = open(os.path.join(os.path.dirname(__file__), 'version')).read() -USER_AGENT = u'Alfred-Workflow/1.36 (+http://www.deanishe.net/alfred-workflow)' +USER_AGENT = (u'Alfred-Workflow/' + __version__ + + ' (+http://www.deanishe.net/alfred-workflow)') # Valid characters for multipart form data boundaries BOUNDARY_CHARS = string.digits + string.ascii_letters @@ -178,6 +182,18 @@ def itervalues(self): yield v['val'] +class Request(urllib2.Request): + """Subclass of :class:`urllib2.Request` that supports custom methods.""" + + def __init__(self, *args, **kwargs): + """Create a new :class:`Request`.""" + self._method = kwargs.pop('method', None) + urllib2.Request.__init__(self, *args, **kwargs) + + def get_method(self): + return self._method.upper() + + class Response(object): """ Returned by :func:`request` / :func:`get` / :func:`post` functions. @@ -200,7 +216,7 @@ class Response(object): def __init__(self, request, stream=False): """Call `request` with :mod:`urllib2` and process results. - :param request: :class:`urllib2.Request` instance + :param request: :class:`Request` instance :param stream: Whether to stream response or retrieve it all at once :type stream: bool @@ -512,7 +528,7 @@ def request(method, url, params=None, data=None, headers=None, cookies=None, socket.setdefaulttimeout(timeout) # Default handlers - openers = [] + openers = [urllib2.ProxyHandler(urllib2.getproxies())] if not allow_redirects: openers.append(NoRedirectHandler()) @@ -544,10 +560,6 @@ def request(method, url, params=None, data=None, headers=None, cookies=None, headers['accept-encoding'] = ', '.join(encodings) - # Force POST by providing an empty data string - if method == 'POST' and not data: - data = '' - if files: if not data: data = {} @@ -575,7 +587,7 @@ def request(method, url, params=None, data=None, headers=None, cookies=None, query = urllib.urlencode(str_dict(params), doseq=True) url = urlparse.urlunsplit((scheme, netloc, path, query, fragment)) - req = urllib2.Request(url, data, headers) + req = Request(url, data, headers, method=method) return Response(req, stream) @@ -591,6 +603,18 @@ def get(url, params=None, headers=None, cookies=None, auth=None, stream=stream) +def delete(url, params=None, data=None, headers=None, cookies=None, auth=None, + timeout=60, allow_redirects=True, stream=False): + """Initiate a DELETE request. Arguments as for :func:`request`. + + :returns: :class:`Response` instance + + """ + return request('DELETE', url, params, data, headers=headers, + cookies=cookies, auth=auth, timeout=timeout, + allow_redirects=allow_redirects, stream=stream) + + def post(url, params=None, data=None, headers=None, cookies=None, files=None, auth=None, timeout=60, allow_redirects=False, stream=False): """Initiate a POST request. Arguments as for :func:`request`. @@ -602,6 +626,17 @@ def post(url, params=None, data=None, headers=None, cookies=None, files=None, timeout, allow_redirects, stream) +def put(url, params=None, data=None, headers=None, cookies=None, files=None, + auth=None, timeout=60, allow_redirects=False, stream=False): + """Initiate a PUT request. Arguments as for :func:`request`. + + :returns: :class:`Response` instance + + """ + return request('PUT', url, params, data, headers, cookies, files, auth, + timeout, allow_redirects, stream) + + def encode_multipart_formdata(fields, files): """Encode form data (``fields``) and ``files`` for POST request. diff --git a/src/workflow/workflow.py b/src/workflow/workflow.py index 2a057b0..3935227 100644 --- a/src/workflow/workflow.py +++ b/src/workflow/workflow.py @@ -2639,28 +2639,27 @@ def reset(self): def open_log(self): """Open :attr:`logfile` in default app (usually Console.app).""" - subprocess.call(['open', self.logfile]) + subprocess.call(['open', self.logfile]) # nosec def open_cachedir(self): """Open the workflow's :attr:`cachedir` in Finder.""" - subprocess.call(['open', self.cachedir]) + subprocess.call(['open', self.cachedir]) # nosec def open_datadir(self): """Open the workflow's :attr:`datadir` in Finder.""" - subprocess.call(['open', self.datadir]) + subprocess.call(['open', self.datadir]) # nosec def open_workflowdir(self): """Open the workflow's :attr:`workflowdir` in Finder.""" - subprocess.call(['open', self.workflowdir]) + subprocess.call(['open', self.workflowdir]) # nosec def open_terminal(self): """Open a Terminal window at workflow's :attr:`workflowdir`.""" - subprocess.call(['open', '-a', 'Terminal', - self.workflowdir]) + subprocess.call(['open', '-a', 'Terminal', self.workflowdir]) # nosec def open_help(self): """Open :attr:`help_url` in default browser.""" - subprocess.call(['open', self.help_url]) + subprocess.call(['open', self.help_url]) # nosec return 'Opening workflow help URL in browser' diff --git a/src/workflow/workflow3.py b/src/workflow/workflow3.py index b92c4be..23a7aae 100644 --- a/src/workflow/workflow3.py +++ b/src/workflow/workflow3.py @@ -50,12 +50,16 @@ class Variables(dict): information. Args: - arg (unicode, optional): Main output/``{query}``. + arg (unicode or list, optional): Main output/``{query}``. **variables: Workflow variables to set. + In Alfred 4.1+ and Alfred-Workflow 1.40+, ``arg`` may also be a + :class:`list` or :class:`tuple`. Attributes: - arg (unicode): Output value (``{query}``). + arg (unicode or list): Output value (``{query}``). + In Alfred 4.1+ and Alfred-Workflow 1.40+, ``arg`` may also be a + :class:`list` or :class:`tuple`. config (dict): Configuration for downstream workflow element. """ @@ -68,7 +72,7 @@ def __init__(self, arg=None, **variables): @property def obj(self): - """Return ``alfredworkflow`` `dict`.""" + """``alfredworkflow`` :class:`dict`.""" o = {} if self: d2 = {} @@ -92,10 +96,10 @@ def __unicode__(self): """ if not self and not self.config: - if self.arg: - return self.arg - else: + if not self.arg: return u'' + if isinstance(self.arg, unicode): + return self.arg return json.dumps(self.obj) @@ -328,6 +332,9 @@ def add_modifier(self, key, subtitle=None, arg=None, valid=None, icon=None, :meth:`Workflow.add_item() ` for valid values. + In Alfred 4.1+ and Alfred-Workflow 1.40+, ``arg`` may also be a + :class:`list` or :class:`tuple`. + Returns: Modifier: Configured :class:`Modifier`. @@ -568,6 +575,9 @@ def add_item(self, title, subtitle='', arg=None, autocomplete=None, turned on for your Script Filter, Alfred (version 3.5 and above) will filter against this field, not ``title``. + In Alfred 4.1+ and Alfred-Workflow 1.40+, ``arg`` may also be a + :class:`list` or :class:`tuple`. + See :meth:`Workflow.add_item() ` for the main documentation and other parameters. @@ -717,5 +727,8 @@ def warn_empty(self, title, subtitle=u'', icon=None): def send_feedback(self): """Print stored items to console/Alfred as JSON.""" - json.dump(self.obj, sys.stdout) + if self.debugging: + json.dump(self.obj, sys.stdout, indent=2, separators=(',', ': ')) + else: + json.dump(self.obj, sys.stdout) sys.stdout.flush()