init
This commit is contained in:
106
client/BuildIncrementerClient.py
Normal file
106
client/BuildIncrementerClient.py
Normal file
@@ -0,0 +1,106 @@
|
||||
import requests
|
||||
from typing import Optional
|
||||
|
||||
class BuildIncrementerClient:
|
||||
"""
|
||||
Клиент для взаимодействия с сервисом счетчиков на базе FastAPI.
|
||||
|
||||
Позволяет инкрементировать, получать и сбрасывать счетчики с поддержкой namespace,
|
||||
application и version.
|
||||
|
||||
Пример использования:
|
||||
client = BuildIncrementerClient(base_url="http://localhost:8000")
|
||||
new_value = client.increment("my_namespace", "my_app", "1.0")
|
||||
current_value = client.get_value("my_namespace", "my_app", "1.0")
|
||||
reset_value = client.reset("my_namespace", "my_app", "1.0")
|
||||
"""
|
||||
|
||||
def __init__(self, base_url: str):
|
||||
"""
|
||||
Инициализирует клиент с базовым URL сервиса.
|
||||
|
||||
Args:
|
||||
base_url (str): Базовый URL сервиса, например, "http://localhost:8000"
|
||||
"""
|
||||
self.base_url = base_url.rstrip('/')
|
||||
|
||||
def increment(self, namespace: str, application: str, version: str) -> int:
|
||||
"""
|
||||
Инкрементирует счетчик и возвращает новое значение.
|
||||
|
||||
Args:
|
||||
namespace (str): Пространство имен.
|
||||
application (str): Имя приложения.
|
||||
version (str): Версия приложения.
|
||||
|
||||
Returns:
|
||||
int: Новое значение счетчика.
|
||||
|
||||
Raises:
|
||||
requests.HTTPError: Если запрос завершился с ошибкой.
|
||||
"""
|
||||
url = f"{self.base_url}/{namespace}/{application}/{version}"
|
||||
response = requests.post(url)
|
||||
self._handle_response(response)
|
||||
return response.json()['value']
|
||||
|
||||
def get_value(self, namespace: str, application: str, version: str) -> int:
|
||||
"""
|
||||
Получает текущее значение счетчика.
|
||||
|
||||
Args:
|
||||
namespace (str): Пространство имен.
|
||||
application (str): Имя приложения.
|
||||
version (str): Версия приложения.
|
||||
|
||||
Returns:
|
||||
int: Текущее значение счетчика.
|
||||
|
||||
Raises:
|
||||
requests.HTTPError: Если запрос завершился с ошибкой.
|
||||
"""
|
||||
url = f"{self.base_url}/{namespace}/{application}/{version}"
|
||||
response = requests.get(url)
|
||||
self._handle_response(response)
|
||||
return response.json()['value']
|
||||
|
||||
def reset(self, namespace: str, application: str, version: str) -> int:
|
||||
"""
|
||||
Сбрасывает счетчик до 0 и возвращает новое значение.
|
||||
|
||||
Args:
|
||||
namespace (str): Пространство имен.
|
||||
application (str): Имя приложения.
|
||||
version (str): Версия приложения.
|
||||
|
||||
Returns:
|
||||
int: Новое значение счетчика после сброса.
|
||||
|
||||
Raises:
|
||||
requests.HTTPError: Если запрос завершился с ошибкой.
|
||||
"""
|
||||
url = f"{self.base_url}/{namespace}/{application}/{version}"
|
||||
response = requests.delete(url)
|
||||
self._handle_response(response)
|
||||
return response.json()['value']
|
||||
|
||||
def _handle_response(self, response: requests.Response):
|
||||
"""
|
||||
Обрабатывает ответ от сервера, выбрасывая исключение при ошибке.
|
||||
|
||||
Args:
|
||||
response (requests.Response): Ответ от сервера.
|
||||
|
||||
Raises:
|
||||
requests.HTTPError: Если ответ содержит ошибку.
|
||||
"""
|
||||
try:
|
||||
response.raise_for_status()
|
||||
except requests.HTTPError as e:
|
||||
try:
|
||||
error_detail = response.json().get('detail', '')
|
||||
raise requests.HTTPError(f"{e}, Detail: {error_detail}") from None
|
||||
except ValueError:
|
||||
# Если ответ не JSON, просто выбросить исходную ошибку
|
||||
raise
|
||||
|
||||
Reference in New Issue
Block a user