Skip to content

Commit 1835657

Browse files
committed
test: run code generator and wrapper before tests
1 parent 26393d3 commit 1835657

2 files changed

Lines changed: 30 additions & 1 deletion

File tree

frost_sta_client/cli.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@
77
def main(argv: Optional[list] = None) -> int:
88
parser = argparse.ArgumentParser(prog="frost-codegen", description="FROST-STA OData code generator")
99
parser.add_argument("--url", "-u", required=True, help="OData endpoint of FROST-Server (e.g., http://host:8080/FROST-Server/ODATA_4.01)")
10-
parser.add_argument("--output-dir", "-o", default="frost_sta_client/generated/odata", help="Output directory for generated code")
10+
parser.add_argument("--output-dir", "-o", "--out", dest="output_dir", default="frost_sta_client/generated/odata", help="Output directory for generated code")
1111
parser.add_argument("--module", "-m", default="datamodel", help="Module name for the generated file (default: datamodel)")
1212
parser.add_argument("--username", help="Basic auth username", default=None)
1313
parser.add_argument("--password", help="Basic auth password", default=None)

tests/conftest.py

Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,35 @@
77
from frost_sta_client.service.sensorthingsservice import SensorThingsService
88
from frost_sta_client.service.auth_handler import AuthHandler
99

10+
# Run code generation and install model wrappers before any tests start
11+
def pytest_sessionstart(session):
12+
# 1) Generate OData datamodel (falls back to metadata.xml if endpoint unavailable)
13+
try:
14+
from frost_sta_client.odata_codegen.generator import generate_from_url
15+
url = os.environ.get('FROST_STA_CLIENT_CODEGEN_URL', 'http://localhost:8080/FROST-Server')
16+
username = os.environ.get('FROST_STA_CLIENT_CODEGEN_USER')
17+
password = os.environ.get('FROST_STA_CLIENT_CODEGEN_PASS')
18+
auth = (username, (password or '')) if username is not None else None
19+
generate_from_url(url, 'frost_sta_client/generated/odata', 'datamodel', auth=auth)
20+
except Exception:
21+
# Non-fatal: generator handles fallback internally
22+
pass
23+
24+
# 2) Generate model wrappers under frost_sta_client/model so imports like frost_sta_client.model.thing work
25+
try:
26+
from frost_sta_client.odata_codegen.install_model import ENTITY_FILE_MAP, ensure_dir as _ensure_dir, write_wrapper as _write_wrapper, write_model_init as _write_model_init
27+
model_dir = os.path.join('frost_sta_client', 'model')
28+
_ensure_dir(model_dir)
29+
from frost_sta_client.model.ext.entity_type import EntityTypes
30+
entities = [k for k in EntityTypes.keys() if ENTITY_FILE_MAP.get(k)]
31+
for singular in entities:
32+
relations = EntityTypes[singular].get('relations_list', [])
33+
_write_wrapper(model_dir, singular, relations)
34+
_write_model_init(model_dir, entities)
35+
except Exception:
36+
# Non-fatal: other unit tests can still proceed
37+
pass
38+
1039
@pytest.fixture(scope='session')
1140
def frost_server():
1241
if os.environ.get('FROST_STA_CLIENT_RUN_INTEGRATION') != '1':

0 commit comments

Comments
 (0)