Skip to content

Commit f554112

Browse files
Merge pull request #375 from minos-framework/issue-373-modify-discovery-client
#373 - Kong subscription
2 parents 7271ab9 + 4ab59d8 commit f554112

File tree

32 files changed

+1139
-181
lines changed

32 files changed

+1139
-181
lines changed

packages/core/minos-microservice-networks/minos/networks/decorators/definitions/abc.py

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,9 @@ class EnrouteDecorator(ABC):
3030
# noinspection PyFinal
3131
KIND: Final[EnrouteDecoratorKind]
3232

33+
def __init__(self, **kwargs):
34+
self.kwargs = kwargs
35+
3336
def __call__(self, func: Union[Handler, HandlerWrapper]) -> HandlerWrapper:
3437
if isinstance(func, HandlerWrapper):
3538
meta = func.meta

packages/core/minos-microservice-networks/minos/networks/decorators/definitions/broker.py

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,8 @@
1717
class BrokerEnrouteDecorator(EnrouteDecorator, ABC):
1818
"""Broker Enroute class"""
1919

20-
def __init__(self, topic: str):
20+
def __init__(self, topic: str, **kwargs):
21+
super().__init__(**kwargs)
2122
self.topic = topic
2223

2324
def __iter__(self) -> Iterable:

packages/core/minos-microservice-networks/minos/networks/decorators/definitions/http/abc.py

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,8 @@
1212
class HttpEnrouteDecorator(EnrouteDecorator):
1313
"""Http Enroute Decorator class."""
1414

15-
def __init__(self, path: Optional[str] = None, method: Optional[str] = None, url: Optional[str] = None):
15+
def __init__(self, path: Optional[str] = None, method: Optional[str] = None, url: Optional[str] = None, **kwargs):
16+
super().__init__(**kwargs)
1617
if path is None and url is not None:
1718
warnings.warn("The 'url' argument has been deprecated. 'path' must be used.", DeprecationWarning)
1819
path = url

packages/core/minos-microservice-networks/minos/networks/decorators/definitions/periodic.py

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,8 @@
3232
class PeriodicEnrouteDecorator(EnrouteDecorator, ABC):
3333
"""Periodic Enroute class"""
3434

35-
def __init__(self, crontab: Union[str, CronTab, CronTabImpl]):
35+
def __init__(self, crontab: Union[str, CronTab, CronTabImpl], **kwargs):
36+
super().__init__(**kwargs)
3637
from ...scheduling import (
3738
CronTab,
3839
)

packages/core/minos-microservice-networks/minos/networks/discovery/clients/abc.py

Lines changed: 15 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,17 +1,22 @@
1+
from __future__ import (
2+
annotations,
3+
)
4+
15
import logging
26
from abc import (
37
ABC,
48
abstractmethod,
59
)
610

711
from minos.common import (
8-
Object,
12+
Config,
13+
SetupMixin,
914
)
1015

1116
logger = logging.getLogger(__name__)
1217

1318

14-
class DiscoveryClient(ABC, Object):
19+
class DiscoveryClient(ABC, SetupMixin):
1520
"""Discovery Client class."""
1621

1722
def __init__(self, host: str, port: int, **kwargs):
@@ -28,6 +33,14 @@ def route(self) -> str:
2833
# noinspection HttpUrlsUsage
2934
return f"http://{self.host}:{self.port}"
3035

36+
@classmethod
37+
def _from_config(cls, config: Config, **kwargs) -> DiscoveryClient:
38+
discovery_config = config.get_discovery()
39+
40+
client_host = discovery_config.get("host")
41+
client_port = discovery_config.get("port")
42+
return cls(host=client_host, port=client_port, **kwargs)
43+
3144
@abstractmethod
3245
async def subscribe(
3346
self, host: str, port: int, name: str, endpoints: list[dict[str, str]], *args, **kwargs

packages/core/minos-microservice-networks/minos/networks/discovery/connectors.py

Lines changed: 3 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -79,10 +79,7 @@ def _client_from_config(cls, config: Config) -> DiscoveryClient:
7979
discovery_config = config.get_discovery()
8080

8181
client_cls = cls._client_cls_from_config(discovery_config)
82-
client_host = discovery_config.get("host")
83-
client_port = discovery_config.get("port")
84-
85-
return client_cls(host=client_host, port=client_port)
82+
return client_cls.from_config(config)
8683

8784
@staticmethod
8885
def _client_cls_from_config(discovery_config: dict[str, Any]) -> type[DiscoveryClient]:
@@ -104,7 +101,8 @@ def _endpoints_from_config(config: Config) -> list[dict[str, Any]]:
104101
for name in config.get_services():
105102
decorators = EnrouteCollector(name, config).get_rest_command_query()
106103
endpoints += [
107-
{"url": decorator.url, "method": decorator.method} for decorator in set(chain(*decorators.values()))
104+
{"url": decorator.url, "method": decorator.method} | decorator.kwargs
105+
for decorator in set(chain(*decorators.values()))
108106
]
109107

110108
endpoints.sort(key=itemgetter("url", "method"))

packages/core/minos-microservice-networks/tests/services/commands.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@
77

88

99
class CommandService:
10-
@enroute.rest.command(path="/order", method="GET")
10+
@enroute.rest.command(path="/order", method="GET", foo="bar")
1111
def get_order_rest(self, request: Request) -> Response:
1212
return Response("get_order")
1313

packages/core/minos-microservice-networks/tests/services/queries.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66

77

88
class QueryService:
9-
@enroute.rest.query(path="/ticket", method="POST")
9+
@enroute.rest.query(path="/ticket", method="POST", foo="bar")
1010
def add_ticket(self, request: Request) -> Response:
1111
return Response("ticket_added")
1212

packages/core/minos-microservice-networks/tests/test_networks/test_decorators/test_api.py

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,10 +16,26 @@ def test_rest_command(self):
1616
decorator = enroute.rest.command(path="tickets/", method="GET")
1717
self.assertEqual(RestCommandEnrouteDecorator("tickets/", "GET"), decorator)
1818

19+
def test_rest_command_kwargs(self):
20+
decorator = enroute.rest.command(
21+
path="tickets/",
22+
method="GET",
23+
foo="bar",
24+
)
25+
self.assertEqual({"foo": "bar"}, decorator.kwargs)
26+
1927
def test_rest_query(self):
2028
decorator = enroute.rest.query(path="tickets/", method="GET")
2129
self.assertEqual(RestQueryEnrouteDecorator("tickets/", "GET"), decorator)
2230

31+
def test_rest_query_kwargs(self):
32+
decorator = enroute.rest.query(
33+
path="tickets/",
34+
method="GET",
35+
foo="bar",
36+
)
37+
self.assertEqual({"foo": "bar"}, decorator.kwargs)
38+
2339
def test_rest_event_raises(self):
2440
with self.assertRaises(AttributeError):
2541
enroute.rest.event("CreateTicket")

packages/core/minos-microservice-networks/tests/test_networks/test_decorators/test_collectors.py

Lines changed: 18 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -15,10 +15,13 @@
1515
from tests.utils import (
1616
FakeService,
1717
FakeServiceWithGetEnroute,
18+
FakeServiceWithKwargs,
1819
)
1920

2021

2122
class TestEnrouteCollector(unittest.IsolatedAsyncioTestCase):
23+
ticket_route = "tickets/"
24+
2225
def test_decorated_str(self):
2326
analyzer = EnrouteCollector(classname(FakeService))
2427
self.assertEqual(FakeService, analyzer.decorated)
@@ -28,7 +31,10 @@ def test_get_all(self):
2831

2932
observed = analyzer.get_all()
3033
expected = {
31-
"get_tickets": {BrokerQueryEnrouteDecorator("GetTickets"), RestQueryEnrouteDecorator("tickets/", "GET")},
34+
"get_tickets": {
35+
BrokerQueryEnrouteDecorator("GetTickets"),
36+
RestQueryEnrouteDecorator(self.ticket_route, "GET"),
37+
},
3238
"create_ticket": {
3339
BrokerCommandEnrouteDecorator("CreateTicket"),
3440
BrokerCommandEnrouteDecorator("AddTicket"),
@@ -50,13 +56,23 @@ def test_get_rest_command_query(self):
5056

5157
observed = analyzer.get_rest_command_query()
5258
expected = {
53-
"get_tickets": {RestQueryEnrouteDecorator("tickets/", "GET")},
59+
"get_tickets": {RestQueryEnrouteDecorator(self.ticket_route, "GET")},
5460
"create_ticket": {RestCommandEnrouteDecorator("orders/", "GET")},
5561
"delete_ticket": {RestCommandEnrouteDecorator("orders/", "DELETE")},
5662
}
5763

5864
self.assertEqual(expected, observed)
5965

66+
def test_get_rest_command_query_kwargs(self):
67+
analyzer = EnrouteCollector(FakeServiceWithKwargs)
68+
69+
observed = analyzer.get_rest_command_query()
70+
expected = {
71+
"get_tickets": {RestQueryEnrouteDecorator(self.ticket_route, "GET", foo="bar")},
72+
}
73+
74+
self.assertEqual(expected, observed)
75+
6076
def test_get_broker_command_query_event(self):
6177
analyzer = EnrouteCollector(FakeService)
6278

0 commit comments

Comments
 (0)