Skip to content

Commit 652e249

Browse files
authored
Merge pull request #2 from TaskarCenterAtUW/develop
Develop to Main new version 0.0.2
2 parents ba5c830 + 150fca9 commit 652e249

12 files changed

Lines changed: 128 additions & 85 deletions

File tree

CHANGELOG.md

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,10 @@
11
# Change log
22

3+
### 0.0.2
4+
- Added filtered exception handling
5+
- Removed unused packages
6+
- Fixed Topic subscription
7+
38
### 0.0.1
49
- Introduces Topic and subscription methods in Core.
510
- Added methods

README.md

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -100,12 +100,17 @@ The configuration required by Queue and Topic is similar and will be handled via
100100

101101
### Accessing a specific topic
102102

103-
Topic can be accessed by the core method `get_topic`. This method takes one parameter
103+
Topic can be accessed by the core method `get_topic`. This method takes two parameters
104104
1. topic name (required)
105+
2. callback function where messages will be received
105106

106107
```python
107108
from python_ms_core import Core
108-
topic = Core.get_topic(topic_name='topicName')
109+
110+
def callback(instance):
111+
print(instance.get_messages())
112+
113+
topic = Core.get_topic(topic_name='topicName', callback=callback)
109114

110115
```
111116

freeze_version.py

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

1212
build_date = date.today().strftime('%Y-%m-%d')
1313

14-
version = '0.0.1'
14+
version = '0.0.2'
1515

1616
with open(version_file_path, 'w+') as version_file:
1717
version_file.write("version = '{}'\n".format(version))

requirements.txt

Lines changed: 1 addition & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -2,22 +2,6 @@ azure-common==1.1.28
22
azure-core==1.26.1
33
azure-servicebus==7.0.0
44
azure-storage-blob==12.14.1
5-
certifi==2022.12.7
6-
cffi==1.15.1
7-
charset-normalizer==2.1.1
8-
cryptography==38.0.4
9-
gitdb==4.0.10
10-
GitPython==3.1.29
11-
idna==3.4
12-
isodate==0.6.1
13-
msrest==0.7.1
14-
oauthlib==3.2.2
15-
pycparser==2.21
165
python-dotenv==0.21.0
176
requests==2.28.1
18-
requests-oauthlib==1.3.1
19-
six==1.16.0
20-
smmap==5.0.0
21-
typing_extensions==4.4.0
22-
uamqp==1.6.3
23-
urllib3==1.26.13
7+
GitPython==3.1.29

src/example.py

Lines changed: 27 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -1,39 +1,24 @@
11
# Testing code
22

3+
import sys
34
import uuid
45
import datetime
56
from io import BytesIO, StringIO
6-
from dotenv import load_dotenv
7+
import time
8+
79
from python_ms_core import Core
810
from python_ms_core.core.queue.providers import azure_queue_config
911
from python_ms_core.core.queue.models.queue_message import QueueMessage
1012

11-
load_dotenv()
12-
1313
Core.initialize()
1414
print('Hello')
1515

1616
topic = 'gtfs-flex-upload'
17-
subscription = 'uploadprocessor'
17+
subscription = 'upload-validation-processor-test'
1818
some_other_sub = 'usdufs'
1919

2020
topic_config = azure_queue_config.AzureQueueConfig()
2121

22-
topicObject1 = Core.get_topic(topic_name=topic)
23-
topicObject2 = Core.get_topic(topic_name='tipic')
24-
25-
print()
26-
27-
queue_message = QueueMessage.data_from({
28-
'message': str(uuid.uuid4().hex),
29-
'data': {'a': 1}
30-
})
31-
32-
topicObject1.publish(data=queue_message)
33-
34-
msg = topicObject1.subscribe(subscription=subscription)
35-
print(f'Received message: {msg}')
36-
3722
azure_client = Core.get_storage_client()
3823

3924
container = azure_client.get_container(container_name='tdei-storage-test')
@@ -61,3 +46,26 @@
6146

6247
logger = Core.get_logger(provider='Local')
6348
logger.record_metric(name='test', value='test')
49+
50+
51+
def on_connect_callback(instance):
52+
print('Connected with result code {}'.format(instance.get_messages()))
53+
time.sleep(30)
54+
sys.exit()
55+
56+
57+
topicObject1 = Core.get_topic(topic_name=topic, callback=on_connect_callback)
58+
topicObject2 = Core.get_topic(topic_name='tipic')
59+
try:
60+
topicObject2.subscribe(subscription=subscription)
61+
except Exception as e:
62+
print(e)
63+
64+
queue_message = QueueMessage.data_from({
65+
'message': str(uuid.uuid4().hex),
66+
'data': {'a': 1}
67+
})
68+
69+
topicObject1.publish(data=queue_message)
70+
71+
topicObject1.subscribe(subscription=subscription)

src/python_ms_core/__init__.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -34,9 +34,9 @@ def get_logger(provider=None):
3434
# def get_custom_queue():
3535

3636
@staticmethod
37-
def get_topic(topic_name=None):
37+
def get_topic(topic_name=None, callback=None):
3838
if topic_name is not None:
39-
return Topic(config=CoreConfig.default(), topic_name=topic_name)
39+
return Topic(config=CoreConfig.default(), topic_name=topic_name, callback=callback)
4040
else:
4141
logging.error(f'Unimplemented initialization for core, Topic name required!')
4242
return

src/python_ms_core/core/queue/models/queue_message.py

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,8 @@
11
import json
22
from datetime import datetime
33
from typing import Union, List
4-
from dataclasses import dataclass, asdict
5-
from typing import Optional
4+
from dataclasses import dataclass
5+
from ...resource_errors import ExceptionHandler
66

77

88
class Validations:
@@ -42,6 +42,7 @@ def send(self):
4242
def get_items(self):
4343
return self.queue
4444

45+
@ExceptionHandler.decorated
4546
def data_from(self):
4647
data = self
4748
if isinstance(data, str):
@@ -56,7 +57,8 @@ def data_from(self):
5657
return QueueMessage(**kwargs)
5758
except Exception as e:
5859
error = str(e).replace('QueueMessage', 'Invalid parameter,')
59-
raise TypeError(error)
60+
error = error.replace('__init__()', 'QueueMessage')
61+
raise TypeError(f'{error} \nStatus code: 400')
6062

6163
def to_dict(self):
6264
if isinstance(self, QueueMessage):

src/python_ms_core/core/queue/providers/azure_service_bus_topic.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,5 +16,5 @@ def __init__(self, topic_name=None, queue_name=None):
1616
self.logger_queue_name = queue_name or os.environ.get('LOGGERQUEUE', 'tdei-ms-log')
1717
self.provider = config.provider
1818
self.connection_string = config.connection_string
19-
self.client = ServiceBusClient.from_connection_string(conn_str=self.connection_string)
19+
self.client = ServiceBusClient.from_connection_string(conn_str=self.connection_string, retry_total=0)
2020
self.sender = ServiceBusMessage

src/python_ms_core/core/queue/queue.py

Lines changed: 2 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -29,11 +29,8 @@ def send(self, data=None):
2929
message = QueueMessage.to_dict(data)
3030
with self.azure.client:
3131
sender = self.azure.client.get_queue_sender(queue_name=self.azure.queue_name)
32-
try:
33-
with sender:
34-
sender.send_messages(self.azure.sender(json.dumps(message)))
35-
except Exception:
36-
print(message)
32+
with sender:
33+
sender.send_messages(self.azure.sender(json.dumps(message)))
3734
self.queue = list()
3835

3936
def send_local(self, data=None):

src/python_ms_core/core/queue/topic.py

Lines changed: 18 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -6,8 +6,10 @@
66

77

88
class Topic:
9-
def __init__(self, config=None, topic_name=None):
9+
def __init__(self, config=None, topic_name=None, callback=None):
1010
self.topic = topic_name
11+
self._callback = callback
12+
self._messages = []
1113
if config.provider == 'Azure':
1214
try:
1315
self.azure = AzureServiceBusTopic(topic_name=topic_name)
@@ -19,16 +21,22 @@ def __init__(self, config=None, topic_name=None):
1921
@ExceptionHandler.decorated
2022
def subscribe(self, subscription=None):
2123
if subscription is not None:
22-
messages = []
23-
with self.azure.client.get_subscription_receiver(topic_name=self.azure.topic, subscription_name=subscription) as receiver:
24-
received_msgs = receiver.receive_messages(max_message_count=10, max_wait_time=5)
25-
for message in received_msgs:
26-
queue_message = QueueMessage.data_from(str(message))
27-
messages.append(queue_message)
28-
receiver.complete_message(message)
29-
return messages
24+
with self.azure.client:
25+
topic_receiver = self.azure.client.get_subscription_receiver(self.azure.topic, subscription_name=subscription)
26+
with topic_receiver:
27+
for message in topic_receiver:
28+
queue_message = QueueMessage.data_from(str(message))
29+
self._messages = queue_message
30+
if self._callback and callable(self._callback):
31+
self._callback(self)
32+
topic_receiver.complete_message(message)
33+
3034
else:
31-
logging.error(f'Unimplemented initialization for core {self.config.provider}, Subscription name is required!')
35+
logging.error(
36+
f'Unimplemented initialization for core {self.config.provider}, Subscription name is required!')
37+
38+
def get_messages(self):
39+
return self._messages
3240

3341
@ExceptionHandler.decorated
3442
def publish(self, data=None):

0 commit comments

Comments
 (0)