1
- from aiohttp import (
2
- ClientSession ,
3
- )
4
1
from dataclasses import dataclass
5
- from pubsub import pub
6
2
7
- from .controllers .connections import ConnectionsController
8
- from .controllers .messaging import MessagingController
9
- from .controllers .mediation import MediationController
10
- from .controllers .schema import SchemaController
11
- from .controllers .wallet import WalletController
12
- from .controllers .definitions import DefinitionsController
13
- from .controllers .issuer import IssuerController
14
- from .controllers .proof import ProofController
15
- from .controllers .ledger import LedgerController
16
- from .controllers .credential import CredentialController
3
+ from .aries_controller_base import AriesAgentControllerBase
4
+ from .aries_webhook_server import AriesWebhookServer
17
5
from .controllers .multitenant import MultitenancyController
18
- from .controllers .server import ServerController
19
- from .controllers .oob import OOBController
20
- from .controllers .action_menu import ActionMenuController
21
- from .controllers .revocation import RevocationController
22
-
23
- from .aries_webhook_listener import AriesWebhookListener
6
+ from pubsub import pub
7
+ from pubsub import pub
24
8
25
9
import logging
26
10
27
11
logger = logging .getLogger ("aries_controller" )
28
12
29
13
30
14
@dataclass
31
- class AriesAgentController :
15
+ class AriesAgentController ( AriesAgentControllerBase ) :
32
16
"""The Aries Agent Controller class
33
17
34
18
This class allows you to interact with Aries by exposing the aca-py API.
35
19
36
- Attributes:
37
- ----------
38
- admin_url : str
39
- The URL for the Admin API
40
20
is_multitenant : bool
41
21
Initialise the multitenant interface (default is False)
42
- mediation : bool
43
- Initialise the mediation interface (default is False)
44
- api_key : str
45
- The API key (default is None)
46
22
"""
47
23
48
- admin_url : str
49
24
is_multitenant : bool = False
50
- api_key : str = None
51
25
52
26
def __post_init__ (self ):
53
27
"""Constructs additional attributes and logic
54
28
Creates headers, instantiates a client sessions and initialises
55
29
the controller interfaces for the aries swagger API.
56
30
"""
57
31
58
- self .webhook_site = None
59
- self .connections_controller = None
60
-
61
- # Construct headers for Client Session and the session itself
62
- self .headers = {}
63
-
64
- if self .api_key :
65
- self .headers .update ({"X-API-Key" : self .api_key })
66
-
67
- self .client_session : ClientSession = ClientSession (
68
- headers = self .headers )
69
-
70
- # Instantiate controllers
71
- self .connections = ConnectionsController (
72
- self .admin_url ,
73
- self .client_session )
74
-
75
- self .messaging = MessagingController (
76
- self .admin_url ,
77
- self .client_session )
78
-
79
- self .proofs = ProofController (
80
- self .admin_url ,
81
- self .client_session )
82
-
83
- self .ledger = LedgerController (
84
- self .admin_url ,
85
- self .client_session )
86
-
87
- self .credentials = CredentialController (
88
- self .admin_url ,
89
- self .client_session )
90
-
91
- self .server = ServerController (
92
- self .admin_url ,
93
- self .client_session )
94
-
95
- self .oob = OOBController (
96
- self .admin_url ,
97
- self .client_session )
32
+ super ().__post_init__ ()
98
33
99
34
if self .is_multitenant :
100
35
self .multitenant = MultitenancyController (
101
36
self .admin_url ,
102
37
self .client_session )
103
38
104
- self .mediation = MediationController (
105
- self .admin_url ,
106
- self .client_session )
107
-
108
- self .schema = SchemaController (
109
- self .admin_url ,
110
- self .client_session )
111
-
112
- self .wallet = WalletController (
113
- self .admin_url ,
114
- self .client_session )
115
-
116
- self .definitions = DefinitionsController (
117
- self .admin_url ,
118
- self .client_session )
119
-
120
- self .issuer = IssuerController (
121
- self .admin_url ,
122
- self .client_session ,
123
- self .connections ,
124
- self .wallet ,
125
- self .definitions )
126
-
127
- self .action_menu = ActionMenuController (
128
- self .admin_url ,
129
- self .client_session )
130
-
131
- self .revocations = RevocationController (
132
- self .admin_url ,
133
- self .client_session
134
- )
135
-
136
- def webhook_listener (
39
+ def webhook_server (
137
40
self ,
138
41
webhook_host : str = None ,
139
- webhook_port : str = None ,
42
+ webhook_port : int = None ,
140
43
webhook_base : str = "" ):
141
44
"""Create a webhooklisteners
142
45
@@ -149,135 +52,18 @@ def webhook_listener(
149
52
webhook_base : str
150
53
The base url for webhooks (default is "")
151
54
"""
152
- self .webhook_listener : AriesWebhookListener = AriesWebhookListener (
55
+ self .webhook_server : AriesWebhookServer = AriesWebhookServer (
153
56
webhook_host = webhook_host ,
154
57
webhook_port = webhook_port ,
155
58
webhook_base = webhook_base ,
156
59
is_multitenant = self .is_multitenant )
157
60
158
- def update_api_key (self , api_key : str ):
159
- """Update the API Key attribute and the header
160
-
161
- Args:
162
- ----
163
- api_key : str
164
- The API Key
165
- """
166
- self .api_key = api_key
167
- self .headers .update ({"X-API-Key" : api_key })
168
- self .client_session .headers .update (self .headers )
169
-
170
- def remove_api_key (self ):
171
- """Removes the API key attribute and corresponding headers
172
- from the Client Session"""
173
- self .api_key = None
174
- if 'X-API-Key' in self .client_session .headers :
175
- del self .client_session .headers ['X-API-Key' ]
176
- del self .headers ['X-API-Key' ]
177
-
178
- def register_listeners (self , listeners , defaults = True ):
179
- """Registers the webhook listners
180
-
181
- Args:
182
- ----
183
- listeners : [dict]
184
- A collection of dictionaries comprised of "handler": handler (fct)
185
- and "topic":"topicname" key-value pairs
186
- defaults : bool
187
- Whether to connect to the default handlers for connections,
188
- basicmessage and present_proof (default is True)
189
- """
190
- try :
191
- if defaults :
192
- if self .connections :
193
- pub .subscribe (
194
- self .connections .default_handler ,
195
- "connections" )
196
- if self .messaging :
197
- pub .subscribe (
198
- self .messaging .default_handler ,
199
- "basicmessages" )
200
- if self .proofs :
201
- pub .subscribe (
202
- self .proofs .default_handler ,
203
- "present_proof" )
204
-
205
- for listener in listeners :
206
- self .add_listener (listener )
207
- except Exception as exc :
208
- logger .warning (
209
- f"Register webhooks listeners failed! { exc !r} occurred." )
210
-
211
- def add_listener (self , listener ):
212
- """Subscribe to a listeners for a topic
213
-
214
- Args:
215
- ----
216
- listener : dict
217
- A dictionary comprised of "handler": handler (fct) and
218
- "topic":"topicname" key-value pairs
219
- """
220
- try :
221
- pub_topic_path = listener ['topic' ]
222
- print ("Subscribing too: " + pub_topic_path )
223
- pub .subscribe (listener ["handler" ], pub_topic_path )
224
- logger .debug ("Lister added for topic : " , pub_topic_path )
225
- except Exception as exc :
226
- logger .warning (
227
- f"Adding webhooks listener failed! { exc !r} occurred." )
228
-
229
- def remove_listener (self , listener ):
230
- """Remove a listener for a topic
231
-
232
- Args:
233
- ----
234
- listener : dict
235
- A dictionary comprised of "handler": handler (fct) and
236
- "topic":"topicname" key-value pairs
237
- """
238
- try :
239
- if pub .isSubscribed (listener ["handler" ], listener ["topic" ]):
240
- pub .unsubscribe (listener ["handler" ], listener ["topic" ])
241
- else :
242
- logger .debug ("Listener not subscribed" , listener )
243
- except Exception as exc :
244
- logger .warning (
245
- f"Removing webhooks listener failed! { exc !r} occurred." )
246
-
247
- def remove_all_listeners (self , topic : str = None ):
248
- """Remove all listeners for one or all topics
249
-
250
- Args:
251
- ----
252
- topic : str
253
- The topic to stop listening for (default is None). Default will
254
- cause unsubscribing from all topics.
255
- """
256
- # Note: advanced use of function can include both listenerFilter and
257
- # topicFilter for this
258
- # Add when needed
259
- try :
260
- pub .unsubAll (topicName = topic )
261
- except Exception as exc :
262
- logger .warning (
263
- f"Removing all webhooks listeners failed! { exc !r} occurred." )
264
61
265
62
async def listen_webhooks (self ):
266
63
try :
267
- await self .webhook_listener .listen_webhooks ()
64
+ await self .webhook_server .listen_webhooks ()
268
65
except AttributeError :
269
66
logger .warning ("Missing webhook listener." )
270
67
except Exception as exc :
271
68
logger .warning (
272
69
f"Listening webhooks failed! { exc !r} occurred." )
273
-
274
- async def terminate (self ):
275
- await self .client_session .close ()
276
- try :
277
- await self .webhook_listener .terminate ()
278
- except AttributeError :
279
- # There is no webhook listener
280
- return
281
- except Exception as exc :
282
- logger .warning (
283
- f"Terminate webhooks listener exception!\n { exc !r} occurred." )
0 commit comments