schemathesis 3.15.4__py3-none-any.whl → 4.4.2__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 (251) hide show
  1. schemathesis/__init__.py +53 -25
  2. schemathesis/auths.py +507 -0
  3. schemathesis/checks.py +190 -25
  4. schemathesis/cli/__init__.py +27 -1219
  5. schemathesis/cli/__main__.py +4 -0
  6. schemathesis/cli/commands/__init__.py +133 -0
  7. schemathesis/cli/commands/data.py +10 -0
  8. schemathesis/cli/commands/run/__init__.py +602 -0
  9. schemathesis/cli/commands/run/context.py +228 -0
  10. schemathesis/cli/commands/run/events.py +60 -0
  11. schemathesis/cli/commands/run/executor.py +157 -0
  12. schemathesis/cli/commands/run/filters.py +53 -0
  13. schemathesis/cli/commands/run/handlers/__init__.py +46 -0
  14. schemathesis/cli/commands/run/handlers/base.py +45 -0
  15. schemathesis/cli/commands/run/handlers/cassettes.py +464 -0
  16. schemathesis/cli/commands/run/handlers/junitxml.py +60 -0
  17. schemathesis/cli/commands/run/handlers/output.py +1750 -0
  18. schemathesis/cli/commands/run/loaders.py +118 -0
  19. schemathesis/cli/commands/run/validation.py +256 -0
  20. schemathesis/cli/constants.py +5 -0
  21. schemathesis/cli/core.py +19 -0
  22. schemathesis/cli/ext/fs.py +16 -0
  23. schemathesis/cli/ext/groups.py +203 -0
  24. schemathesis/cli/ext/options.py +81 -0
  25. schemathesis/config/__init__.py +202 -0
  26. schemathesis/config/_auth.py +51 -0
  27. schemathesis/config/_checks.py +268 -0
  28. schemathesis/config/_diff_base.py +101 -0
  29. schemathesis/config/_env.py +21 -0
  30. schemathesis/config/_error.py +163 -0
  31. schemathesis/config/_generation.py +157 -0
  32. schemathesis/config/_health_check.py +24 -0
  33. schemathesis/config/_operations.py +335 -0
  34. schemathesis/config/_output.py +171 -0
  35. schemathesis/config/_parameters.py +19 -0
  36. schemathesis/config/_phases.py +253 -0
  37. schemathesis/config/_projects.py +543 -0
  38. schemathesis/config/_rate_limit.py +17 -0
  39. schemathesis/config/_report.py +120 -0
  40. schemathesis/config/_validator.py +9 -0
  41. schemathesis/config/_warnings.py +89 -0
  42. schemathesis/config/schema.json +975 -0
  43. schemathesis/core/__init__.py +72 -0
  44. schemathesis/core/adapter.py +34 -0
  45. schemathesis/core/compat.py +32 -0
  46. schemathesis/core/control.py +2 -0
  47. schemathesis/core/curl.py +100 -0
  48. schemathesis/core/deserialization.py +210 -0
  49. schemathesis/core/errors.py +588 -0
  50. schemathesis/core/failures.py +316 -0
  51. schemathesis/core/fs.py +19 -0
  52. schemathesis/core/hooks.py +20 -0
  53. schemathesis/core/jsonschema/__init__.py +13 -0
  54. schemathesis/core/jsonschema/bundler.py +183 -0
  55. schemathesis/core/jsonschema/keywords.py +40 -0
  56. schemathesis/core/jsonschema/references.py +222 -0
  57. schemathesis/core/jsonschema/types.py +41 -0
  58. schemathesis/core/lazy_import.py +15 -0
  59. schemathesis/core/loaders.py +107 -0
  60. schemathesis/core/marks.py +66 -0
  61. schemathesis/core/media_types.py +79 -0
  62. schemathesis/core/output/__init__.py +46 -0
  63. schemathesis/core/output/sanitization.py +54 -0
  64. schemathesis/core/parameters.py +45 -0
  65. schemathesis/core/rate_limit.py +60 -0
  66. schemathesis/core/registries.py +34 -0
  67. schemathesis/core/result.py +27 -0
  68. schemathesis/core/schema_analysis.py +17 -0
  69. schemathesis/core/shell.py +203 -0
  70. schemathesis/core/transforms.py +144 -0
  71. schemathesis/core/transport.py +223 -0
  72. schemathesis/core/validation.py +73 -0
  73. schemathesis/core/version.py +7 -0
  74. schemathesis/engine/__init__.py +28 -0
  75. schemathesis/engine/context.py +152 -0
  76. schemathesis/engine/control.py +44 -0
  77. schemathesis/engine/core.py +201 -0
  78. schemathesis/engine/errors.py +446 -0
  79. schemathesis/engine/events.py +284 -0
  80. schemathesis/engine/observations.py +42 -0
  81. schemathesis/engine/phases/__init__.py +108 -0
  82. schemathesis/engine/phases/analysis.py +28 -0
  83. schemathesis/engine/phases/probes.py +172 -0
  84. schemathesis/engine/phases/stateful/__init__.py +68 -0
  85. schemathesis/engine/phases/stateful/_executor.py +364 -0
  86. schemathesis/engine/phases/stateful/context.py +85 -0
  87. schemathesis/engine/phases/unit/__init__.py +220 -0
  88. schemathesis/engine/phases/unit/_executor.py +459 -0
  89. schemathesis/engine/phases/unit/_pool.py +82 -0
  90. schemathesis/engine/recorder.py +254 -0
  91. schemathesis/errors.py +47 -0
  92. schemathesis/filters.py +395 -0
  93. schemathesis/generation/__init__.py +25 -0
  94. schemathesis/generation/case.py +478 -0
  95. schemathesis/generation/coverage.py +1528 -0
  96. schemathesis/generation/hypothesis/__init__.py +121 -0
  97. schemathesis/generation/hypothesis/builder.py +992 -0
  98. schemathesis/generation/hypothesis/examples.py +56 -0
  99. schemathesis/generation/hypothesis/given.py +66 -0
  100. schemathesis/generation/hypothesis/reporting.py +285 -0
  101. schemathesis/generation/meta.py +227 -0
  102. schemathesis/generation/metrics.py +93 -0
  103. schemathesis/generation/modes.py +20 -0
  104. schemathesis/generation/overrides.py +127 -0
  105. schemathesis/generation/stateful/__init__.py +37 -0
  106. schemathesis/generation/stateful/state_machine.py +294 -0
  107. schemathesis/graphql/__init__.py +15 -0
  108. schemathesis/graphql/checks.py +109 -0
  109. schemathesis/graphql/loaders.py +285 -0
  110. schemathesis/hooks.py +270 -91
  111. schemathesis/openapi/__init__.py +13 -0
  112. schemathesis/openapi/checks.py +467 -0
  113. schemathesis/openapi/generation/__init__.py +0 -0
  114. schemathesis/openapi/generation/filters.py +72 -0
  115. schemathesis/openapi/loaders.py +315 -0
  116. schemathesis/pytest/__init__.py +5 -0
  117. schemathesis/pytest/control_flow.py +7 -0
  118. schemathesis/pytest/lazy.py +341 -0
  119. schemathesis/pytest/loaders.py +36 -0
  120. schemathesis/pytest/plugin.py +357 -0
  121. schemathesis/python/__init__.py +0 -0
  122. schemathesis/python/asgi.py +12 -0
  123. schemathesis/python/wsgi.py +12 -0
  124. schemathesis/schemas.py +682 -257
  125. schemathesis/specs/graphql/__init__.py +0 -1
  126. schemathesis/specs/graphql/nodes.py +26 -2
  127. schemathesis/specs/graphql/scalars.py +77 -12
  128. schemathesis/specs/graphql/schemas.py +367 -148
  129. schemathesis/specs/graphql/validation.py +33 -0
  130. schemathesis/specs/openapi/__init__.py +9 -1
  131. schemathesis/specs/openapi/_hypothesis.py +555 -318
  132. schemathesis/specs/openapi/adapter/__init__.py +10 -0
  133. schemathesis/specs/openapi/adapter/parameters.py +729 -0
  134. schemathesis/specs/openapi/adapter/protocol.py +59 -0
  135. schemathesis/specs/openapi/adapter/references.py +19 -0
  136. schemathesis/specs/openapi/adapter/responses.py +368 -0
  137. schemathesis/specs/openapi/adapter/security.py +144 -0
  138. schemathesis/specs/openapi/adapter/v2.py +30 -0
  139. schemathesis/specs/openapi/adapter/v3_0.py +30 -0
  140. schemathesis/specs/openapi/adapter/v3_1.py +30 -0
  141. schemathesis/specs/openapi/analysis.py +96 -0
  142. schemathesis/specs/openapi/checks.py +748 -82
  143. schemathesis/specs/openapi/converter.py +176 -37
  144. schemathesis/specs/openapi/definitions.py +599 -4
  145. schemathesis/specs/openapi/examples.py +581 -165
  146. schemathesis/specs/openapi/expressions/__init__.py +52 -5
  147. schemathesis/specs/openapi/expressions/extractors.py +25 -0
  148. schemathesis/specs/openapi/expressions/lexer.py +34 -31
  149. schemathesis/specs/openapi/expressions/nodes.py +97 -46
  150. schemathesis/specs/openapi/expressions/parser.py +35 -13
  151. schemathesis/specs/openapi/formats.py +122 -0
  152. schemathesis/specs/openapi/media_types.py +75 -0
  153. schemathesis/specs/openapi/negative/__init__.py +93 -73
  154. schemathesis/specs/openapi/negative/mutations.py +294 -103
  155. schemathesis/specs/openapi/negative/utils.py +0 -9
  156. schemathesis/specs/openapi/patterns.py +458 -0
  157. schemathesis/specs/openapi/references.py +60 -81
  158. schemathesis/specs/openapi/schemas.py +647 -666
  159. schemathesis/specs/openapi/serialization.py +53 -30
  160. schemathesis/specs/openapi/stateful/__init__.py +403 -68
  161. schemathesis/specs/openapi/stateful/control.py +87 -0
  162. schemathesis/specs/openapi/stateful/dependencies/__init__.py +232 -0
  163. schemathesis/specs/openapi/stateful/dependencies/inputs.py +428 -0
  164. schemathesis/specs/openapi/stateful/dependencies/models.py +341 -0
  165. schemathesis/specs/openapi/stateful/dependencies/naming.py +491 -0
  166. schemathesis/specs/openapi/stateful/dependencies/outputs.py +34 -0
  167. schemathesis/specs/openapi/stateful/dependencies/resources.py +339 -0
  168. schemathesis/specs/openapi/stateful/dependencies/schemas.py +447 -0
  169. schemathesis/specs/openapi/stateful/inference.py +254 -0
  170. schemathesis/specs/openapi/stateful/links.py +219 -78
  171. schemathesis/specs/openapi/types/__init__.py +3 -0
  172. schemathesis/specs/openapi/types/common.py +23 -0
  173. schemathesis/specs/openapi/types/v2.py +129 -0
  174. schemathesis/specs/openapi/types/v3.py +134 -0
  175. schemathesis/specs/openapi/utils.py +7 -6
  176. schemathesis/specs/openapi/warnings.py +75 -0
  177. schemathesis/transport/__init__.py +224 -0
  178. schemathesis/transport/asgi.py +26 -0
  179. schemathesis/transport/prepare.py +126 -0
  180. schemathesis/transport/requests.py +278 -0
  181. schemathesis/transport/serialization.py +329 -0
  182. schemathesis/transport/wsgi.py +175 -0
  183. schemathesis-4.4.2.dist-info/METADATA +213 -0
  184. schemathesis-4.4.2.dist-info/RECORD +192 -0
  185. {schemathesis-3.15.4.dist-info → schemathesis-4.4.2.dist-info}/WHEEL +1 -1
  186. schemathesis-4.4.2.dist-info/entry_points.txt +6 -0
  187. {schemathesis-3.15.4.dist-info → schemathesis-4.4.2.dist-info/licenses}/LICENSE +1 -1
  188. schemathesis/_compat.py +0 -57
  189. schemathesis/_hypothesis.py +0 -123
  190. schemathesis/auth.py +0 -214
  191. schemathesis/cli/callbacks.py +0 -240
  192. schemathesis/cli/cassettes.py +0 -351
  193. schemathesis/cli/context.py +0 -38
  194. schemathesis/cli/debug.py +0 -21
  195. schemathesis/cli/handlers.py +0 -11
  196. schemathesis/cli/junitxml.py +0 -41
  197. schemathesis/cli/options.py +0 -70
  198. schemathesis/cli/output/__init__.py +0 -1
  199. schemathesis/cli/output/default.py +0 -521
  200. schemathesis/cli/output/short.py +0 -40
  201. schemathesis/constants.py +0 -88
  202. schemathesis/exceptions.py +0 -257
  203. schemathesis/extra/_aiohttp.py +0 -27
  204. schemathesis/extra/_flask.py +0 -10
  205. schemathesis/extra/_server.py +0 -16
  206. schemathesis/extra/pytest_plugin.py +0 -251
  207. schemathesis/failures.py +0 -145
  208. schemathesis/fixups/__init__.py +0 -29
  209. schemathesis/fixups/fast_api.py +0 -30
  210. schemathesis/graphql.py +0 -5
  211. schemathesis/internal.py +0 -6
  212. schemathesis/lazy.py +0 -301
  213. schemathesis/models.py +0 -1113
  214. schemathesis/parameters.py +0 -91
  215. schemathesis/runner/__init__.py +0 -470
  216. schemathesis/runner/events.py +0 -242
  217. schemathesis/runner/impl/__init__.py +0 -3
  218. schemathesis/runner/impl/core.py +0 -791
  219. schemathesis/runner/impl/solo.py +0 -85
  220. schemathesis/runner/impl/threadpool.py +0 -367
  221. schemathesis/runner/serialization.py +0 -206
  222. schemathesis/serializers.py +0 -253
  223. schemathesis/service/__init__.py +0 -18
  224. schemathesis/service/auth.py +0 -10
  225. schemathesis/service/client.py +0 -62
  226. schemathesis/service/constants.py +0 -25
  227. schemathesis/service/events.py +0 -39
  228. schemathesis/service/handler.py +0 -46
  229. schemathesis/service/hosts.py +0 -74
  230. schemathesis/service/metadata.py +0 -42
  231. schemathesis/service/models.py +0 -21
  232. schemathesis/service/serialization.py +0 -184
  233. schemathesis/service/worker.py +0 -39
  234. schemathesis/specs/graphql/loaders.py +0 -215
  235. schemathesis/specs/openapi/constants.py +0 -7
  236. schemathesis/specs/openapi/expressions/context.py +0 -12
  237. schemathesis/specs/openapi/expressions/pointers.py +0 -29
  238. schemathesis/specs/openapi/filters.py +0 -44
  239. schemathesis/specs/openapi/links.py +0 -303
  240. schemathesis/specs/openapi/loaders.py +0 -453
  241. schemathesis/specs/openapi/parameters.py +0 -430
  242. schemathesis/specs/openapi/security.py +0 -129
  243. schemathesis/specs/openapi/validation.py +0 -24
  244. schemathesis/stateful.py +0 -358
  245. schemathesis/targets.py +0 -32
  246. schemathesis/types.py +0 -38
  247. schemathesis/utils.py +0 -475
  248. schemathesis-3.15.4.dist-info/METADATA +0 -202
  249. schemathesis-3.15.4.dist-info/RECORD +0 -99
  250. schemathesis-3.15.4.dist-info/entry_points.txt +0 -7
  251. /schemathesis/{extra → cli/ext}/__init__.py +0 -0
@@ -1,242 +0,0 @@
1
- import threading
2
- import time
3
- from typing import Any, Dict, List, Optional, Union
4
-
5
- import attr
6
- from requests import exceptions
7
-
8
- from ..constants import DataGenerationMethod
9
- from ..exceptions import HTTPError
10
- from ..models import APIOperation, Status, TestResult, TestResultSet
11
- from ..schemas import BaseSchema
12
- from ..utils import format_exception
13
- from .serialization import SerializedError, SerializedTestResult
14
-
15
-
16
- @attr.s() # pragma: no mutate
17
- class ExecutionEvent:
18
- """Generic execution event."""
19
-
20
- # Whether this event is expected to be the last one in the event stream
21
- is_terminal = False
22
-
23
- def asdict(self, **kwargs: Any) -> Dict[str, Any]:
24
- data = attr.asdict(self, **kwargs)
25
- # An internal tag for simpler type identification
26
- data["event_type"] = self.__class__.__name__
27
- return data
28
-
29
-
30
- @attr.s(slots=True) # pragma: no mutate
31
- class Initialized(ExecutionEvent):
32
- """Runner is initialized, settings are prepared, requests session is ready."""
33
-
34
- schema: Dict[str, Any] = attr.ib() # pragma: no mutate
35
- # Total number of operations in the schema
36
- operations_count: Optional[int] = attr.ib() # pragma: no mutate
37
- # The place, where the API schema is located
38
- location: Optional[str] = attr.ib() # pragma: no mutate
39
- # The base URL against which the tests are running
40
- base_url: str = attr.ib() # pragma: no mutate
41
- # API schema specification name
42
- specification_name: str = attr.ib() # pragma: no mutate
43
- # Timestamp of test run start
44
- start_time: float = attr.ib(factory=time.monotonic) # pragma: no mutate
45
- thread_id: int = attr.ib(factory=threading.get_ident) # pragma: no mutate
46
-
47
- @classmethod
48
- def from_schema(cls, *, schema: BaseSchema, count_operations: bool = True) -> "Initialized":
49
- """Computes all needed data from a schema instance."""
50
- return cls(
51
- schema=schema.raw_schema,
52
- operations_count=schema.operations_count if count_operations else None,
53
- location=schema.location,
54
- base_url=schema.get_base_url(),
55
- specification_name=schema.verbose_name,
56
- )
57
-
58
-
59
- class CurrentOperationMixin:
60
- method: str
61
- path: str
62
-
63
- @property
64
- def current_operation(self) -> str:
65
- return f"{self.method} {self.path}"
66
-
67
-
68
- @attr.s(slots=True) # pragma: no mutate
69
- class BeforeExecution(CurrentOperationMixin, ExecutionEvent):
70
- """Happens before each tested API operation.
71
-
72
- It happens before a single hypothesis test, that may contain many examples inside.
73
- """
74
-
75
- # HTTP method
76
- method: str = attr.ib() # pragma: no mutate
77
- # Full path, including the base path
78
- path: str = attr.ib() # pragma: no mutate
79
- # Specification-specific operation name
80
- verbose_name: str = attr.ib() # pragma: no mutate
81
- # Path without the base path
82
- relative_path: str = attr.ib() # pragma: no mutate
83
- # The current level of recursion during stateful testing
84
- recursion_level: int = attr.ib() # pragma: no mutate
85
- # The way data will be generated
86
- data_generation_method: DataGenerationMethod = attr.ib() # pragma: no mutate
87
- # An unique ID which connects events that happen during testing of the same API operation
88
- # It may be useful when multiple threads are involved where incoming events are not ordered
89
- correlation_id: str = attr.ib() # pragma: no mutate
90
- thread_id: int = attr.ib(factory=threading.get_ident) # pragma: no mutate
91
-
92
- @classmethod
93
- def from_operation(
94
- cls,
95
- operation: APIOperation,
96
- recursion_level: int,
97
- data_generation_method: DataGenerationMethod,
98
- correlation_id: str,
99
- ) -> "BeforeExecution":
100
- return cls(
101
- method=operation.method.upper(),
102
- path=operation.full_path,
103
- verbose_name=operation.verbose_name,
104
- relative_path=operation.path,
105
- recursion_level=recursion_level,
106
- data_generation_method=data_generation_method,
107
- correlation_id=correlation_id,
108
- )
109
-
110
-
111
- @attr.s(slots=True) # pragma: no mutate
112
- class AfterExecution(CurrentOperationMixin, ExecutionEvent):
113
- """Happens after each tested API operation."""
114
-
115
- method: str = attr.ib() # pragma: no mutate
116
- path: str = attr.ib() # pragma: no mutate
117
- relative_path: str = attr.ib() # pragma: no mutate
118
- # Specification-specific operation name
119
- verbose_name: str = attr.ib() # pragma: no mutate
120
-
121
- # APIOperation test status - success / failure / error
122
- status: Status = attr.ib() # pragma: no mutate
123
- # The way data was generated
124
- data_generation_method: DataGenerationMethod = attr.ib() # pragma: no mutate
125
- result: SerializedTestResult = attr.ib() # pragma: no mutate
126
- # Test running time
127
- elapsed_time: float = attr.ib() # pragma: no mutate
128
- correlation_id: str = attr.ib() # pragma: no mutate
129
- thread_id: int = attr.ib(factory=threading.get_ident) # pragma: no mutate
130
- # Captured hypothesis stdout
131
- hypothesis_output: List[str] = attr.ib(factory=list) # pragma: no mutate
132
-
133
- @classmethod
134
- def from_result(
135
- cls,
136
- result: TestResult,
137
- status: Status,
138
- elapsed_time: float,
139
- hypothesis_output: List[str],
140
- operation: APIOperation,
141
- data_generation_method: DataGenerationMethod,
142
- correlation_id: str,
143
- ) -> "AfterExecution":
144
- return cls(
145
- method=operation.method.upper(),
146
- path=operation.full_path,
147
- relative_path=operation.path,
148
- verbose_name=operation.verbose_name,
149
- result=SerializedTestResult.from_test_result(result),
150
- status=status,
151
- elapsed_time=elapsed_time,
152
- hypothesis_output=hypothesis_output,
153
- data_generation_method=data_generation_method,
154
- correlation_id=correlation_id,
155
- )
156
-
157
-
158
- @attr.s(slots=True) # pragma: no mutate
159
- class Interrupted(ExecutionEvent):
160
- """If execution was interrupted by Ctrl-C, or a received SIGTERM."""
161
-
162
- thread_id: int = attr.ib(factory=threading.get_ident) # pragma: no mutate
163
-
164
-
165
- @attr.s(slots=True) # pragma: no mutate
166
- class InternalError(ExecutionEvent):
167
- """An error that happened inside the runner."""
168
-
169
- is_terminal = True
170
-
171
- message: str = attr.ib() # pragma: no mutate
172
- exception_type: str = attr.ib() # pragma: no mutate
173
- exception: Optional[str] = attr.ib(default=None) # pragma: no mutate
174
- exception_with_traceback: Optional[str] = attr.ib(default=None) # pragma: no mutate
175
- thread_id: int = attr.ib(factory=threading.get_ident) # pragma: no mutate
176
-
177
- @classmethod
178
- def from_exc(cls, exc: Exception) -> "InternalError":
179
- exception_type = f"{exc.__class__.__module__}.{exc.__class__.__qualname__}"
180
- if isinstance(exc, HTTPError):
181
- if exc.response.status_code == 404:
182
- message = f"Schema was not found at {exc.url}"
183
- else:
184
- message = f"Failed to load schema, code {exc.response.status_code} was returned from {exc.url}"
185
- return cls(message=message, exception_type=exception_type)
186
- exception = format_exception(exc)
187
- exception_with_traceback = format_exception(exc, include_traceback=True)
188
- if isinstance(exc, exceptions.ConnectionError):
189
- message = f"Failed to load schema from {exc.request.url}"
190
- else:
191
- message = "An internal error happened during a test run"
192
- return cls(
193
- message=message,
194
- exception_type=exception_type,
195
- exception=exception,
196
- exception_with_traceback=exception_with_traceback,
197
- )
198
-
199
-
200
- @attr.s(slots=True) # pragma: no mutate
201
- class Finished(ExecutionEvent):
202
- """The final event of the run.
203
-
204
- No more events after this point.
205
- """
206
-
207
- is_terminal = True
208
-
209
- passed_count: int = attr.ib() # pragma: no mutate
210
- skipped_count: int = attr.ib() # pragma: no mutate
211
- failed_count: int = attr.ib() # pragma: no mutate
212
- errored_count: int = attr.ib() # pragma: no mutate
213
-
214
- has_failures: bool = attr.ib() # pragma: no mutate
215
- has_errors: bool = attr.ib() # pragma: no mutate
216
- has_logs: bool = attr.ib() # pragma: no mutate
217
- is_empty: bool = attr.ib() # pragma: no mutate
218
- generic_errors: List[SerializedError] = attr.ib() # pragma: no mutate
219
-
220
- total: Dict[str, Dict[Union[str, Status], int]] = attr.ib() # pragma: no mutate
221
-
222
- # Total test run execution time
223
- running_time: float = attr.ib() # pragma: no mutate
224
- thread_id: int = attr.ib(factory=threading.get_ident) # pragma: no mutate
225
-
226
- @classmethod
227
- def from_results(cls, results: TestResultSet, running_time: float) -> "Finished":
228
- return cls(
229
- passed_count=results.passed_count,
230
- skipped_count=results.skipped_count,
231
- failed_count=results.failed_count,
232
- errored_count=results.errored_count,
233
- has_failures=results.has_failures,
234
- has_errors=results.has_errors,
235
- has_logs=results.has_logs,
236
- is_empty=results.is_empty,
237
- total=results.total,
238
- generic_errors=[
239
- SerializedError.from_error(error, None, None, error.full_path) for error in results.generic_errors
240
- ],
241
- running_time=running_time,
242
- )
@@ -1,3 +0,0 @@
1
- from .core import BaseRunner
2
- from .solo import SingleThreadASGIRunner, SingleThreadRunner, SingleThreadWSGIRunner
3
- from .threadpool import ThreadPoolASGIRunner, ThreadPoolRunner, ThreadPoolWSGIRunner