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.
@@ -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
- for case in _iter_coverage_cases(
315
- operation=operation,
316
- generation_modes=generation_modes,
317
- generate_duplicate_query_parameters=generate_duplicate_query_parameters,
318
- unexpected_methods=unexpected_methods,
319
- generation_config=generation_config,
320
- ):
321
- if case.media_type and operation.schema.transport.get_first_matching_media_type(case.media_type) is None:
322
- continue
323
- adjust_urlencoded_payload(case)
324
- auths.set_on_case(case, auth_context, auth_storage)
325
- for container_name, value in overrides.items():
326
- container = getattr(case, container_name)
327
- if container is None:
328
- setattr(case, container_name, value)
329
- else:
330
- container.update(value)
331
-
332
- test = hypothesis.example(case=case)(test)
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.17
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=ujPp9ByUfNYdxWyKoJlxE0h8pAVBpmNJwWIi9MnR968,34824
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=lil8IewM5j8tvt4lpA9g_KITvIwx1M96i45DNSHNjoc,3505
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=cBj8W4wn7VLJd4nABaIH5f502-zBDiqljxLgPWUn-50,15609
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.17.dist-info/METADATA,sha256=W-ng4zywYAQxqVAdxHO-m6DAHhBnE5jGSgQIhx04uTY,8472
161
- schemathesis-4.0.17.dist-info/WHEEL,sha256=qtCwoSJWgHk21S1Kb4ihdzI2rlJ1ZKaIurTj_ngOhyQ,87
162
- schemathesis-4.0.17.dist-info/entry_points.txt,sha256=hiK3un-xfgPdwj9uj16YVDtTNpO128bmk0U82SMv8ZQ,152
163
- schemathesis-4.0.17.dist-info/licenses/LICENSE,sha256=2Ve4J8v5jMQAWrT7r1nf3bI8Vflk3rZVQefiF2zpxwg,1121
164
- schemathesis-4.0.17.dist-info/RECORD,,
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,,