Skip to content

Commit acddeb5

Browse files
committed
update
1 parent 1918b28 commit acddeb5

File tree

4 files changed

+41
-34
lines changed

4 files changed

+41
-34
lines changed

setup.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22

33
setup(
44
name='talkops',
5-
version='1.1.1',
5+
version='1.2.0',
66
author='PicoUX',
77
description="TalkOps SDK",
88
long_description=open('README.md',encoding='utf-8').read(),
@@ -16,7 +16,7 @@
1616
'Issues': 'https://github.com/talkops/sdk-python/issues',
1717
'Source': 'https://github.com/talkops/sdk-python',
1818
},
19-
install_requires=['jinja2', 'requests', 'sseclient'],
19+
install_requires=['aiosseclient', 'jinja2', 'requests'],
2020
keywords=['sdk'],
2121
classifiers=[
2222
"Programming Language :: Python :: 3",

talkops/extension.py

Lines changed: 9 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@
1111
import json
1212
import base64
1313
import os
14+
import time
1415

1516
class Extension:
1617
def __init__(self, token=None):
@@ -30,12 +31,15 @@ def __init__(self, token=None):
3031
self._started = False
3132
self._token = token or os.environ.get('TALKOPS_TOKEN')
3233
self._website = None
34+
self._setup()
3335

34-
async def _setup(self):
36+
def _setup(self):
3537
if self._started:
3638
return
3739
self._started = True
40+
print("test1")
3841
await asyncio.sleep(0.5)
42+
print("test2")
3943
if self._token:
4044
mercure = json.loads(base64.b64decode(self._token).decode())
4145
self._publisher = Publisher(
@@ -47,7 +51,7 @@ async def _setup(self):
4751
'installationSteps': self._installation_steps,
4852
'instructions': self._instructions,
4953
'name': self._name,
50-
'parameters': self._parameters,
54+
'parameters': [p.to_json() for p in self._parameters],
5155
'sdk': {
5256
'name': 'python',
5357
'version': version('talkops'),
@@ -89,9 +93,11 @@ async def _setup(self):
8993
'website': self._website,
9094
}
9195
)
96+
while True:
97+
await asyncio.sleep(1)
9298

9399
def start(self):
94-
asyncio.run(self._setup())
100+
self._setup()
95101
return self
96102

97103
def on(self, event_type, callback):

talkops/parameter.py

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -25,8 +25,8 @@ def __init__(self, name):
2525
raise ValueError('name expected uppercase letters, numbers, and underscores.')
2626
self._name = name
2727
self._description = None
28-
self._value = None
29-
self._default_value = None
28+
self._value = ''
29+
self._default_value = ''
3030
self._available_values = []
3131
self._possible_values = []
3232
self._optional = False
@@ -69,14 +69,14 @@ def value(self):
6969
return os.environ.get(self._name) or self._value or self._default_value
7070

7171
def set_value(self, value):
72-
if value is not None and (not isinstance(value, str) or not value.strip()):
73-
raise ValueError('value must be a non-empty string.')
72+
if not isinstance(value, str):
73+
raise ValueError('value must be a string.')
7474
self._value = value
7575
return self
7676

7777
@property
7878
def has_value(self):
79-
return self.value is not None and self.value != ''
79+
return self.value != ''
8080

8181
def set_available_values(self, available_values):
8282
if not isinstance(available_values, list) or not available_values:

talkops/subscriber.py

Lines changed: 25 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -3,57 +3,62 @@
33
from urllib.parse import quote
44
import asyncio
55
import json
6-
import requests
76
import sys
8-
import time
7+
import nest_asyncio
98

109
class Subscriber:
1110
def __init__(self, use_config):
1211
self._use_config = use_config
1312
self._subscribe()
1413

1514
def _subscribe(self):
15+
nest_asyncio.apply()
1616
config = self._use_config()
1717
mercure = config['mercure']
18-
try:
19-
messages = SSEClient(
20-
f"{mercure['url']}?topic={quote(mercure['subscriber']['topic'])}",
21-
headers={
22-
'Authorization': f"Bearer {mercure['subscriber']['token']}",
23-
}
24-
)
25-
for message in messages:
26-
self._on_event(json.loads(message.data))
27-
except Exception as e:
28-
print(e)
18+
messages = SSEClient(
19+
f"{mercure['url']}?topic={quote(mercure['subscriber']['topic'])}",
20+
headers={
21+
'Authorization': f"Bearer {mercure['subscriber']['token']}"
22+
}
23+
)
24+
for message in messages:
25+
try:
26+
event = json.loads(message.data)
27+
except json.JSONDecodeError as e:
28+
print(f"Failed to decode JSON: {e}", file=sys.stderr)
29+
continue
30+
self._on_event(event)
2931

3032
def _on_event(self, event):
3133
config = self._use_config()
3234
if event['type'] == 'ping':
3335
config['publisher'].on_ping()
3436
return
3537
if event['type'] == 'function_call':
36-
for fn in config['functions']:
37-
if fn.__name__ != event['name']:
38+
for function in config['functions']:
39+
if function.__name__ != event['name']:
3840
continue
3941
arguments_list = [
4042
event['args'].get(name) or event['defaultArgs'].get(name)
41-
for name in fn.__code__.co_varnames
43+
for name in function.__code__.co_varnames
4244
]
43-
output = fn(*arguments_list)
45+
output = function(*arguments_list)
4446
if asyncio.iscoroutine(output):
4547
output = asyncio.run(output)
4648
event['output'] = output
4749
config['publisher'].publish_event(event)
4850
return
49-
print(f'Function {fn.__name__} not found.', file=sys.stderr)
51+
print(f'Function {function.__name__} not found.', file=sys.stderr)
5052
return
5153
if event['type'] == 'boot':
5254
for name, value in event['parameters'].items():
5355
for parameter in config['parameters']:
5456
if parameter.name != name:
5557
continue
56-
parameter.set_value(value)
58+
if isinstance(value, str):
59+
parameter.set_value(value)
60+
else:
61+
parameter.set_value("")
5762
ready = True
5863
for parameter in config['parameters']:
5964
if parameter.is_optional:
@@ -69,8 +74,4 @@ def _on_event(self, event):
6974
arguments_list = [event['args'].get(name) for name in callback.__code__.co_varnames]
7075
output = callback(*arguments_list)
7176
if asyncio.iscoroutine(output):
72-
output = asyncio.run(output)
73-
74-
def _get_event_types(self):
75-
with files('talkops.data').joinpath('event-types.json').open('r', encoding='utf-8') as f:
76-
return json.load(f)
77+
asyncio.run(output)

0 commit comments

Comments
 (0)