@darabonba/python-generator 1.2.18 → 2.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (138) hide show
  1. package/ChangeLog.md +0 -155
  2. package/lib/builtin.js +818 -0
  3. package/lib/generator.js +2704 -0
  4. package/lib/helper.js +422 -0
  5. package/package.json +6 -5
  6. package/src/lib/helper.js +11 -1
  7. package/src/resolver/base.js +3 -1
  8. package/src/resolver/client.js +7 -4
  9. package/src/resolver/model.js +5 -3
  10. package/tests/expected/alias/setup.py +79 -0
  11. package/tests/expected/alias/tea_python_tests/__init__.py +1 -0
  12. package/tests/expected/alias/tea_python_tests/client.py +35 -0
  13. package/tests/expected/annotation/tea_python_tests/__init__.py +1 -0
  14. package/tests/expected/annotation/tea_python_tests/client.py +93 -0
  15. package/tests/expected/annotation/tea_python_tests/models.py +37 -0
  16. package/tests/expected/api/tea_python_tests/__init__.py +1 -0
  17. package/tests/expected/api/tea_python_tests/client.py +106 -0
  18. package/tests/expected/builtin/tea_python_tests/client.py +685 -0
  19. package/tests/expected/comment/tea_python_tests/__init__.py +1 -0
  20. package/tests/expected/comment/tea_python_tests/client.py +288 -0
  21. package/tests/expected/comment/tea_python_tests/models.py +195 -0
  22. package/tests/expected/complex/tea_python_tests/__init__.py +1 -0
  23. package/tests/expected/complex/tea_python_tests/client.py +1168 -0
  24. package/tests/expected/complex/tea_python_tests/exceptions.py +39 -0
  25. package/tests/expected/complex/tea_python_tests/models.py +570 -0
  26. package/tests/expected/const/tea_python_tests/__init__.py +1 -0
  27. package/tests/expected/const/tea_python_tests/client.py +14 -0
  28. package/tests/expected/empty/setup.py +74 -0
  29. package/tests/expected/empty/tea_python_tests/__init__.py +1 -0
  30. package/tests/expected/empty/tea_python_tests/client.py +10 -0
  31. package/tests/expected/exec/tea_python_tests/__init__.py +1 -0
  32. package/tests/expected/exec/tea_python_tests/exec_client.py +21 -0
  33. package/tests/expected/function/tea_python_tests/__init__.py +1 -0
  34. package/tests/expected/function/tea_python_tests/client.py +64 -0
  35. package/tests/expected/import/setup.py +78 -0
  36. package/tests/expected/import/tea_python_tests/__init__.py +1 -0
  37. package/tests/expected/import/tea_python_tests/client.py +29 -0
  38. package/tests/expected/map/tea_python_tests/__init__.py +1 -0
  39. package/tests/expected/map/tea_python_tests/client.py +39 -0
  40. package/tests/expected/model/tea_python_tests/__init__.py +1 -0
  41. package/tests/expected/model/tea_python_tests/client.py +10 -0
  42. package/tests/expected/model/tea_python_tests/exceptions.py +28 -0
  43. package/tests/expected/model/tea_python_tests/models.py +780 -0
  44. package/tests/expected/multi/tea_python_tests/api.py +95 -0
  45. package/tests/expected/multi/tea_python_tests/client.py +40 -0
  46. package/tests/expected/multi/tea_python_tests/lib/util.py +19 -0
  47. package/tests/expected/multi/tea_python_tests/model/user.py +23 -0
  48. package/tests/expected/multi/tea_python_tests/model/user_exceptions.py +83 -0
  49. package/tests/expected/multi/tea_python_tests/model/user_models.py +145 -0
  50. package/tests/expected/python2/function/tea_python_tests/client.py +3 -1
  51. package/tests/expected/python2/model/tea_python_tests/models.py +57 -30
  52. package/tests/expected/python3/function/tea_python_tests/client.py +3 -1
  53. package/tests/expected/python3/model/tea_python_tests/models.py +57 -29
  54. package/tests/expected/statements/tea_python_tests/__init__.py +1 -0
  55. package/tests/expected/statements/tea_python_tests/client.py +86 -0
  56. package/tests/expected/super/tea_python_tests/__init__.py +1 -0
  57. package/tests/expected/super/tea_python_tests/client.py +16 -0
  58. package/tests/expected/typedef/setup.py +77 -0
  59. package/tests/expected/typedef/tea_python_tests/__init__.py +1 -0
  60. package/tests/expected/typedef/tea_python_tests/client.py +74 -0
  61. package/tests/expected/typedef/tea_python_tests/models.py +42 -0
  62. package/tests/fixtures/alias/Darafile +11 -0
  63. package/tests/fixtures/alias/libraries/Alias/Darafile +11 -0
  64. package/tests/fixtures/alias/libraries/Alias-Symbol/Darafile +11 -0
  65. package/tests/fixtures/builtin/Darafile +6 -0
  66. package/tests/fixtures/builtin/main.dara +333 -0
  67. package/tests/fixtures/complex/libraries/import.dara +18 -11
  68. package/tests/fixtures/complex/main.dara +451 -103
  69. package/tests/fixtures/function/main.dara +2 -0
  70. package/tests/fixtures/import/libraries/Darafile +1 -1
  71. package/tests/fixtures/import/pack/Darafile +3 -0
  72. package/tests/fixtures/map/libraries/Darafile +3 -0
  73. package/tests/fixtures/map/libraries/import.dara +4 -0
  74. package/tests/fixtures/map/main.dara +17 -2
  75. package/tests/fixtures/model/.libraries.json +3 -0
  76. package/tests/fixtures/model/Darafile +5 -2
  77. package/tests/fixtures/model/libraries/Darafile +20 -0
  78. package/tests/fixtures/model/libraries/import.dara +27 -0
  79. package/tests/fixtures/model/main.dara +57 -37
  80. package/tests/fixtures/multi/.libraries.json +3 -0
  81. package/tests/fixtures/multi/Darafile +12 -0
  82. package/tests/fixtures/multi/api.dara +20 -0
  83. package/tests/fixtures/multi/lib/util.dara +5 -0
  84. package/tests/fixtures/multi/libraries/darabonba_Util_0.2.11/Teafile +62 -0
  85. package/tests/fixtures/multi/libraries/darabonba_Util_0.2.11/main.tea +244 -0
  86. package/tests/fixtures/multi/main.dara +32 -0
  87. package/tests/fixtures/multi/model/user.dara +33 -0
  88. package/tests/{python3.tests.js → main.tests.js} +107 -65
  89. package/tests/output/alias/setup.py +79 -0
  90. package/tests/output/alias/tea_python_tests/client.py +35 -0
  91. package/tests/output/annotation/setup.py +77 -0
  92. package/tests/output/annotation/tea_python_tests/client.py +93 -0
  93. package/tests/output/annotation/tea_python_tests/models.py +37 -0
  94. package/tests/output/api/setup.py +77 -0
  95. package/tests/output/api/tea_python_tests/client.py +106 -0
  96. package/tests/output/builtin/setup.py +77 -0
  97. package/tests/output/builtin/tea_python_tests/client.py +685 -0
  98. package/tests/output/comment/setup.py +77 -0
  99. package/tests/output/comment/tea_python_tests/client.py +288 -0
  100. package/tests/output/comment/tea_python_tests/models.py +195 -0
  101. package/tests/output/complex/setup.py +77 -0
  102. package/tests/output/complex/tea_python_tests/client.py +1168 -0
  103. package/tests/output/complex/tea_python_tests/exceptions.py +39 -0
  104. package/tests/output/complex/tea_python_tests/models.py +570 -0
  105. package/tests/output/const/setup.py +77 -0
  106. package/tests/output/const/tea_python_tests/client.py +14 -0
  107. package/tests/output/empty/setup.py +77 -0
  108. package/tests/output/empty/tea_python_tests/client.py +10 -0
  109. package/tests/output/exec/setup.py +77 -0
  110. package/tests/output/exec/tea_python_tests/exec_client.py +21 -0
  111. package/tests/output/function/setup.py +77 -0
  112. package/tests/output/function/tea_python_tests/client.py +64 -0
  113. package/tests/output/import/setup.py +78 -0
  114. package/tests/output/import/tea_python_tests/client.py +29 -0
  115. package/tests/output/map/setup.py +77 -0
  116. package/tests/output/map/tea_python_tests/client.py +39 -0
  117. package/tests/output/model/setup.py +77 -0
  118. package/tests/output/model/tea_python_tests/client.py +10 -0
  119. package/tests/output/model/tea_python_tests/exceptions.py +28 -0
  120. package/tests/output/model/tea_python_tests/models.py +780 -0
  121. package/tests/output/multi/setup.py +77 -0
  122. package/tests/output/multi/tea_python_tests/api.py +95 -0
  123. package/tests/output/multi/tea_python_tests/client.py +40 -0
  124. package/tests/output/multi/tea_python_tests/lib/util.py +19 -0
  125. package/tests/output/multi/tea_python_tests/model/user.py +23 -0
  126. package/tests/output/multi/tea_python_tests/model/user_exceptions.py +83 -0
  127. package/tests/output/multi/tea_python_tests/model/user_models.py +145 -0
  128. package/tests/output/statements/setup.py +77 -0
  129. package/tests/output/statements/tea_python_tests/client.py +86 -0
  130. package/tests/output/super/setup.py +77 -0
  131. package/tests/output/super/tea_python_tests/client.py +16 -0
  132. package/tests/output/typedef/setup.py +78 -0
  133. package/tests/output/typedef/tea_python_tests/client.py +74 -0
  134. package/tests/output/typedef/tea_python_tests/models.py +42 -0
  135. package/tests/common.tests.js +0 -244
  136. package/tests/lib.tests.js +0 -269
  137. package/tests/python2.tests.js +0 -283
  138. package/tests/resolver.tests.js +0 -434
@@ -0,0 +1,95 @@
1
+ # -*- coding: utf-8 -*-
2
+ # This file is auto-generated, don't edit it. Thanks.
3
+ from __future__ import annotations
4
+ from darabonba.core import DaraCore
5
+ from darabonba.exceptions import UnretryableException
6
+ from darabonba.policy.retry import RetryPolicyContext
7
+ from darabonba.request import DaraRequest
8
+ from tea_python_tests.lib.util import Util
9
+
10
+
11
+
12
+
13
+ class Client:
14
+ def __init__(self):
15
+ pass
16
+
17
+ def test_3(self) -> int:
18
+ _runtime = {
19
+ 'timeouted': 'retry',
20
+ }
21
+ _last_request = None
22
+ _last_response = None
23
+ _retries_attempted = 0
24
+ _context = RetryPolicyContext(
25
+ retries_attempted= _retries_attempted
26
+ )
27
+ while DaraCore.should_retry(_runtime.get('retryOptions'), _context):
28
+ if _retries_attempted > 0:
29
+ _backoff_time = DaraCore.get_backoff_time(_runtime.get('retryOptions'), _context)
30
+ if _backoff_time > 0:
31
+ DaraCore.sleep(_backoff_time)
32
+ _retries_attempted = _retries_attempted + 1
33
+ try:
34
+ _request = DaraRequest()
35
+ _request.protocol = 'https'
36
+ _request.method = 'DELETE'
37
+ _request.pathname = '/'
38
+ _request.headers = {
39
+ 'host': 'test.aliyun.com',
40
+ 'accept': 'application/json'
41
+ }
42
+ _request.query = Util.get_query()
43
+ _last_request = _request
44
+ _response = DaraCore.do_action(_request, _runtime)
45
+ _last_response = _response
46
+ return _response.status_code
47
+ except Exception as e:
48
+ _context = RetryPolicyContext(
49
+ retries_attempted= _retries_attempted,
50
+ http_request = _last_request,
51
+ http_response = _last_response,
52
+ exception = e
53
+ )
54
+ continue
55
+ raise UnretryableException(_context)
56
+
57
+ async def test_3_async(self) -> int:
58
+ _runtime = {
59
+ 'timeouted': 'retry',
60
+ }
61
+ _last_request = None
62
+ _last_response = None
63
+ _retries_attempted = 0
64
+ _context = RetryPolicyContext(
65
+ retries_attempted= _retries_attempted
66
+ )
67
+ while DaraCore.should_retry(_runtime.get('retryOptions'), _context):
68
+ if _retries_attempted > 0:
69
+ _backoff_time = DaraCore.get_backoff_time(_runtime.get('retryOptions'), _context)
70
+ if _backoff_time > 0:
71
+ DaraCore.sleep(_backoff_time)
72
+ _retries_attempted = _retries_attempted + 1
73
+ try:
74
+ _request = DaraRequest()
75
+ _request.protocol = 'https'
76
+ _request.method = 'DELETE'
77
+ _request.pathname = '/'
78
+ _request.headers = {
79
+ 'host': 'test.aliyun.com',
80
+ 'accept': 'application/json'
81
+ }
82
+ _request.query = Util.get_query()
83
+ _last_request = _request
84
+ _response = await DaraCore.async_do_action(_request, _runtime)
85
+ _last_response = _response
86
+ return _response.status_code
87
+ except Exception as e:
88
+ _context = RetryPolicyContext(
89
+ retries_attempted= _retries_attempted,
90
+ http_request = _last_request,
91
+ http_response = _last_response,
92
+ exception = e
93
+ )
94
+ continue
95
+ raise UnretryableException(_context)
@@ -0,0 +1,40 @@
1
+ # -*- coding: utf-8 -*-
2
+ # This file is auto-generated, don't edit it. Thanks.
3
+ from __future__ import annotations
4
+ from tea_python_tests.model import user_models as user_models
5
+ from tea_python_tests.lib.util import Util
6
+ from tea_python_tests.api import Client as APIClient
7
+ from typing import Generator, AsyncGenerator
8
+
9
+
10
+
11
+
12
+ class Client:
13
+ _user: user_models.Info = None
14
+ def __init__(self):
15
+ self._user = user_models.Info(
16
+ name = 'test',
17
+ age = 124,
18
+ max_attemp = 3,
19
+ autoretry = True
20
+ )
21
+
22
+ def test_3(self) -> Generator[str, None, None]:
23
+ it = Util.test_1()
24
+ for test in it:
25
+ yield test
26
+
27
+ async def test_3_async(self) -> AsyncGenerator[str, None, None]:
28
+ it = Util.test_1()
29
+ for test in it:
30
+ yield test
31
+
32
+ def test_4(self) -> int:
33
+ api = APIClient()
34
+ status = api.test_3()
35
+ return status
36
+
37
+ async def test_4_async(self) -> int:
38
+ api = APIClient()
39
+ status = await api.test_3_async()
40
+ return status
@@ -0,0 +1,19 @@
1
+ # -*- coding: utf-8 -*-
2
+ # This file is auto-generated, don't edit it. Thanks.
3
+ from __future__ import annotations
4
+
5
+ from typing import Generator, Dict
6
+
7
+
8
+ class Util:
9
+
10
+ def __init__(self):
11
+ pass
12
+
13
+ @staticmethod
14
+ def test_1() -> Generator[str, None, None]:
15
+ raise Exception('Un-implemented')
16
+
17
+ @staticmethod
18
+ def get_query() -> Dict[str, str]:
19
+ raise Exception('Un-implemented')
@@ -0,0 +1,23 @@
1
+ # -*- coding: utf-8 -*-
2
+ # This file is auto-generated, don't edit it. Thanks.
3
+ from __future__ import annotations
4
+ from tea_python_tests.lib.util import Util
5
+ from typing import Generator, AsyncGenerator
6
+
7
+
8
+ class Client:
9
+
10
+ def __init__(self):
11
+ pass
12
+
13
+ @staticmethod
14
+ def test() -> Generator[str, None, None]:
15
+ it = Util.test_1()
16
+ for test in it:
17
+ yield test
18
+
19
+ @staticmethod
20
+ async def test_async() -> AsyncGenerator[str, None, None]:
21
+ it = Util.test_1()
22
+ for test in it:
23
+ yield test
@@ -0,0 +1,83 @@
1
+ # -*- coding: utf-8 -*-
2
+ # This file is auto-generated, don't edit it. Thanks.
3
+ from __future__ import annotations
4
+ from darabonba.exceptions import DaraException
5
+ import user_models
6
+
7
+
8
+ class ErrException(DaraException):
9
+ def __init__(
10
+ self,
11
+ message: str = None,
12
+ code: str = None,
13
+ stack: str = None,
14
+ msg: str = None,
15
+ ):
16
+ super().__init__({
17
+ 'message': message,
18
+ 'code': code,
19
+ 'stack': stack,
20
+ })
21
+ self.name = 'ErrException'
22
+ self.msg = msg
23
+
24
+ class Err1Exception(user_models.BaseInfo, DaraException):
25
+ def __init__(
26
+ self,
27
+ max_attemp: int = None,
28
+ autoretry: bool = None,
29
+ ignore_ssl: bool = None,
30
+ key: str = None,
31
+ cert: str = None,
32
+ ca: str = None,
33
+ max_attempts: int = None,
34
+ backoff_policy: str = None,
35
+ backoff_period: int = None,
36
+ read_timeout: int = None,
37
+ connect_timeout: int = None,
38
+ http_proxy: str = None,
39
+ https_proxy: str = None,
40
+ no_proxy: str = None,
41
+ max_idle_conns: int = None,
42
+ local_addr: str = None,
43
+ socks_5proxy: str = None,
44
+ socks_5net_work: str = None,
45
+ keep_alive: bool = None,
46
+ msg: str = None,
47
+ ):
48
+ super().__init__(
49
+ max_attemp = max_attemp,
50
+ autoretry = autoretry,
51
+ ignore_ssl = ignore_ssl,
52
+ key = key,
53
+ cert = cert,
54
+ ca = ca,
55
+ max_attempts = max_attempts,
56
+ backoff_policy = backoff_policy,
57
+ backoff_period = backoff_period,
58
+ read_timeout = read_timeout,
59
+ connect_timeout = connect_timeout,
60
+ http_proxy = http_proxy,
61
+ https_proxy = https_proxy,
62
+ no_proxy = no_proxy,
63
+ max_idle_conns = max_idle_conns,
64
+ local_addr = local_addr,
65
+ socks_5proxy = socks_5proxy,
66
+ socks_5net_work = socks_5net_work,
67
+ keep_alive = keep_alive,
68
+ )
69
+ self.name = 'Err1Exception'
70
+ self.msg = msg
71
+
72
+ class Err2Exception(ErrException):
73
+ def __init__(
74
+ self,
75
+ msg: str = None,
76
+ msg_2: str = None,
77
+ ):
78
+ super().__init__(
79
+ msg = msg,
80
+ )
81
+ self.name = 'Err2Exception'
82
+ self.msg_2 = msg_2
83
+
@@ -0,0 +1,145 @@
1
+ # -*- coding: utf-8 -*-
2
+ # This file is auto-generated, don't edit it. Thanks.
3
+ from __future__ import annotations
4
+ from alibabacloud_tea_util import models as darautil_models
5
+
6
+
7
+
8
+
9
+ class BaseInfo(darautil_models.RuntimeOptions):
10
+ def __init__(
11
+ self,
12
+ autoretry: bool = None,
13
+ ignore_ssl: bool = None,
14
+ key: str = None,
15
+ cert: str = None,
16
+ ca: str = None,
17
+ max_attempts: int = None,
18
+ backoff_policy: str = None,
19
+ backoff_period: int = None,
20
+ read_timeout: int = None,
21
+ connect_timeout: int = None,
22
+ http_proxy: str = None,
23
+ https_proxy: str = None,
24
+ no_proxy: str = None,
25
+ max_idle_conns: int = None,
26
+ local_addr: str = None,
27
+ socks_5proxy: str = None,
28
+ socks_5net_work: str = None,
29
+ keep_alive: bool = None,
30
+ max_attemp: int = None,
31
+ ):
32
+ super().__init__(
33
+ autoretry = autoretry,
34
+ ignore_ssl = ignore_ssl,
35
+ key = key,
36
+ cert = cert,
37
+ ca = ca,
38
+ max_attempts = max_attempts,
39
+ backoff_policy = backoff_policy,
40
+ backoff_period = backoff_period,
41
+ read_timeout = read_timeout,
42
+ connect_timeout = connect_timeout,
43
+ http_proxy = http_proxy,
44
+ https_proxy = https_proxy,
45
+ no_proxy = no_proxy,
46
+ max_idle_conns = max_idle_conns,
47
+ local_addr = local_addr,
48
+ socks_5proxy = socks_5proxy,
49
+ socks_5net_work = socks_5net_work,
50
+ keep_alive = keep_alive,
51
+ )
52
+ self.max_attemp = max_attemp
53
+
54
+ def validate(self):
55
+ self.validate_required(self.max_attemp, 'max_attemp')
56
+
57
+ def to_map(self):
58
+ _map = super().to_map()
59
+ if _map is not None:
60
+ return _map
61
+
62
+ result = dict()
63
+ if self.max_attemp is not None:
64
+ result['maxAttemp'] = self.max_attemp
65
+ return result
66
+
67
+ def from_map(self, m: dict = None):
68
+ m = m or dict()
69
+ if m.get('maxAttemp') is not None:
70
+ self.max_attemp = m.get('maxAttemp')
71
+ return self
72
+
73
+ class Info(BaseInfo):
74
+ def __init__(
75
+ self,
76
+ max_attemp: int = None,
77
+ autoretry: bool = None,
78
+ ignore_ssl: bool = None,
79
+ key: str = None,
80
+ cert: str = None,
81
+ ca: str = None,
82
+ max_attempts: int = None,
83
+ backoff_policy: str = None,
84
+ backoff_period: int = None,
85
+ read_timeout: int = None,
86
+ connect_timeout: int = None,
87
+ http_proxy: str = None,
88
+ https_proxy: str = None,
89
+ no_proxy: str = None,
90
+ max_idle_conns: int = None,
91
+ local_addr: str = None,
92
+ socks_5proxy: str = None,
93
+ socks_5net_work: str = None,
94
+ keep_alive: bool = None,
95
+ name: str = None,
96
+ age: int = None,
97
+ ):
98
+ super().__init__(
99
+ max_attemp = max_attemp,
100
+ autoretry = autoretry,
101
+ ignore_ssl = ignore_ssl,
102
+ key = key,
103
+ cert = cert,
104
+ ca = ca,
105
+ max_attempts = max_attempts,
106
+ backoff_policy = backoff_policy,
107
+ backoff_period = backoff_period,
108
+ read_timeout = read_timeout,
109
+ connect_timeout = connect_timeout,
110
+ http_proxy = http_proxy,
111
+ https_proxy = https_proxy,
112
+ no_proxy = no_proxy,
113
+ max_idle_conns = max_idle_conns,
114
+ local_addr = local_addr,
115
+ socks_5proxy = socks_5proxy,
116
+ socks_5net_work = socks_5net_work,
117
+ keep_alive = keep_alive,
118
+ )
119
+ self.name = name
120
+ self.age = age
121
+
122
+ def validate(self):
123
+ self.validate_required(self.name, 'name')
124
+ self.validate_required(self.age, 'age')
125
+
126
+ def to_map(self):
127
+ _map = super().to_map()
128
+ if _map is not None:
129
+ return _map
130
+
131
+ result = dict()
132
+ if self.name is not None:
133
+ result['name'] = self.name
134
+ if self.age is not None:
135
+ result['age'] = self.age
136
+ return result
137
+
138
+ def from_map(self, m: dict = None):
139
+ m = m or dict()
140
+ if m.get('name') is not None:
141
+ self.name = m.get('name')
142
+ if m.get('age') is not None:
143
+ self.age = m.get('age')
144
+ return self
145
+
@@ -18,7 +18,9 @@ class Client(object):
18
18
  m = {}
19
19
  return TeaCore.merge({
20
20
  'key': 'value',
21
- 'key-1': 'value-1'
21
+ 'key-1': 'value-1',
22
+ 'key-2': 'value-2',
23
+ '\"\"': 'value-3'
22
24
  }, m)
23
25
 
24
26
  @staticmethod
@@ -145,7 +145,8 @@ class MyModel(TeaModel):
145
145
  def __init__(self, stringfield=None, bytesfield=None, stringarrayfield=None, mapfield=None, name=None,
146
146
  submodel=None, subarray=None, maparray=None, object=None, numberfield=None, readable=None, exist_model=None,
147
147
  class_end_time=None, max_length=None, min_length=None, maximum=None, minimum=None, test_3=None,
148
- array_array_model=None, array_map_model=None, map_model=None, submodel_map=None, sub_model_model=None):
148
+ array_array_model=None, array_map_model=None, map_model=None, submodel_map=None, sub_model_model=None,
149
+ map_array_map=None, map_array_model=None):
149
150
  self.stringfield = stringfield # type: str
150
151
  self.bytesfield = bytesfield # type: bytes
151
152
  self.stringarrayfield = stringarrayfield # type: list[str]
@@ -175,6 +176,8 @@ class MyModel(TeaModel):
175
176
  self.map_model = map_model # type: dict[str, M]
176
177
  self.submodel_map = submodel_map # type: dict[str, MyModelSubmodel]
177
178
  self.sub_model_model = sub_model_model # type: MyModelSubModelModel
179
+ self.map_array_map = map_array_map # type: dict[str, list[dict[str, str]]]
180
+ self.map_array_model = map_array_model # type: dict[str, list[M]]
178
181
 
179
182
  def validate(self):
180
183
  self.validate_required(self.stringfield, 'stringfield')
@@ -226,6 +229,11 @@ class MyModel(TeaModel):
226
229
  self.validate_required(self.sub_model_model, 'sub_model_model')
227
230
  if self.sub_model_model:
228
231
  self.sub_model_model.validate()
232
+ if self.map_array_model:
233
+ for v in self.map_array_model.values():
234
+ for k1 in v:
235
+ if k1:
236
+ k1.validate()
229
237
 
230
238
  def to_map(self):
231
239
  _map = super(MyModel, self).to_map()
@@ -244,13 +252,13 @@ class MyModel(TeaModel):
244
252
  if self.name is not None:
245
253
  result['realName'] = self.name
246
254
  if self.submodel is not None:
247
- result['submodel'] = self.submodel.to_map()
248
- result['subarray'] = []
255
+ result['SubModel'] = self.submodel.to_map()
256
+ result['SubArray'] = []
249
257
  if self.subarray is not None:
250
258
  for k in self.subarray:
251
- result['subarray'].append(k.to_map() if k else None)
259
+ result['SubArray'].append(k.to_map() if k else None)
252
260
  if self.maparray is not None:
253
- result['maparray'] = self.maparray
261
+ result['MapArray'] = self.maparray
254
262
  if self.object is not None:
255
263
  result['object'] = self.object
256
264
  if self.numberfield is not None:
@@ -271,30 +279,39 @@ class MyModel(TeaModel):
271
279
  result['minimum'] = self.minimum
272
280
  if self.test_3 is not None:
273
281
  result['test3'] = self.test_3
274
- result['arrayArrayModel'] = []
282
+ result['ArrayArrayModel'] = []
275
283
  if self.array_array_model is not None:
276
284
  for k in self.array_array_model:
277
285
  l1 = []
278
286
  for k1 in k:
279
287
  l1.append(k1.to_map() if k1 else None)
280
- result['arrayArrayModel'].append(l1)
281
- result['arrayMapModel'] = []
288
+ result['ArrayArrayModel'].append(l1)
289
+ result['ArrayMapModel'] = []
282
290
  if self.array_map_model is not None:
283
291
  for k in self.array_map_model:
284
292
  d1 = {}
285
293
  for k1 ,v1 in k.items():
286
294
  d1[k1] = v1.to_map()
287
- result['arrayMapModel'].append(d1)
288
- result['mapModel'] = {}
295
+ result['ArrayMapModel'].append(d1)
296
+ result['MapModel'] = {}
289
297
  if self.map_model is not None:
290
298
  for k, v in self.map_model.items():
291
- result['mapModel'][k] = v.to_map()
292
- result['submodelMap'] = {}
299
+ result['MapModel'][k] = v.to_map()
300
+ result['SubmodelMap'] = {}
293
301
  if self.submodel_map is not None:
294
302
  for k, v in self.submodel_map.items():
295
- result['submodelMap'][k] = v.to_map()
303
+ result['SubmodelMap'][k] = v.to_map()
296
304
  if self.sub_model_model is not None:
297
- result['subModelModel'] = self.sub_model_model.to_map()
305
+ result['SubModelModel'] = self.sub_model_model.to_map()
306
+ if self.map_array_map is not None:
307
+ result['MapArrayMap'] = self.map_array_map
308
+ result['MapArrayModel'] = {}
309
+ if self.map_array_model is not None:
310
+ for k, v in self.map_array_model.items():
311
+ l1 = []
312
+ for k1 in v:
313
+ l1.append(k1.to_map() if k1 else None)
314
+ result['MapArrayModel'][k] = l1
298
315
  return result
299
316
 
300
317
  def from_map(self, m=None):
@@ -309,16 +326,16 @@ class MyModel(TeaModel):
309
326
  self.mapfield = m.get('mapfield')
310
327
  if m.get('realName') is not None:
311
328
  self.name = m.get('realName')
312
- if m.get('submodel') is not None:
329
+ if m.get('SubModel') is not None:
313
330
  temp_model = MyModelSubmodel()
314
- self.submodel = temp_model.from_map(m['submodel'])
331
+ self.submodel = temp_model.from_map(m['SubModel'])
315
332
  self.subarray = []
316
- if m.get('subarray') is not None:
317
- for k in m.get('subarray'):
333
+ if m.get('SubArray') is not None:
334
+ for k in m.get('SubArray'):
318
335
  temp_model = M()
319
336
  self.subarray.append(temp_model.from_map(k))
320
- if m.get('maparray') is not None:
321
- self.maparray = m.get('maparray')
337
+ if m.get('MapArray') is not None:
338
+ self.maparray = m.get('MapArray')
322
339
  if m.get('object') is not None:
323
340
  self.object = m.get('object')
324
341
  if m.get('numberfield') is not None:
@@ -341,34 +358,44 @@ class MyModel(TeaModel):
341
358
  if m.get('test3') is not None:
342
359
  self.test_3 = m.get('test3')
343
360
  self.array_array_model = []
344
- if m.get('arrayArrayModel') is not None:
345
- for k in m.get('arrayArrayModel'):
361
+ if m.get('ArrayArrayModel') is not None:
362
+ for k in m.get('ArrayArrayModel'):
346
363
  l1 = []
347
364
  for k1 in k:
348
365
  temp_model = M()
349
366
  l1.append(temp_model.from_map(k1))
350
367
  self.array_array_model.append(l1)
351
368
  self.array_map_model = []
352
- if m.get('arrayMapModel') is not None:
353
- for k in m.get('arrayMapModel'):
369
+ if m.get('ArrayMapModel') is not None:
370
+ for k in m.get('ArrayMapModel'):
354
371
  d1 = {}
355
372
  for k1 ,v1 in k.items():
356
373
  temp_model = M()
357
374
  d1[k1] = temp_model.from_map(v1)
358
375
  self.array_map_model.append(d1)
359
376
  self.map_model = {}
360
- if m.get('mapModel') is not None:
361
- for k, v in m.get('mapModel').items():
377
+ if m.get('MapModel') is not None:
378
+ for k, v in m.get('MapModel').items():
362
379
  temp_model = M()
363
380
  self.map_model[k] = temp_model.from_map(v)
364
381
  self.submodel_map = {}
365
- if m.get('submodelMap') is not None:
366
- for k, v in m.get('submodelMap').items():
382
+ if m.get('SubmodelMap') is not None:
383
+ for k, v in m.get('SubmodelMap').items():
367
384
  temp_model = MyModelSubmodel()
368
385
  self.submodel_map[k] = temp_model.from_map(v)
369
- if m.get('subModelModel') is not None:
386
+ if m.get('SubModelModel') is not None:
370
387
  temp_model = MyModelSubModelModel()
371
- self.sub_model_model = temp_model.from_map(m['subModelModel'])
388
+ self.sub_model_model = temp_model.from_map(m['SubModelModel'])
389
+ if m.get('MapArrayMap') is not None:
390
+ self.map_array_map = m.get('MapArrayMap')
391
+ self.map_array_model = {}
392
+ if m.get('MapArrayModel') is not None:
393
+ for k, v in m.get('MapArrayModel').items():
394
+ l1 = []
395
+ for k1 in v:
396
+ temp_model = M()
397
+ l1.append(temp_model.from_map(k1))
398
+ self.map_array_model['k'] = l1
372
399
  return self
373
400
 
374
401
 
@@ -17,7 +17,9 @@ class Client:
17
17
  m = {}
18
18
  return TeaCore.merge({
19
19
  'key': 'value',
20
- 'key-1': 'value-1'
20
+ 'key-1': 'value-1',
21
+ 'key-2': 'value-2',
22
+ '\"\"': 'value-3'
21
23
  }, m)
22
24
 
23
25
  @staticmethod