kuckuck 0.0.1__tar.gz

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.
Files changed (35) hide show
  1. kuckuck-0.0.1/.github/dependabot.yml +18 -0
  2. kuckuck-0.0.1/.github/workflows/build_executable.yml +123 -0
  3. kuckuck-0.0.1/.github/workflows/codeql-analysis.yml +70 -0
  4. kuckuck-0.0.1/.github/workflows/coverage.yml +22 -0
  5. kuckuck-0.0.1/.github/workflows/dependabot_automerge.yml +18 -0
  6. kuckuck-0.0.1/.github/workflows/dev_test.yml +28 -0
  7. kuckuck-0.0.1/.github/workflows/formatting.yml +25 -0
  8. kuckuck-0.0.1/.github/workflows/no_byte_order_mark.yml +15 -0
  9. kuckuck-0.0.1/.github/workflows/packaging_test.yml +22 -0
  10. kuckuck-0.0.1/.github/workflows/python-publish.yml +75 -0
  11. kuckuck-0.0.1/.github/workflows/pythonlint.yml +26 -0
  12. kuckuck-0.0.1/.github/workflows/unittests.yml +27 -0
  13. kuckuck-0.0.1/.gitignore +142 -0
  14. kuckuck-0.0.1/LICENSE +21 -0
  15. kuckuck-0.0.1/PKG-INFO +398 -0
  16. kuckuck-0.0.1/README.md +340 -0
  17. kuckuck-0.0.1/domain-specific-terms.txt +14 -0
  18. kuckuck-0.0.1/pyproject.toml +127 -0
  19. kuckuck-0.0.1/requirements.txt +45 -0
  20. kuckuck-0.0.1/src/_kuckuck_version.py +1 -0
  21. kuckuck-0.0.1/src/kuckuck/__init__.py +30 -0
  22. kuckuck-0.0.1/src/kuckuck/__main__.py +269 -0
  23. kuckuck-0.0.1/src/kuckuck/config.py +142 -0
  24. kuckuck-0.0.1/src/kuckuck/crypto.py +178 -0
  25. kuckuck-0.0.1/src/kuckuck/detectors/__init__.py +19 -0
  26. kuckuck-0.0.1/src/kuckuck/detectors/base.py +83 -0
  27. kuckuck-0.0.1/src/kuckuck/detectors/denylist.py +89 -0
  28. kuckuck-0.0.1/src/kuckuck/detectors/email.py +49 -0
  29. kuckuck-0.0.1/src/kuckuck/detectors/handle.py +130 -0
  30. kuckuck-0.0.1/src/kuckuck/detectors/phone.py +40 -0
  31. kuckuck-0.0.1/src/kuckuck/detectors/resolver.py +31 -0
  32. kuckuck-0.0.1/src/kuckuck/mapping.py +199 -0
  33. kuckuck-0.0.1/src/kuckuck/pseudonymize.py +173 -0
  34. kuckuck-0.0.1/src/kuckuck/py.typed +2 -0
  35. kuckuck-0.0.1/tox.ini +138 -0
@@ -0,0 +1,18 @@
1
+ # To get started with Dependabot version updates, you'll need to specify which
2
+ # package ecosystems to update and where the package manifests are located.
3
+ # Please see the documentation for all configuration options:
4
+ # https://help.github.com/github/administering-a-repository/configuration-options-for-dependency-updates
5
+
6
+ version: 2
7
+ updates:
8
+ - package-ecosystem: "pip" # See documentation for possible values
9
+ directory: "/" # Location of package manifests
10
+ schedule:
11
+ interval: "weekly"
12
+ reviewers:
13
+ - "@Hochfrequenz/python-developers-review-team"
14
+ # Maintain dependencies for GitHub Actions
15
+ - package-ecosystem: "github-actions"
16
+ directory: "/"
17
+ schedule:
18
+ interval: "weekly"
@@ -0,0 +1,123 @@
1
+ name: "Build Executable"
2
+
3
+ on:
4
+ push:
5
+ branches: [main]
6
+ pull_request: {}
7
+ release:
8
+ types: [created]
9
+
10
+ jobs:
11
+ build:
12
+ strategy:
13
+ fail-fast: false
14
+ matrix:
15
+ include:
16
+ - os: windows-latest
17
+ tox_env: build_executable
18
+ artifact: kuckuck_windows
19
+ binary: kuckuck_windows.exe
20
+ - os: macos-latest
21
+ tox_env: build_executable_macos
22
+ artifact: kuckuck_macos_arm64
23
+ binary: kuckuck_macos_arm64
24
+ runs-on: ${{ matrix.os }}
25
+ steps:
26
+ - uses: actions/checkout@v6
27
+ - name: Set up Python
28
+ uses: actions/setup-python@v6
29
+ with:
30
+ python-version: "3.14"
31
+ - name: Build Executable
32
+ run: |
33
+ python -m pip install --upgrade pip
34
+ pip install tox
35
+ tox -e ${{ matrix.tox_env }}
36
+ - name: Freeze build dependencies
37
+ run: tox exec -e ${{ matrix.tox_env }} -- pip freeze > dist/build-dependencies.txt
38
+ shell: bash
39
+ - name: Upload Executable as Artifact
40
+ uses: actions/upload-artifact@v7
41
+ with:
42
+ name: ${{ matrix.artifact }}
43
+ path: |
44
+ dist/${{ matrix.binary }}
45
+ dist/build-dependencies.txt
46
+
47
+ smoke_test:
48
+ needs: build
49
+ strategy:
50
+ fail-fast: false
51
+ matrix:
52
+ include:
53
+ - os: windows-latest
54
+ artifact: kuckuck_windows
55
+ binary: kuckuck_windows.exe
56
+ - os: macos-latest
57
+ artifact: kuckuck_macos_arm64
58
+ binary: kuckuck_macos_arm64
59
+ runs-on: ${{ matrix.os }}
60
+ name: "Smoke Test (${{ matrix.os }})"
61
+ steps:
62
+ - uses: actions/checkout@v6
63
+ - name: Set up Python
64
+ uses: actions/setup-python@v6
65
+ with:
66
+ python-version: "3.14"
67
+ - name: Download Executable
68
+ uses: actions/download-artifact@v8
69
+ with:
70
+ name: ${{ matrix.artifact }}
71
+ path: dist
72
+ # actions/upload-artifact zips contents and the zip format does not
73
+ # reliably preserve Unix mode bits on download — restore +x.
74
+ - name: Make binary executable (macOS)
75
+ if: matrix.os == 'macos-latest'
76
+ run: chmod +x dist/${{ matrix.binary }}
77
+ shell: bash
78
+ - name: Smoke Test
79
+ run: python unittests/smoke_test_exe.py dist/${{ matrix.binary }}
80
+
81
+ release:
82
+ needs: [build, smoke_test]
83
+ if: github.event_name == 'release'
84
+ runs-on: ubuntu-latest
85
+ permissions:
86
+ contents: write
87
+ steps:
88
+ - name: Download Windows Executable
89
+ uses: actions/download-artifact@v8
90
+ with:
91
+ name: kuckuck_windows
92
+ path: dist/windows
93
+ continue-on-error: true
94
+ - name: Download macOS Executable
95
+ uses: actions/download-artifact@v8
96
+ with:
97
+ name: kuckuck_macos_arm64
98
+ path: dist/macos
99
+ continue-on-error: true
100
+ - name: Rename Executables with version
101
+ run: |
102
+ set -eu
103
+ mkdir -p dist/release
104
+ if [ -f ./dist/windows/kuckuck_windows.exe ]; then
105
+ mv ./dist/windows/kuckuck_windows.exe \
106
+ ./dist/release/kuckuck_windows_${{ github.ref_name }}.exe
107
+ else
108
+ echo "::warning::Windows artifact missing; skipping"
109
+ fi
110
+ if [ -f ./dist/macos/kuckuck_macos_arm64 ]; then
111
+ mv ./dist/macos/kuckuck_macos_arm64 \
112
+ ./dist/release/kuckuck_macos_arm64_${{ github.ref_name }}
113
+ else
114
+ echo "::warning::macOS arm64 artifact missing; skipping"
115
+ fi
116
+ ls -la dist/release/
117
+ - name: Upload Executable to Release
118
+ uses: softprops/action-gh-release@v3
119
+ with:
120
+ files: |
121
+ ./dist/release/kuckuck_windows_${{ github.ref_name }}.exe
122
+ ./dist/release/kuckuck_macos_arm64_${{ github.ref_name }}
123
+ fail_on_unmatched_files: false
@@ -0,0 +1,70 @@
1
+ # For most projects, this workflow file will not need changing; you simply need
2
+ # to commit it to your repository.
3
+ #
4
+ # You may wish to alter this file to override the set of languages analyzed,
5
+ # or to provide custom queries or build logic.
6
+ #
7
+ # ******** NOTE ********
8
+ # We have attempted to detect the languages in your repository. Please check
9
+ # the `language` matrix defined below to confirm you have the correct set of
10
+ # supported CodeQL languages.
11
+ #
12
+ name: "CodeQL"
13
+
14
+ on:
15
+ push:
16
+ branches: [main]
17
+ pull_request:
18
+ # The branches below must be a subset of the branches above
19
+ branches: [main]
20
+ schedule:
21
+ - cron: "29 14 * * 6"
22
+
23
+ jobs:
24
+ analyze:
25
+ name: Analyze
26
+ runs-on: ubuntu-latest
27
+ permissions:
28
+ actions: read
29
+ contents: read
30
+ security-events: write
31
+
32
+ strategy:
33
+ fail-fast: false
34
+ matrix:
35
+ language: ["python"]
36
+ # CodeQL supports [ 'cpp', 'csharp', 'go', 'java', 'javascript', 'python', 'ruby' ]
37
+ # Learn more about CodeQL language support at https://git.io/codeql-language-support
38
+
39
+ steps:
40
+ - name: Checkout repository
41
+ uses: actions/checkout@v6
42
+
43
+ # Initializes the CodeQL tools for scanning.
44
+ - name: Initialize CodeQL
45
+ uses: github/codeql-action/init@v4
46
+ with:
47
+ languages: ${{ matrix.language }}
48
+ # If you wish to specify custom queries, you can do so here or in a config file.
49
+ # By default, queries listed here will override any specified in a config file.
50
+ # Prefix the list here with "+" to use these queries and those in the config file.
51
+ # queries: ./path/to/local/query, your-org/your-repo/queries@main
52
+
53
+ # Autobuild attempts to build any compiled languages (C/C++, C#, or Java).
54
+ # If this step fails, then you should remove it and run the build manually (see below)
55
+ - name: Autobuild
56
+ uses: github/codeql-action/autobuild@v4
57
+
58
+ # ℹ️ Command-line programs to run using the OS shell.
59
+ # 📚 https://git.io/JvXDl
60
+
61
+ # ✏️ If the Autobuild fails above, remove it and uncomment the following three lines
62
+ # and modify them (or add more) to build your code if your project
63
+ # uses a compiled language
64
+
65
+ #- run: |
66
+ # make bootstrap
67
+ # make release
68
+
69
+ - name: Perform CodeQL Analysis
70
+ uses: github/codeql-action/analyze@v4
@@ -0,0 +1,22 @@
1
+ name: "Coverage"
2
+
3
+ on:
4
+ push:
5
+ branches: [main]
6
+ pull_request: {}
7
+ jobs:
8
+ coverage:
9
+ runs-on: ubuntu-latest
10
+ steps:
11
+ - uses: actions/checkout@v6
12
+ - name: Set up Python
13
+ uses: actions/setup-python@v6
14
+ with:
15
+ python-version: 3.14
16
+ - name: Install dependencies
17
+ run: |
18
+ python -m pip install --upgrade pip
19
+ pip install tox
20
+ - name: Run Tests and Record Coverage
21
+ run: |
22
+ tox -e coverage
@@ -0,0 +1,18 @@
1
+ name: Dependabot auto-approve / -merge
2
+ on: pull_request
3
+
4
+ jobs:
5
+ dependabot:
6
+ permissions:
7
+ contents: write
8
+ pull-requests: write
9
+ runs-on: ubuntu-latest
10
+ env:
11
+ PR_URL: ${{github.event.pull_request.html_url}}
12
+ GITHUB_TOKEN: ${{secrets.GITHUB_TOKEN}}
13
+ if: ${{ github.actor == 'dependabot[bot]' }}
14
+ steps:
15
+ - name: Approve a PR
16
+ run: gh pr review --approve "$PR_URL"
17
+ - name: Enable auto-merge for Dependabot PRs
18
+ run: gh pr merge --auto --squash "$PR_URL"
@@ -0,0 +1,28 @@
1
+ name: "Test Dev Environment"
2
+ # Checks that the dev environment (tox -e dev) can be set up.
3
+ # This might not work, if different linting/testing envs refer to different versions of the same lib (e.g. typing-extensions).
4
+ # Different versions of the same package might work for isolated specific envs (only linting, only testing...) but the dev environment inherits from all of them.
5
+ on:
6
+ push:
7
+ branches: [main]
8
+ pull_request: {}
9
+ jobs:
10
+ check:
11
+ runs-on: ${{ matrix.os }}
12
+ strategy:
13
+ matrix:
14
+ python-version: ["3.11", "3.12", "3.13", "3.14"]
15
+ os: [ubuntu-latest]
16
+ steps:
17
+ - uses: actions/checkout@v6
18
+ - name: Set up Python ${{ matrix.python-version }}
19
+ uses: actions/setup-python@v6
20
+ with:
21
+ python-version: ${{ matrix.python-version }}
22
+ - name: Install Dependencies
23
+ run: |
24
+ python -m pip install --upgrade pip
25
+ pip install tox
26
+ - name: Create a Dev Environment
27
+ run: |
28
+ tox -e dev
@@ -0,0 +1,25 @@
1
+ name: "Formatting"
2
+
3
+ on:
4
+ push:
5
+ branches: [main]
6
+ pull_request: {}
7
+ jobs:
8
+ format:
9
+ runs-on: ubuntu-latest
10
+ strategy:
11
+ matrix:
12
+ tool: ["black", "isort"]
13
+ steps:
14
+ - uses: actions/checkout@v6
15
+ - name: Set up Python
16
+ uses: actions/setup-python@v6
17
+ with:
18
+ python-version: 3.14
19
+ - name: Install dependencies
20
+ run: |
21
+ python -m pip install --upgrade pip
22
+ pip install .[formatting]
23
+ - name: ${{ matrix.tool }} Code Formatter
24
+ run: |
25
+ ${{ matrix.tool }} . --check
@@ -0,0 +1,15 @@
1
+ name: Prevent ByteOrderMarks
2
+
3
+ on:
4
+ push:
5
+ branches:
6
+ - main
7
+ pull_request: {}
8
+
9
+ jobs:
10
+ bom-check:
11
+ runs-on: ubuntu-latest
12
+ steps:
13
+ - uses: actions/checkout@v6
14
+ - uses: arma-actions/bom-check@v1
15
+ name: Check for BOM
@@ -0,0 +1,22 @@
1
+ name: "Packaging Test"
2
+
3
+ on:
4
+ push:
5
+ branches: [main]
6
+ pull_request: {}
7
+ jobs:
8
+ check_packaging:
9
+ runs-on: ubuntu-latest
10
+ steps:
11
+ - uses: actions/checkout@v6
12
+ - name: Set up Python
13
+ uses: actions/setup-python@v6
14
+ with:
15
+ python-version: 3.14
16
+ - name: Install dependencies
17
+ run: |
18
+ python -m pip install --upgrade pip
19
+ pip install tox
20
+ - name: Run Packaging Test
21
+ run: |
22
+ tox -e test_packaging
@@ -0,0 +1,75 @@
1
+ # Publishes the Kuckuck wheel + sdist to PyPI on GitHub releases tagged `v*`.
2
+ #
3
+ # Prerequisites (one-time, done outside this repo):
4
+ # 1. A GitHub environment named `release` exists on Hochfrequenz/kuckuck
5
+ # (Repo Settings -> Environments -> New environment).
6
+ # 2. PyPI has a Trusted Publisher registered for this workflow:
7
+ # Owner = Hochfrequenz
8
+ # Repo = kuckuck
9
+ # Workflow file = python-publish.yml
10
+ # Environment = release
11
+ # Register at https://pypi.org/manage/account/publishing/
12
+ #
13
+ # When a release tagged `v<version>` is created on GitHub:
14
+ # - The `tests` job re-runs the full test suite on the tagged commit.
15
+ # - The `build-n-publish` job builds wheel + sdist and uploads to PyPI
16
+ # via OIDC (no API token needed thanks to the trusted publisher).
17
+
18
+ name: Upload Python Package
19
+
20
+ on:
21
+ release:
22
+ types: [created, edited]
23
+
24
+ jobs:
25
+ tests:
26
+ if: startsWith(github.ref, 'refs/tags/v')
27
+ runs-on: ${{ matrix.os }}
28
+ strategy:
29
+ matrix:
30
+ python-version: ["3.14"]
31
+ os: [ubuntu-latest]
32
+ steps:
33
+ - uses: actions/checkout@v6
34
+ - name: Set up Python ${{ matrix.python-version }}
35
+ uses: actions/setup-python@v6
36
+ with:
37
+ python-version: ${{ matrix.python-version }}
38
+ - name: Install tox
39
+ run: |
40
+ python -m pip install --upgrade pip
41
+ pip install tox
42
+ - name: Run tox
43
+ run: |
44
+ tox
45
+
46
+ build-n-publish:
47
+ name: Build and publish Python distributions to PyPI
48
+ runs-on: ${{ matrix.os }}
49
+ strategy:
50
+ matrix:
51
+ python-version: ["3.14"]
52
+ os: [ubuntu-latest]
53
+ # Required by PyPI trusted publishing:
54
+ # https://docs.pypi.org/trusted-publishers/adding-a-publisher/
55
+ environment: release
56
+ permissions:
57
+ # Mandatory for trusted publishing via OIDC.
58
+ id-token: write
59
+ needs: tests
60
+ steps:
61
+ - uses: actions/checkout@v6
62
+ - name: Set up Python ${{ matrix.python-version }}
63
+ uses: actions/setup-python@v6
64
+ with:
65
+ python-version: ${{ matrix.python-version }}
66
+ - name: Install build dependencies
67
+ run: |
68
+ python -m pip install --upgrade pip
69
+ pip install .[packaging]
70
+ - name: Build wheel and source distribution
71
+ run: |
72
+ python -m build
73
+ - name: Publish distribution to PyPI
74
+ if: startsWith(github.ref, 'refs/tags/v')
75
+ uses: pypa/gh-action-pypi-publish@release/v1
@@ -0,0 +1,26 @@
1
+ name: "Linting"
2
+
3
+ on:
4
+ push:
5
+ branches: [main]
6
+ pull_request: {}
7
+ jobs:
8
+ pylint:
9
+ name: Python Code Quality and Lint
10
+ runs-on: ubuntu-latest
11
+ strategy:
12
+ matrix:
13
+ linter-env: ["linting", "type_check", "spell_check"]
14
+ steps:
15
+ - uses: actions/checkout@v6
16
+ - name: Set up Python
17
+ uses: actions/setup-python@v6
18
+ with:
19
+ python-version: 3.14
20
+ - name: Install Dependencies
21
+ run: |
22
+ python -m pip install --upgrade pip
23
+ pip install tox
24
+ - name: Run ${{ matrix.linter-env }} via Tox
25
+ run: |
26
+ tox -e ${{ matrix.linter-env }}
@@ -0,0 +1,27 @@
1
+ name: "Unittests"
2
+
3
+ on:
4
+ push:
5
+ branches: [main]
6
+ pull_request: {}
7
+ jobs:
8
+ pytest:
9
+ runs-on: ${{ matrix.os }}
10
+ strategy:
11
+ fail-fast: false
12
+ matrix:
13
+ python-version: ["3.11", "3.12", "3.13", "3.14"]
14
+ os: [ubuntu-latest, windows-latest, macos-latest]
15
+ steps:
16
+ - uses: actions/checkout@v6
17
+ - name: Set up Python ${{ matrix.python-version }}
18
+ uses: actions/setup-python@v6
19
+ with:
20
+ python-version: ${{ matrix.python-version }}
21
+ - name: Install Dependencies
22
+ run: |
23
+ python -m pip install --upgrade pip
24
+ pip install tox
25
+ - name: Run the Unit Tests via Tox
26
+ run: |
27
+ tox -e tests
@@ -0,0 +1,142 @@
1
+ # Byte-compiled / optimized / DLL files
2
+ __pycache__/
3
+ *.py[cod]
4
+ *$py.class
5
+
6
+ # C extensions
7
+ *.so
8
+
9
+ # Distribution / packaging
10
+ .Python
11
+ build/
12
+ develop-eggs/
13
+ dist/
14
+ downloads/
15
+ eggs/
16
+ .eggs/
17
+ lib/
18
+ lib64/
19
+ parts/
20
+ sdist/
21
+ var/
22
+ wheels/
23
+ pip-wheel-metadata/
24
+ share/python-wheels/
25
+ *.egg-info/
26
+ .installed.cfg
27
+ *.egg
28
+ MANIFEST
29
+
30
+ # PyInstaller
31
+ # Usually these files are written by a python script from a template
32
+ # before PyInstaller builds the exe, so as to inject date/other infos into it.
33
+ *.manifest
34
+ *.spec
35
+
36
+ # Installer logs
37
+ pip-log.txt
38
+ pip-delete-this-directory.txt
39
+
40
+ # Unit test / coverage reports
41
+ htmlcov/
42
+ .tox/
43
+ .nox/
44
+ .coverage
45
+ .coverage.*
46
+ .cache
47
+ nosetests.xml
48
+ coverage.xml
49
+ *.cover
50
+ *.py,cover
51
+ .hypothesis/
52
+ .pytest_cache/
53
+
54
+ # Translations
55
+ *.mo
56
+ *.pot
57
+
58
+ # Django stuff:
59
+ *.log
60
+ local_settings.py
61
+ db.sqlite3
62
+ db.sqlite3-journal
63
+
64
+ # Flask stuff:
65
+ instance/
66
+ .webassets-cache
67
+
68
+ # Scrapy stuff:
69
+ .scrapy
70
+
71
+ # Sphinx documentation
72
+ docs/_build/
73
+
74
+ # PyBuilder
75
+ target/
76
+
77
+ # Jupyter Notebook
78
+ .ipynb_checkpoints
79
+
80
+ # IPython
81
+ profile_default/
82
+ ipython_config.py
83
+
84
+ # pyenv
85
+ .python-version
86
+
87
+ # pipenv
88
+ # According to pypa/pipenv#598, it is recommended to include Pipfile.lock in version control.
89
+ # However, in case of collaboration, if having platform-specific dependencies or dependencies
90
+ # having no cross-platform support, pipenv may install dependencies that don't work, or not
91
+ # install all needed dependencies.
92
+ #Pipfile.lock
93
+
94
+ # PEP 582; used by e.g. github.com/David-OConnor/pyflow
95
+ __pypackages__/
96
+
97
+ # Celery stuff
98
+ celerybeat-schedule
99
+ celerybeat.pid
100
+
101
+ # SageMath parsed files
102
+ *.sage.py
103
+
104
+ # Environments
105
+ .env
106
+ .venv
107
+ env/
108
+ venv/
109
+ ENV/
110
+ env.bak/
111
+ venv.bak/
112
+
113
+ # Spyder project settings
114
+ .spyderproject
115
+ .spyproject
116
+
117
+ # Rope project settings
118
+ .ropeproject
119
+
120
+ # mkdocs documentation
121
+ /site
122
+
123
+ # mypy
124
+ .mypy_cache/
125
+ .dmypy.json
126
+ dmypy.json
127
+
128
+ # Pyre type checker
129
+ .pyre/
130
+
131
+ .idea/
132
+
133
+ # vscode settings
134
+ .vscode/
135
+
136
+ src/_kuckuck_version.py
137
+
138
+ # Kuckuck artifacts (never commit)
139
+ .kuckuck-key
140
+ *.kuckuck-map.enc
141
+ *.pseudonymized.*
142
+ kuckuck-log.jsonl
kuckuck-0.0.1/LICENSE ADDED
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2026 Hochfrequenz Unternehmensberatung GmbH
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.