pytailwindcss 0.3.0__tar.gz → 0.3.1__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,50 @@
1
+ # This workflow will install Python dependencies, run tests and lint with a variety of Python versions
2
+ # For more information see: https://help.github.com/actions/language-and-framework-guides/using-python-with-github-actions
3
+
4
+ name: Run tests
5
+
6
+ on:
7
+ push:
8
+ pull_request:
9
+
10
+ jobs:
11
+ tests:
12
+
13
+ runs-on: ubuntu-latest
14
+ strategy:
15
+ matrix:
16
+ python-version: [ "3.11", "3.12", "3.13", "3.14" ]
17
+
18
+ steps:
19
+ - uses: actions/checkout@v4
20
+ - name: Install uv
21
+ uses: astral-sh/setup-uv@v6
22
+ with:
23
+ python-version: ${{ matrix.python-version }}
24
+ - name: Install dependencies
25
+ run: uv sync
26
+ - name: Test with pytest
27
+ run: uv run pytest
28
+
29
+ release:
30
+ needs: [ tests ]
31
+ if: success() && startsWith(github.ref, 'refs/tags/')
32
+ runs-on: ubuntu-24.04
33
+ environment: release
34
+
35
+ permissions:
36
+ contents: read
37
+ id-token: write
38
+
39
+ steps:
40
+ - uses: actions/checkout@v5
41
+
42
+ - name: Install uv
43
+ uses: astral-sh/setup-uv@v6
44
+ with:
45
+ python-version: '3.11'
46
+
47
+ - name: Build
48
+ run: uv build
49
+
50
+ - uses: pypa/gh-action-pypi-publish@release/v1
@@ -0,0 +1,18 @@
1
+ name: pre-commit
2
+
3
+ on:
4
+ pull_request:
5
+ push:
6
+ branches: [ main ]
7
+
8
+ jobs:
9
+ pre-commit:
10
+ runs-on: ubuntu-latest
11
+ steps:
12
+ - uses: actions/checkout@v2
13
+ with:
14
+ fetch-depth: 0
15
+ - uses: actions/setup-python@v2
16
+ - uses: pre-commit/action@v3.0.0
17
+ with:
18
+ token: ${{ secrets.GITHUB_TOKEN }}
@@ -0,0 +1,145 @@
1
+ # Byte-compiled / optimized / DLL files
2
+ __pycache__/
3
+ *.py[cod]
4
+ *$py.class
5
+
6
+ # C extensions
7
+ *.so
8
+
9
+ # Distribution / packaging
10
+ .Python
11
+ build/
12
+ develop-eggs/
13
+ dist/
14
+ downloads/
15
+ eggs/
16
+ .eggs/
17
+ lib/
18
+ lib64/
19
+ parts/
20
+ sdist/
21
+ var/
22
+ wheels/
23
+ share/python-wheels/
24
+ *.egg-info/
25
+ .installed.cfg
26
+ *.egg
27
+ MANIFEST
28
+
29
+ # PyInstaller
30
+ # Usually these files are written by a python script from a template
31
+ # before PyInstaller builds the exe, so as to inject date/other infos into it.
32
+ *.manifest
33
+ *.spec
34
+
35
+ # Installer logs
36
+ pip-log.txt
37
+ pip-delete-this-directory.txt
38
+
39
+ # Unit test / coverage reports
40
+ htmlcov/
41
+ .tox/
42
+ .nox/
43
+ .coverage
44
+ .coverage.*
45
+ .cache
46
+ nosetests.xml
47
+ coverage.xml
48
+ *.cover
49
+ *.py,cover
50
+ .hypothesis/
51
+ .pytest_cache/
52
+ cover/
53
+
54
+ # Translations
55
+ *.mo
56
+ *.pot
57
+
58
+ # Django stuff:
59
+ *.log
60
+ local_settings.py
61
+ db.sqlite3
62
+ db.sqlite3-journal
63
+
64
+ # Flask stuff:
65
+ instance/
66
+ .webassets-cache
67
+
68
+ # Scrapy stuff:
69
+ .scrapy
70
+
71
+ # Sphinx documentation
72
+ docs/_build/
73
+
74
+ # PyBuilder
75
+ .pybuilder/
76
+ target/
77
+
78
+ # Jupyter Notebook
79
+ .ipynb_checkpoints
80
+
81
+ # IPython
82
+ profile_default/
83
+ ipython_config.py
84
+
85
+ # pyenv
86
+ # For a library or package, you might want to ignore these files since the code is
87
+ # intended to run in multiple environments; otherwise, check them in:
88
+ # .python-version
89
+
90
+ # pipenv
91
+ # According to pypa/pipenv#598, it is recommended to include Pipfile.lock in version control.
92
+ # However, in case of collaboration, if having platform-specific dependencies or dependencies
93
+ # having no cross-platform support, pipenv may install dependencies that don't work, or not
94
+ # install all needed dependencies.
95
+ #Pipfile.lock
96
+
97
+ # PEP 582; used by e.g. github.com/David-OConnor/pyflow
98
+ __pypackages__/
99
+
100
+ # Celery stuff
101
+ celerybeat-schedule
102
+ celerybeat.pid
103
+
104
+ # SageMath parsed files
105
+ *.sage.py
106
+
107
+ # Environments
108
+ .env
109
+ .venv
110
+ env/
111
+ venv/
112
+ ENV/
113
+ env.bak/
114
+ venv.bak/
115
+
116
+ # Spyder project settings
117
+ .spyderproject
118
+ .spyproject
119
+
120
+ # Rope project settings
121
+ .ropeproject
122
+
123
+ # mkdocs documentation
124
+ /site
125
+
126
+ # mypy
127
+ .mypy_cache/
128
+ .dmypy.json
129
+ dmypy.json
130
+
131
+ # Pyre type checker
132
+ .pyre/
133
+
134
+ # pytype static type analyzer
135
+ .pytype/
136
+
137
+ # Cython debug symbols
138
+ cython_debug/
139
+
140
+ .DS_Store
141
+ .idea
142
+ src/pytailwindcss/bin
143
+ src/tests/build
144
+ .claude
145
+ .history
@@ -0,0 +1,36 @@
1
+ repos:
2
+ - repo: https://github.com/pre-commit/pre-commit-hooks
3
+ rev: v4.4.0
4
+ hooks:
5
+ - id: check-added-large-files
6
+ - id: check-ast
7
+ - id: check-case-conflict
8
+ - id: check-json
9
+ - id: check-merge-conflict
10
+ - id: check-symlinks
11
+ - id: check-yaml
12
+ - id: debug-statements
13
+ - id: detect-private-key
14
+ - id: end-of-file-fixer
15
+ - id: trailing-whitespace
16
+ - id: mixed-line-ending
17
+ - id: requirements-txt-fixer
18
+ - repo: https://github.com/psf/black
19
+ rev: 23.3.0
20
+ hooks:
21
+ - id: black
22
+ args: [ --line-length=119 ]
23
+ - repo: https://github.com/pycqa/isort
24
+ rev: 5.12.0
25
+ hooks:
26
+ - id: isort
27
+ args: [ "--profile", "black", "--filter-files" ]
28
+ - repo: https://github.com/PyCQA/flake8
29
+ rev: 6.0.0
30
+ hooks:
31
+ - id: flake8
32
+ additional_dependencies:
33
+ - flake8-bugbear
34
+ - flake8-comprehensions
35
+ - flake8-tidy-imports
36
+ - flake8-typing-imports
@@ -1,26 +1,24 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: pytailwindcss
3
- Version: 0.3.0
3
+ Version: 0.3.1
4
4
  Summary: Standalone Tailwind CSS CLI, installable via pip. Use Tailwind CSS without Node.js.
5
+ Project-URL: Homepage, https://github.com/timonweb/pytailwindcss
6
+ Author-email: Tim Kamanin <tim@timonweb.com>
5
7
  License: MIT
6
8
  License-File: LICENSE
7
- Keywords: cli,tailwind,css
8
- Author: Tim Kamanin
9
- Author-email: tim@timonweb.com
10
- Requires-Python: >=3.11,<4.0
9
+ Keywords: cli,css,tailwind
11
10
  Classifier: Development Status :: 4 - Beta
12
11
  Classifier: Environment :: Web Environment
13
12
  Classifier: Intended Audience :: Developers
14
13
  Classifier: License :: OSI Approved :: MIT License
15
14
  Classifier: Operating System :: OS Independent
16
- Classifier: Programming Language :: Python :: 3
17
15
  Classifier: Programming Language :: Python :: 3.11
18
16
  Classifier: Programming Language :: Python :: 3.12
19
17
  Classifier: Programming Language :: Python :: 3.13
20
18
  Classifier: Programming Language :: Python :: 3.14
21
19
  Classifier: Topic :: Software Development :: Libraries
22
20
  Classifier: Topic :: Utilities
23
- Project-URL: Homepage, https://github.com/timonweb/pytailwindcss
21
+ Requires-Python: >=3.11
24
22
  Description-Content-Type: text/markdown
25
23
 
26
24
  # Standalone Tailwind CSS CLI, installable via pip
@@ -135,4 +133,3 @@ Found a bug or have a suggestion? Please use the issue tracker on GitHub:
135
133
  [https://github.com/timonweb/pytailwindcss/issues](https://github.com/timonweb/pytailwindcss/issues)
136
134
 
137
135
  2021 - 2025 (c) Tim Kamanin — [A Full-Stack Django and Wagtail Developer](https://timonweb.com)
138
-
@@ -1,12 +1,12 @@
1
- [tool.poetry]
1
+ [project]
2
2
  name = "pytailwindcss"
3
- version = "0.3.0"
3
+ version = "0.3.1"
4
4
  description = "Standalone Tailwind CSS CLI, installable via pip. Use Tailwind CSS without Node.js."
5
- authors = ["Tim Kamanin <tim@timonweb.com>"]
6
- homepage = "https://github.com/timonweb/pytailwindcss"
5
+ authors = [{ name = "Tim Kamanin", email = "tim@timonweb.com" }]
7
6
  readme = "README.md"
8
- license = "MIT"
7
+ license = { text = "MIT" }
9
8
  keywords = ["cli", "tailwind", "css"]
9
+ requires-python = ">=3.11"
10
10
  classifiers = [
11
11
  "Development Status :: 4 - Beta",
12
12
  "Intended Audience :: Developers",
@@ -20,22 +20,24 @@ classifiers = [
20
20
  "Topic :: Utilities",
21
21
  "Environment :: Web Environment"
22
22
  ]
23
+ dependencies = []
23
24
 
24
- packages = [
25
- { include = "pytailwindcss", from = "src" }
26
- ]
25
+ [project.urls]
26
+ Homepage = "https://github.com/timonweb/pytailwindcss"
27
27
 
28
- [tool.poetry.scripts]
28
+ [project.scripts]
29
29
  tailwindcss = "pytailwindcss.__main__:main"
30
30
  tailwindcss_install = "pytailwindcss.__main__:install"
31
31
 
32
- [tool.poetry.dependencies]
33
- python = "^3.11"
34
-
35
- [tool.poetry.dev-dependencies]
36
- pytest = "^8.4.2"
37
- pre-commit = "^4.3.0"
32
+ [dependency-groups]
33
+ dev = [
34
+ "pytest>=9.0.3",
35
+ "pre-commit>=4.6.0",
36
+ ]
38
37
 
39
38
  [build-system]
40
- requires = ["poetry-core>=1.0.0"]
41
- build-backend = "poetry.core.masonry.api"
39
+ requires = ["hatchling"]
40
+ build-backend = "hatchling.build"
41
+
42
+ [tool.hatch.build.targets.wheel]
43
+ packages = ["src/pytailwindcss"]
File without changes
@@ -0,0 +1,22 @@
1
+ import os
2
+ import shutil
3
+ from contextlib import contextmanager
4
+
5
+
6
+ @contextmanager
7
+ def clean_dir(path):
8
+ delete_anything(path)
9
+ try:
10
+ yield
11
+ finally:
12
+ delete_anything(path)
13
+
14
+
15
+ def delete_anything(path):
16
+ path = str(path)
17
+ if not os.path.exists(path):
18
+ return None
19
+
20
+ if os.path.isfile(path):
21
+ return os.remove(path)
22
+ return shutil.rmtree(path)
@@ -0,0 +1,38 @@
1
+ import pytest
2
+
3
+ import pytailwindcss
4
+ from pytailwindcss.exceptions import PyTailwindCssBinaryNotFound
5
+ from pytailwindcss.utils import get_bin_path
6
+
7
+ from .contexts import clean_dir
8
+
9
+
10
+ def test_successful_run():
11
+ """
12
+ It installs the executable and successfully runs the CLI.
13
+ """
14
+ with clean_dir(get_bin_path()):
15
+ pytailwindcss.install()
16
+ output = pytailwindcss.run("--help")
17
+ assert "tailwindcss" in output.lower()
18
+
19
+
20
+ def test_successful_run_from_custom_bin_path():
21
+ """
22
+ It installs the executable and successfully runs the CLI from a custom path.
23
+ """
24
+ ALTERNATIVE_BIN_PATH = "/tmp/test-bin/tailwindcss"
25
+
26
+ with clean_dir(ALTERNATIVE_BIN_PATH):
27
+ pytailwindcss.install(bin_path=ALTERNATIVE_BIN_PATH)
28
+ output = pytailwindcss.run("--help", bin_path=ALTERNATIVE_BIN_PATH)
29
+ assert "tailwindcss" in output.lower()
30
+
31
+
32
+ def test_unsuccessful_run():
33
+ """
34
+ It fails to run build command because executable is not installed.
35
+ """
36
+ with clean_dir(get_bin_path()):
37
+ with pytest.raises(PyTailwindCssBinaryNotFound):
38
+ pytailwindcss.run("build")
@@ -0,0 +1,117 @@
1
+ import os.path
2
+ import platform
3
+ import subprocess
4
+
5
+ import pytailwindcss
6
+ from pytailwindcss.installation import detect_target, format_target
7
+ from pytailwindcss.utils import get_bin_path
8
+
9
+ from .contexts import clean_dir
10
+
11
+ BIN_PATH = get_bin_path()
12
+
13
+
14
+ def test_install():
15
+ """
16
+ It installs 'latest' binary at the expected path.
17
+ """
18
+ with clean_dir(get_bin_path()):
19
+ pytailwindcss.install(bin_path=BIN_PATH)
20
+ assert os.path.isfile(BIN_PATH), f"File installed at {BIN_PATH}"
21
+
22
+
23
+ def test_version_install():
24
+ """
25
+ It installs versioned binary at the expected path.
26
+ """
27
+ VERSIONED_BIN_PATH = get_bin_path()
28
+ with clean_dir(VERSIONED_BIN_PATH):
29
+ pytailwindcss.install(version="v3.0.5")
30
+ assert "3.0.5" in pytailwindcss.run(version="v3.0.5"), "v3.0.5 is installed"
31
+
32
+
33
+ def test_alternative_install():
34
+ """
35
+ It installs binary at the alternative path.
36
+ """
37
+ ALTERNATIVE_BIN_PATH = "/tmp/test-bin/tailwindcss"
38
+ with clean_dir(ALTERNATIVE_BIN_PATH):
39
+ pytailwindcss.install(bin_path=ALTERNATIVE_BIN_PATH)
40
+ assert os.path.isfile(ALTERNATIVE_BIN_PATH), f"File installed at {ALTERNATIVE_BIN_PATH}"
41
+
42
+
43
+ def test_target():
44
+ """
45
+ It detects target for the test machine.
46
+ """
47
+ if platform.system() == "darwin":
48
+ assert detect_target() == "macos-x64"
49
+ elif platform.system() == "linux":
50
+ assert detect_target() == "linux-x64"
51
+ elif platform.system() == "win32":
52
+ assert detect_target() == "windows-x64.exe"
53
+
54
+
55
+ def test_format_target():
56
+ """
57
+ It formats target names using os name and arch name.
58
+ """
59
+ assert format_target("win32", "x86_64") == "windows-x64.exe"
60
+ assert format_target("darwin", "x86_64") == "macos-x64"
61
+ assert format_target("darwin", "arm64") == "macos-arm64"
62
+ assert format_target("linux", "x86_64") == "linux-x64"
63
+ assert format_target("linux", "amd64") == "linux-x64"
64
+ assert format_target("linux", "aarch64") == "linux-arm64"
65
+
66
+
67
+ def test_format_target_uppercase_arch():
68
+ """
69
+ It formats target names using os name and arch name,
70
+ even if arch name is uppercase
71
+ """
72
+ assert format_target("win32", "X86_64") == "windows-x64.exe"
73
+ assert format_target("darwin", "X86_64") == "macos-x64"
74
+ assert format_target("darwin", "ARM64") == "macos-arm64"
75
+ assert format_target("linux", "X86_64") == "linux-x64"
76
+ assert format_target("linux", "AMD64") == "linux-x64"
77
+ assert format_target("linux", "AARCH64") == "linux-arm64"
78
+
79
+
80
+ def test_cli_install_command_with_version():
81
+ """
82
+ It runs the 'tailwindcss_install' CLI command with TAILWINDCSS_VERSION set
83
+ and verifies the correct version binary is installed.
84
+ """
85
+ test_version = "v4.0.5"
86
+ expected_bin_path = get_bin_path(test_version)
87
+
88
+ with clean_dir(expected_bin_path):
89
+ # Run the actual CLI command with environment variable
90
+ env = os.environ.copy()
91
+ env["TAILWINDCSS_VERSION"] = test_version
92
+ result = subprocess.run(["tailwindcss_install"], env=env, capture_output=True, text=True)
93
+
94
+ assert result.returncode == 0, f"CLI command failed with: {result.stderr}"
95
+ assert os.path.isfile(expected_bin_path), f"Binary not installed at {expected_bin_path}"
96
+
97
+ # Verify the correct version was installed
98
+ version_check = pytailwindcss.run(version=test_version)
99
+ assert "4.0.5" in version_check, f"Expected v4.0.5, got: {version_check}"
100
+
101
+
102
+ def test_cli_install_command_without_version():
103
+ """
104
+ It runs the 'tailwindcss_install' CLI command without TAILWINDCSS_VERSION
105
+ and verifies the 'latest' version binary is installed.
106
+ """
107
+ expected_bin_path = get_bin_path("latest")
108
+
109
+ with clean_dir(expected_bin_path):
110
+ # Run the actual CLI command without TAILWINDCSS_VERSION
111
+ env = os.environ.copy()
112
+ # Remove TAILWINDCSS_VERSION if it exists
113
+ env.pop("TAILWINDCSS_VERSION", None)
114
+ result = subprocess.run(["tailwindcss_install"], env=env, capture_output=True, text=True)
115
+
116
+ assert result.returncode == 0, f"CLI command failed with: {result.stderr}"
117
+ assert os.path.isfile(expected_bin_path), f"Binary not installed at {expected_bin_path}"
@@ -0,0 +1,43 @@
1
+ import os
2
+
3
+ from pytailwindcss.utils import format_cli_args, get_binary_download_url, make_subprocess_run_kwargs
4
+
5
+
6
+ def test_format_cli_args():
7
+ """
8
+ - It breaks down params provided as string into a list of parameters.
9
+ - It doesn't modify list of parameters.
10
+ """
11
+ args_as_string = "-i ./src/input.css -o ./dist/output.css --watch"
12
+ args_as_list = ["-i", "./src/input.css", "-o", "./dist/output.css", "--watch"]
13
+ assert format_cli_args(args_as_string) == args_as_list
14
+ assert format_cli_args(args_as_list) == args_as_list
15
+
16
+
17
+ def test_make_subprocess_run_kwargs():
18
+ """
19
+ It makes kwargs for the subprocess.run command taking into account provided parameters.
20
+ """
21
+ assert make_subprocess_run_kwargs(cwd=None)["cwd"] == os.getcwd()
22
+ assert make_subprocess_run_kwargs(cwd="/tmp")["cwd"] == "/tmp"
23
+
24
+ assert make_subprocess_run_kwargs(env=None)["env"] is None
25
+ assert make_subprocess_run_kwargs(env={"TAILWINDCSS_VERSION": "v3.0.7"})["env"] == {
26
+ "TAILWINDCSS_VERSION": "v3.0.7"
27
+ }
28
+
29
+ assert make_subprocess_run_kwargs(live_output=False).get("capture_output") is True
30
+ assert make_subprocess_run_kwargs(live_output=False).get("check") is True
31
+ assert make_subprocess_run_kwargs(live_output=True).get("capture_output") is None
32
+ assert make_subprocess_run_kwargs(live_output=True).get("check") is None
33
+
34
+
35
+ def test_get_binary_download_url():
36
+ assert (
37
+ get_binary_download_url("latest", "tailwindcss-linux-x64")
38
+ == "https://github.com/tailwindlabs/tailwindcss/releases/latest/download/tailwindcss-linux-x64"
39
+ )
40
+ assert (
41
+ get_binary_download_url("v3.0.7", "tailwindcss-macos-x64")
42
+ == "https://github.com/tailwindlabs/tailwindcss/releases/download/v3.0.7/tailwindcss-macos-x64"
43
+ )
@@ -0,0 +1,19 @@
1
+ [pytest]
2
+ python_files = tests.py test_*.py *_tests.py
3
+
4
+ [testenv]
5
+ commands = pytest {posargs}
6
+ setenv =
7
+ PYTHONPATH = {toxinidir}
8
+
9
+ [flake8]
10
+ max-line-length = 119
11
+ select = C,E,F,W,B,B950,T
12
+ ignore = E231,E501,W503
13
+
14
+ [isort]
15
+ multi_line_output = 3
16
+ include_trailing_comma = True
17
+ force_grid_wrap = 0
18
+ use_parentheses = True
19
+ line_length = 119
@@ -0,0 +1,236 @@
1
+ version = 1
2
+ revision = 3
3
+ requires-python = ">=3.11"
4
+
5
+ [[package]]
6
+ name = "cfgv"
7
+ version = "3.5.0"
8
+ source = { registry = "https://pypi.org/simple" }
9
+ sdist = { url = "https://files.pythonhosted.org/packages/4e/b5/721b8799b04bf9afe054a3899c6cf4e880fcf8563cc71c15610242490a0c/cfgv-3.5.0.tar.gz", hash = "sha256:d5b1034354820651caa73ede66a6294d6e95c1b00acc5e9b098e917404669132", size = 7334, upload-time = "2025-11-19T20:55:51.612Z" }
10
+ wheels = [
11
+ { url = "https://files.pythonhosted.org/packages/db/3c/33bac158f8ab7f89b2e59426d5fe2e4f63f7ed25df84c036890172b412b5/cfgv-3.5.0-py2.py3-none-any.whl", hash = "sha256:a8dc6b26ad22ff227d2634a65cb388215ce6cc96bbcc5cfde7641ae87e8dacc0", size = 7445, upload-time = "2025-11-19T20:55:50.744Z" },
12
+ ]
13
+
14
+ [[package]]
15
+ name = "colorama"
16
+ version = "0.4.6"
17
+ source = { registry = "https://pypi.org/simple" }
18
+ sdist = { url = "https://files.pythonhosted.org/packages/d8/53/6f443c9a4a8358a93a6792e2acffb9d9d5cb0a5cfd8802644b7b1c9a02e4/colorama-0.4.6.tar.gz", hash = "sha256:08695f5cb7ed6e0531a20572697297273c47b8cae5a63ffc6d6ed5c201be6e44", size = 27697, upload-time = "2022-10-25T02:36:22.414Z" }
19
+ wheels = [
20
+ { url = "https://files.pythonhosted.org/packages/d1/d6/3965ed04c63042e047cb6a3e6ed1a63a35087b6a609aa3a15ed8ac56c221/colorama-0.4.6-py2.py3-none-any.whl", hash = "sha256:4f1d9991f5acc0ca119f9d443620b77f9d6b33703e51011c16baf57afb285fc6", size = 25335, upload-time = "2022-10-25T02:36:20.889Z" },
21
+ ]
22
+
23
+ [[package]]
24
+ name = "distlib"
25
+ version = "0.4.3"
26
+ source = { registry = "https://pypi.org/simple" }
27
+ sdist = { url = "https://files.pythonhosted.org/packages/c9/02/bd72be9134d25ed783ecbbc38a539ffaefbf90c78418c7fb7229600dbac7/distlib-0.4.3.tar.gz", hash = "sha256:f152097224a0ae24be5a0f6bae1b9359af82133bce63f98a95f86cae1aede9ed", size = 615141, upload-time = "2026-06-12T08:04:52.847Z" }
28
+ wheels = [
29
+ { url = "https://files.pythonhosted.org/packages/02/08/9c41fb51ab5b43eb21674aff13df270e8ba6c4b29c8624e328dc7a9482af/distlib-0.4.3-py2.py3-none-any.whl", hash = "sha256:4b0ce306c966eb73bc3a7b6abad017c556dadd92c44701562cd528ac7fde4d5b", size = 470628, upload-time = "2026-06-12T08:04:50.506Z" },
30
+ ]
31
+
32
+ [[package]]
33
+ name = "filelock"
34
+ version = "3.29.3"
35
+ source = { registry = "https://pypi.org/simple" }
36
+ sdist = { url = "https://files.pythonhosted.org/packages/91/f5/3557bf28e0f1943e4849154c821533706e6dea010f96fb6aa0b6949037d1/filelock-3.29.3.tar.gz", hash = "sha256:7fc1b3f39cf172fd8203812043c57b8a65aef9969f38b6704f628b881f761a84", size = 61956, upload-time = "2026-06-10T17:37:11.832Z" }
37
+ wheels = [
38
+ { url = "https://files.pythonhosted.org/packages/81/8f/b61d427c4f49a8bdadc93f4e7e74df8a6df6f77ee6e26bf0df53d3925363/filelock-3.29.3-py3-none-any.whl", hash = "sha256:e58333029cc9b925f39aad59b1d8f0a1ad836af4e60d7217f4a4dba87461261d", size = 42324, upload-time = "2026-06-10T17:37:10.37Z" },
39
+ ]
40
+
41
+ [[package]]
42
+ name = "identify"
43
+ version = "2.6.19"
44
+ source = { registry = "https://pypi.org/simple" }
45
+ sdist = { url = "https://files.pythonhosted.org/packages/52/63/51723b5f116cc04b061cb6f5a561790abf249d25931d515cd375e063e0f4/identify-2.6.19.tar.gz", hash = "sha256:6be5020c38fcb07da56c53733538a3081ea5aa70d36a156f83044bfbf9173842", size = 99567, upload-time = "2026-04-17T18:39:50.265Z" }
46
+ wheels = [
47
+ { url = "https://files.pythonhosted.org/packages/94/84/d9273cd09688070a6523c4aee4663a8538721b2b755c4962aafae0011e72/identify-2.6.19-py2.py3-none-any.whl", hash = "sha256:20e6a87f786f768c092a721ad107fc9df0eb89347be9396cadf3f4abbd1fb78a", size = 99397, upload-time = "2026-04-17T18:39:49.221Z" },
48
+ ]
49
+
50
+ [[package]]
51
+ name = "iniconfig"
52
+ version = "2.3.0"
53
+ source = { registry = "https://pypi.org/simple" }
54
+ sdist = { url = "https://files.pythonhosted.org/packages/72/34/14ca021ce8e5dfedc35312d08ba8bf51fdd999c576889fc2c24cb97f4f10/iniconfig-2.3.0.tar.gz", hash = "sha256:c76315c77db068650d49c5b56314774a7804df16fee4402c1f19d6d15d8c4730", size = 20503, upload-time = "2025-10-18T21:55:43.219Z" }
55
+ wheels = [
56
+ { url = "https://files.pythonhosted.org/packages/cb/b1/3846dd7f199d53cb17f49cba7e651e9ce294d8497c8c150530ed11865bb8/iniconfig-2.3.0-py3-none-any.whl", hash = "sha256:f631c04d2c48c52b84d0d0549c99ff3859c98df65b3101406327ecc7d53fbf12", size = 7484, upload-time = "2025-10-18T21:55:41.639Z" },
57
+ ]
58
+
59
+ [[package]]
60
+ name = "nodeenv"
61
+ version = "1.10.0"
62
+ source = { registry = "https://pypi.org/simple" }
63
+ sdist = { url = "https://files.pythonhosted.org/packages/24/bf/d1bda4f6168e0b2e9e5958945e01910052158313224ada5ce1fb2e1113b8/nodeenv-1.10.0.tar.gz", hash = "sha256:996c191ad80897d076bdfba80a41994c2b47c68e224c542b48feba42ba00f8bb", size = 55611, upload-time = "2025-12-20T14:08:54.006Z" }
64
+ wheels = [
65
+ { url = "https://files.pythonhosted.org/packages/88/b2/d0896bdcdc8d28a7fc5717c305f1a861c26e18c05047949fb371034d98bd/nodeenv-1.10.0-py2.py3-none-any.whl", hash = "sha256:5bb13e3eed2923615535339b3c620e76779af4cb4c6a90deccc9e36b274d3827", size = 23438, upload-time = "2025-12-20T14:08:52.782Z" },
66
+ ]
67
+
68
+ [[package]]
69
+ name = "packaging"
70
+ version = "26.2"
71
+ source = { registry = "https://pypi.org/simple" }
72
+ sdist = { url = "https://files.pythonhosted.org/packages/d7/f1/e7a6dd94a8d4a5626c03e4e99c87f241ba9e350cd9e6d75123f992427270/packaging-26.2.tar.gz", hash = "sha256:ff452ff5a3e828ce110190feff1178bb1f2ea2281fa2075aadb987c2fb221661", size = 228134, upload-time = "2026-04-24T20:15:23.917Z" }
73
+ wheels = [
74
+ { url = "https://files.pythonhosted.org/packages/df/b2/87e62e8c3e2f4b32e5fe99e0b86d576da1312593b39f47d8ceef365e95ed/packaging-26.2-py3-none-any.whl", hash = "sha256:5fc45236b9446107ff2415ce77c807cee2862cb6fac22b8a73826d0693b0980e", size = 100195, upload-time = "2026-04-24T20:15:22.081Z" },
75
+ ]
76
+
77
+ [[package]]
78
+ name = "platformdirs"
79
+ version = "4.10.0"
80
+ source = { registry = "https://pypi.org/simple" }
81
+ sdist = { url = "https://files.pythonhosted.org/packages/d7/47/e4501f49c178ae1d9f4a75073fda4204f52647993f075a9db4d14930e0c5/platformdirs-4.10.0.tar.gz", hash = "sha256:31e761a6a0ca04faf7353ea759bdba55652be214725111e5aac52dfa29d4bef7", size = 31224, upload-time = "2026-05-28T03:32:53.587Z" }
82
+ wheels = [
83
+ { url = "https://files.pythonhosted.org/packages/81/e6/cd9575ac904136b3cbf7aa7ee819ef86eedb7274e46f230e94ea4342e729/platformdirs-4.10.0-py3-none-any.whl", hash = "sha256:fb516cdb12eb0d857d0cd85a7c57cea4d060bee4578d6cf5a14dfdf8cbf8784a", size = 22743, upload-time = "2026-05-28T03:32:52.175Z" },
84
+ ]
85
+
86
+ [[package]]
87
+ name = "pluggy"
88
+ version = "1.6.0"
89
+ source = { registry = "https://pypi.org/simple" }
90
+ sdist = { url = "https://files.pythonhosted.org/packages/f9/e2/3e91f31a7d2b083fe6ef3fa267035b518369d9511ffab804f839851d2779/pluggy-1.6.0.tar.gz", hash = "sha256:7dcc130b76258d33b90f61b658791dede3486c3e6bfb003ee5c9bfb396dd22f3", size = 69412, upload-time = "2025-05-15T12:30:07.975Z" }
91
+ wheels = [
92
+ { url = "https://files.pythonhosted.org/packages/54/20/4d324d65cc6d9205fabedc306948156824eb9f0ee1633355a8f7ec5c66bf/pluggy-1.6.0-py3-none-any.whl", hash = "sha256:e920276dd6813095e9377c0bc5566d94c932c33b27a3e3945d8389c374dd4746", size = 20538, upload-time = "2025-05-15T12:30:06.134Z" },
93
+ ]
94
+
95
+ [[package]]
96
+ name = "pre-commit"
97
+ version = "4.6.0"
98
+ source = { registry = "https://pypi.org/simple" }
99
+ dependencies = [
100
+ { name = "cfgv" },
101
+ { name = "identify" },
102
+ { name = "nodeenv" },
103
+ { name = "pyyaml" },
104
+ { name = "virtualenv" },
105
+ ]
106
+ sdist = { url = "https://files.pythonhosted.org/packages/8e/22/2de9408ac81acbb8a7d05d4cc064a152ccf33b3d480ebe0cd292153db239/pre_commit-4.6.0.tar.gz", hash = "sha256:718d2208cef53fdc38206e40524a6d4d9576d103eb16f0fec11c875e7716e9d9", size = 198525, upload-time = "2026-04-21T20:31:41.613Z" }
107
+ wheels = [
108
+ { url = "https://files.pythonhosted.org/packages/80/6e/4b28b62ecb6aae56769c34a8ff1d661473ec1e9519e2d5f8b2c150086b26/pre_commit-4.6.0-py2.py3-none-any.whl", hash = "sha256:e2cf246f7299edcabcf15f9b0571fdce06058527f0a06535068a86d38089f29b", size = 226472, upload-time = "2026-04-21T20:31:40.092Z" },
109
+ ]
110
+
111
+ [[package]]
112
+ name = "pygments"
113
+ version = "2.20.0"
114
+ source = { registry = "https://pypi.org/simple" }
115
+ sdist = { url = "https://files.pythonhosted.org/packages/c3/b2/bc9c9196916376152d655522fdcebac55e66de6603a76a02bca1b6414f6c/pygments-2.20.0.tar.gz", hash = "sha256:6757cd03768053ff99f3039c1a36d6c0aa0b263438fcab17520b30a303a82b5f", size = 4955991, upload-time = "2026-03-29T13:29:33.898Z" }
116
+ wheels = [
117
+ { url = "https://files.pythonhosted.org/packages/f4/7e/a72dd26f3b0f4f2bf1dd8923c85f7ceb43172af56d63c7383eb62b332364/pygments-2.20.0-py3-none-any.whl", hash = "sha256:81a9e26dd42fd28a23a2d169d86d7ac03b46e2f8b59ed4698fb4785f946d0176", size = 1231151, upload-time = "2026-03-29T13:29:30.038Z" },
118
+ ]
119
+
120
+ [[package]]
121
+ name = "pytailwindcss"
122
+ version = "0.3.1"
123
+ source = { editable = "." }
124
+
125
+ [package.dev-dependencies]
126
+ dev = [
127
+ { name = "pre-commit" },
128
+ { name = "pytest" },
129
+ ]
130
+
131
+ [package.metadata]
132
+
133
+ [package.metadata.requires-dev]
134
+ dev = [
135
+ { name = "pre-commit", specifier = ">=4.6.0" },
136
+ { name = "pytest", specifier = ">=9.0.3" },
137
+ ]
138
+
139
+ [[package]]
140
+ name = "pytest"
141
+ version = "9.0.3"
142
+ source = { registry = "https://pypi.org/simple" }
143
+ dependencies = [
144
+ { name = "colorama", marker = "sys_platform == 'win32'" },
145
+ { name = "iniconfig" },
146
+ { name = "packaging" },
147
+ { name = "pluggy" },
148
+ { name = "pygments" },
149
+ ]
150
+ sdist = { url = "https://files.pythonhosted.org/packages/7d/0d/549bd94f1a0a402dc8cf64563a117c0f3765662e2e668477624baeec44d5/pytest-9.0.3.tar.gz", hash = "sha256:b86ada508af81d19edeb213c681b1d48246c1a91d304c6c81a427674c17eb91c", size = 1572165, upload-time = "2026-04-07T17:16:18.027Z" }
151
+ wheels = [
152
+ { url = "https://files.pythonhosted.org/packages/d4/24/a372aaf5c9b7208e7112038812994107bc65a84cd00e0354a88c2c77a617/pytest-9.0.3-py3-none-any.whl", hash = "sha256:2c5efc453d45394fdd706ade797c0a81091eccd1d6e4bccfcd476e2b8e0ab5d9", size = 375249, upload-time = "2026-04-07T17:16:16.13Z" },
153
+ ]
154
+
155
+ [[package]]
156
+ name = "python-discovery"
157
+ version = "1.4.2"
158
+ source = { registry = "https://pypi.org/simple" }
159
+ dependencies = [
160
+ { name = "filelock" },
161
+ { name = "platformdirs" },
162
+ ]
163
+ sdist = { url = "https://files.pythonhosted.org/packages/0b/1a/cbbaf13b730abb0a16b964d984e19f2fe520c21a4dc664051359a3f5a9e7/python_discovery-1.4.2.tar.gz", hash = "sha256:8f3746c4b4968d22afbb97d36e1a0e5b66e6c0f297290f2e95f05b9b8bf18690", size = 70277, upload-time = "2026-06-11T16:10:42.383Z" }
164
+ wheels = [
165
+ { url = "https://files.pythonhosted.org/packages/1a/82/a70006589557f267f15bd384c0642ad49f0d97b690c3a05b166b9dcbad3b/python_discovery-1.4.2-py3-none-any.whl", hash = "sha256:475803f53b7b2ed6e490e27373f9d8340f7d2eebf9acdaf645d7d714c97bb500", size = 33886, upload-time = "2026-06-11T16:10:41.192Z" },
166
+ ]
167
+
168
+ [[package]]
169
+ name = "pyyaml"
170
+ version = "6.0.3"
171
+ source = { registry = "https://pypi.org/simple" }
172
+ sdist = { url = "https://files.pythonhosted.org/packages/05/8e/961c0007c59b8dd7729d542c61a4d537767a59645b82a0b521206e1e25c2/pyyaml-6.0.3.tar.gz", hash = "sha256:d76623373421df22fb4cf8817020cbb7ef15c725b9d5e45f17e189bfc384190f", size = 130960, upload-time = "2025-09-25T21:33:16.546Z" }
173
+ wheels = [
174
+ { url = "https://files.pythonhosted.org/packages/6d/16/a95b6757765b7b031c9374925bb718d55e0a9ba8a1b6a12d25962ea44347/pyyaml-6.0.3-cp311-cp311-macosx_10_13_x86_64.whl", hash = "sha256:44edc647873928551a01e7a563d7452ccdebee747728c1080d881d68af7b997e", size = 185826, upload-time = "2025-09-25T21:31:58.655Z" },
175
+ { url = "https://files.pythonhosted.org/packages/16/19/13de8e4377ed53079ee996e1ab0a9c33ec2faf808a4647b7b4c0d46dd239/pyyaml-6.0.3-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:652cb6edd41e718550aad172851962662ff2681490a8a711af6a4d288dd96824", size = 175577, upload-time = "2025-09-25T21:32:00.088Z" },
176
+ { url = "https://files.pythonhosted.org/packages/0c/62/d2eb46264d4b157dae1275b573017abec435397aa59cbcdab6fc978a8af4/pyyaml-6.0.3-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:10892704fc220243f5305762e276552a0395f7beb4dbf9b14ec8fd43b57f126c", size = 775556, upload-time = "2025-09-25T21:32:01.31Z" },
177
+ { url = "https://files.pythonhosted.org/packages/10/cb/16c3f2cf3266edd25aaa00d6c4350381c8b012ed6f5276675b9eba8d9ff4/pyyaml-6.0.3-cp311-cp311-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:850774a7879607d3a6f50d36d04f00ee69e7fc816450e5f7e58d7f17f1ae5c00", size = 882114, upload-time = "2025-09-25T21:32:03.376Z" },
178
+ { url = "https://files.pythonhosted.org/packages/71/60/917329f640924b18ff085ab889a11c763e0b573da888e8404ff486657602/pyyaml-6.0.3-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:b8bb0864c5a28024fac8a632c443c87c5aa6f215c0b126c449ae1a150412f31d", size = 806638, upload-time = "2025-09-25T21:32:04.553Z" },
179
+ { url = "https://files.pythonhosted.org/packages/dd/6f/529b0f316a9fd167281a6c3826b5583e6192dba792dd55e3203d3f8e655a/pyyaml-6.0.3-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:1d37d57ad971609cf3c53ba6a7e365e40660e3be0e5175fa9f2365a379d6095a", size = 767463, upload-time = "2025-09-25T21:32:06.152Z" },
180
+ { url = "https://files.pythonhosted.org/packages/f2/6a/b627b4e0c1dd03718543519ffb2f1deea4a1e6d42fbab8021936a4d22589/pyyaml-6.0.3-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:37503bfbfc9d2c40b344d06b2199cf0e96e97957ab1c1b546fd4f87e53e5d3e4", size = 794986, upload-time = "2025-09-25T21:32:07.367Z" },
181
+ { url = "https://files.pythonhosted.org/packages/45/91/47a6e1c42d9ee337c4839208f30d9f09caa9f720ec7582917b264defc875/pyyaml-6.0.3-cp311-cp311-win32.whl", hash = "sha256:8098f252adfa6c80ab48096053f512f2321f0b998f98150cea9bd23d83e1467b", size = 142543, upload-time = "2025-09-25T21:32:08.95Z" },
182
+ { url = "https://files.pythonhosted.org/packages/da/e3/ea007450a105ae919a72393cb06f122f288ef60bba2dc64b26e2646fa315/pyyaml-6.0.3-cp311-cp311-win_amd64.whl", hash = "sha256:9f3bfb4965eb874431221a3ff3fdcddc7e74e3b07799e0e84ca4a0f867d449bf", size = 158763, upload-time = "2025-09-25T21:32:09.96Z" },
183
+ { url = "https://files.pythonhosted.org/packages/d1/33/422b98d2195232ca1826284a76852ad5a86fe23e31b009c9886b2d0fb8b2/pyyaml-6.0.3-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:7f047e29dcae44602496db43be01ad42fc6f1cc0d8cd6c83d342306c32270196", size = 182063, upload-time = "2025-09-25T21:32:11.445Z" },
184
+ { url = "https://files.pythonhosted.org/packages/89/a0/6cf41a19a1f2f3feab0e9c0b74134aa2ce6849093d5517a0c550fe37a648/pyyaml-6.0.3-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:fc09d0aa354569bc501d4e787133afc08552722d3ab34836a80547331bb5d4a0", size = 173973, upload-time = "2025-09-25T21:32:12.492Z" },
185
+ { url = "https://files.pythonhosted.org/packages/ed/23/7a778b6bd0b9a8039df8b1b1d80e2e2ad78aa04171592c8a5c43a56a6af4/pyyaml-6.0.3-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:9149cad251584d5fb4981be1ecde53a1ca46c891a79788c0df828d2f166bda28", size = 775116, upload-time = "2025-09-25T21:32:13.652Z" },
186
+ { url = "https://files.pythonhosted.org/packages/65/30/d7353c338e12baef4ecc1b09e877c1970bd3382789c159b4f89d6a70dc09/pyyaml-6.0.3-cp312-cp312-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:5fdec68f91a0c6739b380c83b951e2c72ac0197ace422360e6d5a959d8d97b2c", size = 844011, upload-time = "2025-09-25T21:32:15.21Z" },
187
+ { url = "https://files.pythonhosted.org/packages/8b/9d/b3589d3877982d4f2329302ef98a8026e7f4443c765c46cfecc8858c6b4b/pyyaml-6.0.3-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:ba1cc08a7ccde2d2ec775841541641e4548226580ab850948cbfda66a1befcdc", size = 807870, upload-time = "2025-09-25T21:32:16.431Z" },
188
+ { url = "https://files.pythonhosted.org/packages/05/c0/b3be26a015601b822b97d9149ff8cb5ead58c66f981e04fedf4e762f4bd4/pyyaml-6.0.3-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:8dc52c23056b9ddd46818a57b78404882310fb473d63f17b07d5c40421e47f8e", size = 761089, upload-time = "2025-09-25T21:32:17.56Z" },
189
+ { url = "https://files.pythonhosted.org/packages/be/8e/98435a21d1d4b46590d5459a22d88128103f8da4c2d4cb8f14f2a96504e1/pyyaml-6.0.3-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:41715c910c881bc081f1e8872880d3c650acf13dfa8214bad49ed4cede7c34ea", size = 790181, upload-time = "2025-09-25T21:32:18.834Z" },
190
+ { url = "https://files.pythonhosted.org/packages/74/93/7baea19427dcfbe1e5a372d81473250b379f04b1bd3c4c5ff825e2327202/pyyaml-6.0.3-cp312-cp312-win32.whl", hash = "sha256:96b533f0e99f6579b3d4d4995707cf36df9100d67e0c8303a0c55b27b5f99bc5", size = 137658, upload-time = "2025-09-25T21:32:20.209Z" },
191
+ { url = "https://files.pythonhosted.org/packages/86/bf/899e81e4cce32febab4fb42bb97dcdf66bc135272882d1987881a4b519e9/pyyaml-6.0.3-cp312-cp312-win_amd64.whl", hash = "sha256:5fcd34e47f6e0b794d17de1b4ff496c00986e1c83f7ab2fb8fcfe9616ff7477b", size = 154003, upload-time = "2025-09-25T21:32:21.167Z" },
192
+ { url = "https://files.pythonhosted.org/packages/1a/08/67bd04656199bbb51dbed1439b7f27601dfb576fb864099c7ef0c3e55531/pyyaml-6.0.3-cp312-cp312-win_arm64.whl", hash = "sha256:64386e5e707d03a7e172c0701abfb7e10f0fb753ee1d773128192742712a98fd", size = 140344, upload-time = "2025-09-25T21:32:22.617Z" },
193
+ { url = "https://files.pythonhosted.org/packages/d1/11/0fd08f8192109f7169db964b5707a2f1e8b745d4e239b784a5a1dd80d1db/pyyaml-6.0.3-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:8da9669d359f02c0b91ccc01cac4a67f16afec0dac22c2ad09f46bee0697eba8", size = 181669, upload-time = "2025-09-25T21:32:23.673Z" },
194
+ { url = "https://files.pythonhosted.org/packages/b1/16/95309993f1d3748cd644e02e38b75d50cbc0d9561d21f390a76242ce073f/pyyaml-6.0.3-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:2283a07e2c21a2aa78d9c4442724ec1eb15f5e42a723b99cb3d822d48f5f7ad1", size = 173252, upload-time = "2025-09-25T21:32:25.149Z" },
195
+ { url = "https://files.pythonhosted.org/packages/50/31/b20f376d3f810b9b2371e72ef5adb33879b25edb7a6d072cb7ca0c486398/pyyaml-6.0.3-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:ee2922902c45ae8ccada2c5b501ab86c36525b883eff4255313a253a3160861c", size = 767081, upload-time = "2025-09-25T21:32:26.575Z" },
196
+ { url = "https://files.pythonhosted.org/packages/49/1e/a55ca81e949270d5d4432fbbd19dfea5321eda7c41a849d443dc92fd1ff7/pyyaml-6.0.3-cp313-cp313-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:a33284e20b78bd4a18c8c2282d549d10bc8408a2a7ff57653c0cf0b9be0afce5", size = 841159, upload-time = "2025-09-25T21:32:27.727Z" },
197
+ { url = "https://files.pythonhosted.org/packages/74/27/e5b8f34d02d9995b80abcef563ea1f8b56d20134d8f4e5e81733b1feceb2/pyyaml-6.0.3-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:0f29edc409a6392443abf94b9cf89ce99889a1dd5376d94316ae5145dfedd5d6", size = 801626, upload-time = "2025-09-25T21:32:28.878Z" },
198
+ { url = "https://files.pythonhosted.org/packages/f9/11/ba845c23988798f40e52ba45f34849aa8a1f2d4af4b798588010792ebad6/pyyaml-6.0.3-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:f7057c9a337546edc7973c0d3ba84ddcdf0daa14533c2065749c9075001090e6", size = 753613, upload-time = "2025-09-25T21:32:30.178Z" },
199
+ { url = "https://files.pythonhosted.org/packages/3d/e0/7966e1a7bfc0a45bf0a7fb6b98ea03fc9b8d84fa7f2229e9659680b69ee3/pyyaml-6.0.3-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:eda16858a3cab07b80edaf74336ece1f986ba330fdb8ee0d6c0d68fe82bc96be", size = 794115, upload-time = "2025-09-25T21:32:31.353Z" },
200
+ { url = "https://files.pythonhosted.org/packages/de/94/980b50a6531b3019e45ddeada0626d45fa85cbe22300844a7983285bed3b/pyyaml-6.0.3-cp313-cp313-win32.whl", hash = "sha256:d0eae10f8159e8fdad514efdc92d74fd8d682c933a6dd088030f3834bc8e6b26", size = 137427, upload-time = "2025-09-25T21:32:32.58Z" },
201
+ { url = "https://files.pythonhosted.org/packages/97/c9/39d5b874e8b28845e4ec2202b5da735d0199dbe5b8fb85f91398814a9a46/pyyaml-6.0.3-cp313-cp313-win_amd64.whl", hash = "sha256:79005a0d97d5ddabfeeea4cf676af11e647e41d81c9a7722a193022accdb6b7c", size = 154090, upload-time = "2025-09-25T21:32:33.659Z" },
202
+ { url = "https://files.pythonhosted.org/packages/73/e8/2bdf3ca2090f68bb3d75b44da7bbc71843b19c9f2b9cb9b0f4ab7a5a4329/pyyaml-6.0.3-cp313-cp313-win_arm64.whl", hash = "sha256:5498cd1645aa724a7c71c8f378eb29ebe23da2fc0d7a08071d89469bf1d2defb", size = 140246, upload-time = "2025-09-25T21:32:34.663Z" },
203
+ { url = "https://files.pythonhosted.org/packages/9d/8c/f4bd7f6465179953d3ac9bc44ac1a8a3e6122cf8ada906b4f96c60172d43/pyyaml-6.0.3-cp314-cp314-macosx_10_13_x86_64.whl", hash = "sha256:8d1fab6bb153a416f9aeb4b8763bc0f22a5586065f86f7664fc23339fc1c1fac", size = 181814, upload-time = "2025-09-25T21:32:35.712Z" },
204
+ { url = "https://files.pythonhosted.org/packages/bd/9c/4d95bb87eb2063d20db7b60faa3840c1b18025517ae857371c4dd55a6b3a/pyyaml-6.0.3-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:34d5fcd24b8445fadc33f9cf348c1047101756fd760b4dacb5c3e99755703310", size = 173809, upload-time = "2025-09-25T21:32:36.789Z" },
205
+ { url = "https://files.pythonhosted.org/packages/92/b5/47e807c2623074914e29dabd16cbbdd4bf5e9b2db9f8090fa64411fc5382/pyyaml-6.0.3-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:501a031947e3a9025ed4405a168e6ef5ae3126c59f90ce0cd6f2bfc477be31b7", size = 766454, upload-time = "2025-09-25T21:32:37.966Z" },
206
+ { url = "https://files.pythonhosted.org/packages/02/9e/e5e9b168be58564121efb3de6859c452fccde0ab093d8438905899a3a483/pyyaml-6.0.3-cp314-cp314-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:b3bc83488de33889877a0f2543ade9f70c67d66d9ebb4ac959502e12de895788", size = 836355, upload-time = "2025-09-25T21:32:39.178Z" },
207
+ { url = "https://files.pythonhosted.org/packages/88/f9/16491d7ed2a919954993e48aa941b200f38040928474c9e85ea9e64222c3/pyyaml-6.0.3-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:c458b6d084f9b935061bc36216e8a69a7e293a2f1e68bf956dcd9e6cbcd143f5", size = 794175, upload-time = "2025-09-25T21:32:40.865Z" },
208
+ { url = "https://files.pythonhosted.org/packages/dd/3f/5989debef34dc6397317802b527dbbafb2b4760878a53d4166579111411e/pyyaml-6.0.3-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:7c6610def4f163542a622a73fb39f534f8c101d690126992300bf3207eab9764", size = 755228, upload-time = "2025-09-25T21:32:42.084Z" },
209
+ { url = "https://files.pythonhosted.org/packages/d7/ce/af88a49043cd2e265be63d083fc75b27b6ed062f5f9fd6cdc223ad62f03e/pyyaml-6.0.3-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:5190d403f121660ce8d1d2c1bb2ef1bd05b5f68533fc5c2ea899bd15f4399b35", size = 789194, upload-time = "2025-09-25T21:32:43.362Z" },
210
+ { url = "https://files.pythonhosted.org/packages/23/20/bb6982b26a40bb43951265ba29d4c246ef0ff59c9fdcdf0ed04e0687de4d/pyyaml-6.0.3-cp314-cp314-win_amd64.whl", hash = "sha256:4a2e8cebe2ff6ab7d1050ecd59c25d4c8bd7e6f400f5f82b96557ac0abafd0ac", size = 156429, upload-time = "2025-09-25T21:32:57.844Z" },
211
+ { url = "https://files.pythonhosted.org/packages/f4/f4/a4541072bb9422c8a883ab55255f918fa378ecf083f5b85e87fc2b4eda1b/pyyaml-6.0.3-cp314-cp314-win_arm64.whl", hash = "sha256:93dda82c9c22deb0a405ea4dc5f2d0cda384168e466364dec6255b293923b2f3", size = 143912, upload-time = "2025-09-25T21:32:59.247Z" },
212
+ { url = "https://files.pythonhosted.org/packages/7c/f9/07dd09ae774e4616edf6cda684ee78f97777bdd15847253637a6f052a62f/pyyaml-6.0.3-cp314-cp314t-macosx_10_13_x86_64.whl", hash = "sha256:02893d100e99e03eda1c8fd5c441d8c60103fd175728e23e431db1b589cf5ab3", size = 189108, upload-time = "2025-09-25T21:32:44.377Z" },
213
+ { url = "https://files.pythonhosted.org/packages/4e/78/8d08c9fb7ce09ad8c38ad533c1191cf27f7ae1effe5bb9400a46d9437fcf/pyyaml-6.0.3-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:c1ff362665ae507275af2853520967820d9124984e0f7466736aea23d8611fba", size = 183641, upload-time = "2025-09-25T21:32:45.407Z" },
214
+ { url = "https://files.pythonhosted.org/packages/7b/5b/3babb19104a46945cf816d047db2788bcaf8c94527a805610b0289a01c6b/pyyaml-6.0.3-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:6adc77889b628398debc7b65c073bcb99c4a0237b248cacaf3fe8a557563ef6c", size = 831901, upload-time = "2025-09-25T21:32:48.83Z" },
215
+ { url = "https://files.pythonhosted.org/packages/8b/cc/dff0684d8dc44da4d22a13f35f073d558c268780ce3c6ba1b87055bb0b87/pyyaml-6.0.3-cp314-cp314t-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:a80cb027f6b349846a3bf6d73b5e95e782175e52f22108cfa17876aaeff93702", size = 861132, upload-time = "2025-09-25T21:32:50.149Z" },
216
+ { url = "https://files.pythonhosted.org/packages/b1/5e/f77dc6b9036943e285ba76b49e118d9ea929885becb0a29ba8a7c75e29fe/pyyaml-6.0.3-cp314-cp314t-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:00c4bdeba853cc34e7dd471f16b4114f4162dc03e6b7afcc2128711f0eca823c", size = 839261, upload-time = "2025-09-25T21:32:51.808Z" },
217
+ { url = "https://files.pythonhosted.org/packages/ce/88/a9db1376aa2a228197c58b37302f284b5617f56a5d959fd1763fb1675ce6/pyyaml-6.0.3-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:66e1674c3ef6f541c35191caae2d429b967b99e02040f5ba928632d9a7f0f065", size = 805272, upload-time = "2025-09-25T21:32:52.941Z" },
218
+ { url = "https://files.pythonhosted.org/packages/da/92/1446574745d74df0c92e6aa4a7b0b3130706a4142b2d1a5869f2eaa423c6/pyyaml-6.0.3-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:16249ee61e95f858e83976573de0f5b2893b3677ba71c9dd36b9cf8be9ac6d65", size = 829923, upload-time = "2025-09-25T21:32:54.537Z" },
219
+ { url = "https://files.pythonhosted.org/packages/f0/7a/1c7270340330e575b92f397352af856a8c06f230aa3e76f86b39d01b416a/pyyaml-6.0.3-cp314-cp314t-win_amd64.whl", hash = "sha256:4ad1906908f2f5ae4e5a8ddfce73c320c2a1429ec52eafd27138b7f1cbe341c9", size = 174062, upload-time = "2025-09-25T21:32:55.767Z" },
220
+ { url = "https://files.pythonhosted.org/packages/f1/12/de94a39c2ef588c7e6455cfbe7343d3b2dc9d6b6b2f40c4c6565744c873d/pyyaml-6.0.3-cp314-cp314t-win_arm64.whl", hash = "sha256:ebc55a14a21cb14062aa4162f906cd962b28e2e9ea38f9b4391244cd8de4ae0b", size = 149341, upload-time = "2025-09-25T21:32:56.828Z" },
221
+ ]
222
+
223
+ [[package]]
224
+ name = "virtualenv"
225
+ version = "21.4.3"
226
+ source = { registry = "https://pypi.org/simple" }
227
+ dependencies = [
228
+ { name = "distlib" },
229
+ { name = "filelock" },
230
+ { name = "platformdirs" },
231
+ { name = "python-discovery" },
232
+ ]
233
+ sdist = { url = "https://files.pythonhosted.org/packages/4b/50/7564c805bb8966d9771caaba8a143fa5e57c848ce4e7fdf2d55a1feb2ead/virtualenv-21.4.3.tar.gz", hash = "sha256:938ff0fd3f4e0f0d3a025f67a3d2f25e3c3aabbcd5857ea6170619138d72d141", size = 7644454, upload-time = "2026-06-11T16:47:04.843Z" }
234
+ wheels = [
235
+ { url = "https://files.pythonhosted.org/packages/a2/8d/84b0d07c6b5f685f85ddf6c87a59d3a8a895a3dfd89e759666fabe951b94/virtualenv-21.4.3-py3-none-any.whl", hash = "sha256:75f4127d4067397c64f38579ce918fec6bf9ca2cd4f48685e82952cc3c035840", size = 7625544, upload-time = "2026-06-11T16:47:01.78Z" },
236
+ ]
File without changes
File without changes