Merge pull request 'rename battleflow to encounterflow' (#2) from rename-encounterflow into main
Reviewed-on: #2
2
Makefile
@@ -15,7 +15,7 @@ dev:
|
|||||||
$(PY) -m pip install -r requirements-dev.txt
|
$(PY) -m pip install -r requirements-dev.txt
|
||||||
|
|
||||||
run:
|
run:
|
||||||
$(PY) -m battleflow.cli --host $(HOST) --port $(PORT) --token $(TOKEN) $(if $(DATA),--data-dir $(DATA),)
|
$(PY) -m encounterflow.cli --host $(HOST) --port $(PORT) --token $(TOKEN) $(if $(DATA),--data-dir $(DATA),)
|
||||||
|
|
||||||
test:
|
test:
|
||||||
pytest -q
|
pytest -q
|
||||||
|
|||||||
@@ -5,16 +5,16 @@ Refactored project layout (same features, cleaner code).
|
|||||||
## Install & Run
|
## Install & Run
|
||||||
```bash
|
```bash
|
||||||
pip install -e .
|
pip install -e .
|
||||||
battleflow --host 0.0.0.0 --port 5050 --token YOURSECRET
|
encounterflow --host 0.0.0.0 --port 5050 --token YOURSECRET
|
||||||
```
|
```
|
||||||
Open:
|
Open:
|
||||||
- Admin: `http://HOST:PORT/admin?token=YOURSECRET`
|
- Admin: `http://HOST:PORT/admin?token=YOURSECRET`
|
||||||
- Board: `http://HOST:PORT/board?token=YOURSECRET`
|
- Board: `http://HOST:PORT/board?token=YOURSECRET`
|
||||||
|
|
||||||
## Data directories
|
## Data directories
|
||||||
Default data folder is `battleflow_data/`. If an older `initrack_data/` exists and `battleflow_data/` isn't present, it will be reused automatically (migration-by-reuse).
|
Default data folder is `encounterflow_data/`. If an older `initrack_data/` exists and `encounterflow_data/` isn't present, it will be reused automatically (migration-by-reuse).
|
||||||
```
|
```
|
||||||
battleflow_data/
|
encounterflow_data/
|
||||||
avatars/
|
avatars/
|
||||||
icons/
|
icons/
|
||||||
state.json
|
state.json
|
||||||
|
|||||||
@@ -5,11 +5,11 @@ from .storage import ensure_default_icons, load_state
|
|||||||
from .state import STATE
|
from .state import STATE
|
||||||
|
|
||||||
def main():
|
def main():
|
||||||
parser = argparse.ArgumentParser(prog="battleflow")
|
parser = argparse.ArgumentParser(prog="encounterflow")
|
||||||
parser.add_argument('--host', default='127.0.0.1')
|
parser.add_argument('--host', default='127.0.0.1')
|
||||||
parser.add_argument('--port', type=int, default=5050)
|
parser.add_argument('--port', type=int, default=5050)
|
||||||
parser.add_argument('--token', default=os.environ.get('BATTLEFLOW_TOKEN','changeme'))
|
parser.add_argument('--token', default=os.environ.get('ENCOUNTERFLOW_TOKEN','changeme'))
|
||||||
parser.add_argument('--data-dir', default=os.environ.get('BATTLEFLOW_DATA_DIR'))
|
parser.add_argument('--data-dir', default=os.environ.get('ENCOUNTERFLOW_DATA_DIR'))
|
||||||
args = parser.parse_args()
|
args = parser.parse_args()
|
||||||
|
|
||||||
app = create_app(token=args.token, data_dir=args.data_dir)
|
app = create_app(token=args.token, data_dir=args.data_dir)
|
||||||
@@ -1,17 +1,17 @@
|
|||||||
# battleflow/config.py
|
# encounterflow/config.py
|
||||||
import os
|
import os
|
||||||
|
|
||||||
DEFAULT_DATA_DIR = os.path.join(os.getcwd(), "battleflow_data")
|
DEFAULT_DATA_DIR = os.path.join(os.getcwd(), "encounterflow_data")
|
||||||
|
|
||||||
def load_config(app, **overrides):
|
def load_config(app, **overrides):
|
||||||
app.config.setdefault("SECRET_KEY", os.environ.get("SECRET_KEY", "dev-secret"))
|
app.config.setdefault("SECRET_KEY", os.environ.get("SECRET_KEY", "dev-secret"))
|
||||||
app.config.setdefault(
|
app.config.setdefault(
|
||||||
"COMBAT_TOKEN",
|
"COMBAT_TOKEN",
|
||||||
overrides.get("token") or os.environ.get("BATTLEFLOW_TOKEN", "changeme")
|
overrides.get("token") or os.environ.get("ENCOUNTERFLOW_TOKEN", "changeme")
|
||||||
)
|
)
|
||||||
|
|
||||||
# Kies data-dir: override/env > default. Migreer legacy 'initrack_data' → 'battleflow_data' indien nodig.
|
# Kies data-dir: override/env > default. Migreer legacy 'initrack_data' → 'encounterflow_data' indien nodig.
|
||||||
data_dir = overrides.get("data_dir") or os.environ.get("BATTLEFLOW_DATA_DIR")
|
data_dir = overrides.get("data_dir") or os.environ.get("ENCOUNTERFLOW_DATA_DIR")
|
||||||
if not data_dir:
|
if not data_dir:
|
||||||
default_new = DEFAULT_DATA_DIR
|
default_new = DEFAULT_DATA_DIR
|
||||||
legacy = os.path.join(os.getcwd(), "initrack_data")
|
legacy = os.path.join(os.getcwd(), "initrack_data")
|
||||||
@@ -32,7 +32,7 @@ def load_config(app, **overrides):
|
|||||||
os.makedirs(app.config["ICON_DIR"], exist_ok=True)
|
os.makedirs(app.config["ICON_DIR"], exist_ok=True)
|
||||||
|
|
||||||
# Branding
|
# Branding
|
||||||
app.config.setdefault("PRODUCT_NAME", "Battleflow")
|
app.config.setdefault("PRODUCT_NAME", "EncounterFlow")
|
||||||
app.config.setdefault("PRODUCT_SUBTITLE", "by Aetryos Workshop")
|
app.config.setdefault("PRODUCT_SUBTITLE", "by Aetryos Workshop")
|
||||||
|
|
||||||
return app
|
return app
|
||||||
|
Before Width: | Height: | Size: 241 B After Width: | Height: | Size: 241 B |
|
Before Width: | Height: | Size: 3.0 KiB After Width: | Height: | Size: 3.0 KiB |
|
Before Width: | Height: | Size: 533 B After Width: | Height: | Size: 533 B |
|
Before Width: | Height: | Size: 1.3 KiB After Width: | Height: | Size: 1.3 KiB |
|
Before Width: | Height: | Size: 1.9 KiB After Width: | Height: | Size: 1.9 KiB |
|
Before Width: | Height: | Size: 1.8 KiB After Width: | Height: | Size: 1.8 KiB |
|
Before Width: | Height: | Size: 1.6 KiB After Width: | Height: | Size: 1.6 KiB |
|
Before Width: | Height: | Size: 1.0 KiB After Width: | Height: | Size: 1.0 KiB |
|
Before Width: | Height: | Size: 567 B After Width: | Height: | Size: 567 B |
|
Before Width: | Height: | Size: 2.4 KiB After Width: | Height: | Size: 2.4 KiB |
|
Before Width: | Height: | Size: 5.5 KiB After Width: | Height: | Size: 5.5 KiB |
|
Before Width: | Height: | Size: 1.9 KiB After Width: | Height: | Size: 1.9 KiB |
|
Before Width: | Height: | Size: 1.3 KiB After Width: | Height: | Size: 1.3 KiB |
@@ -3,9 +3,9 @@ requires = ["setuptools>=68", "wheel"]
|
|||||||
build-backend = "setuptools.build_meta"
|
build-backend = "setuptools.build_meta"
|
||||||
|
|
||||||
[project]
|
[project]
|
||||||
name = "battleflow"
|
name = "encounterflow"
|
||||||
version = "0.1.0"
|
version = "0.1.0"
|
||||||
description = "Battleflow — OBS-friendly initiative board for tabletop encounters"
|
description = "EncounterFlow"
|
||||||
authors = [{name="Aetryos Workshop"}]
|
authors = [{name="Aetryos Workshop"}]
|
||||||
requires-python = ">=3.9"
|
requires-python = ">=3.9"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
@@ -14,4 +14,4 @@ dependencies = [
|
|||||||
]
|
]
|
||||||
|
|
||||||
[project.scripts]
|
[project.scripts]
|
||||||
battleflow = "battleflow.cli:main"
|
encounterflow = "encounterflow.cli:main"
|
||||||
|
|||||||
2
tasks.py
@@ -9,7 +9,7 @@ def install(c):
|
|||||||
@task
|
@task
|
||||||
def run(c, host="0.0.0.0", port=5050, token="changeme", data_dir=""):
|
def run(c, host="0.0.0.0", port=5050, token="changeme", data_dir=""):
|
||||||
extra = f"--data-dir {data_dir}" if data_dir else ""
|
extra = f"--data-dir {data_dir}" if data_dir else ""
|
||||||
c.run(f"python -m battleflow.cli --host {host} --port {port} --token {token} {extra}")
|
c.run(f"python -m encounterflow.cli --host {host} --port {port} --token {token} {extra}")
|
||||||
|
|
||||||
@task
|
@task
|
||||||
def seed_icons(c, host="127.0.0.1", port=5050, token="changeme"):
|
def seed_icons(c, host="127.0.0.1", port=5050, token="changeme"):
|
||||||
|
|||||||
@@ -1,8 +1,8 @@
|
|||||||
import os, json, tempfile, shutil
|
import os, json, tempfile, shutil
|
||||||
import pytest
|
import pytest
|
||||||
from battleflow import create_app
|
from encounterflow import create_app
|
||||||
from battleflow.state import STATE
|
from encounterflow.state import STATE
|
||||||
from battleflow.storage import ensure_default_icons, load_state
|
from encounterflow.storage import ensure_default_icons, load_state
|
||||||
|
|
||||||
TOKEN = "testtoken"
|
TOKEN = "testtoken"
|
||||||
|
|
||||||
@@ -11,8 +11,8 @@ def isolated_data(tmp_path, monkeypatch):
|
|||||||
# fresh state for each test
|
# fresh state for each test
|
||||||
data_dir = tmp_path / "bfdata"
|
data_dir = tmp_path / "bfdata"
|
||||||
data_dir.mkdir()
|
data_dir.mkdir()
|
||||||
monkeypatch.setenv("BATTLEFLOW_DATA_DIR", str(data_dir))
|
monkeypatch.setenv("ENCOUNTERFLOW_DATA_DIR", str(data_dir))
|
||||||
monkeypatch.setenv("BATTLEFLOW_TOKEN", TOKEN)
|
monkeypatch.setenv("ENCOUNTERFLOW_TOKEN", TOKEN)
|
||||||
# reset STATE
|
# reset STATE
|
||||||
STATE.actors.clear(); STATE.turn_idx=0; STATE.round=1; STATE.visible=True; STATE.dead_mode='normal'
|
STATE.actors.clear(); STATE.turn_idx=0; STATE.round=1; STATE.visible=True; STATE.dead_mode='normal'
|
||||||
app = create_app()
|
app = create_app()
|
||||||
|
|||||||