Python hypothesis.strategies.from_regex() Examples
The following are 8
code examples of hypothesis.strategies.from_regex().
You can vote up the ones you like or vote down the ones you don't like,
and go to the original project or source file by following the links above each example.
You may also want to check out all available functions/classes of the module
hypothesis.strategies
, or try the search function
.
Example #1
Source File: _from_schema.py From hypothesis-jsonschema with Mozilla Public License 2.0 | 6 votes |
def regex_patterns(draw: Any) -> str: """Return a recursive strategy for simple regular expression patterns.""" fragments = st.one_of( st.just("."), st.from_regex(r"\[\^?[A-Za-z0-9]+\]"), REGEX_PATTERNS.map("{}+".format), REGEX_PATTERNS.map("{}?".format), REGEX_PATTERNS.map("{}*".format), ) result = draw(st.lists(fragments, min_size=1, max_size=3).map("".join)) assert isinstance(result, str) try: re.compile(result) except re.error: assume(False) return result
Example #2
Source File: test_hypothesis.py From schemathesis with MIT License | 5 votes |
def test_custom_strategies(swagger_20): register_string_format("even_4_digits", strategies.from_regex(r"\A[0-9]{4}\Z").filter(lambda x: int(x) % 2 == 0)) endpoint = make_endpoint( swagger_20, query={ "required": ["id"], "type": "object", "additionalProperties": False, "properties": {"id": {"type": "string", "format": "even_4_digits"}}, }, ) result = get_case_strategy(endpoint).example() assert len(result.query["id"]) == 4 assert int(result.query["id"]) % 2 == 0
Example #3
Source File: strategies.py From txacme with MIT License | 5 votes |
def dns_labels(): """ Strategy for generating limited charset DNS labels. """ # This is too limited, but whatever return s.from_regex(u'\\A[a-z]{3}[a-z0-9-]{0,21}[a-z]\\Z')
Example #4
Source File: test_grammar.py From vyper with Apache License 2.0 | 5 votes |
def from_grammar() -> st.SearchStrategy[str]: """ Generate syntactically-valid Python source code based on the grammar. """ grammar = get_lark_grammar() explicit_strategies = dict( _INDENT=st.just(" " * 4), _DEDENT=st.just(""), NAME=st.from_regex(r"[a-z_A-Z]+", fullmatch=True).filter(str.isidentifier), ) return GrammarStrategy(grammar, "module", explicit_strategies) # Avoid examples with *only* single or double quote docstrings # because they trigger a trivial compiler bug
Example #5
Source File: base.py From sidekick with MIT License | 5 votes |
def identifiers(allow_private=True, exclude=None): """ Valid Python identifiers. """ regex = IDENTIFIER_RE if allow_private else PUBLIC_IDENTIFIER_RE strategy = st.from_regex(regex, fullmatch=True).filter(lambda x: not iskeyword(x)) if exclude: exclude = set(exclude) strategy = strategy.filter(lambda x: x not in exclude) return strategy # noinspection PyShadowingNames
Example #6
Source File: _from_schema.py From hypothesis-jsonschema with Mozilla Public License 2.0 | 5 votes |
def rfc3339(name: str) -> st.SearchStrategy[str]: """Get a strategy for date or time strings in the given RFC3339 format. See https://tools.ietf.org/html/rfc3339#section-5.6 """ # Hmm, https://github.com/HypothesisWorks/hypothesis/issues/170 # would make this a lot easier... assert name in RFC3339_FORMATS def zfill(width: int) -> Callable[[int], str]: return lambda v: str(v).zfill(width) simple = { "date-fullyear": st.integers(0, 9999).map(zfill(4)), "date-month": st.integers(1, 12).map(zfill(2)), "date-mday": st.integers(1, 28).map(zfill(2)), # incomplete but valid "time-hour": st.integers(0, 23).map(zfill(2)), "time-minute": st.integers(0, 59).map(zfill(2)), "time-second": st.integers(0, 59).map(zfill(2)), # ignore negative leap seconds "time-secfrac": st.from_regex(r"\.[0-9]+"), } if name in simple: return simple[name] if name == "time-numoffset": return st.tuples( st.sampled_from(["+", "-"]), rfc3339("time-hour"), rfc3339("time-minute") ).map("%s%s:%s".__mod__) if name == "time-offset": return st.one_of(st.just("Z"), rfc3339("time-numoffset")) if name == "partial-time": return st.times().map(str) if name == "date" or name == "full-date": return st.dates().map(str) if name == "time" or name == "full-time": return st.tuples(rfc3339("partial-time"), rfc3339("time-offset")).map("".join) assert name == "date-time" return st.tuples(rfc3339("full-date"), rfc3339("full-time")).map("T".join)
Example #7
Source File: _from_schema.py From hypothesis-jsonschema with Mozilla Public License 2.0 | 5 votes |
def relative_json_pointers() -> st.SearchStrategy[str]: """Return a strategy for strings in relative-json-pointer format.""" return st.builds( operator.add, st.from_regex(r"0|[1-9][0-9]*", fullmatch=True), st.just("#") | json_pointers(), ) # Via the `webcolors` package, to match the logic `jsonschema` # uses to check it's (non-standard?) "color" format.
Example #8
Source File: _from_schema.py From hypothesis-jsonschema with Mozilla Public License 2.0 | 5 votes |
def string_schema(schema: dict) -> st.SearchStrategy[str]: """Handle schemata for strings.""" # also https://json-schema.org/latest/json-schema-validation.html#rfc.section.7 min_size = schema.get("minLength", 0) max_size = schema.get("maxLength") strategy = st.text(min_size=min_size, max_size=max_size) if schema.get("format") in STRING_FORMATS: # Unknown "format" specifiers should be ignored for validation. # See https://json-schema.org/latest/json-schema-validation.html#format strategy = STRING_FORMATS[schema["format"]] if "pattern" in schema: # This isn't really supported, but we'll do our best. strategy = strategy.filter( lambda s: re.search(schema["pattern"], string=s) is not None ) elif "pattern" in schema: try: re.compile(schema["pattern"]) strategy = st.from_regex(schema["pattern"]) except re.error: # Patterns that are invalid in Python, or just malformed return st.nothing() # If we have size bounds but we're generating strings from a regex or pattern, # apply a filter to ensure our size bounds are respected. if ("format" in schema or "pattern" in schema) and ( min_size != 0 or max_size is not None ): max_size = math.inf if max_size is None else max_size strategy = strategy.filter(lambda s: min_size <= len(s) <= max_size) return strategy