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
63
64
65
66
|
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")
sqlite_busy_timeout_seconds: float = Field(default=30.0, alias="SQLITE_BUSY_TIMEOUT_SECONDS")
discovery_batch_size: int = Field(default=5, alias="DISCOVERY_BATCH_SIZE")
indexed_actor_repoll_seconds: int = Field(default=21600, alias="INDEXED_ACTOR_REPOLL_SECONDS")
discovery_error_backoff_seconds: int = Field(default=3600, alias="DISCOVERY_ERROR_BACKOFF_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()
|