def search_slack(keys, query): wf = Workflow() search_results = [] for key in keys: api_key = str(key) slack_auth = web.get('https://slack.com/api/auth.test?token=' + api_key + '&pretty=1').json() if slack_auth['ok'] is False: wf.add_item( 'Authentication failed.' 'Try saving your API key again', valid=False) wf.send_feedback() else: results = web.get('https://slack.com/api/search.messages?token=' + api_key + '&query=' + query + '&count=10&pretty=1').json() if results['messages']['total'] > 0: for result in results['messages']['matches']: search_results.append({ 'text': result['text'], 'channel': result['channel']['name'], 'user': result['username'], 'team': slack_auth['team'], 'link': result['permalink'] }) else: search_results.append({ 'text': 'False', 'team': slack_auth['team'] }) return search_results
def slack_list(keys): wf = Workflow() slack_search = [] for key in keys: api_key = str(key) slack_auth = web.get('https://slack.com/api/auth.test?token=' + api_key + '&pretty=1').json() if slack_auth['ok'] is False: wf.add_item(title='Authentication failed. Check your API key', valid=False) wf.send_feedback() break else: slack_channels = web.get('https://slack.com/api/channels.list?token=' + api_key + '&exclude_archived=1&pretty=1').json() slack_users = web.get('https://slack.com/api/users.list?token=' + api_key + '&pretty=1').json() slack_groups = web.get('https://slack.com/api/groups.list?token=' + api_key + '&pretty=1').json() for channels in slack_channels['channels']: slack_search.append({'name': channels['name'], 'team': slack_auth['team']}) for users in slack_users['members']: slack_search.append({'name': users['name'], 'team': slack_auth['team']}) for groups in slack_groups['groups']: if 'name' in groups: slack_search.append({'name': groups['name'], 'team': slack_auth['team']}) return slack_search
def slack_list(keys): wf = Workflow() slack_search = [] for key in keys: api_key = str(key) slack_auth = web.get('https://slack.com/api/auth.test?token=' + api_key + '&pretty=1').json() if slack_auth['ok'] is False: wf.add_item(title='Authentication failed. Check your API key', valid=False) wf.send_feedback() break else: slack_channels = web.get('https://slack.com/api/channels.list?token=' + api_key + '&exclude_archived=1&pretty=1').json() slack_users = web.get('https://slack.com/api/users.list?token=' + api_key + '&pretty=1').json() slack_groups = web.get('https://slack.com/api/groups.list?token=' + api_key + '&pretty=1').json() for channels in slack_channels['channels']: slack_search.append({'name': channels['name'], 'team': slack_auth['team'],'team_id': slack_auth['team_id'], 'id': channels['id'], 'type': 'channel', 'api_key': api_key}) for users in slack_users['members']: slack_search.append({'name': users['name'], 'team': slack_auth['team'],'team_id': slack_auth['team_id'], 'id': users['id'], 'type': 'user', 'api_key': api_key}) slack_search.append({'name': users['profile']['real_name'], 'team': slack_auth['team'],'team_id': slack_auth['team_id'], 'id': users['id'], 'type': 'user', 'api_key': api_key}) for groups in slack_groups['groups']: if 'name' in groups: slack_search.append({'name': groups['name'], 'team': slack_auth['team'],'team_id': slack_auth['team_id'], 'id': groups['id'], 'type': 'group', 'api_key': api_key}) return slack_search
def slack_list(keys): wf = Workflow() slack_snooze = [] for key in keys: api_key = str(key) slack_auth = web.get('https://slack.com/api/auth.test?token=' + api_key + '&pretty=1').json() if slack_auth['ok'] is False: wf.add_item(title='Authentication failed. Check your API key', valid=False) wf.send_feedback() break else: slack_dnd = web.get( 'https://slack.com/api/dnd.info?token={token}&pretty=1'.format( token=api_key)).json() if slack_dnd['snooze_enabled'] is True: slack_snooze.append({ 'team': slack_auth['team'], 'status': 'Snoozed' }) else: slack_snooze.append({ 'team': slack_auth['team'], 'status': 'Active' }) return slack_snooze
def hipchat_keys(): wflw = Workflow() try: keys = wflw.get_password('hipchat_api_key') except PasswordNotFound: wflw.add_item(title='No API key set. Please run hipchat_api_token', valid=False) wflw.send_feedback() return 0 return keys.split(",")
def slack_keys(): wf = Workflow() try: slack_keys = wf.get_password('slack_api_key') except PasswordNotFound: wf.add_item(title='No API key set. Please run slt', valid=False) wf.send_feedback() return 0 keys = slack_keys.split(",") return keys
def my_slack_info(keys): wf = Workflow() my_info = [] for key in keys: api_key = str(key) slack_user_info = web.get('https://slack.com/api/auth.test?token=' + api_key + '&pretty=1').json() if slack_user_info['ok'] is False: wf.add_item(title='Authenticantion failed. Please check your API keys.', valid=False) wf.send_feedback() else: my_info.append({'team': slack_user_info['team'], 'user': slack_user_info['user'], 'team_id': slack_user_info['team_id']}) return my_info
def my_slack_info(keys): wf = Workflow() my_info = [] for key in keys: api_key = str(key) slack_user_info = web.get('https://slack.com/api/auth.test?token=' + api_key + '&pretty=1').json() if slack_user_info['ok'] is False: wf.add_item(title='Authentication failed. Please check your API keys.', valid=False) wf.send_feedback() else: my_info.append({'team': slack_user_info['team'], 'user': slack_user_info['user'], 'team_id': slack_user_info['team_id']}) return my_info
def hipchat_list(keys): wflw = Workflow() hipchat_search = [] for key in keys: api_key = str(key) try: hipchat_auth = web.get(wflw.settings['api_url'] + '/v2/room?auth_token=' + api_key + '&auth_test=true', None, timeout=wflw.settings['timeout']) except URLError, requests.SSLError: wflw.add_item(title='Error connecting to HipChat API.', valid=False) wflw.send_feedback() return None if not hipchat_auth or \ not hipchat_auth.status_code == requests.codes.accepted or \ not 'success' in hipchat_auth.json(): wflw.add_item(title='Authentication failed. Check your API token', valid=False) wflw.send_feedback() return None else: try: hipchat_rooms = web.get(wflw.settings['api_url'] + '/v2/room?auth_token=' + api_key + '&max-results=1000', None, timeout=wflw.settings['timeout'] ).json() hipchat_users = web.get(wflw.settings['api_url'] + '/v2/user?auth_token=' + api_key + '&max-results=1000', None, timeout=wflw.settings['timeout'] ).json() except URLError, requests.SSLError: wflw.add_item(title='Error fetching lists from HipChat API.', valid=False) wflw.send_feedback() return None for room in hipchat_rooms['items']: hipchat_search.append({ 'name': room['name'], 'id': room['id'], 'description': "%s Room" % room['privacy'].title(), 'type': 'room' }) for user in hipchat_users['items']: hipchat_search.append({ 'name': user['name'], 'mention_name': user['mention_name'], 'id': user['id'], 'description': "User @%s" % user['mention_name'], 'type': "user"})
def main(): wf = Workflow() args = parse_args(wf.args) title = 'Add this link' if args.add_archive: title = 'Add and archive this link' wf.add_item(title, arg=args.query, valid=True) tags = wf.cached_data('pocket_tags', max_age=0) if tags: for tag in tags: if args.query: autocomplete = '%s, #%s' % (args.query, tag) else: autocomplete = '#%s' % tag wf.add_item(' > Add #%s' % tag, autocomplete=autocomplete, valid=False) wf.send_feedback()
def search_slack(keys, query): wf = Workflow() search_results = [] for key in keys: api_key = str(key) slack_auth = web.get('https://slack.com/api/auth.test?token=' + api_key + '&pretty=1').json() if slack_auth['ok'] is False: wf.add_item('Authentication failed.' 'Try saving your API key again', valid=False) wf.send_feedback() else: results = web.get('https://slack.com/api/search.messages?token=' + api_key + '&query=' + query + '&count=10&pretty=1').json() if results['messages']['total'] > 0: for result in results['messages']['matches']: search_results.append({'text': result['text'], 'channel': result['channel']['name'], 'user': result['username'], 'team': slack_auth['team'], 'link': result['permalink']}) else: search_results.append({'text': 'False', 'team': slack_auth['team']}) return search_results
# http://alfredworkflow.readthedocs.org/en/latest/xml_format.html import datetime import sys from workflow import Workflow wf = Workflow() try: t = datetime.datetime.now() for fmt in ["%Y-%m-%d", "%Y%m%d"]: time_str = t.strftime(fmt) subtitle = "Press 'Enter' to copy '{}' to clipboard.".format(time_str) #wf.add_item(time_str,subtitle,arg=time_str,uid=fmt,valid=True) wf.add_item(time_str,subtitle,arg=time_str,valid=True) except Exception as ex: msg = ex.message wf.add_item(msg) # Print XML to STDOUT wf.send_feedback()
valid=False, icon='icons/warning.png') wf.send_feedback() return if __name__ == '__main__': # Configure a Workflow class and a logger: wf = Workflow(libraries=['./lib']) log = wf.logger # Configure a LpvmUtilities class: util = utilities.LpvmUtilities(wf) # Notify the user if they are not logged in: if not util.is_logged_in(): log.warning('Not logged into LastPass.') wf.add_item( 'Not logged in to LastPass.', 'Hit ENTER to open an Alfred command to login to LastPass.', valid=True, arg="login", icon='icons/warning.png') wf.send_feedback() sys.exit(1) # Run! sys.exit(wf.run(main))
class UnifiedConverter: def __init__(self): self.wf = Workflow() self.models = [MD5(), DateTime(), Base64(), Html(), Javascript()] self.modelDict = dict() for m in self.models: self.modelDict[m.name] = m def convert(self, query): result = [] result += self.autocomplete(query) result += self.convert_by_type(query) result += self.convert_all(query) # sort self.add_to_wf(result) self.wf.send_feedback() def convert_all(self, query): result = [] if not query: return result for m in self.models: result += m.convert(query) return result def convert_by_type(self, query): query = str(query).strip() if query.find(' ') == -1: return [] group = query.split(' ', 1) type_value = group[0] input_value = group[1] if type_value in self.modelDict: return self.modelDict[type_value].convert(input_value) def autocomplete(self, query): result = [] if query.find(' ') >= 0: return result # 不是空的话有数量限制 for m in self.models: result += m.autocomplete(query) return result def add_to_wf(self, items): for item in items: self.wf.add_item(title=item.title, subtitle=item.subtitle, modifier_subtitles=item.modifier_subtitles, arg=item.arg, autocomplete=item.autocomplete, valid=item.valid, uid=item.uid, icon=item.icon, icontype=item.icontype, type=item.type, largetext=item.largetext, copytext=item.copytext)
# !/usr/bin/python # encoding: utf-8 from workflow import Workflow wf = Workflow() wf.clear_cache() wf.add_item(u'清除完毕') wf.send_feedback();
def get_icon(name): name = '%s-dark' % name if is_dark() else name return "icons/%s.png" % name def is_dark(): return min([int(x) for x in WF.alfred_env['theme_background'][5:-6].split(',')]) < 128 if __name__ == '__main__': from cask_actions import ACTIONS if WF.update_available: WF.add_item( "An update is available!", autocomplete='workflow:update', valid=False, icon=get_icon("cloud-download") ) if WF.cached_data('cask_not_installed', cask_not_installed, max_age=0): WF.add_item( 'Cask does not seem to be installed!', 'Hit enter to see what you need to do...', arg='open http://caskroom.io/ && exit', valid=True, icon='cask.png' ) WF.add_item( 'I trust this workflow', 'Hit enter to install cask...', arg='brew install caskroom/cask/brew-cask',
wf.reset() sys.exit() if wf.pargs.set: params = split_query_to_params(wf.pargs.set) if len(params) == 3: # if we have 3 params, means the user already chose a setting and filled it log.error('User wants to save something!! %s' % wf.pargs) if params[0] == 'yt_password': wf.save_password(u'yt_password', params[1]) else: wf.store_data(params[0], params[1]) print "Saved %s sucesfully!" % yt_title(params[0]) sys.exit() if params[1] == '': wf.add_item('Please enter your YouTrack %s' % yt_title(params[0]),subtitle=u'Cannot be empty!', icon=ICON_SETTINGS) else: wf.add_item('Set your YouTrack %s to \'%s\'' % (yt_title(params[0]),params[1]), subtitle=u'Hit enter to set.', icon=ICON_SETTINGS, arg=wf.pargs.set + SEPARATOR, valid=True) wf.send_feedback() settings = {} settings['yt_url'] = wf.stored_data('yt_url') settings['yt_username'] = wf.stored_data('yt_username') try: settings['yt_password'] = wf.get_password(u'yt_password') except: settings['yt_password'] = None
# 重写 ContextHandler Handler = RecentProjectHandler() parser.setContentHandler(Handler) # 解析数据 parser.parse(recentProjectPath) # 获取关键字 keyWord = "" if len(wf.args) != 0: keyWord = wf.args[0] Handler.tempResultList.reverse() for i in Handler.tempResultList: projectName = str(i)[str(i).rfind("/") + 1:] projectPath = str(i).replace("$USER_HOME$", os.environ["HOME"]) if keyWord: if str(keyWord).lower() in projectName.lower(): wf.add_item(title=projectName, subtitle=projectPath, icon="icon.png", arg=projectPath, valid=True) else: wf.add_item(title=projectName, subtitle=projectPath, icon="icon.png", arg=projectPath, valid=True) # 结果发送回 alfred wf.send_feedback()
if argc >= 4: config['digits']['count'] = int(sys.argv[3]) if argc >= 3: config['symbols']['count'] = int(sys.argv[2]) if argc >= 2: config['length'] = int(sys.argv[1]) config['lower']['count'] = config['length'] \ - config['symbols']['count'] \ - config['upper']['count'] \ - config['digits']['count'] subtitle = "pass [length] [symbols] [digits] [uppers], press 'Enter' to copy to clipboard." if config['lower']['count'] < 0: title = 'length {} is too small'.format(config['length']) wf.add_item(title, subtitle, valid=False) exit() selected_letters = [] for t in ['upper', 'digits', 'symbols', 'lower']: selected_letters.extend( random.sample(config[t]['letters'], config[t]['count'])) random.shuffle(selected_letters) uid = arg = title = ''.join(selected_letters) wf.add_item(title, subtitle, arg=arg, valid=True) data = utils.load_passwords() for idx, d in enumerate(data): uid = arg = title = d['password']
if len(wf.args) >= 2: inputs = wf.args[1] else: inputs = None if action == 'add': bean.bean_add() elif action == 'cache': bean.bean_cache(inputs) elif action == 'clear': bean.bean_clear(inputs) wf.send_feedback() if __name__ == '__main__': from workflow import Workflow, ICON_INFO wf = Workflow(update_settings={ 'github_slug': 'blaulan/alfred-beancount', 'version': 'v0.3', }) wf.magic_prefix = 'wf:' if wf.update_available: wf.add_item('New version available', 'Action this item to install the update', autocomplete='wf:update', icon=ICON_INFO) sys.exit(wf.run(main))
def get_icon(name): name = '%s-dark' % name if is_dark() else name return "icons/%s.png" % name def is_dark(): rgb = [int(x) for x in WF.alfred_env['theme_background'][5:-6].split(',')] return (0.299 * rgb[0] + 0.587 * rgb[1] + 0.114 * rgb[2] ) / 255 < 0.5 if __name__ == '__main__': from brew_actions import ACTIONS if WF.update_available: WF.add_item( "An update is available!", autocomplete='workflow:update', valid=False, icon=get_icon("cloud-download") ) if WF.cached_data('brew_not_installed', brew_not_installed, max_age=0): WF.add_item( 'Brew does not seem to be installed!', 'Hit enter to see what you need to do...', arg='open http://brew.sh/#install && exit', valid=True ) WF.add_item( 'I trust this workflow', 'Hit enter to install brew...', arg='ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"', valid=True
# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # if __name__ == "__main__": arg = sys.argv[1] if len(sys.argv) > 1 else "" wf = Workflow() func = ["ball", "colr", "draw", "flip", "pick", "rand", "roll", "tell"] sub = { "ball": "Ask the Magic 8-Ball! `ball`", "colr": "See a Random Color! `colr`", "draw": "Draw a Card! `draw n`", "flip": "Flip a coin! Heads or Tails? `flip n`", "pick": "Just Pick One! `pick a,b,c`", "rand": "Generate a Random Number! `rand a..b`", "roll": "Roll a Dice! `roll nDk`", "tell": "Tell me! Yes or No? `tell`" } for f in func: if arg in f: wf.add_item(title=f, subtitle=sub[f], autocomplete="{} ".format(f), icon="resources/icon/{}.png".format(f), valid=False) elif f in arg: sys.exit(wf.run(locals()[f])) wf.send_feedback() # Send the results to Alfred as XML
icon='icons/warning.png' ) wf.send_feedback() return if __name__ == '__main__': # Configure a Workflow class and a logger: wf = Workflow(libraries=['./lib']) log = wf.logger # Configure a LpvmUtilities class: util = utilities.LpvmUtilities(wf) # Notify the user if they are not logged in: if not util.is_logged_in(): log.warning('Not logged into LastPass.') wf.add_item( 'Not logged in to LastPass.', 'Hit ENTER to open an Alfred command to login to LastPass.', valid=True, arg="login", icon='icons/warning.png' ) wf.send_feedback() sys.exit(1) # Run! sys.exit(wf.run(main))
# encoding: utf-8 from workflow import Workflow wf = Workflow() wf.clear_cache() wf.add_item(u'清除完毕') wf.send_feedback()
if route.number_of_changes_required >= 1: subtitle += "Requires changes. " if route.number_of_changes_required >= 1 or route.deviations == True: subtitle += "Hit enter to read more on Ruter's website. " url = u"https://ruter.no/reiseplanlegger/Mellom/Fra/({0}){1} ({2})/til/({3}){4} ({5})/etter/{6}".format( route.from_place_id, route.from_place_name, route.from_place_district, route.to_place_id, route.to_place_name, route.to_place_district, route.current_time) #Add emoticons and assume it's a good route icon = "thumbsup.png" if route.is_bad(): icon = "neutralface.png" if route.is_horrible(): icon = "angryface.png" title = "%s: %s - %s: %s (%s)" % ( route.from_place_name, route.departure_time, route.to_place_name, route.arrival_time, route.travel_time) wf.add_item(title=title, subtitle=subtitle, arg=url, valid=True, icon=icon) wf.send_feedback()
import urllib2 import bs4 from workflow import Workflow baseurl = 'https://www.v2ex.com' r = urllib2.urlopen('https://www.v2ex.com/go/macos?p=1').read() soup = bs4.BeautifulSoup(r, "html.parser") wf = Workflow() for a in soup.select('span.item_title a'): wf.add_item(title=a.text, subtitle=baseurl + a.attrs.get('href'), arg=baseurl + a.attrs.get('href'), valid=True, icon=u'./icon.png') wf.send_feedback() # import urllib2 # import bs4 # from workflow import Workflow # baseurl = 'https://www.v2ex.com' # r = urllib2.urlopen('https://www.v2ex.com/go/macos?p=1').read() # soup = bs4.BeautifulSoup(r, "html.parser") # topicsnode = soup.find('div', attrs={'id': 'TopicsNode'})
arg=u'{deliver_status} {time} {message}'.format( deliver_status=deliver_status, time=item['time'], message=item['message']), valid=True, icon=icon) else: wf.add_item(title=u"快递助手", subtitle=u"无需输入公司,直接输入单号即可", arg="", valid=True, icon=package_icon) wf.send_feedback() if __name__ == u"__main__": wf = Workflow(update_settings={ 'github_slug': 'deamwork/kuaidi-workflow', 'frequency': 7 }) if wf.update_available: wf.add_item(title=u'发现新版本', subtitle=u'选中本条目开始更新', autocomplete='workflow:update', icon=ICON_INFO) sys.exit(wf.run(main))
# encoding: utf-8 import datetime import sys from workflow import Workflow, ICON_WEB, web from Config import Config if __name__ == u"__main__": wf = Workflow() config = Config() routes = config.get_route() for route in routes: title = "%s" % (route) wf.add_item(title=title, subtitle="", valid=True, arg=route) wf.send_feedback()
def get_icon(name): name = '%s-dark' % name if is_dark() else name return "icons/%s.png" % name def is_dark(): rgb = [int(x) for x in WF.alfred_env['theme_background'][5:-6].split(',')] return (0.299 * rgb[0] + 0.587 * rgb[1] + 0.114 * rgb[2]) / 255 < 0.5 if __name__ == '__main__': from brew_actions import ACTIONS if WF.update_available: WF.add_item("An update is available!", autocomplete='workflow:update', valid=False, icon=get_icon("cloud-download")) if WF.cached_data('brew_not_installed', brew_not_installed, max_age=0): WF.add_item('Brew does not seem to be installed!', 'Hit enter to see what you need to do...', arg='open http://brew.sh/#install && exit', valid=True) WF.add_item( 'I trust this workflow', 'Hit enter to install brew...', arg= 'ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"', valid=True) # delete cached file WF.cache_data('brew_not_installed', None)
def main(wf): # workflow:update requires args query = None if len(wf.args): query = wf.args[0] wf.add_item(u'Current version : {}'.format(VERSION), u'Version currently installed', icon=ICON_INFO) wf.add_item(u'Current JIRA user: {}'.format(wf.settings.get('user')), u'JIRA username', icon=ICON_INFO) wf.send_feedback() if __name__ == '__main__': update_settings = {'github_slug': GITHUB_SLUG, 'version': VERSION} wf = Workflow(update_settings=update_settings) log = wf.logger if wf.update_available: # Add a notification to top of Script Filter results wf.add_item(u'New version available', u'Action this item to install the update', autocomplete=u'workflow:update', icon=ICON_INFO) sys.exit(wf.run(main))
class Config(Base): separator = ' ' open_config_file = "open_config_file" def main(self, wf): self._handle_arg() self._load_json() config = self._filter_config_item() if len(config) == 1 and config[0]['keyword'] == self.option: if 'list' in config[0]: self._show_sub_list(config[0]['list'], config[0], self.value) return elif 'action' in config[0]: self._show_action_item(config[0]) return elif self.value != "": self._show_item(config[0], self.value) return if len(self.config) != 0: self.config = config self._show_list() def set_value(self): from workflow import Workflow self.wf = Workflow() if self.args == self.open_config_file: self._open_file(self.wf.settings_path) else: self._handle_arg() old_value = self.wf.settings[self.option] self.wf.settings[self.option] = type(old_value)(self.value) def load_default(self, key): self._load_json() for item in self.config: if key == item['name']: return item['default'] return None def _open_file(self, file): import subprocess subprocess.call(['open', file]) def _handle_arg(self): self.option, _, self.value = self.args.partition(self.separator) self.option = self.option.strip() self.value = self.value.strip() def _load_json(self, file="config.json"): if not hasattr(self, 'config') or not self.config: with open(file) as fp: self.config = json.load(fp) def _filter_config_item(self): return [item for item in self.config if item['keyword'].startswith(self.option)] @show def _show_list(self): for item in self.config: title, subtitle = self._get_text(item) self.wf.add_item(title, subtitle=subtitle, autocomplete=item['keyword'] + " ") @show def _show_item(self, item, new_value): try: self._check_valid(item, new_value) title, subtitle = self._get_text(item) subtitle += ", set to: " + new_value self.wf.add_item(title, subtitle=subtitle, valid=True, arg=item['name'] + Config.separator + new_value) except InvalidInputError as e: self.wf.add_item(e.message) return @show def _show_sub_list(self, sub_list, item, value): current_value = get_from_dict(self.wf.settings, item['name'], item['default']) for sub_item, sub_value in sub_list: if value.lower() in sub_item.lower(): title = sub_item if sub_value == current_value: title += " (selected)" self.wf.add_item(title, valid=True, arg=item['name'] + Config.separator + str(sub_value), autocomplete=item['keyword'] + ' ' + sub_item.lower()) @show def _show_action_item(self, item): self.wf.add_item(item['description'], valid=True, arg=self.open_config_file) def _check_valid(self, item, new_value): return getattr(self, '_check_' + item['type'])(item, new_value) def _get_text(self, item): title = item['description'] if 'name' in item and 'default' in item: current_value = get_from_dict(self.wf.settings, item['name'], item['default']) if 'list' in item: current_value = next((i for i in item['list'] if i[1] == current_value))[0] subtitle = u"Current: %s" % (current_value) else: subtitle = "" return title, subtitle def _check_int(self, item, new_value): not_int = "Please enter an integer" too_small = "Value must be larger than %s" too_large = "Value must be smaller than %s" out_of_range = "Value must be between %s and %s" try: value = int(new_value) if 'min' in item and 'max' in item and (not item['min'] <= value <= item['max']): raise InvalidInputError(out_of_range % (item['min'], item['max'])) elif 'min' in item and value < item['min']: raise InvalidInputError(too_small % (item['min'])) elif 'max' in item and value > item['max']: raise InvalidInputError(too_large % (item['max'])) except ValueError: raise InvalidInputError(not_int) def _check_str(self, item, new_value): return True def _check_list(self, item): return True
wf = Workflow() currentBlur = 0 try: with open(devnull, 'w') as void: currentBlur = subprocess.check_output(['defaults', 'read', 'com.runningwithcrayons.Alfred-2', 'experimentalBlur'], stderr=void).strip() except: pass if (currentBlur > max_value): notice = u" (Invalid)" else: notice = u"" wf.add_item(u"Blur is set to {} of {}".format(currentBlur, max_value, notice), icon="icons/{}.png".format(int(round(float(currentBlur) / float(max_value) * 5.0)))) if len(wf.args) > 0 and wf.args[0]: try: value = float(wf.args[0]) if isFloat else int(wf.args[0]) except ValueError: wf.add_item(u"Invalid Number", subtitle="Value must be a {} number between 0 and {}".format(number_format, max_value)) wf.send_feedback() raise SystemExit if value >= 0 and value <= max_value: wf.add_item(u"Set blur radius to {} of {}".format(value, max_value), # subtitle=u"Blur radius must be a {} number between 0 and {}".format(number_format, max_value), arg=u"{}".format(value), icon=u"icons/{}.png".format(int(round(float(value) / float(max_value) * 5.0))), valid=True)
from base import JetBrainsUtils from workflow import Workflow import sys import os if __name__ == '__main__': path = sys.argv[1] jetbrains = JetBrainsUtils.JetBrainsUtils(path) jobs = jetbrains.readFile() wf = Workflow() jsonStr = list() user_home = os.path.expandvars('$HOME') for job in jobs: index = job.rfind("/") jobName = job[index + 1:] jobStr = str(job) jobStr = jobStr.replace("$USER_HOME$", user_home) wf.add_item(title=jobName, subtitle=job, arg=jobStr+","+path, valid=True) wf.send_feedback()
def getServerStatus(server_name): wf = Workflow() server_status = "" player_status = "" # Try and connect to Minecraft server try: server = MinecraftServer.lookup(server_name) status = server.status() latency = server.status().latency # Assign Default Values server_status = "Server is online" # Stores server host name server_name = "Server: {0}".format(server.host) # Store the Server message of the day motd = "" # Stores the server software brand and version server_software = "" # Stores the amount of players connected and the max available players player_status = "There are currently {0}/{1} players online".format(status.players.online, status.players.max) # Stores the server latency ping = ("The server replied in {0} ms".format(latency)) # If Query is enabled, will store the list of players connected detailed_players_connected = "" # Check to see if the server has query enabled try: query = server.query() motd = query.motd status = server.status() server_software = "{0} {1}".format(str(query.software.brand).capitalize(), status.version.name) intro = "" if status.players.online == 0: intro = "Player Information" elif status.players.online == 1: intro = "The following player is online: " else: intro = "The following players are online: " detailed_players_connected = intro + "{0}".format(", ".join(query.players.names)) except Exception: server_software = "Version: {0}".format(status.version.name) detailed_players_connected = "Player Information" # Populate Alfred with server information wf.add_item(title=server_name, subtitle=motd, icon=u'resources/server.png') wf.add_item(title=server_status, subtitle=server_software, icon=u'resources/online.png') wf.add_item(title=player_status, subtitle=detailed_players_connected, icon=u'resources/players.png') if ping != "": wf.add_item(title=ping, subtitle=u'Server Ping', icon=u'resources/ping.png') wf.send_feedback() except Exception: server_status = "Could not connect to server: {0}".format(server_name) wf.add_item(title=server_status, subtitle=u'Server Offline', icon=u'resources/offline.png') wf.send_feedback()
if (__name__ == "__main__"): wf = Workflow() if (len(wf.args)): query = wf.args[0] URL = wf.stored_data('url') if (not URL): URL = "canvas.instructure.com" wf.store_data('url', "canvas.instructure.com") if (query[0:13] != "!save_api_key" and query[0:13] != "!api_key_save"): try: ACCESS_TOKEN = wf.get_password("api-key") except: wf.add_item( title="API key not found.", subtitle="Select this action to get your access token.", valid=True, arg="!open_url https://%s/profile/settings" % URL) wf.add_item( title="Enter API key", subtitle= "Select this action when you're ready to paste your API key.", valid=True, arg="!save_api_key ") wf.send_feedback() sys.exit(0) log = wf.logger sys.exit(wf.run(main))
import urllib2 import bs4 from workflow import Workflow baseurl = 'https://www.v2ex.com' r = urllib2.urlopen('https://www.v2ex.com/go/macos?p=1').read() soup = bs4.BeautifulSoup(r, "html.parser") wf = Workflow() for a in soup.select('span.item_title a'): wf.add_item(title=a.text, subtitle=baseurl + a.attrs.get('href'), arg=baseurl + a.attrs.get('href'), valid=True, icon=u'./icon.png') wf.send_feedback() # import urllib2 # import bs4 # from workflow import Workflow # baseurl = 'https://www.v2ex.com' # r = urllib2.urlopen('https://www.v2ex.com/go/macos?p=1').read() # soup = bs4.BeautifulSoup(r, "html.parser") # topicsnode = soup.find('div', attrs={'id': 'TopicsNode'}) # wf = Workflow()