mirror of
https://github.com/cookiecutter/cookiecutter-django.git
synced 2025-08-10 15:04:52 +03:00
Encapsulating package managers
This commit is contained in:
parent
de54e4fba3
commit
4470dc83f6
|
@ -1,4 +1,5 @@
|
||||||
{
|
{
|
||||||
|
"_extensions": ["dependencies.InstallExtension"],
|
||||||
"project_name": "My Awesome Project",
|
"project_name": "My Awesome Project",
|
||||||
"project_slug": "{{ cookiecutter.project_name.lower()|replace(' ', '_')|replace('-', '_')|replace('.', '_')|trim() }}",
|
"project_slug": "{{ cookiecutter.project_name.lower()|replace(' ', '_')|replace('-', '_')|replace('.', '_')|trim() }}",
|
||||||
"description": "Behold My Awesome Project!",
|
"description": "Behold My Awesome Project!",
|
||||||
|
|
55
dependencies.py
Normal file
55
dependencies.py
Normal file
|
@ -0,0 +1,55 @@
|
||||||
|
from typing import Any
|
||||||
|
|
||||||
|
from cookiecutter.environment import StrictEnvironment
|
||||||
|
from jinja2.ext import Extension
|
||||||
|
|
||||||
|
|
||||||
|
class PackageManager:
|
||||||
|
managers: dict[str, "PackageManager"] = {}
|
||||||
|
|
||||||
|
def __init_subclass__(cls, **kwargs):
|
||||||
|
cls.managers[cls.__name__.lower()] = cls()
|
||||||
|
|
||||||
|
def install(self, obj: str, context: dict[str, Any]) -> str:
|
||||||
|
raise NotImplementedError("Subclasses must implement the install method")
|
||||||
|
|
||||||
|
|
||||||
|
class PIP(PackageManager):
|
||||||
|
"""PIP package manager"""
|
||||||
|
|
||||||
|
def install(self, obj: str, context: dict[str, Any]) -> str:
|
||||||
|
if obj == "development":
|
||||||
|
return "pip install -r requirements/local.txt"
|
||||||
|
|
||||||
|
return f"pip install {obj}"
|
||||||
|
|
||||||
|
|
||||||
|
class Poetry(PackageManager):
|
||||||
|
"""Poetry package manager"""
|
||||||
|
|
||||||
|
def install(self, obj: str, context: dict[str, Any]) -> str:
|
||||||
|
if obj == "development":
|
||||||
|
return "poetry install --with dev"
|
||||||
|
|
||||||
|
return f"poetry add {obj}"
|
||||||
|
|
||||||
|
|
||||||
|
class UV(PackageManager):
|
||||||
|
"""Poetry package manager"""
|
||||||
|
|
||||||
|
|
||||||
|
class InstallExtension(Extension):
|
||||||
|
"""Jinja2 extension to convert a Python object to JSON."""
|
||||||
|
|
||||||
|
def __init__(self, environment: StrictEnvironment):
|
||||||
|
"""Initialize the extension with the given environment."""
|
||||||
|
super().__init__(environment)
|
||||||
|
|
||||||
|
def install(obj, context):
|
||||||
|
# TODO we need to retrieve the package manager from the context or in another way
|
||||||
|
# manager_name = context.package_manager
|
||||||
|
manager_name = "pip"
|
||||||
|
package_manager = PackageManager.managers[manager_name]
|
||||||
|
return package_manager.install(obj, context)
|
||||||
|
|
||||||
|
environment.filters["install"] = install
|
|
@ -21,7 +21,7 @@ steps:
|
||||||
path: ${PRE_COMMIT_HOME}
|
path: ${PRE_COMMIT_HOME}
|
||||||
commands:
|
commands:
|
||||||
- export PRE_COMMIT_HOME=$CI_PROJECT_DIR/.cache/pre-commit
|
- export PRE_COMMIT_HOME=$CI_PROJECT_DIR/.cache/pre-commit
|
||||||
- pip install -q pre-commit
|
- {{ "-q pre-commit"|install(cookiecutter)}}
|
||||||
- pre-commit run --show-diff-on-failure --color=always --all-files
|
- pre-commit run --show-diff-on-failure --color=always --all-files
|
||||||
|
|
||||||
- name: test
|
- name: test
|
||||||
|
@ -38,7 +38,7 @@ steps:
|
||||||
{%- else %}
|
{%- else %}
|
||||||
image: python:3.11
|
image: python:3.11
|
||||||
commands:
|
commands:
|
||||||
- pip install -r requirements/local.txt
|
- {{ "development"|install(cookiecutter)}}
|
||||||
- pytest
|
- pytest
|
||||||
{%- endif%}
|
{%- endif%}
|
||||||
|
|
||||||
|
|
|
@ -10,7 +10,7 @@ jobs:
|
||||||
include:
|
include:
|
||||||
- name: "Linter"
|
- name: "Linter"
|
||||||
before_script:
|
before_script:
|
||||||
- pip install -q ruff
|
- {{ "ruff"|install(cookiecutter)}}
|
||||||
script:
|
script:
|
||||||
- ruff check .
|
- ruff check .
|
||||||
|
|
||||||
|
@ -39,7 +39,7 @@ jobs:
|
||||||
python:
|
python:
|
||||||
- "3.11"
|
- "3.11"
|
||||||
install:
|
install:
|
||||||
- pip install -r requirements/local.txt
|
- {{ "development"|install(cookiecutter)}}
|
||||||
script:
|
script:
|
||||||
- pytest
|
- pytest
|
||||||
{%- endif %}
|
{%- endif %}
|
||||||
|
|
Loading…
Reference in New Issue
Block a user