Skip to content

fholmer/make

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

41 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Make-Project

Summary

Create project layout from jinja2 templates.

Installation

$ pip install make

or

$ pip install --user make

Usage

In general:

$ python -m make project source-path

Where source-path can be a local path:

$ python -m make project examples/ini_features

A local zip file:

$ python -m make project examples/ini_features.zip

Zip file over http or https:

$ python -m make project -p simple-master https://gitlab.com/fholmer/simple/-/archive/master/simple-master.zip

Short url for Github:

$ python -m make project gh:fholmer/simple

And Gitlab:

$ python -m make project gl:fholmer/simple

Sub dirs is also supported for Gitlab:

$ python -m make project gl:fholmer/templates/proj1

Simple cookiecutter templates is also supported.

We will use a popular cookiecutter template in this example:

$ python -m make project gh:kragniz/cookiecutter-pypackage-minimal

How to make your own project template

The source-path have to contain a file named project.conf or project.json. Choose the format you prefer.

Format of project.conf:

[project]
name = App
package = {{project.name.lower().replace(' ','_').replace('-', '_')}}
include_tests = json::["none", "pytest"]
include_docs = json::["none", "sphinx", "mkdocs"]

# this is a comment.
# section or keys starting with _ is non-interactive variables

_test_dir = {{ 'tests' if project.include_tests != 'none' else '' }}

[_docs]
dir=
    {%%- if project.include_docs == 'sphinx' -%%}
    docs
    {%%- elif project.include_docs == 'mkdocs' -%%}
    docz
    {%%- else -%%}
    {%%- endif -%%}

The ini-format allows for multi line values, but % have to be escaped. Comments is allowed. Use the special prefix json:: to serialize subsequent text as json.

Format of project.json:

{
    "project": {

        "name": "App",
        "package": "{{project.name.lower().replace(' ','_').replace('-', '_')}}",
        "include_tests": ["none", "pytest"],
        "include_docs": ["none", "sphinx", "mkdocs"],
        "_test_dir": "{{ 'tests' if project.include_tests != 'none' else '' }}"
    },
    "_docs": {
        "dir": "{%- if project.include_docs == 'sphinx' -%}\ndocs\n{%- elif project.include_docs == 'mkdocs' -%}\ndocz\n{%- else -%}\n{%- endif -%}"
    }
}

The json-format do not have multi line but you can use multiple \n in one line.

The source directory could be something like this:

/My-Project-Template
  /{{project.name}}
    /{{_docs.dir}}
      conf.py
    /{{project._test_dir}}
    /{{project.package}}
      __init__.py
    setup.py
    LICENSE
    README.rst
  project.conf

{{project.name}}/setup.py may look something like this:

from setuptools import setup, find_packages
from {{ project.package }} import __version__ as app_version

setup(
    name="{{ project.name }}",
    version=app_version,
    packages=find_packages(include=['{{ project.package }}*']),
)

About

Create project layout from jinja2 templates

Resources

Stars

Watchers

Forks

Packages

No packages published

Languages