PyFlowery/pyflowery/models.py
cswimr c4205fc4f1
Some checks failed
Actions / Build (push) Failing after 19s
Actions / Lint with Ruff, Pylint, & MyPy (push) Successful in 22s
Actions / Build Documentation (push) Successful in 25s
(3.1.0)
- improved version logic - now using hatch and hatch-vcs to automatically generate versions based on git tag / git commit / distance from last tag
- raise an error if the voices cache is not populated correctly
- lint with mypy in actions
- use pyproject.toml for pylint configuration
2024-11-15 11:14:33 -05:00

82 lines
2.4 KiB
Python

from dataclasses import dataclass, field
from logging import Logger, getLogger
from sys import version as pyversion
from typing import Dict, List, Union
from pyflowery.version import version
@dataclass
class Voice:
"""Voice object returned from the Flowery API
Attributes:
id (str): UUID of the voice
name (str): Name of the voice
gender (str): Gender of the voice
source (str): Source of the voice
language (Language): Language object
"""
id: str
name: str
gender: str
source: str
language: "Language"
@dataclass
class Language:
"""Language object returned from the Flowery API
Attributes:
name (str): Name of the language
code (str): Code of the language
"""
name: str
code: str
@dataclass
class Result:
"""Result returned from low-level RestAdapter
Attributes:
success (bool): Boolean of whether the request was successful
status_code (int): Standard HTTP Status code
message (str = ''): Human readable result
data (Union[List[Dict], Dict, bytes]): Python List of Dictionaries (or maybe just a single Dictionary on error), can also be a ByteString
"""
success: bool
status_code: int
message: str = ""
data: Union[List[Dict], Dict, bytes] = field(default_factory=dict)
@dataclass
class FloweryAPIConfig:
"""Configuration for the Flowery API
Attributes:
user_agent (str): User-Agent string to use for the HTTP requests. Required as of 2.1.0.
logger (Logger): Logger to use for logging messages
allow_truncation (bool): Whether to allow truncation of text that is too long, defaults to `True`
retry_limit (int): Number of times to retry a request before giving up, defaults to `3`
interval (int): Seconds to wait between each retried request, multiplied by how many attempted requests have been made, defaults to `5`
Properties:
prepended_user_agent (str): The user_agent with the PyFlowery module version prepended and the Python version appended
"""
user_agent: str
logger: Logger = getLogger("pyflowery")
allow_truncation: bool = False
retry_limit: int = 3
interval: int = 5
@property
def prepended_user_agent(self) -> str:
"""Return the user_agent with the PyFlowery module version prepended"""
return f"PyFlowery/{version} {self.user_agent} (Python {pyversion})"