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
Exemple #2
0
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
Exemple #3
0
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
Exemple #4
0
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
Exemple #5
0
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 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
Exemple #9
0
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
Exemple #10
0
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"})
Exemple #11
0
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()
Exemple #12
0
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
Exemple #13
0
# 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()
Exemple #14
0
                    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))
Exemple #15
0
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)
Exemple #16
0
# !/usr/bin/python
# encoding: utf-8

from workflow import Workflow

wf = Workflow()
wf.clear_cache()
wf.add_item(u'清除完毕')
wf.send_feedback();
Exemple #17
0
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',
Exemple #18
0
        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
Exemple #19
0
    # 重写 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))
Exemple #22
0
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
Exemple #23
0
# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #

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))
Exemple #25
0
# encoding: utf-8

from workflow import Workflow

wf = Workflow()
wf.clear_cache()
wf.add_item(u'清除完毕')
wf.send_feedback()
Exemple #26
0
        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()
Exemple #27
0
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'})
Exemple #28
0
                            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()
Exemple #30
0
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))
Exemple #32
0
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
Exemple #33
0
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)
Exemple #34
0
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()
Exemple #36
0
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))
Exemple #37
0
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()