Restructure project to flat layout and update run instructions
Move modules from fluxer_admin_alerts/ to the repository root, switch to absolute imports, fix PROJECT_ROOT resolution, and update README commands and notifier paths.
This commit is contained in:
parent
8bd5da1b9d
commit
dc831b430b
12 changed files with 19 additions and 25 deletions
14
README.md
14
README.md
|
|
@ -40,12 +40,6 @@ cp config.example.toml config.toml
|
||||||
|
|
||||||
Then edit `.env` and `config.toml` (see below).
|
Then edit `.env` and `config.toml` (see below).
|
||||||
|
|
||||||
To run the tests:
|
|
||||||
|
|
||||||
```sh
|
|
||||||
python -m unittest discover -s tests
|
|
||||||
```
|
|
||||||
|
|
||||||
## Configure
|
## Configure
|
||||||
|
|
||||||
There are two config files. Both are ignored by git, so your values stay on your machine.
|
There are two config files. Both are ignored by git, so your values stay on your machine.
|
||||||
|
|
@ -89,13 +83,13 @@ Give the key only what it needs. Remove a source from `config.toml` and drop its
|
||||||
Check what would be sent, without sending anything or saving state:
|
Check what would be sent, without sending anything or saving state:
|
||||||
|
|
||||||
```sh
|
```sh
|
||||||
.venv/bin/python -m fluxer_admin_alerts --dry-run
|
.venv/bin/python __main__.py --dry-run
|
||||||
```
|
```
|
||||||
|
|
||||||
Run for real:
|
Run for real:
|
||||||
|
|
||||||
```sh
|
```sh
|
||||||
.venv/bin/python -m fluxer_admin_alerts
|
.venv/bin/python __main__.py
|
||||||
```
|
```
|
||||||
|
|
||||||
Use `-v` for debug logging. Exit code `0` means success, `1` means at least one source or notifier failed, and `2` means the config is wrong.
|
Use `-v` for debug logging. Exit code `0` means success, `1` means at least one source or notifier failed, and `2` means the config is wrong.
|
||||||
|
|
@ -105,7 +99,7 @@ Use `-v` for debug logging. Exit code `0` means success, `1` means at least one
|
||||||
Edit your crontab with `crontab -e` and add a line to run every hour:
|
Edit your crontab with `crontab -e` and add a line to run every hour:
|
||||||
|
|
||||||
```cron
|
```cron
|
||||||
0 * * * * cd /path/to/fluxer-admin-alerts && .venv/bin/python -m fluxer_admin_alerts >> alerts.log 2>&1
|
0 * * * * cd /path/to/fluxer-admin-alerts && .venv/bin/python __main__.py >> alerts.log 2>&1
|
||||||
```
|
```
|
||||||
|
|
||||||
Replace `/path/to/fluxer-admin-alerts` with the folder you cloned into. `alerts.log` is ignored by git.
|
Replace `/path/to/fluxer-admin-alerts` with the folder you cloned into. `alerts.log` is ignored by git.
|
||||||
|
|
@ -120,7 +114,7 @@ Replace `/path/to/fluxer-admin-alerts` with the folder you cloned into. `alerts.
|
||||||
|
|
||||||
## Adding a notifier
|
## Adding a notifier
|
||||||
|
|
||||||
Notifiers live in `fluxer_admin_alerts/notifiers/`. A notifier subclasses `Notifier`, implements `send(messages)`, raises `NotifierError` on failure, and is registered in `notifiers/__init__.py`. Then add its name to `KNOWN_NOTIFIERS` in `config.py` and read any settings it needs from `.env`.
|
Notifiers live in `notifiers/`. A notifier subclasses `Notifier`, implements `send(messages)`, raises `NotifierError` on failure, and is registered in `notifiers/__init__.py`. Then add its name to `KNOWN_NOTIFIERS` in `config.py` and read any settings it needs from `.env`.
|
||||||
|
|
||||||
## License
|
## License
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -5,8 +5,8 @@ import logging
|
||||||
import sys
|
import sys
|
||||||
from pathlib import Path
|
from pathlib import Path
|
||||||
|
|
||||||
from .config import PROJECT_ROOT, ConfigError, load_settings
|
from config import PROJECT_ROOT, ConfigError, load_settings
|
||||||
from .runner import run
|
from runner import run
|
||||||
|
|
||||||
|
|
||||||
def main(argv: list[str] | None = None) -> int:
|
def main(argv: list[str] | None = None) -> int:
|
||||||
|
|
@ -8,7 +8,7 @@ from pathlib import Path
|
||||||
|
|
||||||
from dotenv import load_dotenv
|
from dotenv import load_dotenv
|
||||||
|
|
||||||
PROJECT_ROOT = Path(__file__).resolve().parent.parent
|
PROJECT_ROOT = Path(__file__).resolve().parent
|
||||||
|
|
||||||
KNOWN_NOTIFIERS = ("fluxer",)
|
KNOWN_NOTIFIERS = ("fluxer",)
|
||||||
|
|
||||||
|
|
@ -3,8 +3,8 @@ from __future__ import annotations
|
||||||
from dataclasses import dataclass, field, replace
|
from dataclasses import dataclass, field, replace
|
||||||
from datetime import datetime, timedelta
|
from datetime import datetime, timedelta
|
||||||
|
|
||||||
from .sources import Item
|
from sources import Item
|
||||||
from .state import AlertRecord
|
from state import AlertRecord
|
||||||
|
|
||||||
|
|
||||||
@dataclass(frozen=True)
|
@dataclass(frozen=True)
|
||||||
|
|
@ -4,7 +4,7 @@ from typing import Any
|
||||||
|
|
||||||
import requests
|
import requests
|
||||||
|
|
||||||
from . import __version__
|
__version__ = "0.1.0"
|
||||||
|
|
||||||
USER_AGENT = f"fluxer-admin-alerts/{__version__}"
|
USER_AGENT = f"fluxer-admin-alerts/{__version__}"
|
||||||
|
|
||||||
|
|
@ -1,6 +1,6 @@
|
||||||
from __future__ import annotations
|
from __future__ import annotations
|
||||||
|
|
||||||
from ..config import Settings
|
from config import Settings
|
||||||
from .base import Message, Notifier, NotifierError
|
from .base import Message, Notifier, NotifierError
|
||||||
from .fluxer import FluxerWebhookNotifier
|
from .fluxer import FluxerWebhookNotifier
|
||||||
|
|
||||||
|
|
@ -3,12 +3,12 @@ from __future__ import annotations
|
||||||
import logging
|
import logging
|
||||||
from datetime import datetime, timezone
|
from datetime import datetime, timezone
|
||||||
|
|
||||||
from .config import Settings
|
from config import Settings
|
||||||
from .engine import Notice, decide
|
from engine import Notice, decide
|
||||||
from .fluxer_api import FluxerAPI, FluxerAPIError
|
from fluxer_api import FluxerAPI, FluxerAPIError
|
||||||
from .notifiers import NotifierError, Message, build_notifiers
|
from notifiers import NotifierError, Message, build_notifiers
|
||||||
from .sources import SOURCES, Item
|
from sources import SOURCES, Item
|
||||||
from .state import StateStore
|
from state import StateStore
|
||||||
|
|
||||||
log = logging.getLogger(__name__)
|
log = logging.getLogger(__name__)
|
||||||
|
|
||||||
|
|
@ -5,8 +5,8 @@ from dataclasses import dataclass
|
||||||
from datetime import datetime, timedelta, timezone
|
from datetime import datetime, timedelta, timezone
|
||||||
from typing import Any
|
from typing import Any
|
||||||
|
|
||||||
from .config import SourceSettings
|
from config import SourceSettings
|
||||||
from .fluxer_api import FluxerAPI
|
from fluxer_api import FluxerAPI
|
||||||
|
|
||||||
PAGE_SIZE = 200
|
PAGE_SIZE = 200
|
||||||
MAX_PAGES = 50
|
MAX_PAGES = 50
|
||||||
Loading…
Add table
Reference in a new issue