-
Notifications
You must be signed in to change notification settings - Fork 47
/
Copy pathresolver.py
48 lines (39 loc) · 1.61 KB
/
resolver.py
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
import logging
from rpdk.core.jsonutils.resolver import FORMAT_DEFAULT, UNDEFINED, ContainerType
LOG = logging.getLogger(__name__)
PRIMITIVE_TYPES = {
"string": {"default": "String"},
"integer": {"default": "Integer", "int32": "Integer", "int64": "Long"},
"boolean": {"default": "Boolean"},
"number": {"default": "Double"},
UNDEFINED: {"default": "Object"},
}
def translate_type(resolved_type):
if resolved_type.container == ContainerType.MODEL:
return resolved_type.type
if resolved_type.container == ContainerType.PRIMITIVE:
try:
primitive_format = PRIMITIVE_TYPES[resolved_type.type][
resolved_type.type_format
]
except KeyError:
primitive_format = PRIMITIVE_TYPES[resolved_type.type][FORMAT_DEFAULT]
LOG.error(
"Could not find specified format '%s' for type '%s'. "
"Defaulting to '%s'",
resolved_type.type_format,
resolved_type.type,
primitive_format,
)
return primitive_format
if resolved_type.container == ContainerType.MULTIPLE:
return "Object"
item_type = translate_type(resolved_type.type)
if resolved_type.container == ContainerType.DICT:
key_type = PRIMITIVE_TYPES["string"]["default"]
return f"Map<{key_type}, {item_type}>"
if resolved_type.container == ContainerType.LIST:
return f"List<{item_type}>"
if resolved_type.container == ContainerType.SET:
return f"Set<{item_type}>"
raise ValueError(f"Unknown container type {resolved_type.container}")