File size: 1,632 Bytes
5850885
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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
"""Console-script entrypoint that patches sys.path for the flat-import layout.

Problem
-------
The project uses a *flat layout* (``pyproject.toml`` maps ``.`` → the
``sql_drift_env`` package directory).  That means every sibling module
(``models``, ``actors``, ``engine`` …) is imported as a plain top-level
name rather than via the ``sql_drift_env.`` prefix.

When the wheel is installed, those siblings land at
``site-packages/sql_drift_env/models.py`` etc., *not* at the top-level
``site-packages/`` directory.  A naïve console-script that calls
``sql_drift_env.server.app:main`` would fail at ``from models import …``
before reaching any application logic.

Fix
---
Insert the installed package directory (``site-packages/sql_drift_env/``)
onto ``sys.path`` *before* importing anything from the server package.
This mirrors what Docker achieves via ``--app-dir /app/env`` / ``PYTHONPATH``,
but works for any installed-wheel invocation without requiring a wrapper
script or Docker.
"""

from __future__ import annotations

import os
import sys


def main() -> None:
    # __file__ resolves to site-packages/sql_drift_env/_cli.py after
    # installation, so its parent IS the directory that contains models.py,
    # server/, actors/, etc.
    _pkg_dir = os.path.dirname(os.path.abspath(__file__))
    if _pkg_dir not in sys.path:
        sys.path.insert(0, _pkg_dir)

    # Import lazily so the sys.path fix takes effect before any flat import
    # in server/app.py or its transitive dependencies is attempted.
    from server.app import main as _server_main

    _server_main()


if __name__ == "__main__":
    main()