jupyter-nbmodel-client 0.6.0__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.
@@ -0,0 +1,18 @@
1
+ version: 2
2
+ updates:
3
+ - package-ecosystem: "github-actions"
4
+ directory: "/"
5
+ schedule:
6
+ interval: "monthly"
7
+ groups:
8
+ actions:
9
+ patterns:
10
+ - "*"
11
+ - package-ecosystem: "pip"
12
+ directory: "/"
13
+ schedule:
14
+ interval: "monthly"
15
+ groups:
16
+ pip:
17
+ patterns:
18
+ - "*"
@@ -0,0 +1,112 @@
1
+ name: Build
2
+
3
+ on:
4
+ push:
5
+ branches: ["main"]
6
+ pull_request:
7
+
8
+ defaults:
9
+ run:
10
+ shell: bash -eux {0}
11
+
12
+ concurrency:
13
+ group: ${{ github.workflow }}-${{ github.event.pull_request.number || github.ref }}
14
+ cancel-in-progress: true
15
+
16
+ jobs:
17
+ build:
18
+ runs-on: ubuntu-latest
19
+ strategy:
20
+ fail-fast: false
21
+ matrix:
22
+ os: [ubuntu-latest, macos-latest, windows-latest]
23
+ python-version: ["3.9", "3.13"]
24
+
25
+ steps:
26
+ - name: Checkout
27
+ uses: actions/checkout@v4
28
+
29
+ - name: Base Setup
30
+ uses: jupyterlab/maintainer-tools/.github/actions/base-setup@v1
31
+
32
+ - name: Install the extension
33
+ run: |
34
+ python -m pip install ".[test]"
35
+
36
+ - name: Test the extension
37
+ run: |
38
+ pytest .
39
+
40
+ - name: Build the extension
41
+ run: |
42
+ pip install build
43
+ python -m build --sdist
44
+ cp dist/*.tar.gz my_package.tar.gz
45
+ pip uninstall -y "jupyter_nbmodel_client"
46
+ rm -rf "jupyter_nbmodel_client"
47
+
48
+ - uses: actions/upload-artifact@v4
49
+ if: startsWith(matrix.os, 'ubuntu')
50
+ with:
51
+ name: my_package-sdist-${{ matrix.python-version }}
52
+ path: my_package.tar.gz
53
+
54
+ check_links:
55
+ runs-on: ubuntu-latest
56
+ steps:
57
+ - uses: actions/checkout@v4
58
+ - uses: jupyterlab/maintainer-tools/.github/actions/base-setup@v1
59
+ - uses: jupyterlab/maintainer-tools/.github/actions/check-links@v1
60
+
61
+ test_lint:
62
+ runs-on: ubuntu-latest
63
+ steps:
64
+ - uses: actions/checkout@v4
65
+ - uses: jupyterlab/maintainer-tools/.github/actions/base-setup@v1
66
+ - name: Run Linters
67
+ run: |
68
+ bash ./.github/workflows/lint.sh
69
+
70
+ test_sdist:
71
+ needs: build
72
+ runs-on: ubuntu-latest
73
+ strategy:
74
+ matrix:
75
+ python-version: ["3.13"]
76
+
77
+ steps:
78
+ - name: Checkout
79
+ uses: actions/checkout@v4
80
+ - name: Install Python
81
+ uses: actions/setup-python@v5
82
+ with:
83
+ python-version: ${{ matrix.python-version }}
84
+ architecture: "x64"
85
+ - uses: actions/download-artifact@v4
86
+ with:
87
+ name: my_package-sdist-${{ matrix.python-version }}
88
+ - name: Install and Test
89
+ run: |
90
+ pip install my_package.tar.gz
91
+ pip list 2>&1 | grep -ie "jupyter_nbmodel_client"
92
+ python -c "import jupyter_nbmodel_client"
93
+
94
+ check_release:
95
+ needs: test_sdist
96
+ runs-on: ubuntu-latest
97
+ steps:
98
+ - uses: actions/checkout@v4
99
+ - name: Base Setup
100
+ uses: jupyterlab/maintainer-tools/.github/actions/base-setup@v1
101
+ - name: Install Dependencies
102
+ run: |
103
+ pip install -e .
104
+ - name: Check Release
105
+ uses: jupyter-server/jupyter_releaser/.github/actions/check-release@v2
106
+ with:
107
+ token: ${{ secrets.GITHUB_TOKEN }}
108
+ - name: Upload Distributions
109
+ uses: actions/upload-artifact@v4
110
+ with:
111
+ name: jupyter_nbmodel_client-releaser-dist-${{ github.run_number }}
112
+ path: .jupyter_releaser_checkout/dist
@@ -0,0 +1,62 @@
1
+ name: Fix License Headers
2
+
3
+ on:
4
+ pull_request_target:
5
+
6
+ concurrency:
7
+ group: ${{ github.workflow }}-${{ github.event.pull_request.number || github.ref }}
8
+ cancel-in-progress: true
9
+
10
+ jobs:
11
+ header-license-fix:
12
+ runs-on: ubuntu-latest
13
+
14
+ permissions:
15
+ contents: write
16
+ pull-requests: write
17
+
18
+ steps:
19
+ - name: Checkout
20
+ uses: actions/checkout@v4
21
+ with:
22
+ token: ${{ secrets.GITHUB_TOKEN }}
23
+
24
+ - name: Checkout the branch from the PR that triggered the job
25
+ run: gh pr checkout ${{ github.event.pull_request.number }}
26
+ env:
27
+ GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
28
+
29
+ - name: Fix License Header
30
+ # pin to include https://github.com/apache/skywalking-eyes/pull/168
31
+ uses: apache/skywalking-eyes/header@3ea9df11bb3a5a85665377d1fd10c02edecf2c40
32
+ with:
33
+ mode: fix
34
+
35
+ - name: List files changed
36
+ id: files-changed
37
+ shell: bash -l {0}
38
+ run: |
39
+ set -ex
40
+ export CHANGES=$(git status --porcelain | tee /tmp/modified.log | wc -l)
41
+ cat /tmp/modified.log
42
+
43
+ echo "N_CHANGES=${CHANGES}" >> $GITHUB_OUTPUT
44
+
45
+ git diff
46
+
47
+ - name: Commit any changes
48
+ if: steps.files-changed.outputs.N_CHANGES != '0'
49
+ shell: bash -l {0}
50
+ run: |
51
+ git config user.name "github-actions[bot]"
52
+ git config user.email "github-actions[bot]@users.noreply.github.com"
53
+
54
+ git pull --no-tags
55
+
56
+ git add *
57
+ git commit -m "Automatic application of license header"
58
+
59
+ git config push.default upstream
60
+ git push
61
+ env:
62
+ GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
@@ -0,0 +1,10 @@
1
+ #!/usr/bin/env bash
2
+ # Copyright (c) 2023-2024 Datalayer, Inc.
3
+ #
4
+ # BSD 3-Clause License
5
+
6
+ pip install -e ".[lint, typing]"
7
+ mypy --install-types --non-interactive .
8
+ ruff check .
9
+ mdformat --check *.md
10
+ pipx run 'validate-pyproject[all]' pyproject.toml
@@ -0,0 +1,48 @@
1
+ name: "Step 1: Prep Release"
2
+ on:
3
+ workflow_dispatch:
4
+ inputs:
5
+ version_spec:
6
+ description: "New Version Specifier"
7
+ default: "next"
8
+ required: false
9
+ branch:
10
+ description: "The branch to target"
11
+ required: false
12
+ post_version_spec:
13
+ description: "Post Version Specifier"
14
+ required: false
15
+ # silent:
16
+ # description: "Set a placeholder in the changelog and don't publish the release."
17
+ # required: false
18
+ # type: boolean
19
+ since:
20
+ description: "Use PRs with activity since this date or git reference"
21
+ required: false
22
+ since_last_stable:
23
+ description: "Use PRs with activity since the last stable git tag"
24
+ required: false
25
+ type: boolean
26
+ jobs:
27
+ prep_release:
28
+ runs-on: ubuntu-latest
29
+ permissions:
30
+ contents: write
31
+ steps:
32
+ - uses: jupyterlab/maintainer-tools/.github/actions/base-setup@v1
33
+
34
+ - name: Prep Release
35
+ id: prep-release
36
+ uses: jupyter-server/jupyter_releaser/.github/actions/prep-release@v2
37
+ with:
38
+ token: ${{ secrets.GITHUB_TOKEN }}
39
+ version_spec: ${{ github.event.inputs.version_spec }}
40
+ # silent: ${{ github.event.inputs.silent }}
41
+ post_version_spec: ${{ github.event.inputs.post_version_spec }}
42
+ branch: ${{ github.event.inputs.branch }}
43
+ since: ${{ github.event.inputs.since }}
44
+ since_last_stable: ${{ github.event.inputs.since_last_stable }}
45
+
46
+ - name: "** Next Step **"
47
+ run: |
48
+ echo "Optional): Review Draft Release: ${{ steps.prep-release.outputs.release_url }}"
@@ -0,0 +1,58 @@
1
+ name: "Step 2: Publish Release"
2
+ on:
3
+ workflow_dispatch:
4
+ inputs:
5
+ branch:
6
+ description: "The target branch"
7
+ required: false
8
+ release_url:
9
+ description: "The URL of the draft GitHub release"
10
+ required: false
11
+ steps_to_skip:
12
+ description: "Comma separated list of steps to skip"
13
+ required: false
14
+
15
+ jobs:
16
+ publish_release:
17
+ runs-on: ubuntu-latest
18
+ environment: release
19
+ permissions:
20
+ id-token: write
21
+ steps:
22
+ - uses: jupyterlab/maintainer-tools/.github/actions/base-setup@v1
23
+
24
+ - uses: actions/create-github-app-token@v1
25
+ id: app-token
26
+ with:
27
+ app-id: ${{ vars.APP_ID }}
28
+ private-key: ${{ secrets.APP_PRIVATE_KEY }}
29
+
30
+ - name: Populate Release
31
+ id: populate-release
32
+ uses: jupyter-server/jupyter_releaser/.github/actions/populate-release@v2
33
+ with:
34
+ token: ${{ steps.app-token.outputs.token }}
35
+ branch: ${{ github.event.inputs.branch }}
36
+ release_url: ${{ github.event.inputs.release_url }}
37
+ steps_to_skip: ${{ github.event.inputs.steps_to_skip }}
38
+
39
+ - name: Finalize Release
40
+ id: finalize-release
41
+ env:
42
+ NPM_TOKEN: ${{ secrets.NPM_TOKEN }}
43
+ uses: jupyter-server/jupyter_releaser/.github/actions/finalize-release@v2
44
+ with:
45
+ token: ${{ steps.app-token.outputs.token }}
46
+ release_url: ${{ steps.populate-release.outputs.release_url }}
47
+
48
+ - name: "** Next Step **"
49
+ if: ${{ success() }}
50
+ run: |
51
+ echo "Verify the final release"
52
+ echo ${{ steps.finalize-release.outputs.release_url }}
53
+
54
+ - name: "** Failure Message **"
55
+ if: ${{ failure() }}
56
+ run: |
57
+ echo "Failed to Publish the Draft Release Url:"
58
+ echo ${{ steps.populate-release.outputs.release_url }}
@@ -0,0 +1,107 @@
1
+ *.egg-info/
2
+ .ipynb_checkpoints
3
+
4
+ # Created by https://www.gitignore.io/api/python
5
+ # Edit at https://www.gitignore.io/?templates=python
6
+
7
+ ### Python ###
8
+ # Byte-compiled / optimized / DLL files
9
+ __pycache__/
10
+ *.py[cod]
11
+ *$py.class
12
+
13
+ # C extensions
14
+ *.so
15
+
16
+ # Distribution / packaging
17
+ .Python
18
+ build/
19
+ dist/
20
+ downloads/
21
+ lib/
22
+ lib64/
23
+ parts/
24
+ sdist/
25
+ var/
26
+ wheels/
27
+ pip-wheel-metadata/
28
+ share/python-wheels/
29
+ .installed.cfg
30
+
31
+ # PyInstaller
32
+ # Usually these files are written by a python script from a template
33
+ # before PyInstaller builds the exe, so as to inject date/other infos into it.
34
+ *.manifest
35
+ *.spec
36
+
37
+ # Installer logs
38
+ pip-log.txt
39
+ pip-delete-this-directory.txt
40
+
41
+ # Unit test / coverage reports
42
+ htmlcov/
43
+ .tox/
44
+ .nox/
45
+ .coverage
46
+ .coverage.*
47
+ .cache
48
+ nosetests.xml
49
+ coverage.xml
50
+ *.cover
51
+ .hypothesis/
52
+ .pytest_cache/
53
+
54
+ # Translations
55
+ *.mo
56
+ *.pot
57
+
58
+ # Scrapy stuff:
59
+ .scrapy
60
+
61
+ # Sphinx documentation
62
+ docs/_build/
63
+
64
+ # PyBuilder
65
+ target/
66
+
67
+ # pyenv
68
+ .python-version
69
+
70
+ # celery beat schedule file
71
+ celerybeat-schedule
72
+
73
+ # SageMath parsed files
74
+ *.sage.py
75
+
76
+ # Spyder project settings
77
+ .spyderproject
78
+ .spyproject
79
+
80
+ # Rope project settings
81
+ .ropeproject
82
+
83
+ # Mr Developer
84
+ .mr.developer.cfg
85
+ .project
86
+ .pydevproject
87
+
88
+ # mkdocs documentation
89
+ /site
90
+
91
+ # mypy
92
+ .mypy_cache/
93
+ .dmypy.json
94
+ dmypy.json
95
+
96
+ # ruff
97
+ .ruff_cache
98
+
99
+ # Pyre type checker
100
+ .pyre/
101
+
102
+ # End of https://www.gitignore.io/api/python
103
+
104
+ # OSX files
105
+ .DS_Store
106
+ .jupyter_ystore.db
107
+ .dot-env
@@ -0,0 +1,16 @@
1
+ header:
2
+ license:
3
+ content: |
4
+ Copyright (c) 2023-2024 Datalayer, Inc.
5
+
6
+ BSD 3-Clause License
7
+
8
+ paths-ignore:
9
+ - '**/*.ipynb'
10
+ - '**/*.json'
11
+ - '**/*.yaml'
12
+ - '**/*.yml'
13
+ - '**/.*'
14
+ - 'LICENSE'
15
+
16
+ comment: on-failure
@@ -0,0 +1,38 @@
1
+ ci:
2
+ autoupdate_schedule: monthly
3
+
4
+ repos:
5
+ - repo: https://github.com/pre-commit/pre-commit-hooks
6
+ rev: v5.0.0
7
+ hooks:
8
+ - id: end-of-file-fixer
9
+ - id: check-case-conflict
10
+ - id: check-executables-have-shebangs
11
+ - id: requirements-txt-fixer
12
+ - id: check-added-large-files
13
+ - id: check-case-conflict
14
+ - id: check-toml
15
+ - id: check-yaml
16
+ - id: debug-statements
17
+ - id: forbid-new-submodules
18
+ - id: check-builtin-literals
19
+ - id: trailing-whitespace
20
+
21
+ - repo: https://github.com/python-jsonschema/check-jsonschema
22
+ rev: 0.29.4
23
+ hooks:
24
+ - id: check-github-workflows
25
+
26
+ - repo: https://github.com/executablebooks/mdformat
27
+ rev: 0.7.19
28
+ hooks:
29
+ - id: mdformat
30
+ additional_dependencies:
31
+ [mdformat-gfm, mdformat-frontmatter, mdformat-footnote]
32
+
33
+ - repo: https://github.com/charliermarsh/ruff-pre-commit
34
+ rev: v0.8.0
35
+ hooks:
36
+ - id: ruff
37
+ args: ["--fix"]
38
+ - id: ruff-format
@@ -0,0 +1,128 @@
1
+ <!--
2
+ ~ Copyright (c) 2023-2024 Datalayer, Inc.
3
+ ~
4
+ ~ BSD 3-Clause License
5
+ -->
6
+
7
+ # Changelog
8
+
9
+ <!-- <START NEW CHANGELOG ENTRY> -->
10
+
11
+ ## 0.6.0
12
+
13
+ ([Full Changelog](https://github.com/datalayer/jupyter-nbmodel-client/compare/v0.4.0...3a3b7df9b472fa4ff861da7e26b91641f5d2a37b))
14
+
15
+ > [!IMPORTANT]
16
+ > Breaking changes :warning:
17
+ > The API to create a notebook model client changed to receive directly
18
+ > the websocket URL for the notebook. In the case of the Jupyter Server,
19
+ > a helper is provided to generate that websocket URL.
20
+
21
+ ```patch
22
+ from jupyter_nbmodel_client import (
23
+ NbModelClient,
24
+ + get_jupyter_notebook_websocket_url
25
+ )
26
+
27
+ - NbModelClient(server_url="http://localhost:8888", token="MY_TOKEN", path="test.ipynb"):
28
+ + NbModelClient(
29
+ + get_jupyter_notebook_websocket_url(
30
+ + server_url="http://localhost:8888",
31
+ + token="MY_TOKEN",
32
+ + path="test.ipynb"
33
+ + )
34
+ + )
35
+ ```
36
+
37
+ ### Enhancements made
38
+
39
+ - Make the client more generic to connect to any Y websocket server [#20](https://github.com/datalayer/jupyter-nbmodel-client/pull/20) ([@fcollonval](https://github.com/fcollonval))
40
+ - insert cell methods [#21](https://github.com/datalayer/jupyter-nbmodel-client/pull/21) ([@eleonorecharles](https://github.com/eleonorecharles))
41
+
42
+ ### Other merged PRs
43
+
44
+ - Update jupyter-server-ydoc requirement from ~=1.0.0 to >=1.0,\<1.2 in the pip group [#19](https://github.com/datalayer/jupyter-nbmodel-client/pull/19) ([@dependabot](https://github.com/dependabot))
45
+
46
+ ### Contributors to this release
47
+
48
+ ([GitHub contributors page for this release](https://github.com/datalayer/jupyter-nbmodel-client/graphs/contributors?from=2024-12-18&to=2025-01-16&type=c))
49
+
50
+ [@dependabot](https://github.com/search?q=repo%3Adatalayer%2Fjupyter-nbmodel-client+involves%3Adependabot+updated%3A2024-12-18..2025-01-16&type=Issues) | [@eleonorecharles](https://github.com/search?q=repo%3Adatalayer%2Fjupyter-nbmodel-client+involves%3Aeleonorecharles+updated%3A2024-12-18..2025-01-16&type=Issues) | [@fcollonval](https://github.com/search?q=repo%3Adatalayer%2Fjupyter-nbmodel-client+involves%3Afcollonval+updated%3A2024-12-18..2025-01-16&type=Issues)
51
+
52
+ <!-- <END NEW CHANGELOG ENTRY> -->
53
+
54
+ ## 0.4.0
55
+
56
+ ([Full Changelog](https://github.com/datalayer/jupyter-nbmodel-client/compare/v0.3.0...20ff2d14a92d9339e8ddf8e7c091c102d3ea13fa))
57
+
58
+ ### Enhancements made
59
+
60
+ - docs: readme [#13](https://github.com/datalayer/jupyter-nbmodel-client/pull/13) ([@echarles](https://github.com/echarles))
61
+
62
+ ### Bugs fixed
63
+
64
+ - Use a lock to prevent document access or change between threads [#16](https://github.com/datalayer/jupyter-nbmodel-client/pull/16) ([@fcollonval](https://github.com/fcollonval))
65
+ - Revert "Use multithreading flag" [#15](https://github.com/datalayer/jupyter-nbmodel-client/pull/15) ([@fcollonval](https://github.com/fcollonval))
66
+ - Use multithreading flag [#14](https://github.com/datalayer/jupyter-nbmodel-client/pull/14) ([@fcollonval](https://github.com/fcollonval))
67
+
68
+ ### Contributors to this release
69
+
70
+ ([GitHub contributors page for this release](https://github.com/datalayer/jupyter-nbmodel-client/graphs/contributors?from=2024-12-10&to=2024-12-18&type=c))
71
+
72
+ [@echarles](https://github.com/search?q=repo%3Adatalayer%2Fjupyter-nbmodel-client+involves%3Aecharles+updated%3A2024-12-10..2024-12-18&type=Issues) | [@fcollonval](https://github.com/search?q=repo%3Adatalayer%2Fjupyter-nbmodel-client+involves%3Afcollonval+updated%3A2024-12-10..2024-12-18&type=Issues)
73
+
74
+ ## 0.3.0
75
+
76
+ ([Full Changelog](https://github.com/datalayer/jupyter-nbmodel-client/compare/v0.2.0...cfc7a804957b777900c105cada76993ce0f6d0c0))
77
+
78
+ ### Enhancements made
79
+
80
+ - Add execution options [#11](https://github.com/datalayer/jupyter-nbmodel-client/pull/11) ([@fcollonval](https://github.com/fcollonval))
81
+
82
+ ### Documentation improvements
83
+
84
+ - Add pypi badge [#10](https://github.com/datalayer/jupyter-nbmodel-client/pull/10) ([@fcollonval](https://github.com/fcollonval))
85
+
86
+ ### Contributors to this release
87
+
88
+ ([GitHub contributors page for this release](https://github.com/datalayer/jupyter-nbmodel-client/graphs/contributors?from=2024-12-09&to=2024-12-10&type=c))
89
+
90
+ [@fcollonval](https://github.com/search?q=repo%3Adatalayer%2Fjupyter-nbmodel-client+involves%3Afcollonval+updated%3A2024-12-09..2024-12-10&type=Issues)
91
+
92
+ ## 0.2.0
93
+
94
+ ([Full Changelog](https://github.com/datalayer/jupyter-nbmodel-client/compare/v0.1.1...590550c1b7d76656f10a0ad59b133d5fe6ab5556))
95
+
96
+ ### Enhancements made
97
+
98
+ - Polish API [#9](https://github.com/datalayer/jupyter-nbmodel-client/pull/9) ([@fcollonval](https://github.com/fcollonval))
99
+
100
+ ### Other merged PRs
101
+
102
+ - Bump apache/skywalking-eyes from e19b828cea6a6027cceae78f05d81317347d21be to 3ea9df11bb3a5a85665377d1fd10c02edecf2c40 in the actions group [#5](https://github.com/datalayer/jupyter-nbmodel-client/pull/5) ([@dependabot](https://github.com/dependabot))
103
+
104
+ ### Contributors to this release
105
+
106
+ ([GitHub contributors page for this release](https://github.com/datalayer/jupyter-nbmodel-client/graphs/contributors?from=2024-12-04&to=2024-12-08&type=c))
107
+
108
+ [@dependabot](https://github.com/search?q=repo%3Adatalayer%2Fjupyter-nbmodel-client+involves%3Adependabot+updated%3A2024-12-04..2024-12-08&type=Issues) | [@fcollonval](https://github.com/search?q=repo%3Adatalayer%2Fjupyter-nbmodel-client+involves%3Afcollonval+updated%3A2024-12-04..2024-12-08&type=Issues)
109
+
110
+ ## 0.1.1
111
+
112
+ ([Full Changelog](https://github.com/datalayer/jupyter-nbmodel-client/compare/aef1fe634cfe585219a2c8ec8a3f9373e6834fec...aae60dc27cc23cf84fe6b4d263506495adb97dd6))
113
+
114
+ ### Enhancements made
115
+
116
+ - Return outputs from `execute_cell` [#8](https://github.com/datalayer/jupyter-nbmodel-client/pull/8) ([@fcollonval](https://github.com/fcollonval))
117
+ - Make client inherit from model directly [#7](https://github.com/datalayer/jupyter-nbmodel-client/pull/7) ([@fcollonval](https://github.com/fcollonval))
118
+ - Add releaser workflows [#6](https://github.com/datalayer/jupyter-nbmodel-client/pull/6) ([@fcollonval](https://github.com/fcollonval))
119
+
120
+ ### Documentation improvements
121
+
122
+ - Return outputs from `execute_cell` [#8](https://github.com/datalayer/jupyter-nbmodel-client/pull/8) ([@fcollonval](https://github.com/fcollonval))
123
+
124
+ ### Contributors to this release
125
+
126
+ ([GitHub contributors page for this release](https://github.com/datalayer/jupyter-nbmodel-client/graphs/contributors?from=2024-12-02&to=2024-12-04&type=c))
127
+
128
+ [@fcollonval](https://github.com/search?q=repo%3Adatalayer%2Fjupyter-nbmodel-client+involves%3Afcollonval+updated%3A2024-12-02..2024-12-04&type=Issues)
@@ -0,0 +1,29 @@
1
+ BSD 3-Clause License
2
+
3
+ Copyright (c) 2024, Datalayer
4
+ All rights reserved.
5
+
6
+ Redistribution and use in source and binary forms, with or without
7
+ modification, are permitted provided that the following conditions are met:
8
+
9
+ 1. Redistributions of source code must retain the above copyright notice, this
10
+ list of conditions and the following disclaimer.
11
+
12
+ 2. Redistributions in binary form must reproduce the above copyright notice,
13
+ this list of conditions and the following disclaimer in the documentation
14
+ and/or other materials provided with the distribution.
15
+
16
+ 3. Neither the name of the copyright holder nor the names of its
17
+ contributors may be used to endorse or promote products derived from
18
+ this software without specific prior written permission.
19
+
20
+ THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
21
+ AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
22
+ IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
23
+ DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
24
+ FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
25
+ DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
26
+ SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
27
+ CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
28
+ OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
29
+ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.