-
Notifications
You must be signed in to change notification settings - Fork 9
Expand file tree
/
Copy pathmetadata.py
More file actions
119 lines (87 loc) · 3.09 KB
/
metadata.py
File metadata and controls
119 lines (87 loc) · 3.09 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
"""Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT."""
from typing import Optional, Type, TypeVar, Union
from dataclasses import dataclass
from pydantic.fields import FieldInfo
T = TypeVar("T")
@dataclass
class SecurityMetadata:
option: bool = False
scheme: bool = False
scheme_type: Optional[str] = None
sub_type: Optional[str] = None
field_name: Optional[str] = None
composite: bool = False
def get_field_name(self, default: str) -> str:
return self.field_name or default
@dataclass
class ParamMetadata:
serialization: Optional[str] = None
style: str = "simple"
explode: bool = False
@dataclass
class PathParamMetadata(ParamMetadata):
pass
@dataclass
class QueryParamMetadata(ParamMetadata):
style: str = "form"
explode: bool = True
@dataclass
class HeaderMetadata(ParamMetadata):
pass
@dataclass
class RequestMetadata:
media_type: str = "application/octet-stream"
@dataclass
class MultipartFormMetadata:
file: bool = False
content: bool = False
json: bool = False
@dataclass
class FormMetadata:
json: bool = False
style: str = "form"
explode: bool = True
class FieldMetadata:
security: Optional[SecurityMetadata] = None
path: Optional[PathParamMetadata] = None
query: Optional[QueryParamMetadata] = None
header: Optional[HeaderMetadata] = None
request: Optional[RequestMetadata] = None
form: Optional[FormMetadata] = None
multipart: Optional[MultipartFormMetadata] = None
def __init__(
self,
security: Optional[SecurityMetadata] = None,
path: Optional[Union[PathParamMetadata, bool]] = None,
query: Optional[Union[QueryParamMetadata, bool]] = None,
header: Optional[Union[HeaderMetadata, bool]] = None,
request: Optional[Union[RequestMetadata, bool]] = None,
form: Optional[Union[FormMetadata, bool]] = None,
multipart: Optional[Union[MultipartFormMetadata, bool]] = None,
):
self.security = security
self.path = PathParamMetadata() if isinstance(path, bool) else path
self.query = QueryParamMetadata() if isinstance(query, bool) else query
self.header = HeaderMetadata() if isinstance(header, bool) else header
self.request = RequestMetadata() if isinstance(request, bool) else request
self.form = FormMetadata() if isinstance(form, bool) else form
self.multipart = (
MultipartFormMetadata() if isinstance(multipart, bool) else multipart
)
def find_field_metadata(field_info: FieldInfo, metadata_type: Type[T]) -> Optional[T]:
metadata = find_metadata(field_info, FieldMetadata)
if not metadata:
return None
fields = metadata.__dict__
for field in fields:
if isinstance(fields[field], metadata_type):
return fields[field]
return None
def find_metadata(field_info: FieldInfo, metadata_type: Type[T]) -> Optional[T]:
metadata = field_info.metadata
if not metadata:
return None
for md in metadata:
if isinstance(md, metadata_type):
return md
return None