From 5490b5e5f5d079c72f5596668c36fe49341d6ce7 Mon Sep 17 00:00:00 2001 From: KemalRajasa Date: Wed, 11 Mar 2026 11:23:47 +0700 Subject: [PATCH 1/3] fix: name conflict with internal python library --- reconfsm/fsm/fsm.py | 2 +- reconfsm/fsm/{pathfinding.py => fsm_pathfinding.py} | 0 2 files changed, 1 insertion(+), 1 deletion(-) rename reconfsm/fsm/{pathfinding.py => fsm_pathfinding.py} (100%) diff --git a/reconfsm/fsm/fsm.py b/reconfsm/fsm/fsm.py index 1085d84..58953f7 100644 --- a/reconfsm/fsm/fsm.py +++ b/reconfsm/fsm/fsm.py @@ -12,7 +12,7 @@ import json import os from transitions.extensions import GraphMachine -from .pathfinding import pathfinding_simulation +from .fsm_pathfinding import pathfinding_simulation from .graph import graph_simulation diff --git a/reconfsm/fsm/pathfinding.py b/reconfsm/fsm/fsm_pathfinding.py similarity index 100% rename from reconfsm/fsm/pathfinding.py rename to reconfsm/fsm/fsm_pathfinding.py From 9fc935b35ad0a5cfa620490cc58121d2492e088e Mon Sep 17 00:00:00 2001 From: KemalRajasa Date: Wed, 11 Mar 2026 11:25:26 +0700 Subject: [PATCH 2/3] fix: minor name conflict --- tests/conftest.py | 44 +----------------------------------------- tests/test_reconfsm.py | 2 +- 2 files changed, 2 insertions(+), 44 deletions(-) diff --git a/tests/conftest.py b/tests/conftest.py index c08c343..e289e57 100644 --- a/tests/conftest.py +++ b/tests/conftest.py @@ -1,54 +1,12 @@ """ conftest.py — shared pytest fixtures for the reconfsm test suite. - -IMPORTANT – fsm.py import bootstrap ------------------------------------- -reconfsm/fsm/fsm.py uses bare-name imports designed to be run from inside its -own directory: - - from pathfinding import pathfinding_simulation - from graph import graph_simulation """ -import sys -import types from pathlib import Path -from unittest.mock import MagicMock import pytest -# --------------------------------------------------------------------------- -# Bootstrap: stub out the bare 'pathfinding' and 'graph' imports in fsm.py -# -# fsm.py does: from pathfinding import pathfinding_simulation -# from graph import graph_simulation -# -# These are bare-name imports that only work when run from the fsm/ directory. -# When imported as a package, Python finds the installed PyPI 'pathfinding' -# package instead, which doesn't expose pathfinding_simulation → ImportError. -# -# Fix: inject lightweight stubs into sys.modules BEFORE reconfsm.fsm.fsm is -# imported for the first time. All subsequent imports hit the cache. -# --------------------------------------------------------------------------- - -def _make_stub(module_name, **attrs): - mod = types.ModuleType(module_name) - for k, v in attrs.items(): - setattr(mod, k, v) - return mod - - -if "reconfsm.fsm.fsm" not in sys.modules: - sys.modules.setdefault( - "pathfinding", - _make_stub("pathfinding", pathfinding_simulation=MagicMock()), - ) - sys.modules.setdefault( - "graph", - _make_stub("graph", graph_simulation=MagicMock()), - ) - -from reconfsm.fsm.fsm import load_machine_from_json # noqa: E402 +from reconfsm.fsm.fsm import load_machine_from_json # --------------------------------------------------------------------------- diff --git a/tests/test_reconfsm.py b/tests/test_reconfsm.py index 720ce22..de7c4e1 100644 --- a/tests/test_reconfsm.py +++ b/tests/test_reconfsm.py @@ -18,7 +18,7 @@ import sys import pytest from reconfsm.fsm.fsm import FSMachine, load_machine_from_json, main -from reconfsm.fsm.pathfinding import pathfinding_simulation, sort_and_display_paths +from reconfsm.fsm.fsm_pathfinding import pathfinding_simulation, sort_and_display_paths from reconfsm.fsm.graph import graph_simulation From 237206d4460f337f95c250e05de8b6e69ffc2631 Mon Sep 17 00:00:00 2001 From: KemalRajasa Date: Wed, 11 Mar 2026 11:39:31 +0700 Subject: [PATCH 3/3] feat: dockerfile configuration --- .gitignore | 1 + Dockerfile | 34 ++++++++++++++++++++++++++++++++++ 2 files changed, 35 insertions(+) create mode 100644 Dockerfile diff --git a/.gitignore b/.gitignore index f28e90e..a00ca94 100644 --- a/.gitignore +++ b/.gitignore @@ -4,3 +4,4 @@ reconfsm/fsm/__pycache__ reconfsm/converter/__pycache__ reconfsm/__pycache__ docs/build +.dockerignore diff --git a/Dockerfile b/Dockerfile new file mode 100644 index 0000000..b16e95c --- /dev/null +++ b/Dockerfile @@ -0,0 +1,34 @@ +# syntax=docker/dockerfile:1 + +FROM python:3.12-slim AS builder + +WORKDIR /build + +RUN pip install --upgrade pip setuptools wheel + +COPY pyproject.toml README.md LICENSE ./ +COPY reconfsm/ ./reconfsm/ + +RUN python -m venv /venv && \ + /venv/bin/pip install --upgrade pip && \ + /venv/bin/pip install . + + +FROM python:3.12-slim AS runtime + +RUN apt-get update && \ + apt-get install -y --no-install-recommends graphviz && \ + rm -rf /var/lib/apt/lists/* + +COPY --from=builder /venv /venv +ENV PATH="/venv/bin:$PATH" + +COPY reconfsm/ /app/reconfsm/ +COPY examples/ /app/examples/ + +WORKDIR /app + +RUN useradd --create-home reconfsm +USER reconfsm + +CMD ["/bin/bash"]