diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index fa688ed..d03a29d 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -11,7 +11,7 @@ jobs: runs-on: ubuntu-latest strategy: matrix: - python-version: ["3.12", "3.13"] + python-version: ["3.14"] steps: - name: Checkout repository diff --git a/README.md b/README.md index e827b4c..29a54a4 100644 --- a/README.md +++ b/README.md @@ -16,3 +16,15 @@ Or you can use [UV](https://docs.astral.sh/uv/) to run cookiecutter: ```bash uvx cookiecutter gh:getludic/template ``` + +**Note:** This template uses Ludic 1.0.0+ which requires Python 3.14+ and uses t-strings. If you need to create a project with Ludic 0.5.x, use the 0.5 tag: + +```bash +cookiecutter gh:getludic/template --checkout 0.5 +``` + +Or with UV: + +```bash +uvx cookiecutter gh:getludic/template --checkout 0.5 +``` diff --git a/{{ cookiecutter.project_slug }}/pyproject.toml b/{{ cookiecutter.project_slug }}/pyproject.toml index 3ff755e..8b4ddd8 100644 --- a/{{ cookiecutter.project_slug }}/pyproject.toml +++ b/{{ cookiecutter.project_slug }}/pyproject.toml @@ -7,13 +7,13 @@ authors = [ ] readme = "README.md" dependencies = [ - "ludic[full]", + "ludic[full]>=1.0.0", "uvicorn", ] -requires-python = ">=3.12" +requires-python = ">=3.14" -[tool.uv] -dev-dependencies =[ +[dependency-groups] +dev = [ "mypy", "pytest", "httpx", @@ -33,10 +33,11 @@ include = ["src", "README.md", "pyproject.toml"] packages = ["src"] [tool.mypy] -python_version = "3.13" +python_version = "3.14" strict = true disallow_subclassing_any = false plugins = "ludic.mypy_plugin" +disable_error_code = ["misc"] [tool.pytest.ini_options] testpaths = "tests" diff --git a/{{ cookiecutter.project_slug }}/src/components.py b/{{ cookiecutter.project_slug }}/src/components.py index b534586..6e164d3 100644 --- a/{{ cookiecutter.project_slug }}/src/components.py +++ b/{{ cookiecutter.project_slug }}/src/components.py @@ -15,4 +15,4 @@ class Hello(Component[NoChildren, HelloAttrs]): @override def render(self) -> Box: - return Box(f"Hello, {b(self.attrs["name"])}! This is a sample component.") + return Box(t"Hello, {b(self.attrs["name"])}! This is a sample component.")