schemathesis 4.0.17__py3-none-any.whl → 4.0.18__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.
- schemathesis/generation/hypothesis/builder.py +25 -19
- schemathesis/specs/openapi/converter.py +15 -0
- schemathesis/specs/openapi/patterns.py +5 -0
- {schemathesis-4.0.17.dist-info → schemathesis-4.0.18.dist-info}/METADATA +1 -1
- {schemathesis-4.0.17.dist-info → schemathesis-4.0.18.dist-info}/RECORD +8 -8
- {schemathesis-4.0.17.dist-info → schemathesis-4.0.18.dist-info}/WHEEL +0 -0
- {schemathesis-4.0.17.dist-info → schemathesis-4.0.18.dist-info}/entry_points.txt +0 -0
- {schemathesis-4.0.17.dist-info → schemathesis-4.0.18.dist-info}/licenses/LICENSE +0 -0
@@ -1,6 +1,7 @@
|
|
1
1
|
from __future__ import annotations
|
2
2
|
|
3
3
|
import asyncio
|
4
|
+
import warnings
|
4
5
|
from dataclasses import dataclass
|
5
6
|
from enum import Enum
|
6
7
|
from functools import wraps
|
@@ -311,25 +312,30 @@ def add_coverage(
|
|
311
312
|
for container in LOCATION_TO_CONTAINER.values()
|
312
313
|
if container in as_strategy_kwargs
|
313
314
|
}
|
314
|
-
|
315
|
-
|
316
|
-
|
317
|
-
|
318
|
-
|
319
|
-
|
320
|
-
|
321
|
-
|
322
|
-
|
323
|
-
|
324
|
-
|
325
|
-
|
326
|
-
|
327
|
-
|
328
|
-
|
329
|
-
|
330
|
-
|
331
|
-
|
332
|
-
|
315
|
+
|
316
|
+
with warnings.catch_warnings():
|
317
|
+
warnings.filterwarnings(
|
318
|
+
"ignore", message=".*but this is not valid syntax for a Python regular expression.*", category=UserWarning
|
319
|
+
)
|
320
|
+
for case in _iter_coverage_cases(
|
321
|
+
operation=operation,
|
322
|
+
generation_modes=generation_modes,
|
323
|
+
generate_duplicate_query_parameters=generate_duplicate_query_parameters,
|
324
|
+
unexpected_methods=unexpected_methods,
|
325
|
+
generation_config=generation_config,
|
326
|
+
):
|
327
|
+
if case.media_type and operation.schema.transport.get_first_matching_media_type(case.media_type) is None:
|
328
|
+
continue
|
329
|
+
adjust_urlencoded_payload(case)
|
330
|
+
auths.set_on_case(case, auth_context, auth_storage)
|
331
|
+
for container_name, value in overrides.items():
|
332
|
+
container = getattr(case, container_name)
|
333
|
+
if container is None:
|
334
|
+
setattr(case, container_name, value)
|
335
|
+
else:
|
336
|
+
container.update(value)
|
337
|
+
|
338
|
+
test = hypothesis.example(case=case)(test)
|
333
339
|
return test
|
334
340
|
|
335
341
|
|
@@ -32,6 +32,21 @@ def to_json_schema(
|
|
32
32
|
schema["format"] = "binary"
|
33
33
|
if update_quantifiers:
|
34
34
|
update_pattern_in_schema(schema)
|
35
|
+
# Sometimes `required` is incorrectly has a boolean value
|
36
|
+
properties = schema.get("properties")
|
37
|
+
if properties:
|
38
|
+
for name, subschema in properties.items():
|
39
|
+
if not isinstance(subschema, dict):
|
40
|
+
continue
|
41
|
+
is_required = subschema.get("required")
|
42
|
+
if is_required is True:
|
43
|
+
schema.setdefault("required", []).append(name)
|
44
|
+
del subschema["required"]
|
45
|
+
elif is_required is False:
|
46
|
+
if "required" in schema and name in schema["required"]:
|
47
|
+
schema["required"].remove(name)
|
48
|
+
del subschema["required"]
|
49
|
+
|
35
50
|
if schema_type == "object":
|
36
51
|
if is_response_schema:
|
37
52
|
# Write-only properties should not occur in responses
|
@@ -81,6 +81,11 @@ def _handle_parsed_pattern(parsed: list, pattern: str, min_length: int | None, m
|
|
81
81
|
inner_pattern = "."
|
82
82
|
else:
|
83
83
|
inner_pattern = pattern[leading_anchor_length:-trailing_anchor_length]
|
84
|
+
# Single literal has the length of 1, but quantifiers could be != 1, which means we can't merge them
|
85
|
+
if op == LITERAL and (
|
86
|
+
(min_length is not None and min_length > 1) or (max_length is not None and max_length < 1)
|
87
|
+
):
|
88
|
+
return pattern
|
84
89
|
return leading_anchor + _update_quantifier(op, value, inner_pattern, min_length, max_length) + trailing_anchor
|
85
90
|
elif (
|
86
91
|
len(parsed) > 3
|
@@ -1,6 +1,6 @@
|
|
1
1
|
Metadata-Version: 2.4
|
2
2
|
Name: schemathesis
|
3
|
-
Version: 4.0.
|
3
|
+
Version: 4.0.18
|
4
4
|
Summary: Property-based testing framework for Open API and GraphQL based apps
|
5
5
|
Project-URL: Documentation, https://schemathesis.readthedocs.io/en/stable/
|
6
6
|
Project-URL: Changelog, https://github.com/schemathesis/schemathesis/blob/master/CHANGELOG.md
|
@@ -91,7 +91,7 @@ schemathesis/generation/metrics.py,sha256=cZU5HdeAMcLFEDnTbNE56NuNq4P0N4ew-g1NEz
|
|
91
91
|
schemathesis/generation/modes.py,sha256=Q1fhjWr3zxabU5qdtLvKfpMFZJAwlW9pnxgenjeXTyU,481
|
92
92
|
schemathesis/generation/overrides.py,sha256=OBWqDQPreiliaf2M-oyXppVKHoJkCRzxtwSJx1b6AFw,3759
|
93
93
|
schemathesis/generation/hypothesis/__init__.py,sha256=SVwM-rx07jPZzms0idWYACgUtWAxh49HRuTnaQ__zf0,1549
|
94
|
-
schemathesis/generation/hypothesis/builder.py,sha256=
|
94
|
+
schemathesis/generation/hypothesis/builder.py,sha256=J5O08kaXV8q1dcjCgjNG7eGbpvlLpqBzl6xWiYZucNc,35111
|
95
95
|
schemathesis/generation/hypothesis/examples.py,sha256=6eGaKUEC3elmKsaqfKj1sLvM8EHc-PWT4NRBq4NI0Rs,1409
|
96
96
|
schemathesis/generation/hypothesis/given.py,sha256=sTZR1of6XaHAPWtHx2_WLlZ50M8D5Rjux0GmWkWjDq4,2337
|
97
97
|
schemathesis/generation/hypothesis/reporting.py,sha256=uDVow6Ya8YFkqQuOqRsjbzsbyP4KKfr3jA7ZaY4FuKY,279
|
@@ -126,13 +126,13 @@ schemathesis/specs/openapi/_cache.py,sha256=HpglmETmZU0RCHxp3DO_sg5_B_nzi54Zuw9v
|
|
126
126
|
schemathesis/specs/openapi/_hypothesis.py,sha256=H-4pzT7dECY-AcDGhebKdTSELhGOdyA1WCbZQSMZY3E,22309
|
127
127
|
schemathesis/specs/openapi/checks.py,sha256=0YiMoUy_wsnPvbOrsbnQ2iDxLloNe2-dc5-hnsst0ss,29863
|
128
128
|
schemathesis/specs/openapi/constants.py,sha256=JqM_FHOenqS_MuUE9sxVQ8Hnw0DNM8cnKDwCwPLhID4,783
|
129
|
-
schemathesis/specs/openapi/converter.py,sha256=
|
129
|
+
schemathesis/specs/openapi/converter.py,sha256=3Fikg9dzOG9XwFiVI0R1KbZioG7Cwc6BOQhPFYItqto,4151
|
130
130
|
schemathesis/specs/openapi/definitions.py,sha256=8htclglV3fW6JPBqs59lgM4LnA25Mm9IptXBPb_qUT0,93949
|
131
131
|
schemathesis/specs/openapi/examples.py,sha256=V1fbsbMto_So7lTWnyGa7f3u9On2br8yZ-cPzcC2-Bw,21542
|
132
132
|
schemathesis/specs/openapi/formats.py,sha256=8AIS7Uey-Z1wm1WYRqnsVqHwG9d316PdqfKLqwUs7us,3516
|
133
133
|
schemathesis/specs/openapi/media_types.py,sha256=F5M6TKl0s6Z5X8mZpPsWDEdPBvxclKRcUOc41eEwKbo,2472
|
134
134
|
schemathesis/specs/openapi/parameters.py,sha256=ifu_QQCMUzsUHQAkvsOvLuokns6CzesssmQ3Nd3zxII,14594
|
135
|
-
schemathesis/specs/openapi/patterns.py,sha256=
|
135
|
+
schemathesis/specs/openapi/patterns.py,sha256=XhxZzIaCli3E67YZ9V6wQFvBkqDOEVwRrcUSEypjtHU,15890
|
136
136
|
schemathesis/specs/openapi/references.py,sha256=40YcDExPLR2B8EOwt-Csw-5MYFi2xj_DXf91J0Pc9d4,8855
|
137
137
|
schemathesis/specs/openapi/schemas.py,sha256=FXD6yLindLNtjiW5D_GllWxfMAigSKjpjl8_GbqJXxE,52557
|
138
138
|
schemathesis/specs/openapi/security.py,sha256=6UWYMhL-dPtkTineqqBFNKca1i4EuoTduw-EOLeE0aQ,7149
|
@@ -157,8 +157,8 @@ schemathesis/transport/prepare.py,sha256=erYXRaxpQokIDzaIuvt_csHcw72iHfCyNq8VNEz
|
|
157
157
|
schemathesis/transport/requests.py,sha256=46aplzhSmBupegPNMawma-iJWCegWkEd6mzdWLTpgM4,10742
|
158
158
|
schemathesis/transport/serialization.py,sha256=igUXKZ_VJ9gV7P0TUc5PDQBJXl_s0kK9T3ljGWWvo6E,10339
|
159
159
|
schemathesis/transport/wsgi.py,sha256=KoAfvu6RJtzyj24VGB8e-Iaa9smpgXJ3VsM8EgAz2tc,6152
|
160
|
-
schemathesis-4.0.
|
161
|
-
schemathesis-4.0.
|
162
|
-
schemathesis-4.0.
|
163
|
-
schemathesis-4.0.
|
164
|
-
schemathesis-4.0.
|
160
|
+
schemathesis-4.0.18.dist-info/METADATA,sha256=KCyTL3AhvoLowCLdICpuDsX3kXYyf7QQ1B7Fh_wb4pY,8472
|
161
|
+
schemathesis-4.0.18.dist-info/WHEEL,sha256=qtCwoSJWgHk21S1Kb4ihdzI2rlJ1ZKaIurTj_ngOhyQ,87
|
162
|
+
schemathesis-4.0.18.dist-info/entry_points.txt,sha256=hiK3un-xfgPdwj9uj16YVDtTNpO128bmk0U82SMv8ZQ,152
|
163
|
+
schemathesis-4.0.18.dist-info/licenses/LICENSE,sha256=2Ve4J8v5jMQAWrT7r1nf3bI8Vflk3rZVQefiF2zpxwg,1121
|
164
|
+
schemathesis-4.0.18.dist-info/RECORD,,
|
File without changes
|
File without changes
|
File without changes
|