pluginify 0.0.0.post1.dev0__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 (38) hide show
  1. pluginify-0.0.0.post1.dev0/.github/workflows/generate-badges.yaml +240 -0
  2. pluginify-0.0.0.post1.dev0/.github/workflows/lint-and-test.yaml +119 -0
  3. pluginify-0.0.0.post1.dev0/.github/workflows/package-and-publish.yaml +104 -0
  4. pluginify-0.0.0.post1.dev0/.github/workflows/status-check.yaml +17 -0
  5. pluginify-0.0.0.post1.dev0/LICENSE +128 -0
  6. pluginify-0.0.0.post1.dev0/PKG-INFO +66 -0
  7. pluginify-0.0.0.post1.dev0/README.md +41 -0
  8. pluginify-0.0.0.post1.dev0/docs/source/releases/latest/ci-fix-perms.yaml +15 -0
  9. pluginify-0.0.0.post1.dev0/docs/source/releases/latest/copy-geoips-functionality.yaml +45 -0
  10. pluginify-0.0.0.post1.dev0/docs/source/releases/latest/initial-commit.yaml +92 -0
  11. pluginify-0.0.0.post1.dev0/docs/source/releases/latest/remove-all-geoips-references.yaml +54 -0
  12. pluginify-0.0.0.post1.dev0/docs/source/releases/latest/replace-geoips-functionality.yaml +34 -0
  13. pluginify-0.0.0.post1.dev0/docs/source/releases/latest/update-black-formatting.yaml +15 -0
  14. pluginify-0.0.0.post1.dev0/pluginify/__init__.py +11 -0
  15. pluginify-0.0.0.post1.dev0/pluginify/_version.py +7 -0
  16. pluginify-0.0.0.post1.dev0/pluginify/commandline_typer.py +258 -0
  17. pluginify-0.0.0.post1.dev0/pluginify/config.py +144 -0
  18. pluginify-0.0.0.post1.dev0/pluginify/create_plugin_registries.py +1037 -0
  19. pluginify-0.0.0.post1.dev0/pluginify/errors.py +16 -0
  20. pluginify-0.0.0.post1.dev0/pluginify/interfaces/__init__.py +9 -0
  21. pluginify-0.0.0.post1.dev0/pluginify/interfaces/base.py +665 -0
  22. pluginify-0.0.0.post1.dev0/pluginify/interfaces/class_based/data_modifiers.py +38 -0
  23. pluginify-0.0.0.post1.dev0/pluginify/interfaces/class_based_plugin.py +210 -0
  24. pluginify-0.0.0.post1.dev0/pluginify/interfaces/yaml_based/configs.py +27 -0
  25. pluginify-0.0.0.post1.dev0/pluginify/plugin_registry.py +925 -0
  26. pluginify-0.0.0.post1.dev0/pluginify/plugins/classes/data_modifiers/cuboid.py +41 -0
  27. pluginify-0.0.0.post1.dev0/pluginify/plugins/yaml/configs/stucco.yaml +16 -0
  28. pluginify-0.0.0.post1.dev0/pluginify/pydantic_models/v1/configs.py +58 -0
  29. pluginify-0.0.0.post1.dev0/pluginify/utils/__init__.py +62 -0
  30. pluginify-0.0.0.post1.dev0/pluginify/utils/context_managers.py +32 -0
  31. pluginify-0.0.0.post1.dev0/pyproject.toml +65 -0
  32. pluginify-0.0.0.post1.dev0/tests/conftest.py +45 -0
  33. pluginify-0.0.0.post1.dev0/tests/unit_tests/config/test_config.py +155 -0
  34. pluginify-0.0.0.post1.dev0/tests/unit_tests/plugin_registries/files/bad/invalid_interfaces.yaml +16 -0
  35. pluginify-0.0.0.post1.dev0/tests/unit_tests/plugin_registries/files/bad/missing_lowest_keys.yaml +16 -0
  36. pluginify-0.0.0.post1.dev0/tests/unit_tests/plugin_registries/files/bad/missing_plugin_types.yaml +26 -0
  37. pluginify-0.0.0.post1.dev0/tests/unit_tests/plugin_registries/files/good/pluginify.yaml +22 -0
  38. pluginify-0.0.0.post1.dev0/tests/unit_tests/plugin_registries/test_plugin_registries.py +553 -0
@@ -0,0 +1,240 @@
1
+ name: Nightly Badge Generation
2
+
3
+ on:
4
+ schedule:
5
+ - cron: '0 2 * * *'
6
+ workflow_dispatch:
7
+
8
+ permissions:
9
+ contents: write
10
+
11
+ concurrency:
12
+ group: ${{ github.workflow }}-${{ github.ref }}
13
+ cancel-in-progress: true
14
+
15
+ env:
16
+ UV_SYSTEM_PYTHON: true
17
+
18
+ jobs:
19
+ check-commits:
20
+ runs-on: ubuntu-latest
21
+ outputs:
22
+ has_new_commits: ${{ steps.check.outputs.has_new_commits }}
23
+ steps:
24
+ - uses: actions/checkout@v4
25
+ with:
26
+ fetch-depth: 0
27
+
28
+ - name: Check for new commits in last 24 hours
29
+ id: check
30
+ run: |
31
+ COMMITS=$(git log --oneline --since="25 hours ago" --no-merges | grep -v "\[skip ci\]" | wc -l)
32
+ if [ "$COMMITS" -gt 0 ]; then
33
+ echo "has_new_commits=true" >> $GITHUB_OUTPUT
34
+ echo "Found $COMMITS new commits in the last 25 hours"
35
+ else
36
+ echo "has_new_commits=false" >> $GITHUB_OUTPUT
37
+ echo "No new commits in the last 25 hours"
38
+ fi
39
+
40
+ generate-badges:
41
+ needs: check-commits
42
+ if: needs.check-commits.outputs.has_new_commits == 'true'
43
+ runs-on: ubuntu-latest
44
+
45
+ steps:
46
+ - uses: actions/checkout@v4
47
+ with:
48
+ fetch-depth: 0
49
+
50
+ - uses: actions/setup-python@v5
51
+ with:
52
+ python-version: "3.13"
53
+
54
+ - uses: astral-sh/setup-uv@v6
55
+
56
+ - name: Install dependencies
57
+ run: |
58
+ uv pip install -e .[doc,lint,test]
59
+ uv pip install pytest mypy ruff commitizen coverage genbadge[all]
60
+
61
+ - name: Create directories
62
+ run: |
63
+ mkdir -p .github/badges
64
+ mkdir -p reports
65
+
66
+ - name: Run pytest with coverage
67
+ id: pytest
68
+ continue-on-error: true
69
+ run: coverage run -m pytest --junitxml=reports/junit.xml
70
+
71
+ - name: Generate pytest badge
72
+ run: |
73
+ if [ -f reports/junit.xml ]; then
74
+ genbadge tests -i reports/junit.xml -o .github/badges/tests-badge.svg -n "tests"
75
+ else
76
+ python -c "
77
+ from genbadge import Badge
78
+ b = Badge(left_txt='tests', right_txt='error', color='red')
79
+ b.write_to('.github/badges/tests-badge.svg', use_shields=False)
80
+ "
81
+ fi
82
+
83
+ - name: Generate coverage badge
84
+ run: |
85
+ if [ -f coverage.xml ]; then
86
+ genbadge coverage -i coverage.xml -o .github/badges/coverage-badge.svg -n "coverage"
87
+ else
88
+ python -c "
89
+ from genbadge import Badge
90
+ b = Badge(left_txt='coverage', right_txt='error', color='red')
91
+ b.write_to('.github/badges/coverage-badge.svg', use_shields=False)
92
+ "
93
+ fi
94
+
95
+ - name: Run mypy
96
+ id: mypy
97
+ continue-on-error: true
98
+ run: mypy ./src --junit-xml reports/mypy.xml || true
99
+
100
+ - name: Generate mypy badge
101
+ run: |
102
+ if [ -f reports/mypy.xml ]; then
103
+ genbadge tests -i reports/mypy.xml -o .github/badges/mypy-badge.svg -n "mypy"
104
+ else
105
+ python -c "
106
+ from genbadge import Badge
107
+ b = Badge(left_txt='mypy', right_txt='passing', color='brightgreen')
108
+ b.write_to('.github/badges/mypy-badge.svg', use_shields=False)
109
+ "
110
+ fi
111
+
112
+ - name: Run ruff
113
+ id: ruff
114
+ continue-on-error: true
115
+ run: ruff check ./src --output-format=junit -o reports/ruff.xml || true
116
+
117
+ - name: Generate ruff badge
118
+ run: |
119
+ if [ -f reports/ruff.xml ] && [ -s reports/ruff.xml ]; then
120
+ if grep -q "<testcase" reports/ruff.xml; then
121
+ genbadge tests -i reports/ruff.xml -o .github/badges/ruff-badge.svg -n "ruff"
122
+ else
123
+ python -c "
124
+ from genbadge import Badge
125
+ b = Badge(left_txt='ruff', right_txt='passing', color='brightgreen')
126
+ b.write_to('.github/badges/ruff-badge.svg', use_shields=False)
127
+ "
128
+ fi
129
+ else
130
+ python -c "
131
+ from genbadge import Badge
132
+ b = Badge(left_txt='ruff', right_txt='passing', color='brightgreen')
133
+ b.write_to('.github/badges/ruff-badge.svg', use_shields=False)
134
+ "
135
+ fi
136
+
137
+ - name: Test install
138
+ id: install
139
+ continue-on-error: true
140
+ run: uv pip install -e . --reinstall
141
+
142
+ - name: Generate install badge
143
+ run: |
144
+ if [ "${{ steps.install.outcome }}" == "success" ]; then
145
+ python -c "
146
+ from genbadge import Badge
147
+ b = Badge(left_txt='install', right_txt='passing', color='brightgreen')
148
+ b.write_to('.github/badges/install-badge.svg', use_shields=False)
149
+ "
150
+ else
151
+ python -c "
152
+ from genbadge import Badge
153
+ b = Badge(left_txt='install', right_txt='failing', color='red')
154
+ b.write_to('.github/badges/install-badge.svg', use_shields=False)
155
+ "
156
+ fi
157
+
158
+ - uses: actions/setup-node@v4
159
+ with:
160
+ node-version: "22"
161
+
162
+ - name: Run cspell
163
+ id: cspell
164
+ continue-on-error: true
165
+ run: npx cspell "./src/**/*" --no-progress
166
+
167
+ - name: Generate cspell badge
168
+ run: |
169
+ if [ "${{ steps.cspell.outcome }}" == "success" ]; then
170
+ python -c "
171
+ from genbadge import Badge
172
+ b = Badge(left_txt='cspell', right_txt='passing', color='brightgreen')
173
+ b.write_to('.github/badges/cspell-badge.svg', use_shields=False)
174
+ "
175
+ else
176
+ python -c "
177
+ from genbadge import Badge
178
+ b = Badge(left_txt='cspell', right_txt='failing', color='red')
179
+ b.write_to('.github/badges/cspell-badge.svg', use_shields=False)
180
+ "
181
+ fi
182
+
183
+ - name: Check commitizen
184
+ id: commitizen
185
+ continue-on-error: true
186
+ env:
187
+ COMMITIZEN_START_REV: "9d83e6984277ccbe6c5f6713f65b75a90e7c7e40"
188
+ run: cz check --rev-range ${{ env.COMMITIZEN_START_REV }}..HEAD
189
+
190
+ - name: Generate commitizen badge
191
+ run: |
192
+ if [ "${{ steps.commitizen.outcome }}" == "success" ]; then
193
+ python -c "
194
+ from genbadge import Badge
195
+ b = Badge(left_txt='commitizen', right_txt='passing', color='brightgreen')
196
+ b.write_to('.github/badges/commitizen-badge.svg', use_shields=False)
197
+ "
198
+ else
199
+ python -c "
200
+ from genbadge import Badge
201
+ b = Badge(left_txt='commitizen', right_txt='failing', color='red')
202
+ b.write_to('.github/badges/commitizen-badge.svg', use_shields=False)
203
+ "
204
+ fi
205
+
206
+ - name: Check for badge changes
207
+ id: badge_changes
208
+ run: |
209
+ git add .github/badges/*.svg
210
+ if git diff --cached --quiet; then
211
+ echo "has_changes=false" >> $GITHUB_OUTPUT
212
+ echo "No badge changes detected"
213
+ else
214
+ echo "has_changes=true" >> $GITHUB_OUTPUT
215
+ echo "Badge changes detected:"
216
+ git diff --cached --name-status .github/badges/
217
+ fi
218
+
219
+ - name: Commit and push badges
220
+ if: steps.badge_changes.outputs.has_changes == 'true'
221
+ run: |
222
+ git config --local user.email "github-actions[bot]@users.noreply.github.com"
223
+ git config --local user.name "github-actions[bot]"
224
+ git commit -m "chore: update badges [skip ci]"
225
+ git push
226
+
227
+ - name: Generate summary
228
+ run: |
229
+ echo "## Badge Generation Summary" >> $GITHUB_STEP_SUMMARY
230
+ echo "" >> $GITHUB_STEP_SUMMARY
231
+ echo "| Check | Status |" >> $GITHUB_STEP_SUMMARY
232
+ echo "|-------|--------|" >> $GITHUB_STEP_SUMMARY
233
+ echo "| Pytest & Coverage | ${{ steps.pytest.outcome }} |" >> $GITHUB_STEP_SUMMARY
234
+ echo "| Mypy | ${{ steps.mypy.outcome }} |" >> $GITHUB_STEP_SUMMARY
235
+ echo "| Ruff | ${{ steps.ruff.outcome }} |" >> $GITHUB_STEP_SUMMARY
236
+ echo "| Install | ${{ steps.install.outcome }} |" >> $GITHUB_STEP_SUMMARY
237
+ echo "| CSpell | ${{ steps.cspell.outcome }} |" >> $GITHUB_STEP_SUMMARY
238
+ echo "| Commitizen | ${{ steps.commitizen.outcome }} |" >> $GITHUB_STEP_SUMMARY
239
+ echo "" >> $GITHUB_STEP_SUMMARY
240
+ echo "Badges committed: ${{ steps.badge_changes.outputs.has_changes }}" >> $GITHUB_STEP_SUMMARY
@@ -0,0 +1,119 @@
1
+ name: CI
2
+
3
+ on:
4
+ push:
5
+ branches: [main]
6
+ pull_request:
7
+ branches: [main]
8
+
9
+ permissions:
10
+ contents: read
11
+
12
+ concurrency:
13
+ group: ${{ github.workflow }}-${{ github.ref }}
14
+ cancel-in-progress: true
15
+
16
+ env:
17
+ UV_SYSTEM_PYTHON: true
18
+ COMMITIZEN_START_REV: "9d83e6984277ccbe6c5f6713f65b75a90e7c7e40"
19
+
20
+ jobs:
21
+ # ---------------------------------------------------------------------------
22
+ # Single lint job — every hook runs as its own step so failures are visible
23
+ # ---------------------------------------------------------------------------
24
+ lint:
25
+ runs-on: ubuntu-latest
26
+ steps:
27
+ - uses: actions/checkout@v4
28
+ with:
29
+ fetch-depth: 0 # needed for commitizen rev-range
30
+
31
+ - uses: actions/setup-python@v5
32
+ with:
33
+ python-version: "3.13"
34
+
35
+ - uses: actions/setup-go@v5
36
+ with:
37
+ go-version: stable
38
+ cache: false
39
+
40
+ - uses: actions/setup-node@v4
41
+ with:
42
+ node-version: "22"
43
+
44
+ - uses: astral-sh/setup-uv@v6
45
+
46
+ - name: Ruff (lint)
47
+ uses: pre-commit/action@v3.0.1
48
+ with:
49
+ extra_args: ruff-check --all-files
50
+
51
+ - name: Ruff (format)
52
+ if: success() || failure()
53
+ uses: pre-commit/action@v3.0.1
54
+ with:
55
+ extra_args: ruff-format --all-files
56
+
57
+ - name: Blacken-docs
58
+ if: success() || failure()
59
+ uses: pre-commit/action@v3.0.1
60
+ with:
61
+ extra_args: blacken-docs --all-files
62
+
63
+ - name: mdformat
64
+ if: success() || failure()
65
+ uses: pre-commit/action@v3.0.1
66
+ with:
67
+ extra_args: mdformat --all-files
68
+
69
+ - name: actionlint
70
+ if: success() || failure()
71
+ uses: pre-commit/action@v3.0.1
72
+ with:
73
+ extra_args: actionlint --all-files
74
+
75
+ - name: validate-pyproject
76
+ if: success() || failure()
77
+ uses: pre-commit/action@v3.0.1
78
+ with:
79
+ extra_args: validate-pyproject --all-files
80
+
81
+ - name: yamlfmt
82
+ if: success() || failure()
83
+ uses: pre-commit/action@v3.0.1
84
+ with:
85
+ extra_args: yamlfmt --all-files
86
+
87
+ - name: cspell
88
+ if: success() || failure()
89
+ uses: pre-commit/action@v3.0.1
90
+ with:
91
+ extra_args: cspell --all-files
92
+
93
+ # ---------------------------------------------------------------------------
94
+ # Single matrix job — install once, then run pytest + docs + mypy
95
+ # ---------------------------------------------------------------------------
96
+ test:
97
+ runs-on: ubuntu-latest
98
+ strategy:
99
+ fail-fast: false
100
+ matrix:
101
+ python-version: ["3.11", "3.12", "3.13"]
102
+ steps:
103
+ - uses: actions/checkout@v4
104
+
105
+ - uses: actions/setup-python@v5
106
+ with:
107
+ python-version: ${{ matrix.python-version }}
108
+
109
+ - uses: astral-sh/setup-uv@v6
110
+
111
+ - name: Install package with all extras
112
+ run: uv pip install -e .[doc,lint,test] pytest mypy
113
+
114
+ - name: Run pytest
115
+ run: python -m pytest
116
+
117
+ - name: Run mypy
118
+ if: (success() || failure()) && matrix.python-version == '3.13'
119
+ run: mypy ./src
@@ -0,0 +1,104 @@
1
+ name: Publish to PyPI
2
+
3
+ on:
4
+ release:
5
+ types: [published]
6
+
7
+ # Allow manual trigger for testing the workflow
8
+ workflow_dispatch:
9
+
10
+ permissions:
11
+ contents: read
12
+ id-token: write
13
+
14
+ concurrency:
15
+ group: ${{ github.workflow }}-${{ github.ref }}
16
+ cancel-in-progress: true
17
+
18
+ env:
19
+ UV_SYSTEM_PYTHON: true
20
+
21
+ jobs:
22
+ # ---------------------------------------------------------------------------
23
+ # Build sdist and wheel
24
+ # ---------------------------------------------------------------------------
25
+ build:
26
+ runs-on: ubuntu-latest
27
+ steps:
28
+ - uses: actions/checkout@v4
29
+
30
+ - uses: actions/setup-python@v5
31
+ with:
32
+ python-version: "3.13"
33
+
34
+ - uses: astral-sh/setup-uv@v6
35
+
36
+ - name: Install build tools
37
+ run: uv pip install build
38
+
39
+ - name: Build sdist and wheel
40
+ run: python -m build
41
+
42
+ - name: List built artifacts
43
+ run: ls -lh dist/
44
+
45
+ - name: Upload build artifacts
46
+ uses: actions/upload-artifact@v4
47
+ with:
48
+ name: dist
49
+ path: dist/
50
+ if-no-files-found: error
51
+
52
+ # ---------------------------------------------------------------------------
53
+ # Run the test suite against the built wheel (not the source tree)
54
+ # ---------------------------------------------------------------------------
55
+ test-built-package:
56
+ needs: build
57
+ runs-on: ${{ matrix.os }}
58
+ strategy:
59
+ fail-fast: false
60
+ matrix:
61
+ os: [ubuntu-latest, macos-latest, windows-latest]
62
+ python-version: ["3.11", "3.12", "3.13"]
63
+ steps:
64
+ - uses: actions/checkout@v4
65
+
66
+ - uses: actions/setup-python@v5
67
+ with:
68
+ python-version: ${{ matrix.python-version }}
69
+
70
+ - uses: astral-sh/setup-uv@v6
71
+
72
+ - name: Download build artifacts
73
+ uses: actions/download-artifact@v4
74
+ with:
75
+ name: dist
76
+ path: dist/
77
+
78
+ - name: Install wheel and test dependencies
79
+ shell: bash
80
+ run: |
81
+ uv pip install dist/*.whl
82
+ uv pip install pytest pytest-cov pytest-xdist pydantic
83
+
84
+ - name: Run tests
85
+ run: python -m pytest tests/ -v
86
+
87
+ # ---------------------------------------------------------------------------
88
+ # Publish to PyPI
89
+ # ---------------------------------------------------------------------------
90
+ publish-pypi:
91
+ needs: [build, test-built-package]
92
+ runs-on: ubuntu-latest
93
+ #if: github.event_name == 'release'
94
+ steps:
95
+ - name: Download build artifacts
96
+ uses: actions/download-artifact@v4
97
+ with:
98
+ name: dist
99
+ path: dist/
100
+
101
+ - name: Publish to PyPI
102
+ uses: pypa/gh-action-pypi-publish@release/v1
103
+ with:
104
+ password: ${{ secrets.PYPI_TOKEN }}
@@ -0,0 +1,17 @@
1
+ name: Require up-to-date branch
2
+
3
+ on:
4
+ pull_request:
5
+ push:
6
+ branches:
7
+ - main
8
+
9
+ permissions:
10
+ contents: read
11
+
12
+ jobs:
13
+ status-check:
14
+ runs-on: ubuntu-latest
15
+ steps:
16
+ - name: No-op status check
17
+ run: echo "No-op Actions workflow to allow enforcing up to date branches before merge"
@@ -0,0 +1,128 @@
1
+ NRL OPEN LICENSE AGREEMENT
2
+
3
+ 1. Scope and Applicability: This Agreement applies to Computer Software that
4
+ is made available under this Agreement. By using, modifying, or disseminating
5
+ the Computer Software, You accept the terms and conditions in this Agreement.
6
+ Use, modification, and dissemination of the Computer Software is permitted
7
+ only in accordance with the terms and conditions of this Agreement. No other
8
+ rights or licenses to the Computer Software are granted. Unauthorized use,
9
+ sale, conveyance, disposition, or modification of a Computer Software may
10
+ result in civil penalties and/or criminal penalties under 18 U.S.C. § 641.
11
+
12
+
13
+ 2. For purposes of this Agreement, the following definitions apply:
14
+
15
+ a. “Computer software” means computer programs, source code, source code
16
+ listings, object code listings, design details, algorithms, processes,
17
+ flow charts, formulae, and related material that would enable the software
18
+ to be reproduced, recreated, or recompiled.
19
+
20
+ b. “Derivative work” is a work based upon some or all of the Computer Software.
21
+
22
+ c. “Unlimited rights” means rights to use, modify, reproduce, release,
23
+ perform, display, or disclose, in whole or in part, in any manner and for
24
+ any purpose whatsoever, and to have or authorize others to do so.
25
+
26
+ d. “You” means yourself and any corporation, company, association, firm,
27
+ partnership, society, and joint stock company to which you are an employee,
28
+ volunteer, or an independent contractor performing services therefor.
29
+
30
+ 3. Use and Distribution License: The Government of the United States of
31
+ America (“Government”) hereby authorizes You to use and modify the Computer
32
+ Software for any purpose. The Government hereby authorizes You to
33
+ redistribute the Computer Software, but only under the terms of this
34
+ Agreement. You agree that any modifications to and derivative works of the
35
+ Computer Software generated by You shall be distributed only under the terms
36
+ of this Agreement. You shall provide a copy of this Agreement with any
37
+ distribution of the Computer Software, or any modification to and derivative
38
+ works of the Computer Software.
39
+
40
+ 4. Ownership: All Computer Software is property of the Government and under
41
+ the custody and administration of the U.S. Naval Research Laboratory (NRL).
42
+ Nothing in the Agreement shall be construed to constitute a sale, assignment,
43
+ or transfer of ownership to You of the Computer Software.
44
+
45
+ 5. Markings: You shall not remove any copyright notices, disclaimers, notices
46
+ of Government sponsorship and license rights, third-party licenses, and any
47
+ other identifications, contained in the Computer Software or provided in a
48
+ file accompanying the Computer Software, such as a license file.
49
+
50
+ 6. Header File Required: For source code provided under this Agreement, the
51
+ header of each source file shall contain the following statement:
52
+
53
+ !#######################################################################
54
+
55
+ THIS SOURCE CODE IS PROPERTY OF THE GOVERNMENT OF THE UNITED STATES OF
56
+ AMERICA. BY USING, MODIFYING, OR DISSEMINATING THIS SOURCE CODE, YOU ACCEPT
57
+ THE TERMS AND CONDITIONS IN THE NRL OPEN LICENSE AGREEMENT. USE, MODIFICATION,
58
+ AND DISSEMINATION ARE PERMITTED ONLY IN ACCORDANCE WITH THE TERMS AND
59
+ CONDITIONS OF THE NRL OPEN LICENSE AGREEMENT. NO OTHER RIGHTS OR LICENSES
60
+ ARE GRANTED. UNAUTHORIZED USE, SALE, CONVEYANCE, DISPOSITION, OR MODIFICATION
61
+ OF THIS SOURCE CODE MAY RESULT IN CIVIL PENALTIES AND/OR CRIMINAL PENALTIES
62
+ UNDER 18 U.S.C. § 641.
63
+
64
+ !########################################################################
65
+
66
+ 7. Government Rights: In consideration of making the Computer Software
67
+ available to You, You irrevocably grant the Government, at no cost, unlimited
68
+ rights in any and all modifications to, and derivative works of, the Computer
69
+ Software. Upon request, You shall deliver to NRL, or another Federal component
70
+ or agency as NRL may designate, all modifications to and derivative works of
71
+ the Computer Software generated by You or that are in Your possession.
72
+
73
+ 8. ALL MATERIAL IS PROVIDED “AS IS” AND WITHOUT ANY REPRESENTATION OR
74
+ WARRANTY, EXPRESS OR IMPLIED, INCLUDING WITHOUT ANY PARTICULAR PURPOSE
75
+ OR ANY WARRANTIES OF ACCURACY OR COMPLETENESS OR ANY WARRANTIES THAT THE
76
+ USE OF THE COMPUTER SOFTWARE WILL NOT INFRINGE OR VIOLATE ANY PATENT OR
77
+ OTHER PROPRIETARY RIGHTS OF ANY THIRD PARTY (WHETHER DIRECTLY OR INDIRECTLY).
78
+
79
+ 9. Notice: You shall provide prominent notice on any derivative work of the
80
+ Computer Software, or in a file accompanying the Computer Software, that the
81
+ Computer Software was developed in part or in whole by NRL.
82
+
83
+ 10. No Support. The Computer Software(s) is provided without any support or
84
+ maintenance, and without any obligation to provide modifications,
85
+ improvements, enhancements, or updates thereto. No oral or written
86
+ information or advice given by Federal employees shall create a warranty
87
+ or in any way modify this Agreement.
88
+
89
+ 11. Export Control: This Agreement does not authorize any disclosure, export,
90
+ or deemed export of technical information, articles, or services, nor does it
91
+ authorize or approve the use of any exemption to the export licensing
92
+ requirements of the International Traffic in Arms Regulations (“ITAR”) or the
93
+ Export Administration Regulations (“EAR”). You shall ensure full compliance
94
+ with all applicable requirements and restrictions established in law and
95
+ regulation pertaining to United States export controls including the Arms
96
+ Export Control Act, the International Traffic in Arms Regulations, the Export
97
+ Control Reform Act, the Export Administration Regulations, and the Atomic
98
+ Energy Act.
99
+
100
+ 12. Termination: The Government, either through NRL or another Federal
101
+ component or agency, may terminate this Agreement at any time. The Government
102
+ rights under Section 7 shall survive termination.
103
+
104
+ 13. Liability: You shall be solely liable for all claims and/or damages which
105
+ may arise from Your use, storage or disposal of the Computer Software under
106
+ this Agreement. Nothing in this Agreement shall be construed as a waiver of
107
+ the sovereign immunity of the United States.
108
+
109
+ 14. Indemnification: You agree on behalf of Yourself, and any successors in
110
+ interest or assignees of You, to hold harmless and indemnify the United States
111
+ from any claim for damages or injury to any person or property arising out of
112
+ the provision of the Computer Software. This will include any costs relating
113
+ to infringing a third party’s intellectual property rights.
114
+
115
+ 15. Governing Law & Jurisdiction. If a dispute, controversy, or claim relating
116
+ to this Agreement shall arise, You agree to first attempt to settle such
117
+ matter through informal dispute resolution. If any such matter cannot be
118
+ resolved informally, applicable U.S. Federal laws shall govern this Agreement
119
+ for all purposes.
120
+
121
+ 16. No Government Endorsement: You shall not make or include any statements
122
+ that imply NRL or another component or agency of the Federal Government
123
+ endorses You, Your work, or any product or service You offer.
124
+
125
+ 17. Severability. If any provision or term of this Agreement is held to be
126
+ invalid by a court of competent jurisdiction, then such provision or term
127
+ will be enforced to the maximum extent possible and the remaining terms of
128
+ this Agreement will continue in full force and effect.
@@ -0,0 +1,66 @@
1
+ Metadata-Version: 2.4
2
+ Name: pluginify
3
+ Version: 0.0.0.post1.dev0
4
+ Summary: Pluginify package
5
+ License: LICENSE
6
+ License-File: LICENSE
7
+ Author: Evan Rose
8
+ Requires-Python: >=3.11.0,<3.13.0
9
+ Classifier: License :: Other/Proprietary License
10
+ Classifier: Programming Language :: Python :: 3
11
+ Classifier: Programming Language :: Python :: 3.11
12
+ Classifier: Programming Language :: Python :: 3.12
13
+ Provides-Extra: doc
14
+ Requires-Dist: docstring_parser
15
+ Requires-Dist: jsonschema (>4.18.0)
16
+ Requires-Dist: lexeme-type
17
+ Requires-Dist: platformdirs
18
+ Requires-Dist: pydantic (>=2.10.0)
19
+ Requires-Dist: pyyaml
20
+ Requires-Dist: sphinxcontrib-typer ; extra == "doc"
21
+ Requires-Dist: typer
22
+ Project-URL: Repository, https://github.com/NRLMMD-GEOIPS/pluginify
23
+ Description-Content-Type: text/markdown
24
+
25
+ # # # This source code is subject to the license referenced at
26
+ # # # https://github.com/NRLMMD-GEOIPS.
27
+
28
+ Pluginify
29
+ =========
30
+
31
+ This repository contains everything necessary to fully register YAML and python classes
32
+ and/or modules as valid python plugin objects. A YAML-based plugin object essentially
33
+ acts as a configuration object for a class / module -based python plugin. The python
34
+ based plugins are then responsible for reading, manipulating, or outputting a dataset
35
+ in a certain format. For most python based plugins, we expect this dataset to be a valid
36
+ xarray.DataTree object.
37
+
38
+ No valid plugins should be stored in this package. Rather, this package contains all the
39
+ functionality to register, retrieve, and create your plugin objects via a unified
40
+ PluginRegistry class. This package can and is used alongside other packages such as
41
+ [GeoIPS](https://github.com/NRLMMD-GEOIPS/geoips) to handle their plugin-based
42
+ infrastructure.
43
+
44
+ Install pluginify package
45
+ -------------------------
46
+ Current status:
47
+ ```bash
48
+ git clone https://github.com/NRLMMD-GEOIPS/pluginify.git
49
+ # cd to pluginify's top level dir
50
+ pip install -e .
51
+ ```
52
+ In the future:
53
+ ```bash
54
+ pip install pluginify
55
+ ```
56
+
57
+ Use pluginify
58
+ -------------
59
+ ```bash
60
+ pluginify -h
61
+ # Top level commands without additional args
62
+ pluginify create
63
+ # OR
64
+ pluginify delete
65
+ ```
66
+