summaryrefslogtreecommitdiff
path: root/src/srht_contrib/config.py
blob: 80884c12fe8f62c29e6e193a24b06cd9ff308dd8 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
from __future__ import annotations

from functools import lru_cache

from pydantic import Field
from pydantic_settings import BaseSettings, SettingsConfigDict


class Settings(BaseSettings):
    model_config = SettingsConfigDict(
        env_file=".env",
        env_file_encoding="utf-8",
        case_sensitive=True,
    )

    app_name: str = "srht-contrib"
    app_env: str = "development"
    api_host: str = "127.0.0.1"
    api_port: int = 8000
    enable_scheduler: bool = Field(default=False, alias="ENABLE_SCHEDULER")
    api_key: str = Field(default="", alias="API_KEY")

    srht_token: str = Field(default="", alias="SRHT_TOKEN")
    todo_srht_endpoint: str = Field(
        default="https://todo.sr.ht/query",
        alias="TODO_SRHT_ENDPOINT",
    )
    git_srht_endpoint: str = Field(
        default="https://git.sr.ht/query",
        alias="GIT_SRHT_ENDPOINT",
    )
    database_url: str = Field(
        default="sqlite:///./srht_contrib.db",
        alias="DATABASE_URL",
    )
    default_actor: str = Field(default="~unknown", alias="DEFAULT_ACTOR")
    poll_interval_seconds: int = Field(default=900, alias="POLL_INTERVAL_SECONDS")
    sync_overlap_hours: int = Field(default=1, alias="SYNC_OVERLAP_HOURS")
    srht_request_delay_seconds: float = Field(default=0.5, alias="SRHT_REQUEST_DELAY_SECONDS")
    git_repo_discovery_ttl_seconds: int = Field(default=3600, alias="GIT_REPO_DISCOVERY_TTL_SECONDS")
    actor_aliases_json: dict[str, list[str]] = Field(
        default_factory=dict,
        alias="ACTOR_ALIASES_JSON",
    )
    git_tracked_repositories: list[str] = Field(
        default_factory=list,
        alias="GIT_TRACKED_REPOSITORIES",
    )

    event_weights: dict[str, float] = {
        "commit": 1.0,
        "ticket_created": 1.0,
        "ticket_comment": 0.5,
        "ticket_closed": 0.75,
        "build_started": 0.25,
        "build_passed": 0.25,
    }


@lru_cache(maxsize=1)
def get_settings() -> Settings:
    return Settings()