diff options
author | CoprDistGit <infra@openeuler.org> | 2023-05-31 07:56:24 +0000 |
---|---|---|
committer | CoprDistGit <infra@openeuler.org> | 2023-05-31 07:56:24 +0000 |
commit | 1fcf0f277555702f59476f217cd82c28240e4f28 (patch) | |
tree | 571bbb6026ec21fb392543b28541cd0fa9499ff9 | |
parent | 8b94dca48cfb04980b7a488be2a0c4a836d5d3a8 (diff) |
automatic import of python-aok
-rw-r--r-- | .gitignore | 1 | ||||
-rw-r--r-- | python-aok.spec | 410 | ||||
-rw-r--r-- | sources | 1 |
3 files changed, 412 insertions, 0 deletions
@@ -0,0 +1 @@ +/aok-0.3.4.tar.gz diff --git a/python-aok.spec b/python-aok.spec new file mode 100644 index 0000000..26b012c --- /dev/null +++ b/python-aok.spec @@ -0,0 +1,410 @@ +%global _empty_manifest_terminate_build 0 +Name: python-aok +Version: 0.3.4 +Release: 1 +Summary: Complex dictionary comparisons to simplify testing. +License: MIT +URL: https://gitlab.com/rocket-boosters/a-ok +Source0: https://mirrors.nju.edu.cn/pypi/web/packages/c4/c2/ac47cd8a93b3a5d3bf0233d5db9c0073c521a3cea3268d66753df7f204e2/aok-0.3.4.tar.gz +BuildArch: noarch + +Requires: python3-PyYAML +Requires: python3-toml + +%description +# A-OK + +[](https://pypi.org/project/aok/) +[](https://gitlab.com/rocket-boosters/a-ok/commits/main) +[](https://gitlab.com/rocket-boosters/a-ok/commits/main) +[](https://github.com/psf/black) +[](https://gitlab.com/pycqa/flake8) +[](http://mypy-lang.org/) +[](https://pypi.org/project/aok/) + +*aok* is a library for simplifying the assertions of complex dictionary returns, +which can be used within Python code or loaded via YAML files. + +```python +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: + +```yaml +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: + +```python +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. + + +%package -n python3-aok +Summary: Complex dictionary comparisons to simplify testing. +Provides: python-aok +BuildRequires: python3-devel +BuildRequires: python3-setuptools +BuildRequires: python3-pip +%description -n python3-aok +# A-OK + +[](https://pypi.org/project/aok/) +[](https://gitlab.com/rocket-boosters/a-ok/commits/main) +[](https://gitlab.com/rocket-boosters/a-ok/commits/main) +[](https://github.com/psf/black) +[](https://gitlab.com/pycqa/flake8) +[](http://mypy-lang.org/) +[](https://pypi.org/project/aok/) + +*aok* is a library for simplifying the assertions of complex dictionary returns, +which can be used within Python code or loaded via YAML files. + +```python +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: + +```yaml +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: + +```python +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. + + +%package help +Summary: Development documents and examples for aok +Provides: python3-aok-doc +%description help +# A-OK + +[](https://pypi.org/project/aok/) +[](https://gitlab.com/rocket-boosters/a-ok/commits/main) +[](https://gitlab.com/rocket-boosters/a-ok/commits/main) +[](https://github.com/psf/black) +[](https://gitlab.com/pycqa/flake8) +[](http://mypy-lang.org/) +[](https://pypi.org/project/aok/) + +*aok* is a library for simplifying the assertions of complex dictionary returns, +which can be used within Python code or loaded via YAML files. + +```python +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: + +```yaml +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: + +```python +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. + + +%prep +%autosetup -n aok-0.3.4 + +%build +%py3_build + +%install +%py3_install +install -d -m755 %{buildroot}/%{_pkgdocdir} +if [ -d doc ]; then cp -arf doc %{buildroot}/%{_pkgdocdir}; fi +if [ -d docs ]; then cp -arf docs %{buildroot}/%{_pkgdocdir}; fi +if [ -d example ]; then cp -arf example %{buildroot}/%{_pkgdocdir}; fi +if [ -d examples ]; then cp -arf examples %{buildroot}/%{_pkgdocdir}; fi +pushd %{buildroot} +if [ -d usr/lib ]; then + find usr/lib -type f -printf "/%h/%f\n" >> filelist.lst +fi +if [ -d usr/lib64 ]; then + find usr/lib64 -type f -printf "/%h/%f\n" >> filelist.lst +fi +if [ -d usr/bin ]; then + find usr/bin -type f -printf "/%h/%f\n" >> filelist.lst +fi +if [ -d usr/sbin ]; then + find usr/sbin -type f -printf "/%h/%f\n" >> filelist.lst +fi +touch doclist.lst +if [ -d usr/share/man ]; then + find usr/share/man -type f -printf "/%h/%f.gz\n" >> doclist.lst +fi +popd +mv %{buildroot}/filelist.lst . +mv %{buildroot}/doclist.lst . + +%files -n python3-aok -f filelist.lst +%dir %{python3_sitelib}/* + +%files help -f doclist.lst +%{_docdir}/* + +%changelog +* Wed May 31 2023 Python_Bot <Python_Bot@openeuler.org> - 0.3.4-1 +- Package Spec generated @@ -0,0 +1 @@ +6ad87e4cafabc214e498c2f7bb05773a aok-0.3.4.tar.gz |