Packaging: the wheel carries the PWA, so a release install serves the UI (v2.7.10)
- pyproject declared build-backend = "setuptools.backends._legacy:_Backend", which does not exist: `python -m build`, `pip install .` and even `pip install -e .` died with "Backend ... is not available". It is setuptools.build_meta now. - the wheel and sdist carried only the Python packages, and _default_web_dir() resolved <site-packages>/../frontend, so an installed server started fine but answered every static request with 404. setup.py's build_py now copies the checkout's frontend/ into simtrace_analyser/web/ inside the build (the PWA's tests excluded), and _default_web_dir() prefers that packaged copy, falling back to <repo>/frontend for source and editable runs. The source directory is resolved from setup.py (so an sdist build works) and a missing frontend/ fails the build loudly instead of shipping a package without its UI. - MANIFEST.in grafts frontend/ (with the READMEs, the udev rule and the four launch scripts) into the sdist, so a wheel built from the sdist has the PWA. - README (EN/RU): an install-from-a-release section (pipx/pip with the wheel, the direct release URL for pip) and the --web-dir default documented as the bundled PWA, or <repo>/frontend from source. - tests/test_packaging.py pins the packaged-first resolution (including the empty-directory fallback), the source checkout default, the real build backend, the manifest graft and setup.py's bundling. - verified: a fresh venv install from the wheel and from the sdist serve GET / (200, byte-identical index.html, PWA v2.7.10) out of site-packages/simtrace_analyser/web; an editable install still resolves <repo>/frontend. 547 Python + 80 Node tests.
This commit is contained in:
1 parent
4a03f83459
commit
25aa87ba1e
11 files changed
+196
-16
No files matched your search
@@ -16,10 +16,20 @@ from .capture import CaptureManager, GsmtapListener, DirectSniffer
|
||||
from .version import __version__
|
||||
|
||||
|
||||
def _pick_web_dir(package_dir, repo_root):
|
||||
"""The installed package's bundled PWA first, then the source checkout."""
|
||||
packaged = os.path.join(package_dir, 'web')
|
||||
if os.path.isfile(os.path.join(packaged, 'index.html')):
|
||||
return packaged
|
||||
return os.path.join(repo_root, 'frontend')
|
||||
|
||||
|
||||
def _default_web_dir():
|
||||
# <repo>/frontend, whether run from source or an editable install.
|
||||
# __file__ is <repo>/simtrace_analyser/__main__.py → up two levels.
|
||||
return os.path.join(os.path.dirname(os.path.dirname(os.path.abspath(__file__))), 'frontend')
|
||||
# A wheel/sdist install carries simtrace_analyser/web (copied there by
|
||||
# setup.py); an editable install and a plain source run fall through to
|
||||
# <repo>/frontend. __file__ is <repo>/simtrace_analyser/__main__.py.
|
||||
pkg_dir = os.path.dirname(os.path.abspath(__file__))
|
||||
return _pick_web_dir(pkg_dir, os.path.dirname(pkg_dir))
|
||||
|
||||
|
||||
def main():
|
||||
@@ -42,7 +52,9 @@ def main():
|
||||
p.add_argument('--log-requests', action='store_true', default=False,
|
||||
help='Log every HTTP request (off by default)')
|
||||
p.add_argument('--web-dir', default=_default_web_dir(), metavar='PATH',
|
||||
help='Directory with the simtrace-analyser PWA static files to serve (default: <repo>/frontend)')
|
||||
help='Directory with the simtrace-analyser PWA static files to serve '
|
||||
'(default: the PWA bundled in the installed package, '
|
||||
'or <repo>/frontend in a source checkout)')
|
||||
args = p.parse_args()
|
||||
|
||||
db = Database(args.db)
|
||||
|
||||
@@ -1,3 +1,3 @@
|
||||
"""Single source of truth for the SIMtrace Analyser version."""
|
||||
|
||||
__version__ = '2.7.9'
|
||||
__version__ = '2.7.10'
|
||||
Reference in new issue
Block a user