finalsa-common-models 0.1.0__py3-none-any.whl → 1.0.0__py3-none-any.whl

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.
@@ -5,7 +5,7 @@ from finalsa.common.models.models import (
5
5
  to_message_attributes
6
6
  )
7
7
 
8
- __version__ = "0.1.0"
8
+ __version__ = "1.0.0"
9
9
 
10
10
  __all__ = [
11
11
  "SqsMessage",
@@ -1,5 +1,5 @@
1
1
  from datetime import datetime, timezone
2
- from typing import Optional
2
+ from typing import Optional, Union, Dict
3
3
  from uuid import UUID
4
4
  from pydantic import BaseModel
5
5
  from json import loads
@@ -8,12 +8,14 @@ from json import loads
8
8
  class SqsMessage(BaseModel):
9
9
  id: UUID
10
10
  topic: str
11
- payload: str
11
+ payload: Union[str, Dict]
12
12
  correlation_id: str
13
13
  timestamp: Optional[datetime] = datetime.now(timezone.utc)
14
14
 
15
- def get_payload(self):
16
- return loads(self.payload)
15
+ def get_payload(self) -> Dict:
16
+ if isinstance(self.payload, str):
17
+ self.payload = loads(self.payload)
18
+ return self.payload
17
19
 
18
20
  def to_dict(self):
19
21
  return {
@@ -17,9 +17,6 @@ class SqsReponse(BaseModel):
17
17
  md5_of_message_attributes: Optional[str] = ""
18
18
  message_attributes: Optional[Dict] = {}
19
19
 
20
- def get_payload(self) -> Dict:
21
- return loads(self.body)
22
-
23
20
  @staticmethod
24
21
  def correlation_id_from_attributes(attributes: Dict) -> Optional[str]:
25
22
  correlation_id = attributes.get('correlation_id', None)
@@ -31,60 +28,77 @@ class SqsReponse(BaseModel):
31
28
  return correlation_id["Value"]
32
29
  return None
33
30
 
34
- def get_correlation_id(self) -> Union[str, UUID]:
31
+ def get_correlation_id(self, payload: Optional[Dict] = {}) -> Union[str, UUID]:
35
32
  correlation_id = self.correlation_id_from_attributes(self.message_attributes)
36
33
  if correlation_id:
37
34
  return correlation_id
38
35
  correlation_id = self.correlation_id_from_attributes(self.attributes)
39
36
  if correlation_id:
40
37
  return correlation_id
41
- try:
42
- s = self.get_payload()['correlation_id']
43
- return s
44
- except Exception:
45
- return str(uuid4())
38
+ if 'correlation_id' in payload:
39
+ return payload['correlation_id']
40
+ return str(uuid4())
46
41
 
47
- def parse_from_sns(self) -> Optional[Dict]:
48
- payload = self.get_payload()
49
- if 'Type' not in payload or payload['Type'] != 'Notification':
50
- return None
42
+ @staticmethod
43
+ def __is_sns_message__(content: Dict) -> bool:
44
+ return 'Type' in content and content['Type'] == 'Notification'
45
+
46
+ @staticmethod
47
+ def __is_sqs_message__(content: Dict) -> bool:
48
+ return ('id' in content and
49
+ 'topic' in content and
50
+ 'payload' in content)
51
+
52
+ def parse_from_sns(self) -> Dict:
53
+ payload = loads(self.body)
54
+ if self.__is_sns_message__(payload):
55
+ return self.__parse_from_sns__(payload)
56
+ raise ValueError('The message is not a SNS message')
57
+
58
+ def __parse_from_sns__(self, payload: Dict) -> Union[str, Dict]:
51
59
  self.topic = str(payload['TopicArn'].split(':')[-1]).lower()
52
- self.body = payload['Message']
53
60
  self.message_attributes = parse_message_attributes(
54
61
  payload.get('MessageAttributes', {}))
55
- return self.get_payload()
62
+ try:
63
+ return loads(payload['Message'])
64
+ except Exception:
65
+ return payload['Message']
56
66
 
57
67
  def parse(self) -> Optional[Dict]:
58
- sns_response = self.parse_from_sns()
59
- if sns_response is not None:
60
- return sns_response
61
- return self.get_payload()
68
+ content = loads(self.body)
69
+ if self.__is_sns_message__(content):
70
+ content = self.__parse_from_sns__(content)
71
+ return content
62
72
 
63
- def get_sqs_message(self) -> SqsMessage:
64
- sns_payload = self.parse_from_sns()
65
- if sns_payload:
66
- if 'correlation_id' not in sns_payload:
67
- sns_payload['correlation_id'] = str(self.get_correlation_id())
68
- if 'timestamp' not in sns_payload:
69
- sns_payload['timestamp'] = datetime.now(timezone.utc).isoformat()
73
+ def __get_sqs_message__(self, content: Union[str, Dict]) -> SqsMessage:
74
+
75
+ if isinstance(content, dict) and self.__is_sqs_message__(content):
76
+ if 'correlation_id' not in content:
77
+ content['correlation_id'] = str(self.get_correlation_id(content))
70
78
  return SqsMessage(
71
- id=UUID(sns_payload['id']),
72
- topic=sns_payload['topic'],
73
- payload=sns_payload['payload'],
74
- correlation_id=sns_payload['correlation_id'],
75
- timestamp=sns_payload['timestamp']
79
+ id=UUID(content['id']),
80
+ topic=content['topic'],
81
+ payload=content['payload'],
82
+ correlation_id=content['correlation_id'],
83
+ timestamp=content['timestamp']
76
84
  )
77
- payload = self.get_payload()
78
- if 'correlation_id' not in payload:
79
- payload['correlation_id'] = str(self.get_correlation_id())
80
85
  return SqsMessage(
81
- id=UUID(payload['id']),
82
- topic=payload['topic'],
83
- payload=payload['payload'],
84
- correlation_id=payload['correlation_id'],
85
- timestamp=payload['timestamp']
86
+ id=uuid4(),
87
+ topic=self.topic,
88
+ payload=content,
89
+ correlation_id=self.get_correlation_id(content),
90
+ timestamp=datetime.now(timezone.utc).isoformat()
86
91
  )
87
92
 
93
+ def get_sqs_message(self) -> SqsMessage:
94
+ try:
95
+ content = loads(self.body)
96
+ except Exception:
97
+ return self.__get_sqs_message__(self.body)
98
+ if self.__is_sns_message__(content):
99
+ content = self.__parse_from_sns__(content)
100
+ return self.__get_sqs_message__(content)
101
+
88
102
  @classmethod
89
103
  def from_boto_response(cls, response: Dict):
90
104
  return cls(
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: finalsa-common-models
3
- Version: 0.1.0
3
+ Version: 1.0.0
4
4
  Summary: An utils package for using finalsa common models.
5
5
  Home-page: https://github.com/finalsa/finalsa-common-models
6
6
  Author: Luis Jimenez
@@ -0,0 +1,13 @@
1
+ finalsa/common/models/__init__.py,sha256=XUFJBrRoyrVq-jL_qMTPGevjOLue8VRPKYnU9KcPauc,268
2
+ finalsa/common/models/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
3
+ finalsa/common/models/models/__init__.py,sha256=Bm0KxSyueMwLkiN4W3sX5oXgLbfyQ8ZhKPD0WLhZepA,144
4
+ finalsa/common/models/models/functions.py,sha256=4bA57p5ar0btRlygzzLIlImQxOTypH3EQUyzys-ryE8,1551
5
+ finalsa/common/models/models/sqs_message.py,sha256=0E2dx_Ml55rNn6dG7jMQH9jL28bLECiZDAgNprBGSpM,742
6
+ finalsa/common/models/models/sqs_response.py,sha256=ln16utWyTvd8mHWzdh7eOpVmIEuEbQfKb-sDHZTU0Oc,4257
7
+ finalsa_common_models-1.0.0.data/data/LICENSE.md,sha256=_lu-V-f2tGID1BS2V_W6D2XWppBsylFF1J2KEpfIXN0,1084
8
+ finalsa_common_models-1.0.0.dist-info/LICENSE.md,sha256=_lu-V-f2tGID1BS2V_W6D2XWppBsylFF1J2KEpfIXN0,1084
9
+ finalsa_common_models-1.0.0.dist-info/METADATA,sha256=HmjP2g7G9X-wluTx6V6Azr-8hnrS6uRXjPjXQC_-WRU,853
10
+ finalsa_common_models-1.0.0.dist-info/WHEEL,sha256=R0nc6qTxuoLk7ShA2_Y-UWkN8ZdfDBG2B6Eqpz2WXbs,91
11
+ finalsa_common_models-1.0.0.dist-info/top_level.txt,sha256=P7YD1HSd4CVujGFG9Vl9hJlg5OVCGN2J_ZsSQezWZAs,51
12
+ finalsa_common_models-1.0.0.dist-info/zip-safe,sha256=AbpHGcgLb-kRsJGnwFEktk7uzpZOCcBY74-YBdrKVGs,1
13
+ finalsa_common_models-1.0.0.dist-info/RECORD,,
@@ -1,5 +1,5 @@
1
1
  Wheel-Version: 1.0
2
- Generator: bdist_wheel (0.43.0)
2
+ Generator: setuptools (72.1.0)
3
3
  Root-Is-Purelib: true
4
4
  Tag: py3-none-any
5
5
 
@@ -1,13 +0,0 @@
1
- finalsa/common/models/__init__.py,sha256=2d5aXz0YBGglzsArN_8v55BepVozdZ-fnz-1jzNcPhs,268
2
- finalsa/common/models/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
3
- finalsa/common/models/models/__init__.py,sha256=Bm0KxSyueMwLkiN4W3sX5oXgLbfyQ8ZhKPD0WLhZepA,144
4
- finalsa/common/models/models/functions.py,sha256=4bA57p5ar0btRlygzzLIlImQxOTypH3EQUyzys-ryE8,1551
5
- finalsa/common/models/models/sqs_message.py,sha256=TR1gjkXirLchxm_O1wxckryIdcrE2vjux7q5EdpptCc,626
6
- finalsa/common/models/models/sqs_response.py,sha256=SCoxuvfMuEpwxtZguptNqkLcD_b-bjG8umfVLklJQBc,3762
7
- finalsa_common_models-0.1.0.data/data/LICENSE.md,sha256=_lu-V-f2tGID1BS2V_W6D2XWppBsylFF1J2KEpfIXN0,1084
8
- finalsa_common_models-0.1.0.dist-info/LICENSE.md,sha256=_lu-V-f2tGID1BS2V_W6D2XWppBsylFF1J2KEpfIXN0,1084
9
- finalsa_common_models-0.1.0.dist-info/METADATA,sha256=Fmq445q2xnuL6fq6QWyyEs71QLO-jCsIzHEy4mNjhvs,853
10
- finalsa_common_models-0.1.0.dist-info/WHEEL,sha256=GJ7t_kWBFywbagK5eo9IoUwLW6oyOeTKmQ-9iHFVNxQ,92
11
- finalsa_common_models-0.1.0.dist-info/top_level.txt,sha256=P7YD1HSd4CVujGFG9Vl9hJlg5OVCGN2J_ZsSQezWZAs,51
12
- finalsa_common_models-0.1.0.dist-info/zip-safe,sha256=AbpHGcgLb-kRsJGnwFEktk7uzpZOCcBY74-YBdrKVGs,1
13
- finalsa_common_models-0.1.0.dist-info/RECORD,,