Skip to main content

A-OK

PyPI version build status coverage report Code style: black Code style: flake8 Code style: mypy PyPI - License

aok is a library for simplifying the assertions of complex dictionary returns, which can be used within Python code or loaded via YAML files.

import aok

import my_application


def test_call():
    """Should return the expected dictionary from my application call."""
    result: dict = my_application.get_family("Jane Doe")
    ok = aok.Okay({
        "mother": {
            "age": aok.greater_or_equal(50),
            "full_name": aok.like("* Doe"),
        },
        "father": {
            "age": aok.greater_or_equal(50),
            "full_name": aok.like("* Doe"),
        },
        "younger_brother": {
            "age": aok.less(10),
            "full_name": aok.like("* Doe"),
        }
    })
    
    # Dictionary "result" must be an exact match with the ok expected values.
    ok.assert_all(result)

    # Dictionary "result" is asserted against ok expected values as a subset, such
    # that other keys/values may exist within the "result" structure.
    ok.assert_subset(result)

The same thing can be archived from a YAML file:

ok: !aok
  mother:
    age: !aok.greater_or_equal 50
    full_name: !aok.like '* Doe'
  father:
    age: !aok.greater_or_equal 50
    full_name: !aok.like '* Doe'
  younger_brother:
    age: !aok.less 10
    full_name: !aok.like '* Doe'

and this can be loaded into a test:

import aok
import yaml
import pathlib

import my_application


def test_call():
    """Should return the expected dictionary from my application call."""
    result: dict = my_application.get_family("Jane Doe")
    data: dict = yaml.full_load(pathlib.Path("expectations.yaml").read_text())
    ok: aok.Okay = data["ok"]
    ok.assert_all(result)

It is also possible to do a comparison on lists with aok.OkayList and the !aok_list class replacing the aok.Okay and !aok values like shown in the example above.

The available comparators are:

  • aok.anything() will always succeed, no matter what the observed value is.
  • aok.between(min, max) must be greater than or equal to min and less than or equal to the specified min and max values. This can be a numeric or string value.
  • aok.equals(value) must be an exact match between the values.
  • aok.unequals(value) must not be equal to the expected value.
  • aok.greater(value) must be greater than the specified value.
  • aok.greater_or_equal(value) must be greater than or equal to the specified value.
  • aok.less(value) must be less than the specified value.
  • aok.less_or_equal(value) must be less than or equal to the specified value.
  • aok.contains(string_value) must be a string that contains the specified substring exactly.
  • aok.not_contains(string_value) must be a string that does not contain the exact specified string value.
  • aok.like(string_value) string compares against case-insensitive, unix-shell-style wildcard expressions, e.g. "foo*" would match "foo-bar".
  • aok.not_like(string_vlaue) string compares against case-insensitive, unix-shell-style wildcard expressions, e.g. "bar", and expects not to find a match.
  • aok.like_case(string_value) string compares against case-sensitive, unix-shell-style wildcard expressions, e.g. "Foo*" would match "Foo-Bar".
  • aok.match(string_regex_pattern) matches the string against the specified regex pattern.
  • aok.not_null(value) must not be null/None, but can be anything else.
  • aok.optional(value) must equal the specified value or be null/None.
  • aok.one_of(value) must match one of the values in the specified list. Any of the
  • aok.none_of(value) must not match one of the values in the specified list. Any of the list items can also be a comparator that will be negated.
  • aok.json_dict(dict) parses a JSON-serialized string attribute and compares it to the dictionary/object in the same fashion as the !aok root object.
  • aok.json_list(list) parses a JSON-serialized string attribute nad compares it to the list object in the same fashion as the !aok_list root object.

Metadata

Release files for aok 0.3.4

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for aok 0.3.4
File Size Uploaded Provenance Actions
aok-0.3.4.tar.gz 11.6 kB Without provenance Details for aok-0.3.4.tar.gz

Built distribution (wheel)

Table of built distributions (wheels) for aok 0.3.4
File Interpreter ABI Platform Actions
aok-0.3.4-py3-none-any.whl Python 3 none any Details for aok-0.3.4-py3-none-any.whl

Total release size: 25.8 kB

Release files / aok-0.3.4.tar.gz

Download URL aok-0.3.4.tar.gz
Size 11.6 kB
Tags Source
SHA-256 checksum
How to use checksums
116370e120b52b209b3a61fb80c255249253e8a6a5141df857a5183e298ed289
BLAKE2b-256 checksum
How to use checksums
c4c2ac47cd8a93b3a5d3bf0233d5db9c0073c521a3cea3268d66753df7f204e2
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via poetry/1.1.14 CPython/3.10.6 Linux/5.4.109+

Release files / aok-0.3.4-py3-none-any.whl

Download URL aok-0.3.4-py3-none-any.whl
Size 14.1 kB
Tags Python 3
SHA-256 checksum
How to use checksums
c37b958817e772e0535d8dc030452983c9cd13ef5286e2dce3a4f43040387e26
BLAKE2b-256 checksum
How to use checksums
e232d532adf7b6247f3428f01c0878a3f909e7d5a09d04d2f14ca53b9b564792
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via poetry/1.1.14 CPython/3.10.6 Linux/5.4.109+

Security for aok 0.3.4

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

No provenance found

None of the files in this release were uploaded with provenance metadata.

A note on package security

PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.

To learn more about protecting yourself from malicious actors, visit our package security documentation.

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page