mirror of
https://github.com/logos-messaging/logos-messaging-interop-tests.git
synced 2026-01-10 18:03:07 +00:00
45 lines
1.5 KiB
Python
45 lines
1.5 KiB
Python
|
|
import logging
|
||
|
|
import requests
|
||
|
|
from tenacity import retry, stop_after_delay, wait_fixed
|
||
|
|
from abc import ABC, abstractmethod
|
||
|
|
|
||
|
|
logger = logging.getLogger(__name__)
|
||
|
|
|
||
|
|
|
||
|
|
class BaseClient(ABC):
|
||
|
|
# The retry decorator is applied to handle transient errors gracefully. This is particularly
|
||
|
|
# useful when running tests in parallel, where occasional network-related errors such as
|
||
|
|
# connection drops, timeouts, or temporary unavailability of a service can occur. Retrying
|
||
|
|
# ensures that such intermittent issues don't cause the tests to fail outright.
|
||
|
|
@retry(stop=stop_after_delay(2), wait=wait_fixed(0.1), reraise=True)
|
||
|
|
def make_request(self, method, url, headers=None, data=None):
|
||
|
|
logger.debug("%s call: %s with payload: %s", method.upper(), url, data)
|
||
|
|
response = requests.request(method.upper(), url, headers=headers, data=data)
|
||
|
|
try:
|
||
|
|
response.raise_for_status()
|
||
|
|
except requests.HTTPError as http_err:
|
||
|
|
logger.error("HTTP error occurred: %s", http_err)
|
||
|
|
raise
|
||
|
|
except Exception as err:
|
||
|
|
logger.error("An error occurred: %s", err)
|
||
|
|
raise
|
||
|
|
else:
|
||
|
|
logger.info("Response status code: %s", response.status_code)
|
||
|
|
return response
|
||
|
|
|
||
|
|
@abstractmethod
|
||
|
|
def info(self):
|
||
|
|
pass
|
||
|
|
|
||
|
|
@abstractmethod
|
||
|
|
def set_subscriptions(self, pubsub_topics):
|
||
|
|
pass
|
||
|
|
|
||
|
|
@abstractmethod
|
||
|
|
def send_message(self, message, pubsub_topic):
|
||
|
|
pass
|
||
|
|
|
||
|
|
@abstractmethod
|
||
|
|
def get_messages(self, pubsub_topic):
|
||
|
|
pass
|