cc-py-commons 0.5.33__tar.gz → 0.5.34__tar.gz

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.
Files changed (146) hide show
  1. {cc_py_commons-0.5.33 → cc_py_commons-0.5.34}/PKG-INFO +1 -1
  2. cc_py_commons-0.5.34/cc_py_commons/sqs/sqs_service.py +86 -0
  3. {cc_py_commons-0.5.33 → cc_py_commons-0.5.34}/cc_py_commons.egg-info/PKG-INFO +1 -1
  4. {cc_py_commons-0.5.33 → cc_py_commons-0.5.34}/setup.py +1 -1
  5. cc_py_commons-0.5.33/cc_py_commons/sqs/sqs_service.py +0 -86
  6. {cc_py_commons-0.5.33 → cc_py_commons-0.5.34}/README.md +0 -0
  7. {cc_py_commons-0.5.33 → cc_py_commons-0.5.34}/cc_py_commons/__init__.py +0 -0
  8. {cc_py_commons-0.5.33 → cc_py_commons-0.5.34}/cc_py_commons/bids/__init__.py +0 -0
  9. {cc_py_commons-0.5.33 → cc_py_commons-0.5.34}/cc_py_commons/bids/bid.py +0 -0
  10. {cc_py_commons-0.5.33 → cc_py_commons-0.5.34}/cc_py_commons/bids/bid_history.py +0 -0
  11. {cc_py_commons-0.5.33 → cc_py_commons-0.5.34}/cc_py_commons/bids/bid_history_schema.py +0 -0
  12. {cc_py_commons-0.5.33 → cc_py_commons-0.5.34}/cc_py_commons/bids/bid_schema.py +0 -0
  13. {cc_py_commons-0.5.33 → cc_py_commons-0.5.34}/cc_py_commons/carriers/__init__.py +0 -0
  14. {cc_py_commons-0.5.33 → cc_py_commons-0.5.34}/cc_py_commons/carriers/account_carrier_map.py +0 -0
  15. {cc_py_commons-0.5.33 → cc_py_commons-0.5.34}/cc_py_commons/carriers/account_carrier_map_schema.py +0 -0
  16. {cc_py_commons-0.5.33 → cc_py_commons-0.5.34}/cc_py_commons/carriers/carrier.py +0 -0
  17. {cc_py_commons-0.5.33 → cc_py_commons-0.5.34}/cc_py_commons/carriers/carrier_schema.py +0 -0
  18. {cc_py_commons-0.5.33 → cc_py_commons-0.5.34}/cc_py_commons/carriers/contact.py +0 -0
  19. {cc_py_commons-0.5.33 → cc_py_commons-0.5.34}/cc_py_commons/carriers/contact_schema.py +0 -0
  20. {cc_py_commons-0.5.33 → cc_py_commons-0.5.34}/cc_py_commons/config/__init__.py +0 -0
  21. {cc_py_commons-0.5.33 → cc_py_commons-0.5.34}/cc_py_commons/config/c4_account_settings.py +0 -0
  22. {cc_py_commons-0.5.33 → cc_py_commons-0.5.34}/cc_py_commons/config/env.py +0 -0
  23. {cc_py_commons-0.5.33 → cc_py_commons-0.5.34}/cc_py_commons/config/mcleod_load_fields.py +0 -0
  24. {cc_py_commons-0.5.33 → cc_py_commons-0.5.34}/cc_py_commons/config/pc_miler_config.py +0 -0
  25. {cc_py_commons-0.5.33 → cc_py_commons-0.5.34}/cc_py_commons/db/__init__.py +0 -0
  26. {cc_py_commons-0.5.33 → cc_py_commons-0.5.34}/cc_py_commons/db/connection.py +0 -0
  27. {cc_py_commons-0.5.33 → cc_py_commons-0.5.34}/cc_py_commons/geolocate.py +0 -0
  28. {cc_py_commons-0.5.33 → cc_py_commons-0.5.34}/cc_py_commons/lanes/__init__.py +0 -0
  29. {cc_py_commons-0.5.33 → cc_py_commons-0.5.34}/cc_py_commons/lanes/carrier_lane.py +0 -0
  30. {cc_py_commons-0.5.33 → cc_py_commons-0.5.34}/cc_py_commons/lanes/carrier_lane_schema.py +0 -0
  31. {cc_py_commons-0.5.33 → cc_py_commons-0.5.34}/cc_py_commons/lanes/lane.py +0 -0
  32. {cc_py_commons-0.5.33 → cc_py_commons-0.5.34}/cc_py_commons/lanes/lane_schema.py +0 -0
  33. {cc_py_commons-0.5.33 → cc_py_commons-0.5.34}/cc_py_commons/loads/__init__.py +0 -0
  34. {cc_py_commons-0.5.33 → cc_py_commons-0.5.34}/cc_py_commons/loads/equipment.py +0 -0
  35. {cc_py_commons-0.5.33 → cc_py_commons-0.5.34}/cc_py_commons/loads/equipment_schema.py +0 -0
  36. {cc_py_commons-0.5.33 → cc_py_commons-0.5.34}/cc_py_commons/loads/equipment_types.py +0 -0
  37. {cc_py_commons-0.5.33 → cc_py_commons-0.5.34}/cc_py_commons/loads/freighthub_contact.py +0 -0
  38. {cc_py_commons-0.5.33 → cc_py_commons-0.5.34}/cc_py_commons/loads/freighthub_contact_schema.py +0 -0
  39. {cc_py_commons-0.5.33 → cc_py_commons-0.5.34}/cc_py_commons/loads/load.py +0 -0
  40. {cc_py_commons-0.5.33 → cc_py_commons-0.5.34}/cc_py_commons/loads/load_schema.py +0 -0
  41. {cc_py_commons-0.5.33 → cc_py_commons-0.5.34}/cc_py_commons/loads/load_status.py +0 -0
  42. {cc_py_commons-0.5.33 → cc_py_commons-0.5.34}/cc_py_commons/loads/location.py +0 -0
  43. {cc_py_commons-0.5.33 → cc_py_commons-0.5.34}/cc_py_commons/loads/location_schema.py +0 -0
  44. {cc_py_commons-0.5.33 → cc_py_commons-0.5.34}/cc_py_commons/loads/map_load_response.py +0 -0
  45. {cc_py_commons-0.5.33 → cc_py_commons-0.5.34}/cc_py_commons/quotes/__init__.py +0 -0
  46. {cc_py_commons-0.5.33 → cc_py_commons-0.5.34}/cc_py_commons/quotes/quote.py +0 -0
  47. {cc_py_commons-0.5.33 → cc_py_commons-0.5.34}/cc_py_commons/quotes/quote_schema.py +0 -0
  48. {cc_py_commons-0.5.33 → cc_py_commons-0.5.34}/cc_py_commons/quotes/quote_status.py +0 -0
  49. {cc_py_commons-0.5.33 → cc_py_commons-0.5.34}/cc_py_commons/rfp/__init__.py +0 -0
  50. {cc_py_commons-0.5.33 → cc_py_commons-0.5.34}/cc_py_commons/rfp/create_table.py +0 -0
  51. {cc_py_commons-0.5.33 → cc_py_commons-0.5.34}/cc_py_commons/rfp/rfp_status.py +0 -0
  52. {cc_py_commons-0.5.33 → cc_py_commons-0.5.34}/cc_py_commons/rfp/truck_lane_search_mapper.py +0 -0
  53. {cc_py_commons-0.5.33 → cc_py_commons-0.5.34}/cc_py_commons/schemas/__init__.py +0 -0
  54. {cc_py_commons-0.5.33 → cc_py_commons-0.5.34}/cc_py_commons/schemas/camel_case_schema.py +0 -0
  55. {cc_py_commons-0.5.33 → cc_py_commons-0.5.34}/cc_py_commons/services/__init__.py +0 -0
  56. {cc_py_commons-0.5.33 → cc_py_commons-0.5.34}/cc_py_commons/services/analytics/__init__.py +0 -0
  57. {cc_py_commons-0.5.33 → cc_py_commons-0.5.34}/cc_py_commons/services/analytics/analytics_event.py +0 -0
  58. {cc_py_commons-0.5.33 → cc_py_commons-0.5.34}/cc_py_commons/services/booking_agent/__init__.py +0 -0
  59. {cc_py_commons-0.5.33 → cc_py_commons-0.5.34}/cc_py_commons/services/booking_agent/accept_bid.py +0 -0
  60. {cc_py_commons-0.5.33 → cc_py_commons-0.5.34}/cc_py_commons/services/booking_agent/cancel_bid.py +0 -0
  61. {cc_py_commons-0.5.33 → cc_py_commons-0.5.34}/cc_py_commons/services/booking_agent/constants.py +0 -0
  62. {cc_py_commons-0.5.33 → cc_py_commons-0.5.34}/cc_py_commons/services/booking_agent/counter_bid.py +0 -0
  63. {cc_py_commons-0.5.33 → cc_py_commons-0.5.34}/cc_py_commons/services/booking_agent/decline_bid.py +0 -0
  64. {cc_py_commons-0.5.33 → cc_py_commons-0.5.34}/cc_py_commons/services/booking_agent/get_bid_by_amazon_order_id.py +0 -0
  65. {cc_py_commons-0.5.33 → cc_py_commons-0.5.34}/cc_py_commons/services/booking_agent/get_quote.py +0 -0
  66. {cc_py_commons-0.5.33 → cc_py_commons-0.5.34}/cc_py_commons/services/booking_agent/get_quote_by_load_id.py +0 -0
  67. {cc_py_commons-0.5.33 → cc_py_commons-0.5.34}/cc_py_commons/services/booking_agent/list_bids.py +0 -0
  68. {cc_py_commons-0.5.33 → cc_py_commons-0.5.34}/cc_py_commons/services/booking_agent/list_quotes.py +0 -0
  69. {cc_py_commons-0.5.33 → cc_py_commons-0.5.34}/cc_py_commons/services/booking_agent/update_bid.py +0 -0
  70. {cc_py_commons-0.5.33 → cc_py_commons-0.5.34}/cc_py_commons/services/c4/__init__.py +0 -0
  71. {cc_py_commons-0.5.33 → cc_py_commons-0.5.34}/cc_py_commons/services/c4/amazon_session_token.py +0 -0
  72. {cc_py_commons-0.5.33 → cc_py_commons-0.5.34}/cc_py_commons/services/c4/constants.py +0 -0
  73. {cc_py_commons-0.5.33 → cc_py_commons-0.5.34}/cc_py_commons/services/c4/get_account.py +0 -0
  74. {cc_py_commons-0.5.33 → cc_py_commons-0.5.34}/cc_py_commons/services/c4/get_account_settings.py +0 -0
  75. {cc_py_commons-0.5.33 → cc_py_commons-0.5.34}/cc_py_commons/services/c4/get_integration.py +0 -0
  76. {cc_py_commons-0.5.33 → cc_py_commons-0.5.34}/cc_py_commons/services/c4/get_users_for_account.py +0 -0
  77. {cc_py_commons-0.5.33 → cc_py_commons-0.5.34}/cc_py_commons/services/c4/refresh_amazon_token.py +0 -0
  78. {cc_py_commons-0.5.33 → cc_py_commons-0.5.34}/cc_py_commons/services/carrier_hub/__init__.py +0 -0
  79. {cc_py_commons-0.5.33 → cc_py_commons-0.5.34}/cc_py_commons/services/carrier_hub/get_carrier.py +0 -0
  80. {cc_py_commons-0.5.33 → cc_py_commons-0.5.34}/cc_py_commons/services/carrier_hub/list_carriers.py +0 -0
  81. {cc_py_commons-0.5.33 → cc_py_commons-0.5.34}/cc_py_commons/services/carrier_hub/list_contacts.py +0 -0
  82. {cc_py_commons-0.5.33 → cc_py_commons-0.5.34}/cc_py_commons/services/carrier_hub/update_contact.py +0 -0
  83. {cc_py_commons-0.5.33 → cc_py_commons-0.5.34}/cc_py_commons/services/freight_hub/__init__.py +0 -0
  84. {cc_py_commons-0.5.33 → cc_py_commons-0.5.34}/cc_py_commons/services/freight_hub/post_freight_hub_load.py +0 -0
  85. {cc_py_commons-0.5.33 → cc_py_commons-0.5.34}/cc_py_commons/services/mercury/__init__.py +0 -0
  86. {cc_py_commons-0.5.33 → cc_py_commons-0.5.34}/cc_py_commons/services/mercury/create_account_folder.py +0 -0
  87. {cc_py_commons-0.5.33 → cc_py_commons-0.5.34}/cc_py_commons/services/mercury/db/__init__.py +0 -0
  88. {cc_py_commons-0.5.33 → cc_py_commons-0.5.34}/cc_py_commons/services/mercury/db/delete_table.py +0 -0
  89. {cc_py_commons-0.5.33 → cc_py_commons-0.5.34}/cc_py_commons/services/mercury/get_client.py +0 -0
  90. {cc_py_commons-0.5.33 → cc_py_commons-0.5.34}/cc_py_commons/services/mercury/get_green_screens_lane_price.py +0 -0
  91. {cc_py_commons-0.5.33 → cc_py_commons-0.5.34}/cc_py_commons/services/mercury/get_import_stat.py +0 -0
  92. {cc_py_commons-0.5.33 → cc_py_commons-0.5.34}/cc_py_commons/services/mercury/get_lane_price.py +0 -0
  93. {cc_py_commons-0.5.33 → cc_py_commons-0.5.34}/cc_py_commons/services/mercury/list_clients.py +0 -0
  94. {cc_py_commons-0.5.33 → cc_py_commons-0.5.34}/cc_py_commons/services/mercury/post_import_stat.py +0 -0
  95. {cc_py_commons-0.5.33 → cc_py_commons-0.5.34}/cc_py_commons/services/mercury/update_import_stat.py +0 -0
  96. {cc_py_commons-0.5.33 → cc_py_commons-0.5.34}/cc_py_commons/services/slack/__init__.py +0 -0
  97. {cc_py_commons-0.5.33 → cc_py_commons-0.5.34}/cc_py_commons/services/slack/send_slack_message.py +0 -0
  98. {cc_py_commons-0.5.33 → cc_py_commons-0.5.34}/cc_py_commons/sns/__init__.py +0 -0
  99. {cc_py_commons-0.5.33 → cc_py_commons-0.5.34}/cc_py_commons/sns/book_load_notification.py +0 -0
  100. {cc_py_commons-0.5.33 → cc_py_commons-0.5.34}/cc_py_commons/sns/booking_agent/__init__.py +0 -0
  101. {cc_py_commons-0.5.33 → cc_py_commons-0.5.34}/cc_py_commons/sns/booking_agent/bid_counter_failure_notification.py +0 -0
  102. {cc_py_commons-0.5.33 → cc_py_commons-0.5.34}/cc_py_commons/sns/booking_agent/constants.py +0 -0
  103. {cc_py_commons-0.5.33 → cc_py_commons-0.5.34}/cc_py_commons/sns/booking_agent/send_sns_notification.py +0 -0
  104. {cc_py_commons-0.5.33 → cc_py_commons-0.5.34}/cc_py_commons/sns/booking_assistant_flow_notification.py +0 -0
  105. {cc_py_commons-0.5.33 → cc_py_commons-0.5.34}/cc_py_commons/sns/import_movements_notification.py +0 -0
  106. {cc_py_commons-0.5.33 → cc_py_commons-0.5.34}/cc_py_commons/sns/parsed_carrier_notification.py +0 -0
  107. {cc_py_commons-0.5.33 → cc_py_commons-0.5.34}/cc_py_commons/sns/sns_service.py +0 -0
  108. {cc_py_commons-0.5.33 → cc_py_commons-0.5.34}/cc_py_commons/sqs/__init__.py +0 -0
  109. {cc_py_commons-0.5.33 → cc_py_commons-0.5.34}/cc_py_commons/sqs/booking_assistant_cancel_quote_notification.py +0 -0
  110. {cc_py_commons-0.5.33 → cc_py_commons-0.5.34}/cc_py_commons/sqs/booking_assistant_flow_event.py +0 -0
  111. {cc_py_commons-0.5.33 → cc_py_commons-0.5.34}/cc_py_commons/tests/__init__.py +0 -0
  112. {cc_py_commons-0.5.33 → cc_py_commons-0.5.34}/cc_py_commons/tests/test_case_conversion.py +0 -0
  113. {cc_py_commons-0.5.33 → cc_py_commons-0.5.34}/cc_py_commons/tests/test_lambda_utils.py +0 -0
  114. {cc_py_commons-0.5.33 → cc_py_commons-0.5.34}/cc_py_commons/tests/test_map_transaction.py +0 -0
  115. {cc_py_commons-0.5.33 → cc_py_commons-0.5.34}/cc_py_commons/tests/test_temperature_utils.py +0 -0
  116. {cc_py_commons-0.5.33 → cc_py_commons-0.5.34}/cc_py_commons/transactions/__init__.py +0 -0
  117. {cc_py_commons-0.5.33 → cc_py_commons-0.5.34}/cc_py_commons/transactions/equipment_clas_schema.py +0 -0
  118. {cc_py_commons-0.5.33 → cc_py_commons-0.5.34}/cc_py_commons/transactions/equipment_class.py +0 -0
  119. {cc_py_commons-0.5.33 → cc_py_commons-0.5.34}/cc_py_commons/transactions/equipment_mapping.py +0 -0
  120. {cc_py_commons-0.5.33 → cc_py_commons-0.5.34}/cc_py_commons/transactions/equipment_mapping_schema.py +0 -0
  121. {cc_py_commons-0.5.33 → cc_py_commons-0.5.34}/cc_py_commons/transactions/map_transaction.py +0 -0
  122. {cc_py_commons-0.5.33 → cc_py_commons-0.5.34}/cc_py_commons/transactions/transaction.py +0 -0
  123. {cc_py_commons-0.5.33 → cc_py_commons-0.5.34}/cc_py_commons/transactions/transaction_schema.py +0 -0
  124. {cc_py_commons-0.5.33 → cc_py_commons-0.5.34}/cc_py_commons/utils/__init__.py +0 -0
  125. {cc_py_commons-0.5.33 → cc_py_commons-0.5.34}/cc_py_commons/utils/bulk_lane_price_result_utils.py +0 -0
  126. {cc_py_commons-0.5.33 → cc_py_commons-0.5.34}/cc_py_commons/utils/case_conversion.py +0 -0
  127. {cc_py_commons-0.5.33 → cc_py_commons-0.5.34}/cc_py_commons/utils/datadog_logger.py +0 -0
  128. {cc_py_commons-0.5.33 → cc_py_commons-0.5.34}/cc_py_commons/utils/datetimes.py +0 -0
  129. {cc_py_commons-0.5.33 → cc_py_commons-0.5.34}/cc_py_commons/utils/dimension_utils.py +0 -0
  130. {cc_py_commons-0.5.33 → cc_py_commons-0.5.34}/cc_py_commons/utils/geocode_location.py +0 -0
  131. {cc_py_commons-0.5.33 → cc_py_commons-0.5.34}/cc_py_commons/utils/get_delivery_date.py +0 -0
  132. {cc_py_commons-0.5.33 → cc_py_commons-0.5.34}/cc_py_commons/utils/json_logger.py +0 -0
  133. {cc_py_commons-0.5.33 → cc_py_commons-0.5.34}/cc_py_commons/utils/lambda_utils.py +0 -0
  134. {cc_py_commons-0.5.33 → cc_py_commons-0.5.34}/cc_py_commons/utils/local_file.py +0 -0
  135. {cc_py_commons-0.5.33 → cc_py_commons-0.5.34}/cc_py_commons/utils/logger.py +0 -0
  136. {cc_py_commons-0.5.33 → cc_py_commons-0.5.34}/cc_py_commons/utils/logger_v2.py +0 -0
  137. {cc_py_commons-0.5.33 → cc_py_commons-0.5.34}/cc_py_commons/utils/pc_miler_utils.py +0 -0
  138. {cc_py_commons-0.5.33 → cc_py_commons-0.5.34}/cc_py_commons/utils/price_utils.py +0 -0
  139. {cc_py_commons-0.5.33 → cc_py_commons-0.5.34}/cc_py_commons/utils/redis.py +0 -0
  140. {cc_py_commons-0.5.33 → cc_py_commons-0.5.34}/cc_py_commons/utils/s3_file.py +0 -0
  141. {cc_py_commons-0.5.33 → cc_py_commons-0.5.34}/cc_py_commons/utils/temperature_utils.py +0 -0
  142. {cc_py_commons-0.5.33 → cc_py_commons-0.5.34}/cc_py_commons.egg-info/SOURCES.txt +0 -0
  143. {cc_py_commons-0.5.33 → cc_py_commons-0.5.34}/cc_py_commons.egg-info/dependency_links.txt +0 -0
  144. {cc_py_commons-0.5.33 → cc_py_commons-0.5.34}/cc_py_commons.egg-info/requires.txt +0 -0
  145. {cc_py_commons-0.5.33 → cc_py_commons-0.5.34}/cc_py_commons.egg-info/top_level.txt +0 -0
  146. {cc_py_commons-0.5.33 → cc_py_commons-0.5.34}/setup.cfg +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: cc_py_commons
3
- Version: 0.5.33
3
+ Version: 0.5.34
4
4
  Summary: Common code for microservices
5
5
  Home-page: https://github.com/Cargo-Chief/py-commons
6
6
  Author: CargoChief
@@ -0,0 +1,86 @@
1
+ import json
2
+ from uuid import uuid4
3
+ import boto3
4
+
5
+ class SqsService:
6
+ def send(self, queue_url, message, delaySeconds=0, messageGroupId=None):
7
+ '''
8
+ Sends a message to the specified queue and returns the messageId.
9
+ The messageId can be used to lookup and delete the message in the queue.
10
+ '''
11
+ sqs = boto3.client('sqs')
12
+ if messageGroupId:
13
+ response = sqs.send_message(
14
+ QueueUrl=queue_url,
15
+ MessageBody=message,
16
+ DelaySeconds=delaySeconds,
17
+ MessageAttributes={},
18
+ MessageGroupId=messageGroupId
19
+ )
20
+ else:
21
+ response = sqs.send_message(
22
+ QueueUrl=queue_url,
23
+ MessageBody=message,
24
+ DelaySeconds=delaySeconds,
25
+ MessageAttributes={}
26
+ )
27
+ return response.get('MessageId')
28
+
29
+ def send_batches(self, queue_url, messages):
30
+ '''
31
+ Sends all messages to the specified queue in groups of 10 (the limit of send_batch)
32
+ The messageId can be used to lookup and delete the message in the queue.
33
+ Args:
34
+ queue_url (str): The URL of the Amazon SQS queue
35
+ messages (list): List of messages to be sent
36
+
37
+ Returns:
38
+ dict: Results containing 'successful' and 'failed' message lists
39
+ '''
40
+ results = {
41
+ 'successful': [],
42
+ 'failed': []
43
+ }
44
+
45
+ if not messages:
46
+ return results
47
+
48
+ sqs = boto3.client('sqs')
49
+ entries = [
50
+ {
51
+ # each message must have a unique id
52
+ 'Id': str(uuid4()),
53
+ 'MessageBody': json.dumps(message),
54
+ }
55
+ for message in messages
56
+ ]
57
+
58
+ # SQS can only process 10 messages per batch
59
+ batch_size = 10
60
+
61
+ # Split messages into batches of 10
62
+ for i in range(0, len(entries), batch_size):
63
+ batch = entries[i:i + batch_size]
64
+
65
+ try:
66
+ response = sqs.send_message_batch(
67
+ QueueUrl=queue_url,
68
+ Entries=batch
69
+ )
70
+
71
+ # Track successful and failed messages
72
+ if 'Successful' in response:
73
+ results['successful'].extend(response['Successful'])
74
+ if 'Failed' in response:
75
+ results['failed'].extend(response['Failed'])
76
+
77
+ except Exception as e:
78
+ # Mark all messages in failed batch
79
+ failed_batch = [{
80
+ 'Id': entry['Id'],
81
+ 'Error': str(e),
82
+ 'Message': entry['MessageBody']
83
+ } for entry in batch]
84
+ results['failed'].extend(failed_batch)
85
+
86
+ return results
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: cc-py-commons
3
- Version: 0.5.33
3
+ Version: 0.5.34
4
4
  Summary: Common code for microservices
5
5
  Home-page: https://github.com/Cargo-Chief/py-commons
6
6
  Author: CargoChief
@@ -3,7 +3,7 @@ from setuptools import setup, find_packages
3
3
  setup(
4
4
  name='cc_py_commons',
5
5
  description='Common code for microservices',
6
- version='0.5.33',
6
+ version='0.5.34',
7
7
  url='https://github.com/Cargo-Chief/py-commons',
8
8
  author='CargoChief',
9
9
  author_email='engineering@cargochief.com',
@@ -1,86 +0,0 @@
1
- import json
2
- from uuid import uuid4
3
- import boto3
4
-
5
- class SqsService:
6
- def send(self, queue_url, message, delaySeconds=0, messageGroupId=None):
7
- '''
8
- Sends a message to the specified queue and returns the messageId.
9
- The messageId can be used to lookup and delete the message in the queue.
10
- '''
11
- sqs = boto3.client('sqs')
12
- if messageGroupId:
13
- response = sqs.send_message(
14
- QueueUrl=queue_url,
15
- MessageBody=message,
16
- DelaySeconds=delaySeconds,
17
- MessageAttributes={},
18
- MessageGroupId=messageGroupId
19
- )
20
- else:
21
- response = sqs.send_message(
22
- QueueUrl=queue_url,
23
- MessageBody=message,
24
- DelaySeconds=delaySeconds,
25
- MessageAttributes={}
26
- )
27
- return response.get('MessageId')
28
-
29
- def send_batches(queue_url, messages):
30
- '''
31
- Sends all messages to the specified queue in groups of 10 (the limit of send_batch)
32
- The messageId can be used to lookup and delete the message in the queue.
33
- Args:
34
- queue_url (str): The URL of the Amazon SQS queue
35
- messages (list): List of messages to be sent
36
-
37
- Returns:
38
- dict: Results containing 'successful' and 'failed' message lists
39
- '''
40
- results = {
41
- 'successful': [],
42
- 'failed': []
43
- }
44
-
45
- if not messages:
46
- return results
47
-
48
- sqs = boto3.client('sqs')
49
- entries = [
50
- {
51
- # each message must have a unique id
52
- 'Id': str(uuid4()),
53
- 'MessageBody': json.dumps(message),
54
- }
55
- for message in messages
56
- ]
57
-
58
- # SQS can only process 10 messages per batch
59
- batch_size = 10
60
-
61
- # Split messages into batches of 10
62
- for i in range(0, len(entries), batch_size):
63
- batch = entries[i:i + batch_size]
64
-
65
- try:
66
- response = sqs.send_message_batch(
67
- QueueUrl=queue_url,
68
- Entries=batch
69
- )
70
-
71
- # Track successful and failed messages
72
- if 'Successful' in response:
73
- results['successful'].extend(response['Successful'])
74
- if 'Failed' in response:
75
- results['failed'].extend(response['Failed'])
76
-
77
- except Exception as e:
78
- # Mark all messages in failed batch
79
- failed_batch = [{
80
- 'Id': entry['Id'],
81
- 'Error': str(e),
82
- 'Message': entry['MessageBody']
83
- } for entry in batch]
84
- results['failed'].extend(failed_batch)
85
-
86
- return results
File without changes
File without changes