From a65a60604ab09e83f18cec58afb7a807b1eb2b30 Mon Sep 17 00:00:00 2001 From: Kevin Morris Date: Thu, 3 Jun 2021 10:51:46 -0700 Subject: [PATCH] add ApiRateLimit SQLAlchemy ORM model Signed-off-by: Kevin Morris --- aurweb/models/api_rate_limit.py | 15 +++++++++++++ test/test_api_rate_limit.py | 40 +++++++++++++++++++++++++++++++++ 2 files changed, 55 insertions(+) create mode 100644 aurweb/models/api_rate_limit.py create mode 100644 test/test_api_rate_limit.py diff --git a/aurweb/models/api_rate_limit.py b/aurweb/models/api_rate_limit.py new file mode 100644 index 00000000..44e7a463 --- /dev/null +++ b/aurweb/models/api_rate_limit.py @@ -0,0 +1,15 @@ +from sqlalchemy.orm import mapper + +from aurweb.schema import ApiRateLimit as _ApiRateLimit + + +class ApiRateLimit: + def __init__(self, IP: str = None, + Requests: int = None, + WindowStart: int = None): + self.IP = IP + self.Requests = Requests + self.WindowStart = WindowStart + + +mapper(ApiRateLimit, _ApiRateLimit, primary_key=[_ApiRateLimit.c.IP]) diff --git a/test/test_api_rate_limit.py b/test/test_api_rate_limit.py new file mode 100644 index 00000000..91ab5854 --- /dev/null +++ b/test/test_api_rate_limit.py @@ -0,0 +1,40 @@ +import pytest + +from sqlalchemy.exc import IntegrityError + +from aurweb.db import create +from aurweb.models.api_rate_limit import ApiRateLimit +from aurweb.testing import setup_test_db + + +@pytest.fixture(autouse=True) +def setup(): + setup_test_db("ApiRateLimit") + + +def test_api_rate_key_creation(): + rate = create(ApiRateLimit, IP="127.0.0.1", Requests=10, WindowStart=1) + assert rate.IP == "127.0.0.1" + assert rate.Requests == 10 + assert rate.WindowStart == 1 + + +def test_api_rate_key_null_ip_raises_exception(): + from aurweb.db import session + with pytest.raises(IntegrityError): + create(ApiRateLimit, Requests=10, WindowStart=1) + session.rollback() + + +def test_api_rate_key_null_requests_raises_exception(): + from aurweb.db import session + with pytest.raises(IntegrityError): + create(ApiRateLimit, IP="127.0.0.1", WindowStart=1) + session.rollback() + + +def test_api_rate_key_null_window_start_raises_exception(): + from aurweb.db import session + with pytest.raises(IntegrityError): + create(ApiRateLimit, IP="127.0.0.1", WindowStart=1) + session.rollback()