diff --git a/docs/source/changelog.rst b/docs/source/changelog.rst index adadf38..db77d98 100644 --- a/docs/source/changelog.rst +++ b/docs/source/changelog.rst @@ -4,6 +4,9 @@ Changelog ========= +- :release:`1.7.0 <11th March 2023>` +- :feature:`24` Add random number generation + - :release:`1.6.0 <09th March 2023>` - :feature:`21` Add random number generation diff --git a/src/api/__init__.py b/src/api/__init__.py index f62a0f9..3ec6f1a 100644 --- a/src/api/__init__.py +++ b/src/api/__init__.py @@ -1,3 +1,3 @@ """Public API for our projects""" -__version__ = "1.6.0" +__version__ = "1.7.0" diff --git a/src/api/modules/__init__.py b/src/api/modules/__init__.py new file mode 100644 index 0000000..52b4875 --- /dev/null +++ b/src/api/modules/__init__.py @@ -0,0 +1 @@ +"""Modules of the API""" diff --git a/src/api/modules/generators.py b/src/api/modules/generators.py new file mode 100644 index 0000000..9a4d1c3 --- /dev/null +++ b/src/api/modules/generators.py @@ -0,0 +1,37 @@ +"""Generation of things""" + +import uuid +from typing import Literal + +from fastapi import APIRouter + +# pylint: disable-next=no-name-in-module +from pydantic import BaseModel, Field + +router_generators = APIRouter(prefix="/generators", tags=["generators"]) + + +class UUIDs(BaseModel): + """Model to hold a list of UUIDs""" + + uuids: list[str] + + +class UUIDConfig(BaseModel): + """Model to hold configuration for UUID generation""" + + uuid_type: Literal[1, 4] + quantity: int = Field(gt=0, default=1) + + +@router_generators.post("/uuids/") +async def bulk_uuids(config: UUIDConfig) -> UUIDs: + """Generate bulk UUIDs""" + if config.uuid_type == 1: + function = uuid.uuid1 + elif config.uuid_type == 4: + function = uuid.uuid4 + else: + raise ValueError(f"unsupported UUID type: {config.uuid_type}") + uuids = [str(function()) for _ in range(config.quantity)] + return UUIDs(uuids=uuids) diff --git a/src/api/server.py b/src/api/server.py index fd84cdd..306a551 100644 --- a/src/api/server.py +++ b/src/api/server.py @@ -11,6 +11,7 @@ from pydantic import BaseModel from . import __version__ +from .modules.generators import router_generators release_prefix = getenv("API_SENTRY_RELEASE_PREFIX", "api") git_sha = getenv("GIT_SHA", "development") @@ -76,3 +77,5 @@ async def random_numbers(quantity: int, range_high: int) -> Numbers: app.include_router(router_fun) + +app.include_router(router_generators) diff --git a/tests/test_generators.py b/tests/test_generators.py new file mode 100644 index 0000000..297d3dd --- /dev/null +++ b/tests/test_generators.py @@ -0,0 +1,16 @@ +"""Test the generators module""" + +import uuid + +from fastapi.testclient import TestClient + +from api.server import app + +client = TestClient(app) + + +def test_read_random_numbers(): + response = client.post("/generators/uuids/", json={"uuid_type": 1, "quantity": 1}) + assert response.status_code == 200 + first = response.json()["uuids"][0] + assert isinstance(uuid.UUID(first), uuid.UUID)