diff --git a/.github/ISSUE_TEMPLATE/bug.yml b/.github/ISSUE_TEMPLATE/bug.yml index 168d498..07d09ad 100644 --- a/.github/ISSUE_TEMPLATE/bug.yml +++ b/.github/ISSUE_TEMPLATE/bug.yml @@ -1,50 +1,125 @@ name: Bug Report -description: File a bug report +description: Report a bug or unexpected behavior in bitssh title: "[Bug]: " labels: ["bug", "triage"] body: - type: markdown attributes: value: | - Thanks for taking the time to fill out this bug report! - - type: input - id: contact + Thanks for reporting a bug! Please fill out the sections below to help us reproduce and fix the issue. + - type: textarea + id: description attributes: - label: Contact Details - description: How can we get in touch with you if we need more info? - placeholder: ex. email@example.com + label: Bug Description + description: A clear and concise description of what the bug is. + placeholder: "e.g. When I select a host from the TUI, the connection fails with..." validations: - required: false + required: true + - type: textarea + id: steps + attributes: + label: Steps to Reproduce + description: How can we reproduce this behavior? + placeholder: | + 1. Run `bitssh` + 2. Select host 'xyz' + 3. Press Enter + 4. See error + validations: + required: true - type: textarea - id: what-happened + id: expected attributes: - label: What happened? - description: Also tell us, what did you expect to happen? - placeholder: Tell us what you see! - value: "A bug happened!" + label: Expected Behavior + description: What did you expect to happen? + placeholder: "e.g. I expected bitssh to connect to the selected host" + validations: + required: true + - type: textarea + id: actual + attributes: + label: Actual Behavior + description: What actually happened? + placeholder: "e.g. Connection timed out, error message shown, etc." + validations: + required: true + - type: input + id: bitssh-version + attributes: + label: bitssh Version + description: What version of bitssh are you running? + placeholder: "e.g. 3.7.0 (run `pip show bitssh` or `bitssh --version` or check pyproject.toml)" + validations: + required: true + - type: input + id: python-version + attributes: + label: Python Version + description: What version of Python are you using? + placeholder: "e.g. 3.12.1 (run `python --version`)" validations: required: true - type: dropdown - id: Operating System's + id: os attributes: - label: What OS are you seeing the problem on? - multiple: true + label: Operating System + description: What OS are you running bitssh on? options: - - linux - - windows - - Macos + - Linux + - macOS + - Windows (WSL) + - Windows (Native) - Other + validations: + required: true + - type: input + id: terminal + attributes: + label: Terminal Emulator + description: Which terminal emulator are you using? + placeholder: "e.g. iTerm2, GNOME Terminal, Windows Terminal, Alacritty" + validations: + required: false + - type: textarea + id: ssh-config + attributes: + label: SSH Config (Sanitized) + description: | + Please share a sanitized version of your `~/.ssh/config` if relevant to the bug. + **IMPORTANT: Remove or redact any hostnames, IP addresses, usernames, and keys before sharing!** + placeholder: | + Host myserver + Hostname xxx.xx.xx.xx + User myuser + Port 22 + render: shell + validations: + required: false - type: textarea id: logs attributes: - label: Relevant log output - description: Please copy and paste any relevant log output. This will be automatically formatted into code, so no need for backticks. + label: Relevant Log Output + description: Please copy and paste any relevant log output or traceback. This will be automatically formatted as code. + placeholder: "Paste the full traceback or error output here" render: shell + validations: + required: false + - type: checkboxes + id: pre-checks + attributes: + label: Pre-submission Checks + options: + - label: I am running the latest version of bitssh + required: false + - label: I have checked that a similar issue does not already exist + required: true + - label: My `~/.ssh/config` file exists and is properly formatted + required: false - type: checkboxes id: terms attributes: label: Code of Conduct - description: By submitting this issue, you agree to follow our [Code of Conduct](https://github.com/FOSS-Community/website-fossc/blob/main/CODE_OF_CONDUCT.md) + description: By submitting this issue, you agree to follow our [Code of Conduct](https://github.com/Mr-Sunglasses/bitssh/blob/main/CODE_OF_CONDUCT.md) options: - label: I agree to follow this project's Code of Conduct required: true diff --git a/.github/ISSUE_TEMPLATE/config.yml b/.github/ISSUE_TEMPLATE/config.yml new file mode 100644 index 0000000..c5c5337 --- /dev/null +++ b/.github/ISSUE_TEMPLATE/config.yml @@ -0,0 +1,5 @@ +blank_issues_enabled: false +contact_links: + - name: Questions & Discussions + url: https://github.com/Mr-Sunglasses/bitssh/discussions + about: Ask questions and discuss ideas with the community \ No newline at end of file diff --git a/.github/ISSUE_TEMPLATE/feature.yml b/.github/ISSUE_TEMPLATE/feature.yml index fb82508..98eb8ed 100644 --- a/.github/ISSUE_TEMPLATE/feature.yml +++ b/.github/ISSUE_TEMPLATE/feature.yml @@ -1,41 +1,71 @@ -name: Feature request -description: Suggest an idea for this project -title: "[Feature] " -labels: "feature" - +name: Feature Request +description: Suggest a new feature or enhancement for bitssh +title: "[Feature]: " +labels: ["feature"] body: - type: markdown attributes: - value: Is your feature request related to a problem? Please describe. + value: | + Thanks for suggesting a feature! Please describe your idea clearly so we can evaluate it. - type: textarea + id: problem attributes: - label: Describe the feature you'd like to request - description: A clear and concise description of what the problem is. - placeholder : | - Ex. I'm always frustrated when [...] + label: Problem / Use Case + description: What problem does this feature solve? What's your workflow that could be improved? + placeholder: | + e.g. I manage many SSH hosts and it's hard to find the one I need in the TUI list... validations: required: true - type: textarea + id: solution attributes: - label: Describe the solution you'd like - description: A clear and concise description of what you want to happen. - placeholder : | - Ex. I want the solution like [...] + label: Proposed Solution + description: Describe the feature or behavior you'd like to see. + placeholder: | + e.g. Add a search/filter feature to the TUI so users can quickly find a host by name... + validations: + required: true + - type: dropdown + id: feature-area + attributes: + label: Feature Area + description: Which part of bitssh does this feature relate to? + options: + - TUI (Terminal User Interface) + - SSH Connection Handling + - SSH Config Parsing + - CLI Arguments / Options + - Installation / Packaging + - Documentation + - Other validations: required: true - type: textarea + id: alternatives attributes: - label: Describe alternatives you've considered - description: A clear and concise description of any alternative solutions or features you've considered. - placeholder : | - Ex. I want to extend the function A by adding someting more + label: Alternatives Considered + description: Have you considered any alternative solutions or workarounds? + placeholder: | + e.g. I currently use `grep` on my SSH config, but it would be much nicer to have this built into bitssh... validations: required: false - type: textarea + id: additional-context attributes: - label: Additional context - description: Add any other context or screenshots about the feature request here. - placeholder : | - context, screenshots, related links , etc. + label: Additional Context + description: Add any screenshots, mockups, or references to similar features in other tools. + placeholder: | + e.g. Similar to how `sshmenu` or `sshrc` handles host selection... validations: required: false + - type: checkboxes + id: pre-checks + attributes: + label: Pre-submission Checks + options: + - label: I have checked that this feature does not already exist in bitssh + required: true + - label: I have searched existing issues to ensure this hasn't been requested before + required: true + - label: This feature would benefit most bitssh users, not just me + required: false \ No newline at end of file diff --git a/.github/pull_request_template.md b/.github/pull_request_template.md index 0720d9e..ff96cc7 100644 --- a/.github/pull_request_template.md +++ b/.github/pull_request_template.md @@ -1,38 +1,53 @@ -# Description +## Description -Please include a summary of the change and which issue is fixed. Please also include relevant motivation and context. List any dependencies that are required for this change. +Briefly describe what this PR does and why. -Fixes # (issue) +Fixes #(issue) -## Type of change +## Type of Change -Please delete options that are not relevant. - -- [ ] Bug fix (non-breaking change which fixes an issue) -- [ ] New feature (non-breaking change which adds functionality) +- [ ] Bug fix (non-breaking change that fixes an issue) +- [ ] New feature (non-breaking change that adds functionality) - [ ] Breaking change (fix or feature that would cause existing functionality to not work as expected) -- [ ] This change requires a documentation update +- [ ] Refactor (code restructuring without changing behavior) +- [ ] Documentation update +- [ ] CI/Build improvement + +## Affected Area + +- [ ] TUI (Terminal User Interface) +- [ ] SSH Connection Handling +- [ ] SSH Config Parsing +- [ ] CLI Arguments / Options +- [ ] Installation / Packaging +- [ ] Tests +- [ ] Documentation + +## Testing + +Describe how you tested your changes. + +- [ ] I tested manually by running `bitssh` and connecting to a host +- [ ] I ran the existing test suite (`pytest`) +- [ ] I added new tests for my changes -# How Has This Been Tested? +**Python version tested**: +**OS tested on**: -Please describe the tests that you ran to verify your changes. Provide instructions so we can reproduce. Please also list any relevant details for your test configuration +## SSH Config Tested (if applicable) -- [ ] Test A -- [ ] Test B +If your change affects SSH config parsing or connection behavior, please describe the config entries used for testing (redact sensitive info): -**Test Configuration**: -* Firmware version: -* Hardware: -* Toolchain: -* SDK: +``` +Host example + Hostname x.x.x.x + User test + Port 22 +``` -# Checklist: +## Checklist -- [ ] My code follows the style guidelines of this project -- [ ] I have performed a self-review of my own code -- [ ] I have commented my code, particularly in hard-to-understand areas -- [ ] I have made corresponding changes to the documentation +- [ ] My code follows the project's style guidelines (`ruff` and `black`) +- [ ] I have performed a self-review of my code - [ ] My changes generate no new warnings -- [ ] I have added tests that prove my fix is effective or that my feature works -- [ ] New and existing unit tests pass locally with my changes -- [ ] Any dependent changes have been merged and published in downstream modules +- [ ] I have updated the documentation if needed \ No newline at end of file diff --git a/pdm.lock b/pdm.lock deleted file mode 100644 index 37c858b..0000000 --- a/pdm.lock +++ /dev/null @@ -1,293 +0,0 @@ -# This file is @generated by PDM. -# It is not intended for manual editing. - -[metadata] -groups = ["default"] -strategy = ["inherit_metadata"] -lock_version = "4.5.0" -content_hash = "sha256:76ad143cd32a672da1ddf445caa4edbb270c389e56361d9d552d6389ef36ede4" - -[[metadata.targets]] -requires_python = ">=3.9" - -[[package]] -name = "cfgv" -version = "3.4.0" -requires_python = ">=3.8" -summary = "Validate configuration and produce human readable error messages." -groups = ["default"] -files = [ - {file = "cfgv-3.4.0-py2.py3-none-any.whl", hash = "sha256:b7265b1f29fd3316bfcd2b330d63d024f2bfd8bcb8b0272f8e19a504856c48f9"}, - {file = "cfgv-3.4.0.tar.gz", hash = "sha256:e52591d4c5f5dead8e0f673fb16db7949d2cfb3f7da4582893288f0ded8fe560"}, -] - -[[package]] -name = "distlib" -version = "0.3.8" -summary = "Distribution utilities" -groups = ["default"] -files = [ - {file = "distlib-0.3.8-py2.py3-none-any.whl", hash = "sha256:034db59a0b96f8ca18035f36290806a9a6e6bd9d1ff91e45a7f172eb17e51784"}, - {file = "distlib-0.3.8.tar.gz", hash = "sha256:1530ea13e350031b6312d8580ddb6b27a104275a31106523b8f123787f494f64"}, -] - -[[package]] -name = "filelock" -version = "3.13.1" -requires_python = ">=3.8" -summary = "A platform independent file lock." -groups = ["default"] -files = [ - {file = "filelock-3.13.1-py3-none-any.whl", hash = "sha256:57dbda9b35157b05fb3e58ee91448612eb674172fab98ee235ccb0b5bee19a1c"}, - {file = "filelock-3.13.1.tar.gz", hash = "sha256:521f5f56c50f8426f5e03ad3b281b490a87ef15bc6c526f168290f0c7148d44e"}, -] - -[[package]] -name = "identify" -version = "2.5.33" -requires_python = ">=3.8" -summary = "File identification library for Python" -groups = ["default"] -files = [ - {file = "identify-2.5.33-py2.py3-none-any.whl", hash = "sha256:d40ce5fcd762817627670da8a7d8d8e65f24342d14539c59488dc603bf662e34"}, - {file = "identify-2.5.33.tar.gz", hash = "sha256:161558f9fe4559e1557e1bff323e8631f6a0e4837f7497767c1782832f16b62d"}, -] - -[[package]] -name = "inquirerpy" -version = "0.3.4" -requires_python = ">=3.7,<4.0" -summary = "Python port of Inquirer.js (A collection of common interactive command-line user interfaces)" -groups = ["default"] -dependencies = [ - "pfzy<0.4.0,>=0.3.1", - "prompt-toolkit<4.0.0,>=3.0.1", -] -files = [ - {file = "InquirerPy-0.3.4-py3-none-any.whl", hash = "sha256:c65fdfbac1fa00e3ee4fb10679f4d3ed7a012abf4833910e63c295827fe2a7d4"}, - {file = "InquirerPy-0.3.4.tar.gz", hash = "sha256:89d2ada0111f337483cb41ae31073108b2ec1e618a49d7110b0d7ade89fc197e"}, -] - -[[package]] -name = "markdown-it-py" -version = "3.0.0" -requires_python = ">=3.8" -summary = "Python port of markdown-it. Markdown parsing, done right!" -groups = ["default"] -dependencies = [ - "mdurl~=0.1", -] -files = [ - {file = "markdown-it-py-3.0.0.tar.gz", hash = "sha256:e3f60a94fa066dc52ec76661e37c851cb232d92f9886b15cb560aaada2df8feb"}, - {file = "markdown_it_py-3.0.0-py3-none-any.whl", hash = "sha256:355216845c60bd96232cd8d8c40e8f9765cc86f46880e43a8fd22dc1a1a8cab1"}, -] - -[[package]] -name = "mdurl" -version = "0.1.2" -requires_python = ">=3.7" -summary = "Markdown URL utilities" -groups = ["default"] -files = [ - {file = "mdurl-0.1.2-py3-none-any.whl", hash = "sha256:84008a41e51615a49fc9966191ff91509e3c40b939176e643fd50a5c2196b8f8"}, - {file = "mdurl-0.1.2.tar.gz", hash = "sha256:bb413d29f5eea38f31dd4754dd7377d4465116fb207585f97bf925588687c1ba"}, -] - -[[package]] -name = "nodeenv" -version = "1.8.0" -requires_python = ">=2.7,!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,!=3.5.*,!=3.6.*" -summary = "Node.js virtual environment builder" -groups = ["default"] -dependencies = [ - "setuptools", -] -files = [ - {file = "nodeenv-1.8.0-py2.py3-none-any.whl", hash = "sha256:df865724bb3c3adc86b3876fa209771517b0cfe596beff01a92700e0e8be4cec"}, - {file = "nodeenv-1.8.0.tar.gz", hash = "sha256:d51e0c37e64fbf47d017feac3145cdbb58836d7eee8c6f6d3b6880c5456227d2"}, -] - -[[package]] -name = "path" -version = "17.1.0" -requires_python = ">=3.9" -summary = "A module wrapper for os.path" -groups = ["default"] -files = [ - {file = "path-17.1.0-py3-none-any.whl", hash = "sha256:688e7ec254f07a1c25f5474662d4480c663a2c8c4eb15c0ba056d8ab81608d22"}, - {file = "path-17.1.0.tar.gz", hash = "sha256:d41e05ed4fa1d4f6d702df3c1e0a1a255d7b544287432456455dc7c51e5f98e9"}, -] - -[[package]] -name = "pfzy" -version = "0.3.4" -requires_python = ">=3.7,<4.0" -summary = "Python port of the fzy fuzzy string matching algorithm" -groups = ["default"] -files = [ - {file = "pfzy-0.3.4-py3-none-any.whl", hash = "sha256:5f50d5b2b3207fa72e7ec0ef08372ef652685470974a107d0d4999fc5a903a96"}, - {file = "pfzy-0.3.4.tar.gz", hash = "sha256:717ea765dd10b63618e7298b2d98efd819e0b30cd5905c9707223dceeb94b3f1"}, -] - -[[package]] -name = "platformdirs" -version = "4.1.0" -requires_python = ">=3.8" -summary = "A small Python package for determining appropriate platform-specific dirs, e.g. a \"user data dir\"." -groups = ["default"] -files = [ - {file = "platformdirs-4.1.0-py3-none-any.whl", hash = "sha256:11c8f37bcca40db96d8144522d925583bdb7a31f7b0e37e3ed4318400a8e2380"}, - {file = "platformdirs-4.1.0.tar.gz", hash = "sha256:906d548203468492d432bcb294d4bc2fff751bf84971fbb2c10918cc206ee420"}, -] - -[[package]] -name = "pre-commit" -version = "4.2.0" -requires_python = ">=3.9" -summary = "A framework for managing and maintaining multi-language pre-commit hooks." -groups = ["default"] -dependencies = [ - "cfgv>=2.0.0", - "identify>=1.0.0", - "nodeenv>=0.11.1", - "pyyaml>=5.1", - "virtualenv>=20.10.0", -] -files = [ - {file = "pre_commit-4.2.0-py2.py3-none-any.whl", hash = "sha256:a009ca7205f1eb497d10b845e52c838a98b6cdd2102a6c8e4540e94ee75c58bd"}, - {file = "pre_commit-4.2.0.tar.gz", hash = "sha256:601283b9757afd87d40c4c4a9b2b5de9637a8ea02eaff7adc2d0fb4e04841146"}, -] - -[[package]] -name = "prompt-toolkit" -version = "3.0.50" -requires_python = ">=3.8.0" -summary = "Library for building powerful interactive command lines in Python" -groups = ["default"] -dependencies = [ - "wcwidth", -] -files = [ - {file = "prompt_toolkit-3.0.50-py3-none-any.whl", hash = "sha256:9b6427eb19e479d98acff65196a307c555eb567989e6d88ebbb1b509d9779198"}, - {file = "prompt_toolkit-3.0.50.tar.gz", hash = "sha256:544748f3860a2623ca5cd6d2795e7a14f3d0e1c3c9728359013f79877fc89bab"}, -] - -[[package]] -name = "pygments" -version = "2.17.2" -requires_python = ">=3.7" -summary = "Pygments is a syntax highlighting package written in Python." -groups = ["default"] -files = [ - {file = "pygments-2.17.2-py3-none-any.whl", hash = "sha256:b27c2826c47d0f3219f29554824c30c5e8945175d888647acd804ddd04af846c"}, - {file = "pygments-2.17.2.tar.gz", hash = "sha256:da46cec9fd2de5be3a8a784f434e4c4ab670b4ff54d605c4c2717e9d49c4c367"}, -] - -[[package]] -name = "pyyaml" -version = "6.0.1" -requires_python = ">=3.6" -summary = "YAML parser and emitter for Python" -groups = ["default"] -files = [ - {file = "PyYAML-6.0.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:d858aa552c999bc8a8d57426ed01e40bef403cd8ccdd0fc5f6f04a00414cac2a"}, - {file = "PyYAML-6.0.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:fd66fc5d0da6d9815ba2cebeb4205f95818ff4b79c3ebe268e75d961704af52f"}, - {file = "PyYAML-6.0.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:69b023b2b4daa7548bcfbd4aa3da05b3a74b772db9e23b982788168117739938"}, - {file = "PyYAML-6.0.1-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:81e0b275a9ecc9c0c0c07b4b90ba548307583c125f54d5b6946cfee6360c733d"}, - {file = "PyYAML-6.0.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ba336e390cd8e4d1739f42dfe9bb83a3cc2e80f567d8805e11b46f4a943f5515"}, - {file = "PyYAML-6.0.1-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:326c013efe8048858a6d312ddd31d56e468118ad4cdeda36c719bf5bb6192290"}, - {file = "PyYAML-6.0.1-cp310-cp310-win32.whl", hash = "sha256:bd4af7373a854424dabd882decdc5579653d7868b8fb26dc7d0e99f823aa5924"}, - {file = "PyYAML-6.0.1-cp310-cp310-win_amd64.whl", hash = "sha256:fd1592b3fdf65fff2ad0004b5e363300ef59ced41c2e6b3a99d4089fa8c5435d"}, - {file = "PyYAML-6.0.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:6965a7bc3cf88e5a1c3bd2e0b5c22f8d677dc88a455344035f03399034eb3007"}, - {file = "PyYAML-6.0.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:f003ed9ad21d6a4713f0a9b5a7a0a79e08dd0f221aff4525a2be4c346ee60aab"}, - {file = "PyYAML-6.0.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:42f8152b8dbc4fe7d96729ec2b99c7097d656dc1213a3229ca5383f973a5ed6d"}, - {file = "PyYAML-6.0.1-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:062582fca9fabdd2c8b54a3ef1c978d786e0f6b3a1510e0ac93ef59e0ddae2bc"}, - {file = "PyYAML-6.0.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d2b04aac4d386b172d5b9692e2d2da8de7bfb6c387fa4f801fbf6fb2e6ba4673"}, - {file = "PyYAML-6.0.1-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:e7d73685e87afe9f3b36c799222440d6cf362062f78be1013661b00c5c6f678b"}, - {file = "PyYAML-6.0.1-cp311-cp311-win32.whl", hash = "sha256:1635fd110e8d85d55237ab316b5b011de701ea0f29d07611174a1b42f1444741"}, - {file = "PyYAML-6.0.1-cp311-cp311-win_amd64.whl", hash = "sha256:bf07ee2fef7014951eeb99f56f39c9bb4af143d8aa3c21b1677805985307da34"}, - {file = "PyYAML-6.0.1-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:855fb52b0dc35af121542a76b9a84f8d1cd886ea97c84703eaa6d88e37a2ad28"}, - {file = "PyYAML-6.0.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:40df9b996c2b73138957fe23a16a4f0ba614f4c0efce1e9406a184b6d07fa3a9"}, - {file = "PyYAML-6.0.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6c22bec3fbe2524cde73d7ada88f6566758a8f7227bfbf93a408a9d86bcc12a0"}, - {file = "PyYAML-6.0.1-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:8d4e9c88387b0f5c7d5f281e55304de64cf7f9c0021a3525bd3b1c542da3b0e4"}, - {file = "PyYAML-6.0.1-cp312-cp312-win32.whl", hash = "sha256:d483d2cdf104e7c9fa60c544d92981f12ad66a457afae824d146093b8c294c54"}, - {file = "PyYAML-6.0.1-cp312-cp312-win_amd64.whl", hash = "sha256:0d3304d8c0adc42be59c5f8a4d9e3d7379e6955ad754aa9d6ab7a398b59dd1df"}, - {file = "PyYAML-6.0.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:9eb6caa9a297fc2c2fb8862bc5370d0303ddba53ba97e71f08023b6cd73d16a8"}, - {file = "PyYAML-6.0.1-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:c8098ddcc2a85b61647b2590f825f3db38891662cfc2fc776415143f599bb859"}, - {file = "PyYAML-6.0.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5773183b6446b2c99bb77e77595dd486303b4faab2b086e7b17bc6bef28865f6"}, - {file = "PyYAML-6.0.1-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:b786eecbdf8499b9ca1d697215862083bd6d2a99965554781d0d8d1ad31e13a0"}, - {file = "PyYAML-6.0.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bc1bf2925a1ecd43da378f4db9e4f799775d6367bdb94671027b73b393a7c42c"}, - {file = "PyYAML-6.0.1-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:04ac92ad1925b2cff1db0cfebffb6ffc43457495c9b3c39d3fcae417d7125dc5"}, - {file = "PyYAML-6.0.1-cp39-cp39-win32.whl", hash = "sha256:faca3bdcf85b2fc05d06ff3fbc1f83e1391b3e724afa3feba7d13eeab355484c"}, - {file = "PyYAML-6.0.1-cp39-cp39-win_amd64.whl", hash = "sha256:510c9deebc5c0225e8c96813043e62b680ba2f9c50a08d3724c7f28a747d1486"}, - {file = "PyYAML-6.0.1.tar.gz", hash = "sha256:bfdf460b1736c775f2ba9f6a92bca30bc2095067b8a9d77876d1fad6cc3b4a43"}, -] - -[[package]] -name = "rich" -version = "14.0.0" -requires_python = ">=3.8.0" -summary = "Render rich text, tables, progress bars, syntax highlighting, markdown and more to the terminal" -groups = ["default"] -dependencies = [ - "markdown-it-py>=2.2.0", - "pygments<3.0.0,>=2.13.0", - "typing-extensions<5.0,>=4.0.0; python_version < \"3.11\"", -] -files = [ - {file = "rich-14.0.0-py3-none-any.whl", hash = "sha256:1c9491e1951aac09caffd42f448ee3d04e58923ffe14993f6e83068dc395d7e0"}, - {file = "rich-14.0.0.tar.gz", hash = "sha256:82f1bc23a6a21ebca4ae0c45af9bdbc492ed20231dcb63f297d6d1021a9d5725"}, -] - -[[package]] -name = "setuptools" -version = "69.0.3" -requires_python = ">=3.8" -summary = "Easily download, build, install, upgrade, and uninstall Python packages" -groups = ["default"] -files = [ - {file = "setuptools-69.0.3-py3-none-any.whl", hash = "sha256:385eb4edd9c9d5c17540511303e39a147ce2fc04bc55289c322b9e5904fe2c05"}, - {file = "setuptools-69.0.3.tar.gz", hash = "sha256:be1af57fc409f93647f2e8e4573a142ed38724b8cdd389706a867bb4efcf1e78"}, -] - -[[package]] -name = "typing-extensions" -version = "4.13.2" -requires_python = ">=3.8" -summary = "Backported and Experimental Type Hints for Python 3.8+" -groups = ["default"] -marker = "python_version < \"3.11\"" -files = [ - {file = "typing_extensions-4.13.2-py3-none-any.whl", hash = "sha256:a439e7c04b49fec3e5d3e2beaa21755cadbbdc391694e28ccdd36ca4a1408f8c"}, - {file = "typing_extensions-4.13.2.tar.gz", hash = "sha256:e6c81219bd689f51865d9e372991c540bda33a0379d5573cddb9a3a23f7caaef"}, -] - -[[package]] -name = "virtualenv" -version = "20.25.0" -requires_python = ">=3.7" -summary = "Virtual Python Environment builder" -groups = ["default"] -dependencies = [ - "distlib<1,>=0.3.7", - "filelock<4,>=3.12.2", - "importlib-metadata>=6.6; python_version < \"3.8\"", - "platformdirs<5,>=3.9.1", -] -files = [ - {file = "virtualenv-20.25.0-py3-none-any.whl", hash = "sha256:4238949c5ffe6876362d9c0180fc6c3a824a7b12b80604eeb8085f2ed7460de3"}, - {file = "virtualenv-20.25.0.tar.gz", hash = "sha256:bf51c0d9c7dd63ea8e44086fa1e4fb1093a31e963b86959257378aef020e1f1b"}, -] - -[[package]] -name = "wcwidth" -version = "0.2.13" -summary = "Measures the displayed width of unicode strings in a terminal" -groups = ["default"] -dependencies = [ - "backports-functools-lru-cache>=1.2.1; python_version < \"3.2\"", -] -files = [ - {file = "wcwidth-0.2.13-py2.py3-none-any.whl", hash = "sha256:3da69048e4540d84af32131829ff948f1e022c1c6bdb8d6102117aac784f6859"}, - {file = "wcwidth-0.2.13.tar.gz", hash = "sha256:72ea0c06399eb286d978fdedb6923a9eb47e1c486ce63e9b4e64fc18303972b5"}, -]