@@ -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
12631262def 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