Skip to content

Commit 5d3bc75

Browse files
committed
chore(wip): revert to fallback to metadata.xml
1 parent 199faca commit 5d3bc75

1 file changed

Lines changed: 22 additions & 4 deletions

File tree

frost_sta_client/odata_codegen/generator.py

Lines changed: 22 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1237,13 +1237,12 @@ def snake(name: str) -> str:
12371237
lines.append("")
12381238

12391239
# __all__
1240-
# __all__ - export only classes/complex types plus helper mapping
1240+
exported.extend(list(model.get("entity_sets", {}).keys()))
12411241
lines.append("__all__ = [")
1242-
for name in sorted(set(exported + ["ENTITY_SETS"])):
1242+
for name in sorted(set(exported)):
12431243
lines.append(f" '{name}',")
12441244
lines.append("]")
12451245
lines.append("")
1246-
lines.append("")
12471246

12481247
# Also write a package __init__.py so that `import <output-dir> as model` works as in README.
12491248
init_path = os.path.join(out_dir, "__init__.py")
@@ -1262,10 +1261,29 @@ def snake(name: str) -> str:
12621261

12631262
def generate_from_url(base_url: str, out_dir: str, module_name: str = "datamodel", auth: Any = None) -> str:
12641263
"""Detect an OData endpoint and generate models accordingly.
1264+
1265+
Fallback: If no OData endpoint is available, use project's metadata.xml.
12651266
"""
12661267
from .runtime import find_odata_endpoint, fetch_metadata
12671268
info = find_odata_endpoint(base_url, auth=auth)
12681269
if info is None:
1269-
raise RuntimeError("Invalid OData endpoint. No code generated.")
1270+
meta_path_candidates = [
1271+
os.path.join(os.getcwd(), "frost_sta_client/metadata.xml"),
1272+
os.path.join(os.path.dirname(os.path.dirname(os.path.dirname(__file__))), "frost_sta_client/metadata.xml"),
1273+
]
1274+
xml_text = None
1275+
source = None
1276+
for p in meta_path_candidates:
1277+
try:
1278+
if os.path.exists(p):
1279+
with open(p, "r", encoding="utf-8") as fh:
1280+
xml_text = fh.read()
1281+
source = p
1282+
break
1283+
except Exception:
1284+
pass
1285+
if not xml_text:
1286+
raise RuntimeError("No OData endpoint detected and metadata.xml not found. No code generated.")
1287+
return generate_from_metadata(xml_text, out_dir, module_name, source_url=source or "", odata_version="4.01")
12701288
xml = fetch_metadata(info["metadata_url"], auth=auth)
12711289
return generate_from_metadata(xml, out_dir, module_name, source_url=info["metadata_url"], odata_version=info["version"])

0 commit comments

Comments
 (0)