pax_global_header00006660000000000000000000000064150040027220014502gustar00rootroot0000000000000052 comment=becb053821dad4b9e6d37392754b6b5a830be596 trove-classifiers-2025.4.28.22/000077500000000000000000000000001500400272200157145ustar00rootroot00000000000000trove-classifiers-2025.4.28.22/.github/000077500000000000000000000000001500400272200172545ustar00rootroot00000000000000trove-classifiers-2025.4.28.22/.github/pull_request_template.md000066400000000000000000000007651500400272200242250ustar00rootroot00000000000000Request to add a new Trove classifier. ## The name of the classifier(s) you would like to add: * `Your :: Trove :: Classifier` ## Why do you want to add this classifier? trove-classifiers-2025.4.28.22/.github/workflows/000077500000000000000000000000001500400272200213115ustar00rootroot00000000000000trove-classifiers-2025.4.28.22/.github/workflows/main.yml000066400000000000000000000006361500400272200227650ustar00rootroot00000000000000name: CI on: [push, pull_request, workflow_dispatch] env: FORCE_COLOR: 1 jobs: build: runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 - name: Set up Python uses: actions/setup-python@v5 with: python-version: '3.x' cache: pip cache-dependency-path: requirements/dev.txt - name: Lint run: make lint - name: Test run: make test trove-classifiers-2025.4.28.22/.github/workflows/release.yml000066400000000000000000000031151500400272200234540ustar00rootroot00000000000000name: Release on: push: branches: - main workflow_dispatch: jobs: build-and-publish: if: github.repository_owner == 'pypa' runs-on: ubuntu-latest permissions: # IMPORTANT: this permission is mandatory for trusted publishing id-token: write steps: - uses: actions/checkout@v4 - name: Set up Python uses: actions/setup-python@v5 with: python-version: '3.x' cache: pip cache-dependency-path: .github/workflows/release.yml - name: Lint run: make lint - name: Test run: make test - name: Install build dependencies run: pip install -U setuptools wheel build calver - name: Build run: python -m build . - name: Publish uses: pypa/gh-action-pypi-publish@release/v1 release: if: github.repository_owner == 'pypa' runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 - name: Set up Python uses: actions/setup-python@v5 with: python-version: '3.x' cache: pip cache-dependency-path: .github/workflows/release.yml - name: Install build dependencies run: pip install -U setuptools wheel build calver - name: Version id: version run: echo "version=$(python setup.py --version 2>/dev/null)" >> $GITHUB_OUTPUT - name: Tag uses: actions/create-release@v1 env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} with: tag_name: ${{ steps.version.outputs.version }} release_name: ${{ steps.version.outputs.version }} draft: false prerelease: false trove-classifiers-2025.4.28.22/.gitignore000066400000000000000000000000421500400272200177000ustar00rootroot00000000000000*.py[co] build/ dist/ *.egg-info/ trove-classifiers-2025.4.28.22/CONTRIBUTING.md000066400000000000000000000010141500400272200201410ustar00rootroot00000000000000# Contributing How to contributing to this package. ## Running tests Run `make test`. This checks whether the auto-generated list of classifiers matches the input source. ## Running linting Run `make lint`. ## Adding a new classifier To add a new classifier, add to the `classifiers` set in `trove_classifiers/__init__.py`. ## Deprecating a classifier To deprecate a classifier, move it from `classifiers` to `deprecated_classifiers` in `trove_classifiers/__init__.py`, and list any new classifiers that may replace it. trove-classifiers-2025.4.28.22/LICENSE000066400000000000000000000261351500400272200167300ustar00rootroot00000000000000 Apache License Version 2.0, January 2004 http://www.apache.org/licenses/ TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION 1. Definitions. "License" shall mean the terms and conditions for use, reproduction, and distribution as defined by Sections 1 through 9 of this document. "Licensor" shall mean the copyright owner or entity authorized by the copyright owner that is granting the License. "Legal Entity" shall mean the union of the acting entity and all other entities that control, are controlled by, or are under common control with that entity. For the purposes of this definition, "control" means (i) the power, direct or indirect, to cause the direction or management of such entity, whether by contract or otherwise, or (ii) ownership of fifty percent (50%) or more of the outstanding shares, or (iii) beneficial ownership of such entity. "You" (or "Your") shall mean an individual or Legal Entity exercising permissions granted by this License. "Source" form shall mean the preferred form for making modifications, including but not limited to software source code, documentation source, and configuration files. "Object" form shall mean any form resulting from mechanical transformation or translation of a Source form, including but not limited to compiled object code, generated documentation, and conversions to other media types. "Work" shall mean the work of authorship, whether in Source or Object form, made available under the License, as indicated by a copyright notice that is included in or attached to the work (an example is provided in the Appendix below). "Derivative Works" shall mean any work, whether in Source or Object form, that is based on (or derived from) the Work and for which the editorial revisions, annotations, elaborations, or other modifications represent, as a whole, an original work of authorship. For the purposes of this License, Derivative Works shall not include works that remain separable from, or merely link (or bind by name) to the interfaces of, the Work and Derivative Works thereof. "Contribution" shall mean any work of authorship, including the original version of the Work and any modifications or additions to that Work or Derivative Works thereof, that is intentionally submitted to Licensor for inclusion in the Work by the copyright owner or by an individual or Legal Entity authorized to submit on behalf of the copyright owner. For the purposes of this definition, "submitted" means any form of electronic, verbal, or written communication sent to the Licensor or its representatives, including but not limited to communication on electronic mailing lists, source code control systems, and issue tracking systems that are managed by, or on behalf of, the Licensor for the purpose of discussing and improving the Work, but excluding communication that is conspicuously marked or otherwise designated in writing by the copyright owner as "Not a Contribution." "Contributor" shall mean Licensor and any individual or Legal Entity on behalf of whom a Contribution has been received by Licensor and subsequently incorporated within the Work. 2. Grant of Copyright License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable copyright license to reproduce, prepare Derivative Works of, publicly display, publicly perform, sublicense, and distribute the Work and such Derivative Works in Source or Object form. 3. Grant of Patent License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable (except as stated in this section) patent license to make, have made, use, offer to sell, sell, import, and otherwise transfer the Work, where such license applies only to those patent claims licensable by such Contributor that are necessarily infringed by their Contribution(s) alone or by combination of their Contribution(s) with the Work to which such Contribution(s) was submitted. If You institute patent litigation against any entity (including a cross-claim or counterclaim in a lawsuit) alleging that the Work or a Contribution incorporated within the Work constitutes direct or contributory patent infringement, then any patent licenses granted to You under this License for that Work shall terminate as of the date such litigation is filed. 4. Redistribution. You may reproduce and distribute copies of the Work or Derivative Works thereof in any medium, with or without modifications, and in Source or Object form, provided that You meet the following conditions: (a) You must give any other recipients of the Work or Derivative Works a copy of this License; and (b) You must cause any modified files to carry prominent notices stating that You changed the files; and (c) You must retain, in the Source form of any Derivative Works that You distribute, all copyright, patent, trademark, and attribution notices from the Source form of the Work, excluding those notices that do not pertain to any part of the Derivative Works; and (d) If the Work includes a "NOTICE" text file as part of its distribution, then any Derivative Works that You distribute must include a readable copy of the attribution notices contained within such NOTICE file, excluding those notices that do not pertain to any part of the Derivative Works, in at least one of the following places: within a NOTICE text file distributed as part of the Derivative Works; within the Source form or documentation, if provided along with the Derivative Works; or, within a display generated by the Derivative Works, if and wherever such third-party notices normally appear. The contents of the NOTICE file are for informational purposes only and do not modify the License. You may add Your own attribution notices within Derivative Works that You distribute, alongside or as an addendum to the NOTICE text from the Work, provided that such additional attribution notices cannot be construed as modifying the License. You may add Your own copyright statement to Your modifications and may provide additional or different license terms and conditions for use, reproduction, or distribution of Your modifications, or for any such Derivative Works as a whole, provided Your use, reproduction, and distribution of the Work otherwise complies with the conditions stated in this License. 5. Submission of Contributions. Unless You explicitly state otherwise, any Contribution intentionally submitted for inclusion in the Work by You to the Licensor shall be under the terms and conditions of this License, without any additional terms or conditions. Notwithstanding the above, nothing herein shall supersede or modify the terms of any separate license agreement you may have executed with Licensor regarding such Contributions. 6. Trademarks. This License does not grant permission to use the trade names, trademarks, service marks, or product names of the Licensor, except as required for reasonable and customary use in describing the origin of the Work and reproducing the content of the NOTICE file. 7. Disclaimer of Warranty. Unless required by applicable law or agreed to in writing, Licensor provides the Work (and each Contributor provides its Contributions) on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied, including, without limitation, any warranties or conditions of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A PARTICULAR PURPOSE. You are solely responsible for determining the appropriateness of using or redistributing the Work and assume any risks associated with Your exercise of permissions under this License. 8. Limitation of Liability. In no event and under no legal theory, whether in tort (including negligence), contract, or otherwise, unless required by applicable law (such as deliberate and grossly negligent acts) or agreed to in writing, shall any Contributor be liable to You for damages, including any direct, indirect, special, incidental, or consequential damages of any character arising as a result of this License or out of the use or inability to use the Work (including but not limited to damages for loss of goodwill, work stoppage, computer failure or malfunction, or any and all other commercial damages or losses), even if such Contributor has been advised of the possibility of such damages. 9. Accepting Warranty or Additional Liability. While redistributing the Work or Derivative Works thereof, You may choose to offer, and charge a fee for, acceptance of support, warranty, indemnity, or other liability obligations and/or rights consistent with this License. However, in accepting such obligations, You may act only on Your own behalf and on Your sole responsibility, not on behalf of any other Contributor, and only if You agree to indemnify, defend, and hold each Contributor harmless for any liability incurred by, or claims asserted against, such Contributor by reason of your accepting any such warranty or additional liability. END OF TERMS AND CONDITIONS APPENDIX: How to apply the Apache License to your work. To apply the Apache License to your work, attach the following boilerplate notice, with the fields enclosed by brackets "[]" replaced with your own identifying information. (Don't include the brackets!) The text should be enclosed in the appropriate comment syntax for the file format. We also recommend that a file or class name and description of purpose be included on the same "printed page" as the copyright notice for easier identification within third-party archives. Copyright [yyyy] [name of copyright owner] Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. trove-classifiers-2025.4.28.22/MANIFEST.in000066400000000000000000000002021500400272200174440ustar00rootroot00000000000000include CONTRIBUTING.md include Makefile recursive-include bin *.py recursive-include tests *.py recursive-include requirements * trove-classifiers-2025.4.28.22/Makefile000066400000000000000000000012661500400272200173610ustar00rootroot00000000000000BINDIR = $(PWD)/.state/env/bin .state/env/pyvenv.cfg: requirements/dev.txt rm -rf .state/env python -m venv .state/env # install/upgrade general requirements $(BINDIR)/python -m pip install --upgrade pip setuptools wheel # install various types of requirements $(BINDIR)/python -m pip install -r requirements/dev.txt test: .state/env/pyvenv.cfg $(BINDIR)/python -m pip install . $(BINDIR)/pytest $(BINDIR)/python -m tests.lib lint: .state/env/pyvenv.cfg $(BINDIR)/black --check bin setup.py src tests $(BINDIR)/python bin/sort.py src/trove_classifiers/__init__.py $(BINDIR)/mypy src reformat: .state/env/pyvenv.cfg $(BINDIR)/black tests src .PHONY: build test lint reformat trove-classifiers-2025.4.28.22/README.md000066400000000000000000000031011500400272200171660ustar00rootroot00000000000000Canonical source for [classifiers][1] on [PyPI][2]. Classifiers [categorize projects][3] per [PEP 301][4]. Use this package to validate classifiers in packages for PyPI upload or download. ## Usage To install [from PyPI][5]: ``` $ pip install trove-classifiers ``` This package can be invoked as a module to print a list of classifiers: ``` $ python -m trove_classifiers | grep -Ei pyramid Framework :: Pyramid ``` In addition, this package's API is two importable objects: ### Classifiers (`trove_classifiers.classifiers`) A `set` containing classifiers (as strings). Useful for determining membership. Example - determine if a classifier is valid: ```python >>> from trove_classifiers import classifiers >>> 'License :: OSI Approved' in classifiers True >>> 'Fuzzy :: Wuzzy :: Was :: A :: Bear' in classifiers False >>> ``` ### Deprecated classifiers (`trove_classifiers.deprecated_classifiers`) A `dict`, mapping a deprecated classifier (string) to a list of classifiers which replaces it (strings). Example - determine if a classifier is deprecated: ```python >>> from trove_classifiers import deprecated_classifiers >>> 'License :: OSI Approved' in deprecated_classifiers False >>> 'Natural Language :: Ukranian' in deprecated_classifiers True >>> deprecated_classifiers["Natural Language :: Ukranian"] ['Natural Language :: Ukrainian'] ``` [1]: https://pypi.org/classifiers/ [2]: https://pypi.org [3]: https://packaging.python.org/specifications/core-metadata/#classifier-multiple-use [4]: https://www.python.org/dev/peps/pep-0301/ [5]: https://pypi.org/project/trove-classifiers/ trove-classifiers-2025.4.28.22/bin/000077500000000000000000000000001500400272200164645ustar00rootroot00000000000000trove-classifiers-2025.4.28.22/bin/sort.py000066400000000000000000000014341500400272200200270ustar00rootroot00000000000000import ast import sys from natsort import natsorted def _test_sort(elements, _type): values = [e.value for e in elements] for wrong, right in zip(values, natsorted(values)): if wrong != right: print(f"{_type} is not sorted, {right!r} should come before {wrong!r}") return True return False if len(sys.argv) == 1: print("Usage: sort.py [filename]") sys.exit(1) with open(sys.argv[1]) as f: contents = f.read() fail = False for node in ast.walk(ast.parse(contents)): if type(node) == ast.List: fail = _test_sort(node.elts, "List") or fail if type(node) == ast.Set: fail = _test_sort(node.elts, "Set") or fail if type(node) == ast.Dict: fail = _test_sort(node.keys, "Dict") or fail sys.exit(fail) trove-classifiers-2025.4.28.22/pyproject.toml000066400000000000000000000002161500400272200206270ustar00rootroot00000000000000[build-system] requires = ["setuptools", "calver"] build-backend = "setuptools.build_meta" [tool.mypy] strict = true warn_unreachable = true trove-classifiers-2025.4.28.22/requirements/000077500000000000000000000000001500400272200204375ustar00rootroot00000000000000trove-classifiers-2025.4.28.22/requirements/dev.txt000066400000000000000000000000411500400272200217510ustar00rootroot00000000000000black jinja2 natsort pytest mypy trove-classifiers-2025.4.28.22/setup.py000066400000000000000000000022051500400272200174250ustar00rootroot00000000000000from io import open from os import path from setuptools import setup, find_packages here = path.abspath(path.dirname(__file__)) # Get the long description from the README file with open(path.join(here, "README.md"), encoding="utf-8") as f: long_description = f.read() setup( name="trove-classifiers", description="Canonical source for classifiers on PyPI (pypi.org).", long_description=long_description, long_description_content_type="text/markdown", url="https://github.com/pypa/trove-classifiers", author="The PyPI Admins", author_email="admin@pypi.org", classifiers=[ "Development Status :: 5 - Production/Stable", "Intended Audience :: Developers", "License :: OSI Approved :: Apache Software License", "Programming Language :: Python :: 3", "Typing :: Typed", ], keywords="classifiers", package_dir={"": "src"}, packages=find_packages(where="src"), package_data={"": ["py.typed"]}, use_calver="%Y.%m.%d.%H", setup_requires=["calver"], entry_points={ "console_scripts": ["trove-classifiers=trove_classifiers.__main__:cli"], }, ) trove-classifiers-2025.4.28.22/src/000077500000000000000000000000001500400272200165035ustar00rootroot00000000000000trove-classifiers-2025.4.28.22/src/trove_classifiers/000077500000000000000000000000001500400272200222315ustar00rootroot00000000000000trove-classifiers-2025.4.28.22/src/trove_classifiers/__init__.py000066400000000000000000001224501500400272200243460ustar00rootroot00000000000000from typing import Dict, List, Set # A set of classifier names sorted_classifiers: List[str] = [ "Development Status :: 1 - Planning", "Development Status :: 2 - Pre-Alpha", "Development Status :: 3 - Alpha", "Development Status :: 4 - Beta", "Development Status :: 5 - Production/Stable", "Development Status :: 6 - Mature", "Development Status :: 7 - Inactive", "Environment :: Console", "Environment :: Console :: Curses", "Environment :: Console :: Framebuffer", "Environment :: Console :: Newt", "Environment :: Console :: svgalib", "Environment :: GPU", "Environment :: GPU :: NVIDIA CUDA", "Environment :: GPU :: NVIDIA CUDA :: 1.0", "Environment :: GPU :: NVIDIA CUDA :: 1.1", "Environment :: GPU :: NVIDIA CUDA :: 2.0", "Environment :: GPU :: NVIDIA CUDA :: 2.1", "Environment :: GPU :: NVIDIA CUDA :: 2.2", "Environment :: GPU :: NVIDIA CUDA :: 2.3", "Environment :: GPU :: NVIDIA CUDA :: 3.0", "Environment :: GPU :: NVIDIA CUDA :: 3.1", "Environment :: GPU :: NVIDIA CUDA :: 3.2", "Environment :: GPU :: NVIDIA CUDA :: 4.0", "Environment :: GPU :: NVIDIA CUDA :: 4.1", "Environment :: GPU :: NVIDIA CUDA :: 4.2", "Environment :: GPU :: NVIDIA CUDA :: 5.0", "Environment :: GPU :: NVIDIA CUDA :: 5.5", "Environment :: GPU :: NVIDIA CUDA :: 6.0", "Environment :: GPU :: NVIDIA CUDA :: 6.5", "Environment :: GPU :: NVIDIA CUDA :: 7.0", "Environment :: GPU :: NVIDIA CUDA :: 7.5", "Environment :: GPU :: NVIDIA CUDA :: 8.0", "Environment :: GPU :: NVIDIA CUDA :: 9.0", "Environment :: GPU :: NVIDIA CUDA :: 9.1", "Environment :: GPU :: NVIDIA CUDA :: 9.2", "Environment :: GPU :: NVIDIA CUDA :: 10.0", "Environment :: GPU :: NVIDIA CUDA :: 10.1", "Environment :: GPU :: NVIDIA CUDA :: 10.2", "Environment :: GPU :: NVIDIA CUDA :: 11", "Environment :: GPU :: NVIDIA CUDA :: 11.0", "Environment :: GPU :: NVIDIA CUDA :: 11.1", "Environment :: GPU :: NVIDIA CUDA :: 11.2", "Environment :: GPU :: NVIDIA CUDA :: 11.3", "Environment :: GPU :: NVIDIA CUDA :: 11.4", "Environment :: GPU :: NVIDIA CUDA :: 11.5", "Environment :: GPU :: NVIDIA CUDA :: 11.6", "Environment :: GPU :: NVIDIA CUDA :: 11.7", "Environment :: GPU :: NVIDIA CUDA :: 11.8", "Environment :: GPU :: NVIDIA CUDA :: 12", "Environment :: GPU :: NVIDIA CUDA :: 12 :: 12.0", "Environment :: GPU :: NVIDIA CUDA :: 12 :: 12.1", "Environment :: GPU :: NVIDIA CUDA :: 12 :: 12.2", "Environment :: GPU :: NVIDIA CUDA :: 12 :: 12.3", "Environment :: GPU :: NVIDIA CUDA :: 12 :: 12.4", "Environment :: GPU :: NVIDIA CUDA :: 12 :: 12.5", "Environment :: GPU :: NVIDIA CUDA :: 12 :: 12.6", "Environment :: Handhelds/PDA's", "Environment :: MacOS X", "Environment :: MacOS X :: Aqua", "Environment :: MacOS X :: Carbon", "Environment :: MacOS X :: Cocoa", "Environment :: No Input/Output (Daemon)", "Environment :: OpenStack", "Environment :: Other Environment", "Environment :: Plugins", "Environment :: Web Environment", "Environment :: Web Environment :: Buffet", "Environment :: Web Environment :: Mozilla", "Environment :: Web Environment :: ToscaWidgets", "Environment :: WebAssembly", "Environment :: WebAssembly :: Emscripten", "Environment :: WebAssembly :: WASI", "Environment :: Win32 (MS Windows)", "Environment :: X11 Applications", "Environment :: X11 Applications :: GTK", "Environment :: X11 Applications :: Gnome", "Environment :: X11 Applications :: KDE", "Environment :: X11 Applications :: Qt", "Framework :: AWS CDK", "Framework :: AWS CDK :: 1", "Framework :: AWS CDK :: 2", "Framework :: AiiDA", "Framework :: Ansible", "Framework :: AnyIO", "Framework :: Apache Airflow", "Framework :: Apache Airflow :: Provider", "Framework :: AsyncIO", "Framework :: BEAT", "Framework :: BFG", "Framework :: Bob", "Framework :: Bottle", "Framework :: Buildout", "Framework :: Buildout :: Extension", "Framework :: Buildout :: Recipe", "Framework :: CastleCMS", "Framework :: CastleCMS :: Theme", "Framework :: Celery", "Framework :: Chandler", "Framework :: CherryPy", "Framework :: CubicWeb", "Framework :: Dash", "Framework :: Datasette", "Framework :: Django", "Framework :: Django :: 1", "Framework :: Django :: 1.4", "Framework :: Django :: 1.5", "Framework :: Django :: 1.6", "Framework :: Django :: 1.7", "Framework :: Django :: 1.8", "Framework :: Django :: 1.9", "Framework :: Django :: 1.10", "Framework :: Django :: 1.11", "Framework :: Django :: 2", "Framework :: Django :: 2.0", "Framework :: Django :: 2.1", "Framework :: Django :: 2.2", "Framework :: Django :: 3", "Framework :: Django :: 3.0", "Framework :: Django :: 3.1", "Framework :: Django :: 3.2", "Framework :: Django :: 4", "Framework :: Django :: 4.0", "Framework :: Django :: 4.1", "Framework :: Django :: 4.2", "Framework :: Django :: 5", "Framework :: Django :: 5.0", "Framework :: Django :: 5.1", "Framework :: Django :: 5.2", "Framework :: Django CMS", "Framework :: Django CMS :: 3.4", "Framework :: Django CMS :: 3.5", "Framework :: Django CMS :: 3.6", "Framework :: Django CMS :: 3.7", "Framework :: Django CMS :: 3.8", "Framework :: Django CMS :: 3.9", "Framework :: Django CMS :: 3.10", "Framework :: Django CMS :: 3.11", "Framework :: Django CMS :: 4.0", "Framework :: Django CMS :: 4.1", "Framework :: Django CMS :: 5.0", "Framework :: FastAPI", "Framework :: Flake8", "Framework :: Flask", "Framework :: Hatch", "Framework :: Hypothesis", "Framework :: IDLE", "Framework :: IPython", "Framework :: Jupyter", "Framework :: Jupyter :: JupyterLab", "Framework :: Jupyter :: JupyterLab :: 1", "Framework :: Jupyter :: JupyterLab :: 2", "Framework :: Jupyter :: JupyterLab :: 3", "Framework :: Jupyter :: JupyterLab :: 4", "Framework :: Jupyter :: JupyterLab :: Extensions", "Framework :: Jupyter :: JupyterLab :: Extensions :: Mime Renderers", "Framework :: Jupyter :: JupyterLab :: Extensions :: Prebuilt", "Framework :: Jupyter :: JupyterLab :: Extensions :: Themes", "Framework :: Kedro", "Framework :: Lektor", "Framework :: Masonite", "Framework :: Matplotlib", "Framework :: MkDocs", "Framework :: Nengo", "Framework :: Odoo", "Framework :: Odoo :: 8.0", "Framework :: Odoo :: 9.0", "Framework :: Odoo :: 10.0", "Framework :: Odoo :: 11.0", "Framework :: Odoo :: 12.0", "Framework :: Odoo :: 13.0", "Framework :: Odoo :: 14.0", "Framework :: Odoo :: 15.0", "Framework :: Odoo :: 16.0", "Framework :: Odoo :: 17.0", "Framework :: Odoo :: 18.0", "Framework :: OpenTelemetry", "Framework :: OpenTelemetry :: Distros", "Framework :: OpenTelemetry :: Exporters", "Framework :: OpenTelemetry :: Instrumentations", "Framework :: Opps", "Framework :: Paste", "Framework :: Pelican", "Framework :: Pelican :: Plugins", "Framework :: Pelican :: Themes", "Framework :: Plone", "Framework :: Plone :: 3.2", "Framework :: Plone :: 3.3", "Framework :: Plone :: 4.0", "Framework :: Plone :: 4.1", "Framework :: Plone :: 4.2", "Framework :: Plone :: 4.3", "Framework :: Plone :: 5.0", "Framework :: Plone :: 5.1", "Framework :: Plone :: 5.2", "Framework :: Plone :: 5.3", "Framework :: Plone :: 6.0", "Framework :: Plone :: 6.1", "Framework :: Plone :: 6.2", "Framework :: Plone :: Addon", "Framework :: Plone :: Core", "Framework :: Plone :: Distribution", "Framework :: Plone :: Theme", "Framework :: PySimpleGUI", "Framework :: PySimpleGUI :: 4", "Framework :: PySimpleGUI :: 5", "Framework :: Pycsou", "Framework :: Pydantic", "Framework :: Pydantic :: 1", "Framework :: Pydantic :: 2", "Framework :: Pylons", "Framework :: Pyodide", "Framework :: Pyramid", "Framework :: Pytest", "Framework :: Review Board", "Framework :: Robot Framework", "Framework :: Robot Framework :: Library", "Framework :: Robot Framework :: Tool", "Framework :: Scrapy", "Framework :: Setuptools Plugin", "Framework :: Sphinx", "Framework :: Sphinx :: Domain", "Framework :: Sphinx :: Extension", "Framework :: Sphinx :: Theme", "Framework :: Trac", "Framework :: Trio", "Framework :: Tryton", "Framework :: TurboGears", "Framework :: TurboGears :: Applications", "Framework :: TurboGears :: Widgets", "Framework :: Twisted", "Framework :: Wagtail", "Framework :: Wagtail :: 1", "Framework :: Wagtail :: 2", "Framework :: Wagtail :: 3", "Framework :: Wagtail :: 4", "Framework :: Wagtail :: 5", "Framework :: Wagtail :: 6", "Framework :: Wagtail :: 7", "Framework :: ZODB", "Framework :: Zope", "Framework :: Zope2", "Framework :: Zope3", "Framework :: Zope :: 2", "Framework :: Zope :: 3", "Framework :: Zope :: 4", "Framework :: Zope :: 5", "Framework :: aiohttp", "Framework :: cocotb", "Framework :: napari", "Framework :: tox", "Intended Audience :: Customer Service", "Intended Audience :: Developers", "Intended Audience :: Education", "Intended Audience :: End Users/Desktop", "Intended Audience :: Financial and Insurance Industry", "Intended Audience :: Healthcare Industry", "Intended Audience :: Information Technology", "Intended Audience :: Legal Industry", "Intended Audience :: Manufacturing", "Intended Audience :: Other Audience", "Intended Audience :: Religion", "Intended Audience :: Science/Research", "Intended Audience :: System Administrators", "Intended Audience :: Telecommunications Industry", "License :: Aladdin Free Public License (AFPL)", "License :: CC0 1.0 Universal (CC0 1.0) Public Domain Dedication", "License :: CeCILL-B Free Software License Agreement (CECILL-B)", "License :: CeCILL-C Free Software License Agreement (CECILL-C)", "License :: DFSG approved", "License :: Eiffel Forum License (EFL)", "License :: Free For Educational Use", "License :: Free For Home Use", "License :: Free To Use But Restricted", "License :: Free for non-commercial use", "License :: Freely Distributable", "License :: Freeware", "License :: GUST Font License 1.0", "License :: GUST Font License 2006-09-30", "License :: Netscape Public License (NPL)", "License :: Nokia Open Source License (NOKOS)", "License :: OSI Approved", "License :: OSI Approved :: Academic Free License (AFL)", "License :: OSI Approved :: Apache Software License", "License :: OSI Approved :: Apple Public Source License", "License :: OSI Approved :: Artistic License", "License :: OSI Approved :: Attribution Assurance License", "License :: OSI Approved :: BSD License", "License :: OSI Approved :: Blue Oak Model License (BlueOak-1.0.0)", "License :: OSI Approved :: Boost Software License 1.0 (BSL-1.0)", "License :: OSI Approved :: CEA CNRS Inria Logiciel Libre License, version 2.1 (CeCILL-2.1)", "License :: OSI Approved :: CMU License (MIT-CMU)", "License :: OSI Approved :: Common Development and Distribution License 1.0 (CDDL-1.0)", "License :: OSI Approved :: Common Public License", "License :: OSI Approved :: Eclipse Public License 1.0 (EPL-1.0)", "License :: OSI Approved :: Eclipse Public License 2.0 (EPL-2.0)", "License :: OSI Approved :: Educational Community License, Version 2.0 (ECL-2.0)", "License :: OSI Approved :: Eiffel Forum License", "License :: OSI Approved :: European Union Public Licence 1.0 (EUPL 1.0)", "License :: OSI Approved :: European Union Public Licence 1.1 (EUPL 1.1)", "License :: OSI Approved :: European Union Public Licence 1.2 (EUPL 1.2)", "License :: OSI Approved :: GNU Affero General Public License v3", "License :: OSI Approved :: GNU Affero General Public License v3 or later (AGPLv3+)", "License :: OSI Approved :: GNU Free Documentation License (FDL)", "License :: OSI Approved :: GNU General Public License (GPL)", "License :: OSI Approved :: GNU General Public License v2 (GPLv2)", "License :: OSI Approved :: GNU General Public License v2 or later (GPLv2+)", "License :: OSI Approved :: GNU General Public License v3 (GPLv3)", "License :: OSI Approved :: GNU General Public License v3 or later (GPLv3+)", "License :: OSI Approved :: GNU Lesser General Public License v2 (LGPLv2)", "License :: OSI Approved :: GNU Lesser General Public License v2 or later (LGPLv2+)", "License :: OSI Approved :: GNU Lesser General Public License v3 (LGPLv3)", "License :: OSI Approved :: GNU Lesser General Public License v3 or later (LGPLv3+)", "License :: OSI Approved :: GNU Library or Lesser General Public License (LGPL)", "License :: OSI Approved :: Historical Permission Notice and Disclaimer (HPND)", "License :: OSI Approved :: IBM Public License", "License :: OSI Approved :: ISC License (ISCL)", "License :: OSI Approved :: MIT License", "License :: OSI Approved :: MIT No Attribution License (MIT-0)", "License :: OSI Approved :: MirOS License (MirOS)", "License :: OSI Approved :: Motosoto License", "License :: OSI Approved :: Mozilla Public License 1.0 (MPL)", "License :: OSI Approved :: Mozilla Public License 1.1 (MPL 1.1)", "License :: OSI Approved :: Mozilla Public License 2.0 (MPL 2.0)", "License :: OSI Approved :: Mulan Permissive Software License v2 (MulanPSL-2.0)", "License :: OSI Approved :: NASA Open Source Agreement v1.3 (NASA-1.3)", "License :: OSI Approved :: Nethack General Public License", "License :: OSI Approved :: Nokia Open Source License", "License :: OSI Approved :: Open Group Test Suite License", "License :: OSI Approved :: Open Software License 3.0 (OSL-3.0)", "License :: OSI Approved :: PostgreSQL License", "License :: OSI Approved :: Python License (CNRI Python License)", "License :: OSI Approved :: Python Software Foundation License", "License :: OSI Approved :: Qt Public License (QPL)", "License :: OSI Approved :: Ricoh Source Code Public License", "License :: OSI Approved :: SIL Open Font License 1.1 (OFL-1.1)", "License :: OSI Approved :: Sleepycat License", "License :: OSI Approved :: Sun Public License", "License :: OSI Approved :: The Unlicense (Unlicense)", "License :: OSI Approved :: Universal Permissive License (UPL)", "License :: OSI Approved :: University of Illinois/NCSA Open Source License", "License :: OSI Approved :: Vovida Software License 1.0", "License :: OSI Approved :: W3C License", "License :: OSI Approved :: Zero-Clause BSD (0BSD)", "License :: OSI Approved :: Zope Public License", "License :: OSI Approved :: zlib/libpng License", "License :: Other/Proprietary License", "License :: Public Domain", "License :: Repoze Public License", "Natural Language :: Afrikaans", "Natural Language :: Arabic", "Natural Language :: Basque", "Natural Language :: Bengali", "Natural Language :: Bosnian", "Natural Language :: Bulgarian", "Natural Language :: Cantonese", "Natural Language :: Catalan", "Natural Language :: Catalan (Valencian)", "Natural Language :: Chinese (Simplified)", "Natural Language :: Chinese (Traditional)", "Natural Language :: Croatian", "Natural Language :: Czech", "Natural Language :: Danish", "Natural Language :: Dutch", "Natural Language :: English", "Natural Language :: Esperanto", "Natural Language :: Finnish", "Natural Language :: French", "Natural Language :: Galician", "Natural Language :: Georgian", "Natural Language :: German", "Natural Language :: Greek", "Natural Language :: Hebrew", "Natural Language :: Hindi", "Natural Language :: Hungarian", "Natural Language :: Icelandic", "Natural Language :: Indonesian", "Natural Language :: Irish", "Natural Language :: Italian", "Natural Language :: Japanese", "Natural Language :: Javanese", "Natural Language :: Korean", "Natural Language :: Latin", "Natural Language :: Latvian", "Natural Language :: Lithuanian", "Natural Language :: Macedonian", "Natural Language :: Malay", "Natural Language :: Marathi", "Natural Language :: Nepali", "Natural Language :: Norwegian", "Natural Language :: Panjabi", "Natural Language :: Persian", "Natural Language :: Polish", "Natural Language :: Portuguese", "Natural Language :: Portuguese (Brazilian)", "Natural Language :: Romanian", "Natural Language :: Russian", "Natural Language :: Serbian", "Natural Language :: Slovak", "Natural Language :: Slovenian", "Natural Language :: Spanish", "Natural Language :: Swedish", "Natural Language :: Tamil", "Natural Language :: Telugu", "Natural Language :: Thai", "Natural Language :: Tibetan", "Natural Language :: Turkish", "Natural Language :: Ukrainian", "Natural Language :: Urdu", "Natural Language :: Vietnamese", "Operating System :: Android", "Operating System :: BeOS", "Operating System :: MacOS", "Operating System :: MacOS :: MacOS 9", "Operating System :: MacOS :: MacOS X", "Operating System :: Microsoft", "Operating System :: Microsoft :: MS-DOS", "Operating System :: Microsoft :: Windows", "Operating System :: Microsoft :: Windows :: Windows 3.1 or Earlier", "Operating System :: Microsoft :: Windows :: Windows 7", "Operating System :: Microsoft :: Windows :: Windows 8", "Operating System :: Microsoft :: Windows :: Windows 8.1", "Operating System :: Microsoft :: Windows :: Windows 10", "Operating System :: Microsoft :: Windows :: Windows 11", "Operating System :: Microsoft :: Windows :: Windows 95/98/2000", "Operating System :: Microsoft :: Windows :: Windows CE", "Operating System :: Microsoft :: Windows :: Windows NT/2000", "Operating System :: Microsoft :: Windows :: Windows Server 2003", "Operating System :: Microsoft :: Windows :: Windows Server 2008", "Operating System :: Microsoft :: Windows :: Windows Vista", "Operating System :: Microsoft :: Windows :: Windows XP", "Operating System :: OS Independent", "Operating System :: OS/2", "Operating System :: Other OS", "Operating System :: PDA Systems", "Operating System :: POSIX", "Operating System :: POSIX :: AIX", "Operating System :: POSIX :: BSD", "Operating System :: POSIX :: BSD :: BSD/OS", "Operating System :: POSIX :: BSD :: FreeBSD", "Operating System :: POSIX :: BSD :: NetBSD", "Operating System :: POSIX :: BSD :: OpenBSD", "Operating System :: POSIX :: GNU Hurd", "Operating System :: POSIX :: HP-UX", "Operating System :: POSIX :: IRIX", "Operating System :: POSIX :: Linux", "Operating System :: POSIX :: Other", "Operating System :: POSIX :: SCO", "Operating System :: POSIX :: SunOS/Solaris", "Operating System :: PalmOS", "Operating System :: RISC OS", "Operating System :: Unix", "Operating System :: iOS", "Programming Language :: APL", "Programming Language :: ASP", "Programming Language :: Ada", "Programming Language :: Assembly", "Programming Language :: Awk", "Programming Language :: Basic", "Programming Language :: C", "Programming Language :: C#", "Programming Language :: C++", "Programming Language :: Cold Fusion", "Programming Language :: Cython", "Programming Language :: D", "Programming Language :: Delphi/Kylix", "Programming Language :: Dylan", "Programming Language :: Eiffel", "Programming Language :: Emacs-Lisp", "Programming Language :: Erlang", "Programming Language :: Euler", "Programming Language :: Euphoria", "Programming Language :: F#", "Programming Language :: Forth", "Programming Language :: Fortran", "Programming Language :: Go", "Programming Language :: Haskell", "Programming Language :: Hy", "Programming Language :: Java", "Programming Language :: JavaScript", "Programming Language :: Kotlin", "Programming Language :: Lisp", "Programming Language :: Logo", "Programming Language :: Lua", "Programming Language :: ML", "Programming Language :: Modula", "Programming Language :: OCaml", "Programming Language :: Object Pascal", "Programming Language :: Objective C", "Programming Language :: Other", "Programming Language :: Other Scripting Engines", "Programming Language :: PHP", "Programming Language :: PL/SQL", "Programming Language :: PROGRESS", "Programming Language :: Pascal", "Programming Language :: Perl", "Programming Language :: Pike", "Programming Language :: Pliant", "Programming Language :: Prolog", "Programming Language :: Python", "Programming Language :: Python :: 2", "Programming Language :: Python :: 2 :: Only", "Programming Language :: Python :: 2.3", "Programming Language :: Python :: 2.4", "Programming Language :: Python :: 2.5", "Programming Language :: Python :: 2.6", "Programming Language :: Python :: 2.7", "Programming Language :: Python :: 3", "Programming Language :: Python :: 3 :: Only", "Programming Language :: Python :: 3.0", "Programming Language :: Python :: 3.1", "Programming Language :: Python :: 3.2", "Programming Language :: Python :: 3.3", "Programming Language :: Python :: 3.4", "Programming Language :: Python :: 3.5", "Programming Language :: Python :: 3.6", "Programming Language :: Python :: 3.7", "Programming Language :: Python :: 3.8", "Programming Language :: Python :: 3.9", "Programming Language :: Python :: 3.10", "Programming Language :: Python :: 3.11", "Programming Language :: Python :: 3.12", "Programming Language :: Python :: 3.13", "Programming Language :: Python :: 3.14", "Programming Language :: Python :: Implementation", "Programming Language :: Python :: Implementation :: CPython", "Programming Language :: Python :: Implementation :: IronPython", "Programming Language :: Python :: Implementation :: Jython", "Programming Language :: Python :: Implementation :: MicroPython", "Programming Language :: Python :: Implementation :: PyPy", "Programming Language :: Python :: Implementation :: Stackless", "Programming Language :: R", "Programming Language :: REBOL", "Programming Language :: Rexx", "Programming Language :: Ruby", "Programming Language :: Rust", "Programming Language :: SQL", "Programming Language :: Scheme", "Programming Language :: Simula", "Programming Language :: Smalltalk", "Programming Language :: Tcl", "Programming Language :: Unix Shell", "Programming Language :: Visual Basic", "Programming Language :: XBasic", "Programming Language :: YACC", "Programming Language :: Zope", "Topic :: Adaptive Technologies", "Topic :: Artistic Software", "Topic :: Communications", "Topic :: Communications :: BBS", "Topic :: Communications :: Chat", "Topic :: Communications :: Chat :: ICQ", "Topic :: Communications :: Chat :: Internet Relay Chat", "Topic :: Communications :: Chat :: Unix Talk", "Topic :: Communications :: Conferencing", "Topic :: Communications :: Email", "Topic :: Communications :: Email :: Address Book", "Topic :: Communications :: Email :: Email Clients (MUA)", "Topic :: Communications :: Email :: Filters", "Topic :: Communications :: Email :: Mail Transport Agents", "Topic :: Communications :: Email :: Mailing List Servers", "Topic :: Communications :: Email :: Post-Office", "Topic :: Communications :: Email :: Post-Office :: IMAP", "Topic :: Communications :: Email :: Post-Office :: POP3", "Topic :: Communications :: FIDO", "Topic :: Communications :: Fax", "Topic :: Communications :: File Sharing", "Topic :: Communications :: File Sharing :: Gnutella", "Topic :: Communications :: File Sharing :: Napster", "Topic :: Communications :: Ham Radio", "Topic :: Communications :: Internet Phone", "Topic :: Communications :: Telephony", "Topic :: Communications :: Usenet News", "Topic :: Database", "Topic :: Database :: Database Engines/Servers", "Topic :: Database :: Front-Ends", "Topic :: Desktop Environment", "Topic :: Desktop Environment :: File Managers", "Topic :: Desktop Environment :: GNUstep", "Topic :: Desktop Environment :: Gnome", "Topic :: Desktop Environment :: K Desktop Environment (KDE)", "Topic :: Desktop Environment :: K Desktop Environment (KDE) :: Themes", "Topic :: Desktop Environment :: PicoGUI", "Topic :: Desktop Environment :: PicoGUI :: Applications", "Topic :: Desktop Environment :: PicoGUI :: Themes", "Topic :: Desktop Environment :: Screen Savers", "Topic :: Desktop Environment :: Window Managers", "Topic :: Desktop Environment :: Window Managers :: Afterstep", "Topic :: Desktop Environment :: Window Managers :: Afterstep :: Themes", "Topic :: Desktop Environment :: Window Managers :: Applets", "Topic :: Desktop Environment :: Window Managers :: Blackbox", "Topic :: Desktop Environment :: Window Managers :: Blackbox :: Themes", "Topic :: Desktop Environment :: Window Managers :: CTWM", "Topic :: Desktop Environment :: Window Managers :: CTWM :: Themes", "Topic :: Desktop Environment :: Window Managers :: Enlightenment", "Topic :: Desktop Environment :: Window Managers :: Enlightenment :: Epplets", "Topic :: Desktop Environment :: Window Managers :: Enlightenment :: Themes DR15", "Topic :: Desktop Environment :: Window Managers :: Enlightenment :: Themes DR16", "Topic :: Desktop Environment :: Window Managers :: Enlightenment :: Themes DR17", "Topic :: Desktop Environment :: Window Managers :: FVWM", "Topic :: Desktop Environment :: Window Managers :: FVWM :: Themes", "Topic :: Desktop Environment :: Window Managers :: Fluxbox", "Topic :: Desktop Environment :: Window Managers :: Fluxbox :: Themes", "Topic :: Desktop Environment :: Window Managers :: IceWM", "Topic :: Desktop Environment :: Window Managers :: IceWM :: Themes", "Topic :: Desktop Environment :: Window Managers :: MetaCity", "Topic :: Desktop Environment :: Window Managers :: MetaCity :: Themes", "Topic :: Desktop Environment :: Window Managers :: Oroborus", "Topic :: Desktop Environment :: Window Managers :: Oroborus :: Themes", "Topic :: Desktop Environment :: Window Managers :: Sawfish", "Topic :: Desktop Environment :: Window Managers :: Sawfish :: Themes 0.30", "Topic :: Desktop Environment :: Window Managers :: Sawfish :: Themes pre-0.30", "Topic :: Desktop Environment :: Window Managers :: Waimea", "Topic :: Desktop Environment :: Window Managers :: Waimea :: Themes", "Topic :: Desktop Environment :: Window Managers :: Window Maker", "Topic :: Desktop Environment :: Window Managers :: Window Maker :: Applets", "Topic :: Desktop Environment :: Window Managers :: Window Maker :: Themes", "Topic :: Desktop Environment :: Window Managers :: XFCE", "Topic :: Desktop Environment :: Window Managers :: XFCE :: Themes", "Topic :: Documentation", "Topic :: Documentation :: Sphinx", "Topic :: Education", "Topic :: Education :: Computer Aided Instruction (CAI)", "Topic :: Education :: Testing", "Topic :: File Formats", "Topic :: File Formats :: JSON", "Topic :: File Formats :: JSON :: JSON Schema", "Topic :: Games/Entertainment", "Topic :: Games/Entertainment :: Arcade", "Topic :: Games/Entertainment :: Board Games", "Topic :: Games/Entertainment :: First Person Shooters", "Topic :: Games/Entertainment :: Fortune Cookies", "Topic :: Games/Entertainment :: Multi-User Dungeons (MUD)", "Topic :: Games/Entertainment :: Puzzle Games", "Topic :: Games/Entertainment :: Real Time Strategy", "Topic :: Games/Entertainment :: Role-Playing", "Topic :: Games/Entertainment :: Side-Scrolling/Arcade Games", "Topic :: Games/Entertainment :: Simulation", "Topic :: Games/Entertainment :: Turn Based Strategy", "Topic :: Home Automation", "Topic :: Internet", "Topic :: Internet :: File Transfer Protocol (FTP)", "Topic :: Internet :: Finger", "Topic :: Internet :: Log Analysis", "Topic :: Internet :: Name Service (DNS)", "Topic :: Internet :: Proxy Servers", "Topic :: Internet :: WAP", "Topic :: Internet :: WWW/HTTP", "Topic :: Internet :: WWW/HTTP :: Browsers", "Topic :: Internet :: WWW/HTTP :: Dynamic Content", "Topic :: Internet :: WWW/HTTP :: Dynamic Content :: CGI Tools/Libraries", "Topic :: Internet :: WWW/HTTP :: Dynamic Content :: Content Management System", "Topic :: Internet :: WWW/HTTP :: Dynamic Content :: Message Boards", "Topic :: Internet :: WWW/HTTP :: Dynamic Content :: News/Diary", "Topic :: Internet :: WWW/HTTP :: Dynamic Content :: Page Counters", "Topic :: Internet :: WWW/HTTP :: Dynamic Content :: Wiki", "Topic :: Internet :: WWW/HTTP :: HTTP Servers", "Topic :: Internet :: WWW/HTTP :: Indexing/Search", "Topic :: Internet :: WWW/HTTP :: Session", "Topic :: Internet :: WWW/HTTP :: Site Management", "Topic :: Internet :: WWW/HTTP :: Site Management :: Link Checking", "Topic :: Internet :: WWW/HTTP :: WSGI", "Topic :: Internet :: WWW/HTTP :: WSGI :: Application", "Topic :: Internet :: WWW/HTTP :: WSGI :: Middleware", "Topic :: Internet :: WWW/HTTP :: WSGI :: Server", "Topic :: Internet :: XMPP", "Topic :: Internet :: Z39.50", "Topic :: Multimedia", "Topic :: Multimedia :: Graphics", "Topic :: Multimedia :: Graphics :: 3D Modeling", "Topic :: Multimedia :: Graphics :: 3D Rendering", "Topic :: Multimedia :: Graphics :: Capture", "Topic :: Multimedia :: Graphics :: Capture :: Digital Camera", "Topic :: Multimedia :: Graphics :: Capture :: Scanners", "Topic :: Multimedia :: Graphics :: Capture :: Screen Capture", "Topic :: Multimedia :: Graphics :: Editors", "Topic :: Multimedia :: Graphics :: Editors :: Raster-Based", "Topic :: Multimedia :: Graphics :: Editors :: Vector-Based", "Topic :: Multimedia :: Graphics :: Graphics Conversion", "Topic :: Multimedia :: Graphics :: Presentation", "Topic :: Multimedia :: Graphics :: Viewers", "Topic :: Multimedia :: Sound/Audio", "Topic :: Multimedia :: Sound/Audio :: Analysis", "Topic :: Multimedia :: Sound/Audio :: CD Audio", "Topic :: Multimedia :: Sound/Audio :: CD Audio :: CD Playing", "Topic :: Multimedia :: Sound/Audio :: CD Audio :: CD Ripping", "Topic :: Multimedia :: Sound/Audio :: CD Audio :: CD Writing", "Topic :: Multimedia :: Sound/Audio :: Capture/Recording", "Topic :: Multimedia :: Sound/Audio :: Conversion", "Topic :: Multimedia :: Sound/Audio :: Editors", "Topic :: Multimedia :: Sound/Audio :: MIDI", "Topic :: Multimedia :: Sound/Audio :: Mixers", "Topic :: Multimedia :: Sound/Audio :: Players", "Topic :: Multimedia :: Sound/Audio :: Players :: MP3", "Topic :: Multimedia :: Sound/Audio :: Sound Synthesis", "Topic :: Multimedia :: Sound/Audio :: Speech", "Topic :: Multimedia :: Video", "Topic :: Multimedia :: Video :: Capture", "Topic :: Multimedia :: Video :: Conversion", "Topic :: Multimedia :: Video :: Display", "Topic :: Multimedia :: Video :: Non-Linear Editor", "Topic :: Office/Business", "Topic :: Office/Business :: Financial", "Topic :: Office/Business :: Financial :: Accounting", "Topic :: Office/Business :: Financial :: Investment", "Topic :: Office/Business :: Financial :: Point-Of-Sale", "Topic :: Office/Business :: Financial :: Spreadsheet", "Topic :: Office/Business :: Groupware", "Topic :: Office/Business :: News/Diary", "Topic :: Office/Business :: Office Suites", "Topic :: Office/Business :: Scheduling", "Topic :: Other/Nonlisted Topic", "Topic :: Printing", "Topic :: Religion", "Topic :: Scientific/Engineering", "Topic :: Scientific/Engineering :: Artificial Intelligence", "Topic :: Scientific/Engineering :: Artificial Life", "Topic :: Scientific/Engineering :: Astronomy", "Topic :: Scientific/Engineering :: Atmospheric Science", "Topic :: Scientific/Engineering :: Bio-Informatics", "Topic :: Scientific/Engineering :: Chemistry", "Topic :: Scientific/Engineering :: Electronic Design Automation (EDA)", "Topic :: Scientific/Engineering :: GIS", "Topic :: Scientific/Engineering :: Human Machine Interfaces", "Topic :: Scientific/Engineering :: Hydrology", "Topic :: Scientific/Engineering :: Image Processing", "Topic :: Scientific/Engineering :: Image Recognition", "Topic :: Scientific/Engineering :: Information Analysis", "Topic :: Scientific/Engineering :: Interface Engine/Protocol Translator", "Topic :: Scientific/Engineering :: Mathematics", "Topic :: Scientific/Engineering :: Medical Science Apps.", "Topic :: Scientific/Engineering :: Oceanography", "Topic :: Scientific/Engineering :: Physics", "Topic :: Scientific/Engineering :: Quantum Computing", "Topic :: Scientific/Engineering :: Visualization", "Topic :: Security", "Topic :: Security :: Cryptography", "Topic :: Sociology", "Topic :: Sociology :: Genealogy", "Topic :: Sociology :: History", "Topic :: Software Development", "Topic :: Software Development :: Assemblers", "Topic :: Software Development :: Bug Tracking", "Topic :: Software Development :: Build Tools", "Topic :: Software Development :: Code Generators", "Topic :: Software Development :: Compilers", "Topic :: Software Development :: Debuggers", "Topic :: Software Development :: Disassemblers", "Topic :: Software Development :: Documentation", "Topic :: Software Development :: Embedded Systems", "Topic :: Software Development :: Embedded Systems :: Controller Area Network (CAN)", "Topic :: Software Development :: Embedded Systems :: Controller Area Network (CAN) :: CANopen", "Topic :: Software Development :: Embedded Systems :: Controller Area Network (CAN) :: J1939", "Topic :: Software Development :: Internationalization", "Topic :: Software Development :: Interpreters", "Topic :: Software Development :: Libraries", "Topic :: Software Development :: Libraries :: Application Frameworks", "Topic :: Software Development :: Libraries :: Java Libraries", "Topic :: Software Development :: Libraries :: PHP Classes", "Topic :: Software Development :: Libraries :: Perl Modules", "Topic :: Software Development :: Libraries :: Pike Modules", "Topic :: Software Development :: Libraries :: Python Modules", "Topic :: Software Development :: Libraries :: Ruby Modules", "Topic :: Software Development :: Libraries :: Tcl Extensions", "Topic :: Software Development :: Libraries :: pygame", "Topic :: Software Development :: Localization", "Topic :: Software Development :: Object Brokering", "Topic :: Software Development :: Object Brokering :: CORBA", "Topic :: Software Development :: Pre-processors", "Topic :: Software Development :: Quality Assurance", "Topic :: Software Development :: Testing", "Topic :: Software Development :: Testing :: Acceptance", "Topic :: Software Development :: Testing :: BDD", "Topic :: Software Development :: Testing :: Mocking", "Topic :: Software Development :: Testing :: Traffic Generation", "Topic :: Software Development :: Testing :: Unit", "Topic :: Software Development :: User Interfaces", "Topic :: Software Development :: Version Control", "Topic :: Software Development :: Version Control :: Bazaar", "Topic :: Software Development :: Version Control :: CVS", "Topic :: Software Development :: Version Control :: Git", "Topic :: Software Development :: Version Control :: Mercurial", "Topic :: Software Development :: Version Control :: RCS", "Topic :: Software Development :: Version Control :: SCCS", "Topic :: Software Development :: Widget Sets", "Topic :: System", "Topic :: System :: Archiving", "Topic :: System :: Archiving :: Backup", "Topic :: System :: Archiving :: Compression", "Topic :: System :: Archiving :: Mirroring", "Topic :: System :: Archiving :: Packaging", "Topic :: System :: Benchmark", "Topic :: System :: Boot", "Topic :: System :: Boot :: Init", "Topic :: System :: Clustering", "Topic :: System :: Console Fonts", "Topic :: System :: Distributed Computing", "Topic :: System :: Emulators", "Topic :: System :: Filesystems", "Topic :: System :: Hardware", "Topic :: System :: Hardware :: Hardware Drivers", "Topic :: System :: Hardware :: Mainframes", "Topic :: System :: Hardware :: Symmetric Multi-processing", "Topic :: System :: Hardware :: Universal Serial Bus (USB)", "Topic :: System :: Hardware :: Universal Serial Bus (USB) :: Audio", "Topic :: System :: Hardware :: Universal Serial Bus (USB) :: Audio/Video (AV)", "Topic :: System :: Hardware :: Universal Serial Bus (USB) :: Communications Device Class (CDC)", "Topic :: System :: Hardware :: Universal Serial Bus (USB) :: Diagnostic Device", "Topic :: System :: Hardware :: Universal Serial Bus (USB) :: Hub", "Topic :: System :: Hardware :: Universal Serial Bus (USB) :: Human Interface Device (HID)", "Topic :: System :: Hardware :: Universal Serial Bus (USB) :: Mass Storage", "Topic :: System :: Hardware :: Universal Serial Bus (USB) :: Miscellaneous", "Topic :: System :: Hardware :: Universal Serial Bus (USB) :: Printer", "Topic :: System :: Hardware :: Universal Serial Bus (USB) :: Smart Card", "Topic :: System :: Hardware :: Universal Serial Bus (USB) :: Vendor", "Topic :: System :: Hardware :: Universal Serial Bus (USB) :: Video (UVC)", "Topic :: System :: Hardware :: Universal Serial Bus (USB) :: Wireless Controller", "Topic :: System :: Installation/Setup", "Topic :: System :: Logging", "Topic :: System :: Monitoring", "Topic :: System :: Networking", "Topic :: System :: Networking :: Firewalls", "Topic :: System :: Networking :: Monitoring", "Topic :: System :: Networking :: Monitoring :: Hardware Watchdog", "Topic :: System :: Networking :: Time Synchronization", "Topic :: System :: Operating System", "Topic :: System :: Operating System Kernels", "Topic :: System :: Operating System Kernels :: BSD", "Topic :: System :: Operating System Kernels :: GNU Hurd", "Topic :: System :: Operating System Kernels :: Linux", "Topic :: System :: Power (UPS)", "Topic :: System :: Recovery Tools", "Topic :: System :: Shells", "Topic :: System :: Software Distribution", "Topic :: System :: System Shells", "Topic :: System :: Systems Administration", "Topic :: System :: Systems Administration :: Authentication/Directory", "Topic :: System :: Systems Administration :: Authentication/Directory :: LDAP", "Topic :: System :: Systems Administration :: Authentication/Directory :: NIS", "Topic :: Terminals", "Topic :: Terminals :: Serial", "Topic :: Terminals :: Telnet", "Topic :: Terminals :: Terminal Emulators/X Terminals", "Topic :: Text Editors", "Topic :: Text Editors :: Documentation", "Topic :: Text Editors :: Emacs", "Topic :: Text Editors :: Integrated Development Environments (IDE)", "Topic :: Text Editors :: Text Processing", "Topic :: Text Editors :: Word Processors", "Topic :: Text Processing", "Topic :: Text Processing :: Filters", "Topic :: Text Processing :: Fonts", "Topic :: Text Processing :: General", "Topic :: Text Processing :: Indexing", "Topic :: Text Processing :: Linguistic", "Topic :: Text Processing :: Markup", "Topic :: Text Processing :: Markup :: HTML", "Topic :: Text Processing :: Markup :: LaTeX", "Topic :: Text Processing :: Markup :: Markdown", "Topic :: Text Processing :: Markup :: SGML", "Topic :: Text Processing :: Markup :: VRML", "Topic :: Text Processing :: Markup :: XML", "Topic :: Text Processing :: Markup :: reStructuredText", "Topic :: Utilities", "Typing :: Stubs Only", "Typing :: Typed", ] classifiers: Set[str] = set(sorted_classifiers) # A mapping from the deprecated classifier name to a list of zero or more valid # classifiers that should replace it deprecated_classifiers: Dict[str, List[str]] = { "Framework :: Django CMS :: 4.2": ["Framework :: Django CMS :: 5.0"], "License :: OSI Approved :: Intel Open Source License": [], "License :: OSI Approved :: Jabber Open Source License": [], "License :: OSI Approved :: MITRE Collaborative Virtual Workspace License (CVW)": [], "License :: OSI Approved :: Sun Industry Standards Source License (SISSL)": [], "License :: OSI Approved :: X.Net License": [], "Natural Language :: Ukranian": ["Natural Language :: Ukrainian"], "Topic :: Communications :: Chat :: AOL Instant Messenger": [], } # All classifiers, including deprecated classifiers all_classifiers: List[str] = sorted( sorted_classifiers + list(deprecated_classifiers.keys()) ) __all__ = [ "all_classifiers", "classifiers", "deprecated_classifiers", "sorted_classifiers", ] trove-classifiers-2025.4.28.22/src/trove_classifiers/__main__.py000066400000000000000000000002611500400272200243220ustar00rootroot00000000000000from trove_classifiers import sorted_classifiers def cli() -> None: for classifier in sorted_classifiers: print(classifier) if __name__ == "__main__": cli() trove-classifiers-2025.4.28.22/src/trove_classifiers/py.typed000066400000000000000000000000001500400272200237160ustar00rootroot00000000000000trove-classifiers-2025.4.28.22/tests/000077500000000000000000000000001500400272200170565ustar00rootroot00000000000000trove-classifiers-2025.4.28.22/tests/__init__.py000066400000000000000000000000001500400272200211550ustar00rootroot00000000000000trove-classifiers-2025.4.28.22/tests/lib/000077500000000000000000000000001500400272200176245ustar00rootroot00000000000000trove-classifiers-2025.4.28.22/tests/lib/__init__.py000066400000000000000000000036251500400272200217430ustar00rootroot00000000000000class InvalidClassifier(Exception): pass def trove_tester(classifiers, deprecated_classifiers): # Check the classifiers for classifier in classifiers: split = classifier.split(" :: ") # Check if this is an invalid top-level classifier if len(split) == 1: raise InvalidClassifier(f"Top-level classifier {classifier!r} is invalid") # Check if all parent classifiers are specified for i in range(2, len(split)): parent = " :: ".join(split[:i]) if parent not in classifiers: raise InvalidClassifier(f"Classifier {parent!r} is missing") # Check the sub-classifiers for sub in split: # Check for whitespace if sub.strip().rstrip() != sub: raise InvalidClassifier( "Classifiers starting or ending with whitespace are invalid" ) # Check for private classifiers if sub.lower().startswith("private"): raise InvalidClassifier( "Classifiers starting with 'Private' are invalid" ) # Check for stray colons if ":" in sub: raise InvalidClassifier("Classifiers containing ':' are invalid") # Check the deprecated classifiers for deprecated_classifier, deprecated_by in deprecated_classifiers.items(): # Check if the classifier is in both lists if deprecated_classifier in classifiers: raise InvalidClassifier( f"Classifier {deprecated_classifier!r} in both valid and deprecated classifiers" ) # Check if all deprecated_by classifiers exist for new_classifier in deprecated_by: if new_classifier not in classifiers: raise InvalidClassifier(f"Classifier {new_classifier!r} does not exist") print("All classifiers passed :)") trove-classifiers-2025.4.28.22/tests/lib/__main__.py000066400000000000000000000002301500400272200217110ustar00rootroot00000000000000from tests.lib import trove_tester from trove_classifiers import classifiers, deprecated_classifiers trove_tester(classifiers, deprecated_classifiers) trove-classifiers-2025.4.28.22/tests/test_classifiers.py000066400000000000000000000044341500400272200230030ustar00rootroot00000000000000import pytest from tests.lib import trove_tester, InvalidClassifier @pytest.mark.parametrize( "classifiers, deprecated_classifiers", [ ( { "Foo :: Bar", "Foo :: Bar :: Baz", }, {}, ), ({"Foo :: Bar"}, {"Biz :: Baz": ["Foo :: Bar"]}), ], ) def test_success(classifiers, deprecated_classifiers): trove_tester(classifiers, deprecated_classifiers) @pytest.mark.parametrize( "classifiers, deprecated_classifiers, expected", [ ( {"Foo", "Foo :: Bar"}, {}, "Top-level classifier 'Foo' is invalid", ), ({"Foo :: Bar :: Baz"}, {}, "Classifier 'Foo :: Bar' is missing"), ( { "Foo :: Bar", }, {"Biz :: Baz": ["Bing :: Bang"]}, "Classifier 'Bing :: Bang' does not exist", ), ( { "Foo :: Bar", }, {"Foo :: Bar": []}, "Classifier 'Foo :: Bar' in both valid and deprecated classifiers", ), ({"Private :: Foo"}, {}, "Classifiers starting with 'Private' are invalid"), ({"private :: Foo"}, {}, "Classifiers starting with 'Private' are invalid"), ({"Foo :: Private"}, {}, "Classifiers starting with 'Private' are invalid"), ({"Foo :: private"}, {}, "Classifiers starting with 'Private' are invalid"), ( {" Foo :: Bar"}, {}, "Classifiers starting or ending with whitespace are invalid", ), ( {"Foo :: Bar "}, {}, "Classifiers starting or ending with whitespace are invalid", ), ( {"Foo: :: Bar"}, {}, "Classifiers containing ':' are invalid", ), ( {"Foo :: B:ar"}, {}, "Classifiers containing ':' are invalid", ), ( {"Foo :: Bar: Baz"}, {}, "Classifiers containing ':' are invalid", ), ], ) def test_failure(classifiers, deprecated_classifiers, expected): with pytest.raises(InvalidClassifier) as excinfo: trove_tester(classifiers, deprecated_classifiers) assert excinfo.value.args == (expected,) trove-classifiers-2025.4.28.22/tests/test_cli.py000066400000000000000000000020331500400272200212340ustar00rootroot00000000000000"""test_cli.py - Tests to confirm that the CLI works and that both running the module and calling the entry point produce equivalent output. """ import subprocess import sys from pathlib import Path BINDIR = Path(sys.executable).parent def test_module_run(): """Simple test for no error when running the module. Output is not validated.""" subprocess.check_call([f"{BINDIR}/python", "-m", "trove_classifiers"]) def test_entry_point(): """Simple test for no error when calling the entry point. Output is not validated.""" subprocess.check_call(f"{BINDIR}/trove-classifiers") def test_module_run_is_entry_point(): """Compare that module run output is the same as entry point output.""" module_run_proc = subprocess.run( [f"{BINDIR}/python", "-m", "trove_classifiers"], capture_output=True, encoding="utf-8", ) entry_point_proc = subprocess.run( f"{BINDIR}/trove-classifiers", capture_output=True, encoding="utf-8" ) assert module_run_proc.stdout == entry_point_proc.stdout