Skip to content

Commit db6dbbd

Browse files
authored
Merge pull request #114 from NillionNetwork/fix/default_rate_limits_application
fix: migration to set default limits based on environment variables
2 parents fd0a941 + 0aa387b commit db6dbbd

File tree

2 files changed

+36
-15
lines changed

2 files changed

+36
-15
lines changed

nilai-api/alembic/versions/da89d3230653_create_initial_set_of_tables.py

Lines changed: 17 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,11 @@
1010

1111
from alembic import op
1212
import sqlalchemy as sa
13+
from nilai_api.config import (
14+
USER_RATE_LIMIT_MINUTE,
15+
USER_RATE_LIMIT_HOUR,
16+
USER_RATE_LIMIT_DAY,
17+
)
1318

1419

1520
# revision identifiers, used by Alembic.
@@ -33,9 +38,18 @@ def upgrade() -> None:
3338
"signup_date", sa.DateTime, server_default=sa.func.now(), nullable=False
3439
),
3540
sa.Column("last_activity", sa.DateTime, nullable=True),
36-
sa.Column("ratelimit_day", sa.Integer, default=1000, nullable=True),
37-
sa.Column("ratelimit_hour", sa.Integer, default=100, nullable=True),
38-
sa.Column("ratelimit_minute", sa.Integer, default=10, nullable=True),
41+
sa.Column(
42+
"ratelimit_day", sa.Integer, default=USER_RATE_LIMIT_DAY, nullable=True
43+
),
44+
sa.Column(
45+
"ratelimit_hour", sa.Integer, default=USER_RATE_LIMIT_HOUR, nullable=True
46+
),
47+
sa.Column(
48+
"ratelimit_minute",
49+
sa.Integer,
50+
default=USER_RATE_LIMIT_MINUTE,
51+
nullable=True,
52+
),
3953
)
4054
op.create_table(
4155
"query_logs",

nilai-api/src/nilai_api/config/__init__.py

Lines changed: 19 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -1,31 +1,38 @@
11
import os
2+
from typing import List
23

34
from dotenv import load_dotenv
45

56
load_dotenv()
67

7-
ENVIRONMENT = os.getenv("ENVIRONMENT", "testnet")
8+
ENVIRONMENT: str = os.getenv("ENVIRONMENT", "testnet")
89

910

10-
ETCD_HOST = os.getenv("ETCD_HOST", "localhost")
11-
ETCD_PORT = int(os.getenv("ETCD_PORT", 2379))
11+
ETCD_HOST: str = os.getenv("ETCD_HOST", "localhost")
12+
ETCD_PORT: int = int(os.getenv("ETCD_PORT", 2379))
1213

1314

14-
REDIS_URL = os.getenv("REDIS_URL", "redis://localhost:6379")
15+
REDIS_URL: str = os.getenv("REDIS_URL", "redis://localhost:6379")
1516

16-
DOCS_TOKEN = os.getenv("DOCS_TOKEN", None)
17+
DOCS_TOKEN: str | None = os.getenv("DOCS_TOKEN", None)
1718

18-
DB_USER = os.getenv("POSTGRES_USER", "postgres")
19-
DB_PASS = os.getenv("POSTGRES_PASSWORD", "")
20-
DB_HOST = os.getenv("POSTGRES_HOST", "localhost")
21-
DB_PORT = int(os.getenv("POSTGRES_PORT", 5432))
22-
DB_NAME = os.getenv("POSTGRES_DB", "nilai_users")
19+
DB_USER: str = os.getenv("POSTGRES_USER", "postgres")
20+
DB_PASS: str = os.getenv("POSTGRES_PASSWORD", "")
21+
DB_HOST: str = os.getenv("POSTGRES_HOST", "localhost")
22+
DB_PORT: int = int(os.getenv("POSTGRES_PORT", 5432))
23+
DB_NAME: str = os.getenv("POSTGRES_DB", "nilai_users")
2324

2425

25-
NILAUTH_TRUSTED_ROOT_ISSUERS = os.getenv("NILAUTH_TRUSTED_ROOT_ISSUERS", "").split(",")
26+
NILAUTH_TRUSTED_ROOT_ISSUERS: List[str] = os.getenv(
27+
"NILAUTH_TRUSTED_ROOT_ISSUERS", ""
28+
).split(",")
2629

27-
AUTH_STRATEGY = os.getenv("AUTH_STRATEGY", "api_key")
30+
AUTH_STRATEGY: str = os.getenv("AUTH_STRATEGY", "api_key")
2831

32+
# Defined by default but re-defined in testnet.py and mainnet.py
33+
USER_RATE_LIMIT_MINUTE: int | None = 100
34+
USER_RATE_LIMIT_HOUR: int | None = 1000
35+
USER_RATE_LIMIT_DAY: int | None = 10000
2936

3037
if ENVIRONMENT == "mainnet":
3138
from .mainnet import * # noqa

0 commit comments

Comments
 (0)