7
7
from pathlib import Path
8
8
import subprocess
9
9
import sys
10
+ import argparse # Added import
10
11
from requests .adapters import HTTPAdapter
11
12
from requests .packages .urllib3 .util .retry import Retry
12
13
13
14
logging .basicConfig (level = logging .INFO )
14
15
logger = logging .getLogger (__name__ )
15
16
16
17
class OpenAPIDiscovery :
17
- def __init__ (self ):
18
+ def __init__ (self , input_dir , output_dir , verbose , use_cache ):
18
19
self .base_url = "https://api.github.com/repos/eda-labs/openapi"
19
20
self .raw_base = "https://raw.githubusercontent.com/eda-labs/openapi/main"
20
21
self .headers = {"Accept" : "application/vnd.github.v3+json" }
21
22
self .cache_file = Path ("cached_specs.json" )
22
-
23
+ self .input_dir = Path (input_dir ) # Added
24
+ self .output_dir = Path (output_dir ) # Added
25
+ self .verbose = verbose # Added
26
+ self .use_cache = use_cache # Added
27
+
28
+ if self .verbose :
29
+ logger .setLevel (logging .DEBUG )
30
+
23
31
# Configure retry strategy
24
32
retry_strategy = Retry (
25
33
total = 3 ,
@@ -107,10 +115,10 @@ def discover_specs(self, use_cache=True):
107
115
108
116
return specs
109
117
110
- def generate_models (self , use_cache = True ):
111
- output_dir = Path ( "models" )
118
+ def generate_models (self ):
119
+ output_dir = self . output_dir # Modified to use argument
112
120
output_dir .mkdir (exist_ok = True )
113
- specs = self .discover_specs (use_cache = use_cache )
121
+ specs = self .discover_specs (use_cache = self . use_cache )
114
122
115
123
if not specs :
116
124
logger .warning ("No specs found!" )
@@ -136,7 +144,38 @@ def generate_models(self, use_cache=True):
136
144
logger .error (f"Error generating models for { module_name } : { e } " )
137
145
138
146
if __name__ == "__main__" :
139
- discovery = OpenAPIDiscovery ()
140
- # Use --no-cache flag to force fresh discovery
141
- use_cache = "--no-cache" not in sys .argv
142
- discovery .generate_models (use_cache = use_cache )
147
+ parser = argparse .ArgumentParser (
148
+ description = "Discover OpenAPI specifications and generate Pydantic models."
149
+ )
150
+ parser .add_argument (
151
+ "--input" ,
152
+ type = str ,
153
+ default = "./openapi_specs" ,
154
+ help = "Path to the OpenAPI specifications directory. Default: ./openapi_specs" ,
155
+ )
156
+ parser .add_argument (
157
+ "--output" ,
158
+ type = str ,
159
+ default = "./models" ,
160
+ help = "Path to the output models directory. Default: ./models" ,
161
+ )
162
+ parser .add_argument (
163
+ "--verbose" ,
164
+ action = "store_true" ,
165
+ help = "Enable verbose logging. Default: False" ,
166
+ )
167
+ parser .add_argument (
168
+ "--no-cache" ,
169
+ action = "store_true" ,
170
+ help = "Force fresh discovery by ignoring the cache. Default: False" ,
171
+ )
172
+
173
+ args = parser .parse_args ()
174
+
175
+ discovery = OpenAPIDiscovery (
176
+ input_dir = args .input ,
177
+ output_dir = args .output ,
178
+ verbose = args .verbose ,
179
+ use_cache = not args .no_cache
180
+ )
181
+ discovery .generate_models ()
0 commit comments