robotframework-openapitools 1.0.0b3__py3-none-any.whl → 1.0.0b4__py3-none-any.whl

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 (31) hide show
  1. OpenApiDriver/openapi_executors.py +8 -8
  2. OpenApiDriver/openapi_reader.py +12 -13
  3. OpenApiDriver/openapidriver.libspec +4 -41
  4. OpenApiLibCore/__init__.py +0 -2
  5. OpenApiLibCore/annotations.py +8 -1
  6. OpenApiLibCore/data_generation/__init__.py +0 -2
  7. OpenApiLibCore/data_generation/body_data_generation.py +52 -71
  8. OpenApiLibCore/data_generation/data_generation_core.py +82 -62
  9. OpenApiLibCore/data_invalidation.py +37 -20
  10. OpenApiLibCore/dto_base.py +20 -86
  11. OpenApiLibCore/localized_faker.py +88 -0
  12. OpenApiLibCore/models.py +715 -0
  13. OpenApiLibCore/openapi_libcore.libspec +47 -283
  14. OpenApiLibCore/openapi_libcore.py +20 -46
  15. OpenApiLibCore/parameter_utils.py +23 -17
  16. OpenApiLibCore/path_functions.py +5 -4
  17. OpenApiLibCore/protocols.py +7 -5
  18. OpenApiLibCore/request_data.py +67 -102
  19. OpenApiLibCore/resource_relations.py +2 -3
  20. OpenApiLibCore/validation.py +49 -161
  21. OpenApiLibCore/value_utils.py +46 -358
  22. openapi_libgen/__init__.py +0 -46
  23. openapi_libgen/command_line.py +7 -19
  24. openapi_libgen/generator.py +84 -0
  25. openapi_libgen/spec_parser.py +40 -113
  26. {robotframework_openapitools-1.0.0b3.dist-info → robotframework_openapitools-1.0.0b4.dist-info}/METADATA +2 -1
  27. robotframework_openapitools-1.0.0b4.dist-info/RECORD +40 -0
  28. robotframework_openapitools-1.0.0b3.dist-info/RECORD +0 -37
  29. {robotframework_openapitools-1.0.0b3.dist-info → robotframework_openapitools-1.0.0b4.dist-info}/LICENSE +0 -0
  30. {robotframework_openapitools-1.0.0b3.dist-info → robotframework_openapitools-1.0.0b4.dist-info}/WHEEL +0 -0
  31. {robotframework_openapitools-1.0.0b3.dist-info → robotframework_openapitools-1.0.0b4.dist-info}/entry_points.txt +0 -0
@@ -1,13 +1,18 @@
1
- from dataclasses import dataclass
2
1
  from os import getenv
3
2
  from string import Template
4
- from typing import Any, Generator
3
+ from typing import Generator
5
4
 
6
5
  from robot.utils import is_truthy
7
6
 
8
7
  from openapi_libgen.parsing_utils import remove_unsafe_characters_from_string
8
+ from OpenApiLibCore.models import (
9
+ ObjectSchema,
10
+ OpenApiObject,
11
+ OperationObject,
12
+ PathItemObject,
13
+ SchemaObjectTypes,
14
+ )
9
15
  from OpenApiLibCore.parameter_utils import get_safe_name_for_oas_name
10
- from OpenApiLibCore.value_utils import python_type_by_json_type_name
11
16
 
12
17
  KEYWORD_TEMPLATE = r"""@keyword
13
18
  {signature}
@@ -36,78 +41,29 @@ class BodyTemplate(Template):
36
41
  BODY_TEMPLATE = BodyTemplate(BODY_TEMPLATE_)
37
42
 
38
43
 
39
- @dataclass
40
- class OperationDetails:
44
+ class OperationDetails(OperationObject):
41
45
  path: str
42
46
  method: str
43
- parameters: list[dict[str, Any]]
44
- request_body: dict[str, Any]
45
- summary: str
46
- description: str
47
- operation_id: str | None = (
48
- None # operationId MUST be unique within the spec, so no default ""
49
- )
50
47
 
51
48
 
52
- @dataclass
53
- class ParameterDetails:
54
- type: str
55
- name: str
56
- schema: dict[str, Any]
57
-
58
-
59
- @dataclass
60
- class BodyDetails:
61
- schema: dict[str, Any]
62
-
63
-
64
- def get_path_items(paths: dict[str, Any]) -> Generator[OperationDetails, None, None]:
65
- for path, operation_items in paths.items():
66
- for method, method_item in operation_items.items():
49
+ def get_path_items(
50
+ paths: dict[str, PathItemObject],
51
+ ) -> Generator[OperationDetails, None, None]:
52
+ for path, path_item_object in paths.items():
53
+ operations = path_item_object.get_operations()
54
+ for method, operation_object in operations.items():
67
55
  operation_details = OperationDetails(
68
56
  path=path,
69
57
  method=method,
70
- operation_id=method_item.get("operationId", None),
71
- parameters=method_item.get("parameters", []),
72
- request_body=method_item.get("requestBody", {}),
73
- summary=method_item.get("summary"),
74
- description=method_item.get("description"),
58
+ operationId=operation_object.operationId,
59
+ parameters=operation_object.parameters,
60
+ requestBody=operation_object.requestBody,
61
+ summary=operation_object.summary,
62
+ description=operation_object.description,
75
63
  )
76
64
  yield operation_details
77
65
 
78
66
 
79
- def get_parameter_details(
80
- operation_details: OperationDetails,
81
- ) -> list[ParameterDetails]:
82
- def _get_parameter_details(
83
- data: OperationDetails,
84
- ) -> Generator[ParameterDetails, None, None]:
85
- for param_data in data.parameters:
86
- name = param_data["name"]
87
- type = param_data["in"]
88
- if not (schema := param_data.get("schema", {})):
89
- content = param_data["content"]
90
- for _, media_data in content.items():
91
- schema = media_data["schema"]
92
-
93
- yield ParameterDetails(
94
- type=type,
95
- name=name,
96
- schema=schema,
97
- )
98
-
99
- return list(_get_parameter_details(data=operation_details))
100
-
101
-
102
- def get_body_details(operation_details: OperationDetails) -> BodyDetails | None:
103
- if not (body_data := operation_details.request_body):
104
- return None
105
- content = body_data["content"]
106
- if not (schema := content.get("application/json")):
107
- return None
108
- return BodyDetails(schema=schema["schema"])
109
-
110
-
111
67
  def get_keyword_signature(operation_details: OperationDetails) -> str:
112
68
  USE_SUMMARY_AS_KEYWORD_NAME = getenv("USE_SUMMARY_AS_KEYWORD_NAME")
113
69
  EXPAND_BODY_ARGUMENTS = getenv("EXPAND_BODY_ARGUMENTS")
@@ -116,21 +72,19 @@ def get_keyword_signature(operation_details: OperationDetails) -> str:
116
72
  keyword_name = remove_unsafe_characters_from_string(
117
73
  operation_details.summary
118
74
  ).lower()
119
- elif operation_details.operation_id:
75
+ elif operation_details.operationId:
120
76
  keyword_name = remove_unsafe_characters_from_string(
121
- operation_details.operation_id
77
+ operation_details.operationId
122
78
  ).lower()
123
79
  else:
124
80
  keyword_name = remove_unsafe_characters_from_string(
125
81
  f"{operation_details.method}_{operation_details.path}"
126
82
  )
127
83
 
128
- parameters = get_parameter_details(operation_details=operation_details)
129
- path_parameters = [p for p in parameters if p.type == "path"]
130
- query_parameters = [p for p in parameters if p.type == "query"]
131
- header_parameters = [p for p in parameters if p.type == "header"]
132
-
133
- body_details = get_body_details(operation_details=operation_details)
84
+ parameters = operation_details.parameters or []
85
+ path_parameters = [p for p in parameters if p.in_ == "path" and p.schema_]
86
+ query_parameters = [p for p in parameters if p.in_ == "query" and p.schema_]
87
+ header_parameters = [p for p in parameters if p.in_ == "header" and p.schema_]
134
88
 
135
89
  argument_parts: list[str] = []
136
90
  # Keep track of the already used argument names. From the OAS:
@@ -139,34 +93,21 @@ def get_keyword_signature(operation_details: OperationDetails) -> str:
139
93
  keyword_argument_names: set[str] = set()
140
94
 
141
95
  for parameter in path_parameters:
142
- if "anyOf" in parameter.schema:
143
- parameter_python_type = "Any"
144
- else:
145
- parameter_json_type = parameter.schema["type"]
146
- parameter_python_type = python_type_by_json_type_name(
147
- parameter_json_type
148
- ).__name__
149
- annotation = f"{parameter_python_type} = UNSET"
96
+ annotation = f"{parameter.schema_.annotation_string} = UNSET"
150
97
  safe_name = get_safe_name_for_oas_name(parameter.name)
151
98
  keyword_argument_names.add(safe_name)
152
99
  argument = f", {safe_name}: {annotation}"
153
100
  argument_parts.append(argument)
154
101
  arguments = "".join(argument_parts)
155
102
 
156
- if body_details:
157
- body_json_type = body_details.schema["type"]
158
- body_python_type = python_type_by_json_type_name(body_json_type).__name__
159
- if body_python_type == "dict" and is_truthy(EXPAND_BODY_ARGUMENTS):
160
- body_properties = body_details.schema["properties"]
161
- for property_name, property_data in body_properties.items():
162
- if "anyOf" in property_data:
163
- property_python_type = "Any"
164
- else:
165
- property_json_type = property_data["type"]
166
- property_python_type = python_type_by_json_type_name(
167
- property_json_type
168
- ).__name__
169
- annotation = f"{property_python_type} = UNSET"
103
+ if operation_details.requestBody and operation_details.requestBody.schema_:
104
+ schema = operation_details.requestBody.schema_
105
+ if isinstance(schema, ObjectSchema) and is_truthy(EXPAND_BODY_ARGUMENTS):
106
+ body_properties: dict[str, SchemaObjectTypes] = getattr(
107
+ schema.properties, "root", {}
108
+ )
109
+ for property_name, property_schema in body_properties.items():
110
+ annotation = f"{property_schema.annotation_string} = UNSET"
170
111
  safe_name = get_safe_name_for_oas_name(property_name)
171
112
  if safe_name in keyword_argument_names:
172
113
  safe_name = "body_" + safe_name
@@ -174,19 +115,12 @@ def get_keyword_signature(operation_details: OperationDetails) -> str:
174
115
  argument = f", {safe_name}: {annotation}"
175
116
  arguments += argument
176
117
  else:
177
- annotation = f"{body_python_type} = UNSET"
118
+ annotation = f"{schema.annotation_string} = UNSET"
178
119
  argument = f", body: {annotation}"
179
120
  arguments += argument
180
121
 
181
122
  for parameter in query_parameters:
182
- if "anyOf" in parameter.schema:
183
- parameter_python_type = "Any"
184
- else:
185
- parameter_json_type = parameter.schema["type"]
186
- parameter_python_type = python_type_by_json_type_name(
187
- parameter_json_type
188
- ).__name__
189
- annotation = f"{parameter_python_type} = UNSET"
123
+ annotation = f"{parameter.schema_.annotation_string} = UNSET"
190
124
  safe_name = get_safe_name_for_oas_name(parameter.name)
191
125
  if safe_name in keyword_argument_names:
192
126
  safe_name = "query_" + safe_name
@@ -195,14 +129,7 @@ def get_keyword_signature(operation_details: OperationDetails) -> str:
195
129
  arguments += argument
196
130
 
197
131
  for parameter in header_parameters:
198
- if "anyOf" in parameter.schema:
199
- parameter_python_type = "Any"
200
- else:
201
- parameter_json_type = parameter.schema["type"]
202
- parameter_python_type = python_type_by_json_type_name(
203
- parameter_json_type
204
- ).__name__
205
- annotation = f"{parameter_python_type} = UNSET"
132
+ annotation = f"{parameter.schema_.annotation_string} = UNSET"
206
133
  safe_name = get_safe_name_for_oas_name(parameter.name)
207
134
  if safe_name in keyword_argument_names:
208
135
  safe_name = "header_" + safe_name
@@ -220,8 +147,8 @@ def get_keyword_body(data: OperationDetails) -> str:
220
147
  return BODY_TEMPLATE.safe_substitute(path_value=data.path, method_value=data.method)
221
148
 
222
149
 
223
- def get_keyword_data(openapi_spec: dict[str, Any]) -> Generator[str, None, None]:
224
- for path_item in get_path_items(openapi_spec["paths"]):
150
+ def get_keyword_data(openapi_object: OpenApiObject) -> Generator[str, None, None]:
151
+ for path_item in get_path_items(openapi_object.paths):
225
152
  signature = get_keyword_signature(path_item)
226
153
  body = get_keyword_body(path_item)
227
154
  yield KEYWORD_TEMPLATE.format(signature=signature, body=body)
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.3
2
2
  Name: robotframework-openapitools
3
- Version: 1.0.0b3
3
+ Version: 1.0.0b4
4
4
  Summary: A set of Robot Framework libraries to test APIs for which the OAS is available.
5
5
  License: Apache License
6
6
  Version 2.0, January 2004
@@ -220,6 +220,7 @@ Requires-Dist: Jinja2 (>=3.1.2)
220
220
  Requires-Dist: black (>=24.1.0)
221
221
  Requires-Dist: openapi-core (>=0.19.0)
222
222
  Requires-Dist: prance[cli] (>=23)
223
+ Requires-Dist: pydantic (>=2.11.0)
223
224
  Requires-Dist: requests (>=2.31.0)
224
225
  Requires-Dist: rich_click (>=1.7.0)
225
226
  Requires-Dist: robotframework (>=6.0.0,!=7.0.0)
@@ -0,0 +1,40 @@
1
+ OpenApiDriver/__init__.py,sha256=YjHr-j8g9KwRriNCw_ABvCEbUEp118J70xeJ_t7qcas,1453
2
+ OpenApiDriver/openapi_executors.py,sha256=4rBaRiVquPkWgTFMSeKbDqWi6ZlYOwcHDkNwotb9TPc,12536
3
+ OpenApiDriver/openapi_reader.py,sha256=1M3nFRRLgD3Vepiru_jqYgVrnkRznFpR7lzdUKetxYw,4340
4
+ OpenApiDriver/openapidriver.libspec,sha256=fxh2m7HAO_xK-TyEWlgbm8SeFC-iKcJD4vbHM-uCHvM,26481
5
+ OpenApiDriver/openapidriver.py,sha256=vypR00YZS3ygGfFxdUedLdCm_f_bWDLMpD1vb49-O0A,15321
6
+ OpenApiDriver/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
7
+ OpenApiLibCore/__init__.py,sha256=CGfgD0W2GcRDc5Q-tDpWk4IDpUmdCSZVPZ18a_KN-co,1733
8
+ OpenApiLibCore/annotations.py,sha256=YmvWKTbhyxRk2aWFra3v-3p30e96TFJ-CV9f3X90rPs,238
9
+ OpenApiLibCore/data_generation/__init__.py,sha256=NJViPQGHkczF2gxfS0wE2vE3wCRU9ixDEwHPMZApu6A,206
10
+ OpenApiLibCore/data_generation/body_data_generation.py,sha256=s7lBsh3Tr9lMKfgDYhY2ROTKVIpVGHDUgNh-65U5i-4,8266
11
+ OpenApiLibCore/data_generation/data_generation_core.py,sha256=UKtKnD7nnOZhiZOIHTZh5Fg5xMMW3M10ofgmGjiRhtI,9004
12
+ OpenApiLibCore/data_invalidation.py,sha256=UjNUWXASk7AqqDkGx-3mU7SFb46pjP-A5Q5u1xXksrA,11293
13
+ OpenApiLibCore/dto_base.py,sha256=CF7a8XPcRjWnHuRap_dV8Pcw3f18vxzEHQ5bhO0-FiE,9108
14
+ OpenApiLibCore/dto_utils.py,sha256=5dvMYM2Nt9gXq6GGTGJjU5Z75x9p9ky-1V01aLTZgX8,3177
15
+ OpenApiLibCore/localized_faker.py,sha256=-Z3ry6V7xIkmAlUq70a1L_OspAPZTDFt4RFo3zj4Llo,2205
16
+ OpenApiLibCore/models.py,sha256=dHpduBUtbLkxJHsVF5kgt-qCku6Lq1TijD-8-U5By2Q,22423
17
+ OpenApiLibCore/oas_cache.py,sha256=Z2v0mn6JwKchbUKojYVt9sXi8Mc4LoENtN_ekTUtzfI,387
18
+ OpenApiLibCore/openapi_libcore.libspec,sha256=VX97Z7bPQLdt7uuhskGgUGoZc1klE7m63i5mrWtUPVM,44119
19
+ OpenApiLibCore/openapi_libcore.py,sha256=xyHVShyEvSmBNMVlyK1N8TOT4QReTfvZ3vF7HrsB-Gw,35432
20
+ OpenApiLibCore/parameter_utils.py,sha256=SifTQu-VyPw5jvAbzHdPBHX04PeF2Y5HEp-UNBk_9Ho,3530
21
+ OpenApiLibCore/path_functions.py,sha256=JYsJT76DdQtlGLqMwzYKj_EkSkNkRrVcXN3JfTe0CDg,8097
22
+ OpenApiLibCore/path_invalidation.py,sha256=2iYjkskMV-7lWu_id_LbVIiumffMWZicqoIKeewqpFA,1539
23
+ OpenApiLibCore/protocols.py,sha256=lzUJ2meBvqUoJrqBa3mS-63SaPeNelQngkMvW_BgzG4,877
24
+ OpenApiLibCore/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
25
+ OpenApiLibCore/request_data.py,sha256=KK-pPyfZUJGh9uPNUrvYb-DxumPGH9vcqJ_bdKJnmYw,8887
26
+ OpenApiLibCore/resource_relations.py,sha256=m2MDNIqhyCgnJCJ9nTLG4P_T7RflkCVyUM9V82VxKI0,1733
27
+ OpenApiLibCore/validation.py,sha256=q5qeAVKKmLkCMCPRt7-SG0IXSCk3F_USy-7kPQ5tjOQ,15235
28
+ OpenApiLibCore/value_utils.py,sha256=_x7bjrSyozIqzlnoo9KjguM322q-pDob5EOMpDpH7do,7519
29
+ openapi_libgen/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
30
+ openapi_libgen/command_line.py,sha256=rWByjZDPYYra6WOsINL2zj5Ny3YSIXiTrhRjSBA4FRE,2380
31
+ openapi_libgen/generator.py,sha256=kK5SxhTJ4uFBoKegXuYwlE-qMMKEccC4T3_BHYZ3yBg,2727
32
+ openapi_libgen/parsing_utils.py,sha256=d_N-v619SR6iyolz65IGN12H5wMUA8dzPuG1l7rv5gg,821
33
+ openapi_libgen/spec_parser.py,sha256=6yZTJOdzXZ-ew__0dpm6XOAmBSfC3e91URI333ujIAg,6322
34
+ openapi_libgen/templates/__init__.jinja,sha256=92OFwNzeO7lEiUBv04GfjKXA1088V7GbeneASBShbmc,102
35
+ openapi_libgen/templates/library.jinja,sha256=tIwJuGerOUJmMt928P_38MMfcnSHZqcPDPEJ56R6wT0,952
36
+ robotframework_openapitools-1.0.0b4.dist-info/LICENSE,sha256=HrhfyXIkWY2tGFK11kg7vPCqhgh5DcxleloqdhrpyMY,11558
37
+ robotframework_openapitools-1.0.0b4.dist-info/METADATA,sha256=Zy0USPxvhvKpVnVSBeR0-bAc3560wWZ2tFAB69Rap7c,19102
38
+ robotframework_openapitools-1.0.0b4.dist-info/WHEEL,sha256=XbeZDeTWKc1w7CSIyre5aMDU_-PohRwTQceYnisIYYY,88
39
+ robotframework_openapitools-1.0.0b4.dist-info/entry_points.txt,sha256=_yd5PITEJf85hIEsrRkkWxXePf_O9YOOUjON3TYLy0c,69
40
+ robotframework_openapitools-1.0.0b4.dist-info/RECORD,,
@@ -1,37 +0,0 @@
1
- OpenApiDriver/__init__.py,sha256=YjHr-j8g9KwRriNCw_ABvCEbUEp118J70xeJ_t7qcas,1453
2
- OpenApiDriver/openapi_executors.py,sha256=NsHhcP6CM3DsQgxqOcKhpAAOM0zjhMmCsrEygIxJleY,12534
3
- OpenApiDriver/openapi_reader.py,sha256=BPD_T8PUjfB-NBajogErI2ATmzlUGFJT8Nx5WpM5N5Y,4478
4
- OpenApiDriver/openapidriver.libspec,sha256=O5gfWifWEvOmZ8sJoEdGcsP6Wak2zHYdEVB1TPIub6Y,28220
5
- OpenApiDriver/openapidriver.py,sha256=vypR00YZS3ygGfFxdUedLdCm_f_bWDLMpD1vb49-O0A,15321
6
- OpenApiDriver/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
7
- OpenApiLibCore/__init__.py,sha256=R6n4FTEz0IGD_LehKkOFSQrlt9Bk4Ugl3OicsZ_h84I,1775
8
- OpenApiLibCore/annotations.py,sha256=zfWwItXzECBezyQKoom9BLfrRFlU1u4jOF7NEgEAuQQ,135
9
- OpenApiLibCore/data_generation/__init__.py,sha256=KYBoMeFsa4fzb6E-BsQBykCGwt54NvXthXiy9VNwQBc,303
10
- OpenApiLibCore/data_generation/body_data_generation.py,sha256=c887DfNMghHFyu3omUDxA0SkaQtMaNiWYNM3YREbbEQ,8903
11
- OpenApiLibCore/data_generation/data_generation_core.py,sha256=N6hgyc2WHnPfIRwqdUwmT9XSGM2P-l88K2kblk0VCeA,8413
12
- OpenApiLibCore/data_invalidation.py,sha256=HSzbeJnzxrlS2NlPfXnCRXvGzGzXvBwiaJ3WXxrZOSw,10503
13
- OpenApiLibCore/dto_base.py,sha256=m41QZyL6ChIcC3DcBCpDFkok5wpCZ6K9gjmADyMGOWc,12132
14
- OpenApiLibCore/dto_utils.py,sha256=5dvMYM2Nt9gXq6GGTGJjU5Z75x9p9ky-1V01aLTZgX8,3177
15
- OpenApiLibCore/oas_cache.py,sha256=Z2v0mn6JwKchbUKojYVt9sXi8Mc4LoENtN_ekTUtzfI,387
16
- OpenApiLibCore/openapi_libcore.libspec,sha256=5NrzbwAsk-qUs504hu0DLjtvDhYJfgpvWiqjSPksGZg,53175
17
- OpenApiLibCore/openapi_libcore.py,sha256=30FtvsNHkfWZhz55bJq8bnWiHKvX6dEbGyLhbdNAtqY,36257
18
- OpenApiLibCore/parameter_utils.py,sha256=_P2GRc_teIixTgPsRgCxY2Bj6nsZq41GoSOhVgfXE0Y,3251
19
- OpenApiLibCore/path_functions.py,sha256=757f655yLg5HzvXxlOIQ76i48gK91Ct7KM-D9OAEA3A,8055
20
- OpenApiLibCore/path_invalidation.py,sha256=2iYjkskMV-7lWu_id_LbVIiumffMWZicqoIKeewqpFA,1539
21
- OpenApiLibCore/protocols.py,sha256=N9HxH9SqNuzWTyOGQuyEGfyorHZyYkehlBsyPse5jtQ,763
22
- OpenApiLibCore/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
23
- OpenApiLibCore/request_data.py,sha256=jm6HnTG4xvQfSeYPMIMzowlSi7cuU3XqDGTQ6FdKnUY,10644
24
- OpenApiLibCore/resource_relations.py,sha256=Qp5TBNSArLaDfAqcjC5xiHwlB1h4hgAFIfuJnBg5Yxw,1710
25
- OpenApiLibCore/validation.py,sha256=uVPgg3k5X1ww4u4-glqC2szSL1qsvqgnCUoqUMjpnek,20067
26
- OpenApiLibCore/value_utils.py,sha256=M4k5m0YW1B20-6KD0f9-5xMERWKG8ncu2-5ahC2_VzU,19208
27
- openapi_libgen/__init__.py,sha256=9ZfgPSI8AUAcJ59hBRZE1VImhMVRyt6G_w1nYIPORgQ,1543
28
- openapi_libgen/command_line.py,sha256=GppzNAAMomd0Dl5c5HGK8chDQw-kaIztD0hqQ2iUEXE,2783
29
- openapi_libgen/parsing_utils.py,sha256=d_N-v619SR6iyolz65IGN12H5wMUA8dzPuG1l7rv5gg,821
30
- openapi_libgen/spec_parser.py,sha256=2swZDlr8pHkNHCaLZMkl9fZbi9GWDFfnstPbLB12jTU,8792
31
- openapi_libgen/templates/__init__.jinja,sha256=92OFwNzeO7lEiUBv04GfjKXA1088V7GbeneASBShbmc,102
32
- openapi_libgen/templates/library.jinja,sha256=tIwJuGerOUJmMt928P_38MMfcnSHZqcPDPEJ56R6wT0,952
33
- robotframework_openapitools-1.0.0b3.dist-info/LICENSE,sha256=HrhfyXIkWY2tGFK11kg7vPCqhgh5DcxleloqdhrpyMY,11558
34
- robotframework_openapitools-1.0.0b3.dist-info/METADATA,sha256=d99DolkNRk-sYtseHrh82lY2MJHZW6wLpJvZTpMfsUk,19067
35
- robotframework_openapitools-1.0.0b3.dist-info/WHEEL,sha256=XbeZDeTWKc1w7CSIyre5aMDU_-PohRwTQceYnisIYYY,88
36
- robotframework_openapitools-1.0.0b3.dist-info/entry_points.txt,sha256=_yd5PITEJf85hIEsrRkkWxXePf_O9YOOUjON3TYLy0c,69
37
- robotframework_openapitools-1.0.0b3.dist-info/RECORD,,