-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathmain.py
92 lines (74 loc) · 3.36 KB
/
main.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
"""
Vercel Extension
Provides quick access to your Vercel Projects
"""
import logging
from ulauncher.api.client.Extension import Extension
from ulauncher.api.client.EventListener import EventListener
from ulauncher.api.shared.event import KeywordQueryEvent
from ulauncher.api.shared.item.ExtensionResultItem import ExtensionResultItem
from ulauncher.api.shared.action.RenderResultListAction import RenderResultListAction
from ulauncher.api.shared.action.HideWindowAction import HideWindowAction
from ulauncher.api.shared.action.OpenUrlAction import OpenUrlAction
from vercel import Client as VercelClient, AuthenticationException, GenericException
LOGGER = logging.getLogger(__name__)
class VercelExtension(Extension):
""" Main Extension Class """
def __init__(self):
LOGGER.info('init Vercel Extension')
super(VercelExtension, self).__init__()
self.subscribe(KeywordQueryEvent, KeywordQueryEventListener())
self.vercel_client = VercelClient("", LOGGER)
def build_results_list(self, sites):
""" Builds the result list from a list of sites """
items = []
for site in sites:
name = site["name"]
namespace = self.vercel_client.get_username()
if 'targets' in site and 'production' in site['targets']:
production_targets = site['targets']['production']
if 'alias' in production_targets:
aliases = production_targets['alias']
if aliases:
url = aliases[0]
if 'teamId' in site:
namespace = self.vercel_client.get_team_slug()
items.append(ExtensionResultItem(
icon='images/vercel.png',
name=name,
on_enter=OpenUrlAction("https://" + url),
on_alt_enter=OpenUrlAction("https://vercel.com/" + namespace + "/" + name)
))
return items
class KeywordQueryEventListener(EventListener):
""" Handles query events """
def on_event(self, event, extension):
""" Handle query event """
items = []
try:
extension.vercel_client.set_access_token(
extension.preferences['access_token'])
if 'username' in extension.preferences:
extension.vercel_client.set_username(
extension.preferences['username'])
if 'team_slug' in extension.preferences:
extension.vercel_client.set_team_slug(
extension.preferences['team_slug'])
sites = extension.vercel_client.get_sites(event.get_argument())
items = extension.build_results_list(sites)
except AuthenticationException:
items.append(
ExtensionResultItem(
icon='images/vercel.png',
name="Authentication failed",
description="Please check the 'access_token' value on extension preferences",
on_enter=HideWindowAction()))
except GenericException:
items.append(
ExtensionResultItem(
icon='images/vercel.png',
name="Error fetching information from Vercel",
on_enter=HideWindowAction()))
return RenderResultListAction(items)
if __name__ == '__main__':
VercelExtension().run()