77from loguru import logger
88from yaml import BaseLoader
99
10- from dlt_init_openapi .exceptions import DltOpenAPIException
10+ from dlt_init_openapi .exceptions import DltInvalidSpecException , DltOpenAPINot30Exception , DltUnparseableSpecException
1111from dlt_init_openapi .parser .config import Config
1212from dlt_init_openapi .parser .context import OpenapiContext
1313from dlt_init_openapi .parser .endpoints import EndpointCollection
@@ -39,30 +39,17 @@ def parse(self, data: bytes) -> None:
3939 try :
4040 spec = osp .OpenAPI .parse_obj (self .spec_raw )
4141 except Exception as e :
42- raise DltOpenAPIException ( "Could not Validate spec: \n " + str ( e ) ) from e
42+ raise DltInvalidSpecException ( ) from e
4343 logger .success ("Spec validation successful" )
4444
4545 # check if this is openapi 3.0
46- convert_info = (
47- "you can convert it to an openapi 3.0 spec by going to https://editor.swagger.io/, "
48- + "pasting your spec and selecting 'Edit' -> 'Convert to OpenAPI 3.0' from the Menu "
49- + "and then retry with the converted file."
50- )
5146 swagger_version = self .spec_raw .get ("swagger" )
5247 if swagger_version :
53- logger .error (
54- "The spec you selected appears to be a Swagger/OpenAPI version 2 spec or older, " + convert_info
55- )
56- exit (0 )
48+ raise DltOpenAPINot30Exception (swagger_detected = True )
5749
5850 openapi_version = self .spec_raw .get ("openapi" )
5951 if not openapi_version or not openapi_version .startswith ("3" ):
60- logger .error (
61- "The spec you selected does not appear to be an OpenAPI 3.0 spec. "
62- + "If this is a a Swagger/OpenAPI version 2 spec or older, "
63- + convert_info
64- )
65- exit (1 )
52+ raise DltOpenAPINot30Exception (swagger_detected = False )
6653
6754 logger .info ("Extracting openapi metadata" )
6855 self .context = OpenapiContext (self .config , spec , self .spec_raw )
@@ -88,19 +75,21 @@ def parse(self, data: bytes) -> None:
8875
8976 def _load_yaml_or_json (self , data : bytes ) -> Dict [str , Any ]:
9077 logger .info ("Trying to parse spec as JSON" )
91-
92- data_size = sys .getsizeof (data )
93- if data_size > 1000000 :
94- mb = round (data_size / 1000000 )
95- logger .warning (f"Spec is around { mb } mb, so parsing might take a while." )
9678 try :
97- result = json .loads (data .decode ())
98- logger .success ("Parsed spec as JSON" )
79+ data_size = sys .getsizeof (data )
80+ if data_size > 1000000 :
81+ mb = round (data_size / 1000000 )
82+ logger .warning (f"Spec is around { mb } mb, so parsing might take a while." )
83+ try :
84+ result = json .loads (data .decode ())
85+ logger .success ("Parsed spec as JSON" )
86+ return result
87+ except ValueError :
88+ logger .info ("No valid JSON found" )
89+ pass
90+ logger .info ("Trying to parse spec as YAML" )
91+ result = yaml .load (data , Loader = BaseLoader )
92+ logger .success ("Parsed spec as YAML" )
9993 return result
100- except ValueError :
101- logger .info ("No valid JSON found" )
102- pass
103- logger .info ("Trying to parse spec as YAML" )
104- result = yaml .load (data , Loader = BaseLoader )
105- logger .success ("Parsed spec as YAML" )
106- return result
94+ except Exception as exc :
95+ raise DltUnparseableSpecException () from exc
0 commit comments