triggerware 0.1.0__tar.gz → 0.1.2__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {triggerware-0.1.0 → triggerware-0.1.2}/PKG-INFO +2 -2
- {triggerware-0.1.0 → triggerware-0.1.2}/pyproject.toml +2 -2
- {triggerware-0.1.0 → triggerware-0.1.2}/src/triggerware/_result_set.py +1 -1
- {triggerware-0.1.0 → triggerware-0.1.2}/src/triggerware/_triggerware_client.py +28 -3
- triggerware-0.1.0/src/triggerware/_external_connector.old +0 -130
- {triggerware-0.1.0 → triggerware-0.1.2}/README.md +0 -0
- {triggerware-0.1.0 → triggerware-0.1.2}/src/triggerware/__init__.py +0 -0
- {triggerware-0.1.0 → triggerware-0.1.2}/src/triggerware/_interfaces.py +0 -0
- {triggerware-0.1.0 → triggerware-0.1.2}/src/triggerware/_queries.py +0 -0
- {triggerware-0.1.0 → triggerware-0.1.2}/src/triggerware/_subscriptions.py +0 -0
- {triggerware-0.1.0 → triggerware-0.1.2}/src/triggerware/_types.py +0 -0
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
Metadata-Version: 2.3
|
|
2
2
|
Name: triggerware
|
|
3
|
-
Version: 0.1.
|
|
3
|
+
Version: 0.1.2
|
|
4
4
|
Summary:
|
|
5
5
|
Author: godofavacyn
|
|
6
6
|
Author-email: godofavacyn <aidenmeyer@mailbox.org>
|
|
7
|
-
Requires-Dist: jayson-rpc
|
|
7
|
+
Requires-Dist: jayson-rpc[websockets]
|
|
8
8
|
Requires-Dist: sphinx
|
|
9
9
|
Requires-Python: >=3.11
|
|
10
10
|
Description-Content-Type: text/markdown
|
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
[project]
|
|
2
2
|
name = "triggerware"
|
|
3
|
-
version = "0.1.
|
|
3
|
+
version = "0.1.2"
|
|
4
4
|
description = ""
|
|
5
5
|
readme = "README.md"
|
|
6
6
|
requires-python = ">=3.11"
|
|
7
7
|
authors = [{name = "godofavacyn", email = "aidenmeyer@mailbox.org"}]
|
|
8
8
|
dependencies = [
|
|
9
|
-
"jayson-rpc",
|
|
9
|
+
"jayson-rpc[websockets]",
|
|
10
10
|
"sphinx"
|
|
11
11
|
]
|
|
12
12
|
|
|
@@ -48,7 +48,8 @@ class TriggerwareClient:
|
|
|
48
48
|
Args:
|
|
49
49
|
uri: The WebSocket URI to connect to.
|
|
50
50
|
"""
|
|
51
|
-
uri = "ws://tw-instance-load-balancer-194323221.us-east-2.elb.amazonaws.com"
|
|
51
|
+
# uri = "ws://tw-instance-load-balancer-194323221.us-east-2.elb.amazonaws.com"
|
|
52
|
+
uri = "wss://instances.triggerware.com"
|
|
52
53
|
json_rpc = await JsonRpcWebSocketConnection.connect(
|
|
53
54
|
uri,
|
|
54
55
|
headers={
|
|
@@ -95,10 +96,34 @@ class TriggerwareClient:
|
|
|
95
96
|
return await View(self, query).validate()
|
|
96
97
|
|
|
97
98
|
async def close(self):
|
|
99
|
+
"""Closes the connection to the server."""
|
|
100
|
+
await self.json_rpc.close()
|
|
101
|
+
|
|
102
|
+
async def activate_connector(self, name: str, json_data: dict | None = None):
|
|
103
|
+
"""Activate a connector on the server.
|
|
104
|
+
|
|
105
|
+
Args:
|
|
106
|
+
name: The name of the connector to activate.
|
|
107
|
+
json_data: Optional data to pass to the connector upon activation.
|
|
108
|
+
"""
|
|
109
|
+
await self.json_rpc.call("activate_connector", {"name": name, "json_data": json_data})
|
|
110
|
+
|
|
111
|
+
async def deactivate_connector(self, name: str):
|
|
112
|
+
"""Deactivate a connector on the server.
|
|
113
|
+
|
|
114
|
+
Args:
|
|
115
|
+
name: The name of the connector to deactivate.
|
|
98
116
|
"""
|
|
99
|
-
|
|
117
|
+
await self.json_rpc.call("deactivate_connector", {"name": name})
|
|
118
|
+
|
|
119
|
+
async def list_active_connectors(self) -> list[str]:
|
|
120
|
+
"""Query the server for which connectors are currently activated.
|
|
121
|
+
|
|
122
|
+
Returns:
|
|
123
|
+
list[str]: The names of all currently active connectors.
|
|
100
124
|
"""
|
|
101
|
-
await self.json_rpc.
|
|
125
|
+
result = await self.json_rpc.call("list-active-connectors", {})
|
|
126
|
+
return result["connectors"]
|
|
102
127
|
|
|
103
128
|
@property
|
|
104
129
|
def is_closed(self) -> bool:
|
|
@@ -1,130 +0,0 @@
|
|
|
1
|
-
from typing import Any, TYPE_CHECKING, Callable
|
|
2
|
-
import threading
|
|
3
|
-
import inspect
|
|
4
|
-
import importlib
|
|
5
|
-
|
|
6
|
-
if TYPE_CHECKING:
|
|
7
|
-
import triggerware as tw
|
|
8
|
-
|
|
9
|
-
sql_types = {
|
|
10
|
-
"str": "casesensitive",
|
|
11
|
-
"int": "int",
|
|
12
|
-
}
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
class ConnectorManager:
|
|
16
|
-
def __init__(
|
|
17
|
-
self,
|
|
18
|
-
tw_client: "tw.TriggerwareClient",
|
|
19
|
-
external_address: str,
|
|
20
|
-
external_port: int,
|
|
21
|
-
) -> None:
|
|
22
|
-
self._client: "tw.TriggerwareClient" = tw_client
|
|
23
|
-
self._address = external_address
|
|
24
|
-
self._port = external_port
|
|
25
|
-
self._lock = threading.Lock()
|
|
26
|
-
self._conn_names: set[str] = set()
|
|
27
|
-
self._gen_functions: dict[str, Callable[..., Any]] = {}
|
|
28
|
-
threading.Thread(target=self._run, daemon=True).start()
|
|
29
|
-
|
|
30
|
-
def create_schema(self, schema: str):
|
|
31
|
-
params = {"name": schema}
|
|
32
|
-
_ = self._client.json_rpc.call("create-sql-schema", params)
|
|
33
|
-
|
|
34
|
-
def add_connector(self, connector: "Connector"):
|
|
35
|
-
generators: list[dict] = []
|
|
36
|
-
with self._lock:
|
|
37
|
-
if connector.name in self._conn_names:
|
|
38
|
-
raise ValueError(
|
|
39
|
-
f"Connector with name {connector.name} already exists."
|
|
40
|
-
)
|
|
41
|
-
self._conn_names.add(connector.name)
|
|
42
|
-
for gen_name, generator in connector.generators.items():
|
|
43
|
-
generators.append(
|
|
44
|
-
{
|
|
45
|
-
"name": gen_name,
|
|
46
|
-
"cost": generator.cost,
|
|
47
|
-
"inputs": generator.inputs,
|
|
48
|
-
}
|
|
49
|
-
)
|
|
50
|
-
self._gen_functions[gen_name] = generator.func
|
|
51
|
-
params = {
|
|
52
|
-
"columns": connector.columns,
|
|
53
|
-
"generator": generators,
|
|
54
|
-
"host": self._address,
|
|
55
|
-
"port": self._port,
|
|
56
|
-
"schema": connector.schema,
|
|
57
|
-
"name": connector.name,
|
|
58
|
-
}
|
|
59
|
-
_ = self._client.json_rpc.call("define-external-jsonrpc-table", params)
|
|
60
|
-
|
|
61
|
-
def _run(self):
|
|
62
|
-
# for conn in TcpStreamConnection.serve(self._address, self._port):
|
|
63
|
-
async def handler(conn: JsonRpcStreamConnection):
|
|
64
|
-
@conn.method()
|
|
65
|
-
def generate(
|
|
66
|
-
inputs: list[Any] = [],
|
|
67
|
-
name: str = "",
|
|
68
|
-
limit=None,
|
|
69
|
-
notify_timelimit=None,
|
|
70
|
-
):
|
|
71
|
-
with self._lock:
|
|
72
|
-
if name in self._gen_functions:
|
|
73
|
-
return self._gen_functions[name](*inputs)
|
|
74
|
-
else:
|
|
75
|
-
raise ValueError(f"'{name}' not found in connectors.")
|
|
76
|
-
await conn.wait_closed()
|
|
77
|
-
|
|
78
|
-
async def close(self):
|
|
79
|
-
with self._lock:
|
|
80
|
-
await self._client.close()
|
|
81
|
-
|
|
82
|
-
@property
|
|
83
|
-
def is_closed(self) -> bool:
|
|
84
|
-
with self._lock:
|
|
85
|
-
return self._client.is_closed
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
class Generator:
|
|
89
|
-
def __init__(
|
|
90
|
-
self, name: str, func: Callable[..., Any], inputs: list[str], cost: int
|
|
91
|
-
):
|
|
92
|
-
self.name = name
|
|
93
|
-
self.func = func
|
|
94
|
-
self.inputs = inputs
|
|
95
|
-
self.cost = cost
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
class Connector:
|
|
99
|
-
def __init__(
|
|
100
|
-
self,
|
|
101
|
-
*,
|
|
102
|
-
name: str,
|
|
103
|
-
columns: list[tuple[str, str | type]],
|
|
104
|
-
schema: str = "DEMO",
|
|
105
|
-
):
|
|
106
|
-
self.name = name
|
|
107
|
-
self.schema = schema
|
|
108
|
-
try:
|
|
109
|
-
type_name = lambda ty: (
|
|
110
|
-
sql_types[ty.__name__] if isinstance(ty, type) else ty
|
|
111
|
-
)
|
|
112
|
-
self.columns = [[name, type_name(ty)] for name, ty in columns]
|
|
113
|
-
except KeyError as e:
|
|
114
|
-
raise TypeError(f"Unsupported type in columns: {e}")
|
|
115
|
-
self.generators: dict[str, Generator] = {}
|
|
116
|
-
self.generator_count = 0
|
|
117
|
-
|
|
118
|
-
def generate(self, cost: int = 1):
|
|
119
|
-
def decorator(func: Callable[..., Any]):
|
|
120
|
-
gen_name = f"{self.name}__{self.generator_count}"
|
|
121
|
-
inputs = [
|
|
122
|
-
param.name for param in inspect.signature(func).parameters.values()
|
|
123
|
-
]
|
|
124
|
-
self.generators[gen_name] = Generator(gen_name, func, inputs, cost)
|
|
125
|
-
self.generator_count += 1
|
|
126
|
-
return func
|
|
127
|
-
|
|
128
|
-
return decorator
|
|
129
|
-
|
|
130
|
-
__all__ = ["ConnectorManager", "Connector", "Generator"]
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|