# dl-skel

dl-skel.py provides skeleton generator for you to avoid creating a
project from zero everytime.

Its useful to bootstrap general projects, like HTMLBootstrap, PythonPackage,
and others. It will download a GIT repository available on the net, and
process some files to change names and so on.

In the end, you will have a new folder, with `dlbuild.py` that can be used
to `runserver`, or `build` the project.

---

## Installation

Install it via pip (`pip install dl-skel`), or manually:

```
$ git clone git@github.com:doubleleft/dl-skel.git
$ cd dl-skel
$ python setup.py install
```

This will create a `dl-skel.py` bin in your path (virtualenv or systemwide)

## CLI Usage

Usage via CLI app called `dl-skel.py`

```
Usage: dl-skel.py [options]

Options:
  -h, --help            show this help message and exit
  --skeleton-config=SKELCONFIG
                        dlskel Config file. Default is ~/.dl-skel/config.json
  --skeleton-path=SKELPATH
                        Use another Skeleton Search Path. Default is ~/.dl-skel/

  -l, --list            List skeletons

  Import new Template:
    -i <GIT_REPO> <TEMPLATE_NAME>, --import=<GIT_REPO> <TEMPLATE_NAME>
                        import a new template from the given GIT
                        repository.

  Create a new project:
    -c <TEMPLATE_NAME> <OUTPUT>, --create=<TEMPLATE_NAME> <OUTPUT>
                        Create a new <project> skeleton
```

## Default Skeletons

You can check all available skeletons using `-l`:

```
$ dl-skel.py -l
wordpress5		https://github.com/doubleleft/skeleton-wordpress Wordpress 5.0
```

Template | URL 
--- | --- 
wordpress5		| [skeleton-wordpress](https://github.com/doubleleft/skeleton-wordpress)
HTMLRichApp		| [skeleton-htmlrichapp](https://github.com/doubleleft/skeleton-htmlrichapp)
HTMLSimleApp	| [skeleton-wordpress](https://github.com/doubleleft/skeleton-wordpress)

## Create a new project

To create a new project using a base skeleton, try option `-c`

```
$ dl-skel.py -c python ../my-shiny-project
Cloning python(https://github.com/ionelmc/projectskel) into ../my-shiny-project
```

## Importing your own skeletons

To import your own skeletons, use `-i`

```
$ dl-skel.py -i <REPO_URL> <SKELETON_NAME>
```

This will import `<REPO_URL>` and save it as `<SKELETON_NAME>`.
You can now create new projects using `<SKELETON_NAME>`

```
$ dl-skel.py -c <SKEL_NAME> name-of-my-project
```

# Creating my own skeletons

Skeletons are simple **GIT** repositories, with a special recipe stored in the
file `dlbuild`. This recipe tells what to substitute, download, install, 
pretty much by hand.

You MUST create the following functions in the `dlbuild.py` file:

	setup				(Download and replace files)
	build				(Build project)

while others functions, like `runserver` are optional.

To see a simple example of a skeleton, check  [skeleton-wordpress](https://github.com/doubleleft/skeleton-wordpress/blob/master/dlbuild.py)

# Using it inside python

You can use it direcly as an API in python

```
$ python

>>> from dlskel.skel import skeleton_create, make_password
>>> skeleton_create(    'git@github.com:doubleleft/skeleton-wordpress.git', 
                        'my-wp-project', 
                       skel_vars={
                            'DB_NAME':      'myproj',
                            'DB_USER':      'myuser',
                            'DB_PASSWORD':  make_password(length=8) })
```

---
### TODO

- ✓ Add better file substituion via jinja2 template 
- ✓ Add simple API for using it inside python
- ✓ Finish setup.py and make it pip installable

- ✓ Delete repository .git when creating a new project.
- Add dependencies check and installation (if necessary) 

- ** Create Skeletons **
 * ✓ Wordpress Skeleton
 * Laravel Skeleton
 * ✓ Python Package Skeleton
 * Python Flask Skeleton
 * HTML Bootstrap Skeleton
 * HTML Static Skeleton
