Skip to content

Commit f74e3b0

Browse files
committed
minor refactors. multitenant api only in agent_controller.
2 parents b768291 + feed475 commit f74e3b0

File tree

5 files changed

+281
-236
lines changed

5 files changed

+281
-236
lines changed
Lines changed: 10 additions & 224 deletions
Original file line numberDiff line numberDiff line change
@@ -1,142 +1,45 @@
1-
from aiohttp import (
2-
ClientSession,
3-
)
41
from dataclasses import dataclass
5-
from pubsub import pub
62

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
175
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
248

259
import logging
2610

2711
logger = logging.getLogger("aries_controller")
2812

2913

3014
@dataclass
31-
class AriesAgentController:
15+
class AriesAgentController(AriesAgentControllerBase):
3216
"""The Aries Agent Controller class
3317
3418
This class allows you to interact with Aries by exposing the aca-py API.
3519
36-
Attributes:
37-
----------
38-
admin_url : str
39-
The URL for the Admin API
4020
is_multitenant : bool
4121
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)
4622
"""
4723

48-
admin_url: str
4924
is_multitenant: bool = False
50-
api_key: str = None
5125

5226
def __post_init__(self):
5327
"""Constructs additional attributes and logic
5428
Creates headers, instantiates a client sessions and initialises
5529
the controller interfaces for the aries swagger API.
5630
"""
5731

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__()
9833

9934
if self.is_multitenant:
10035
self.multitenant = MultitenancyController(
10136
self.admin_url,
10237
self.client_session)
10338

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(
13740
self,
13841
webhook_host: str = None,
139-
webhook_port: str = None,
42+
webhook_port: int = None,
14043
webhook_base: str = ""):
14144
"""Create a webhooklisteners
14245
@@ -149,135 +52,18 @@ def webhook_listener(
14952
webhook_base : str
15053
The base url for webhooks (default is "")
15154
"""
152-
self.webhook_listener: AriesWebhookListener = AriesWebhookListener(
55+
self.webhook_server: AriesWebhookServer = AriesWebhookServer(
15356
webhook_host=webhook_host,
15457
webhook_port=webhook_port,
15558
webhook_base=webhook_base,
15659
is_multitenant=self.is_multitenant)
15760

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.")
26461

26562
async def listen_webhooks(self):
26663
try:
267-
await self.webhook_listener.listen_webhooks()
64+
await self.webhook_server.listen_webhooks()
26865
except AttributeError:
26966
logger.warning("Missing webhook listener.")
27067
except Exception as exc:
27168
logger.warning(
27269
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

Comments
 (0)