5
5
from typing import TYPE_CHECKING , Any , Callable , cast
6
6
7
7
from django .conf import settings
8
- from django .core .exceptions import ImproperlyConfigured
8
+ from django .core .exceptions import ImproperlyConfigured , ValidationError
9
+ from django .core .validators import URLValidator
9
10
10
11
from openapi_tester .constants import (
11
12
INIT_ERROR ,
18
19
VALIDATE_WRITE_ONLY_RESPONSE_KEY_ERROR ,
19
20
)
20
21
from openapi_tester .exceptions import DocumentationError , OpenAPISchemaError , UndocumentedSchemaSectionError
21
- from openapi_tester .loaders import DrfSpectacularSchemaLoader , DrfYasgSchemaLoader , StaticSchemaLoader
22
+ from openapi_tester .loaders import (
23
+ DrfSpectacularSchemaLoader ,
24
+ DrfYasgSchemaLoader ,
25
+ StaticSchemaLoader ,
26
+ UrlStaticSchemaLoader ,
27
+ )
22
28
from openapi_tester .utils import lazy_combinations , normalize_schema_section
23
29
from openapi_tester .validators import (
24
30
validate_enum ,
46
52
class SchemaTester :
47
53
"""Schema Tester: this is the base class of the library."""
48
54
49
- loader : StaticSchemaLoader | DrfSpectacularSchemaLoader | DrfYasgSchemaLoader
55
+ loader : StaticSchemaLoader | DrfSpectacularSchemaLoader | DrfYasgSchemaLoader | UrlStaticSchemaLoader
50
56
validators : list [Callable [[dict , Any ], str | None ]]
51
57
52
58
def __init__ (
@@ -70,7 +76,11 @@ def __init__(
70
76
self .validators = validators or []
71
77
72
78
if schema_file_path is not None :
73
- self .loader = StaticSchemaLoader (schema_file_path , field_key_map = field_key_map )
79
+ try :
80
+ URLValidator ()(schema_file_path )
81
+ self .loader = UrlStaticSchemaLoader (schema_file_path , field_key_map = field_key_map )
82
+ except ValidationError :
83
+ self .loader = StaticSchemaLoader (schema_file_path , field_key_map = field_key_map )
74
84
elif "drf_spectacular" in settings .INSTALLED_APPS :
75
85
self .loader = DrfSpectacularSchemaLoader (field_key_map = field_key_map )
76
86
elif "drf_yasg" in settings .INSTALLED_APPS :
0 commit comments