lightweight


Namelightweight JSON
Version 1.0.0.dev53 PyPI version JSON
download
home_pagehttps://github.com/mdrachuk/lightweight
SummaryCode over configuration static site generator.
upload_time2023-09-26 21:38:45
maintainer
docs_urlNone
authormdrachuk
requires_python>=3.10
licenseMIT
keywords static-site-generator
VCS
bugtrack_url
requirements No requirements were recorded.
Travis-CI No Travis.
coveralls test coverage No coveralls.
            # lightweight: a static site generator 
[![PyPI](https://img.shields.io/pypi/v/lightweight)][pypi]
[![Build Status](https://img.shields.io/azure-devops/build/misha-drachuk/lightweight/8)](https://dev.azure.com/misha-drachuk/lightweight/_build/latest?definitionId=8&branchName=master)
[![Test Coverage](https://img.shields.io/coveralls/github/mdrachuk/lightweight/master)](https://coveralls.io/github/mdrachuk/lightweight)
[![Supported Python](https://img.shields.io/pypi/pyversions/lightweight)][pypi]

Code over configuration.

[Documentation][docs]

[Examples](https://github.com/mdrachuk/lightweight-examples)



## Features
- [x] Jinja2 templates
- [x] Markdown rendering with YAML frontmatter
- [x] Sass/SCSS rendering
- [x] Dev server
- [x] Template project
- [x] Clean extensible API 
- [x] Fast Enough
- [x] Fails Fast

## Installation
Available from [PyPI][pypi]:
```shell
pip install lightweight
```

## Quick Example
```python
from lightweight import Site, SiteCli, markdown, paths, jinja, template, sass


def blog_posts(source):
    post_template = template('_templates_/blog/post.html')
    # Use globs to select files. # source = 'posts/**.md'
    return (markdown(path, post_template) for path in paths(source))

def example(url):
    site = Site(url)
    
    # Render an index page from Jinja2 template.
    site.add('index.html', jinja('index.html'))
    
    # Render markdown blog posts.
    [site.add(f'blog/{post.source_path.stem}.html', post) for post in blog_posts('posts/**.md')]
    site.add('blog.html', jinja('posts.html'))
    
    # Render SASS to CSS.
    site.add('css/global.css', sass('styles/main.scss'))
    
    # Include a copy of a directory.
    site.add('img')
    site.add('fonts')
    site.add('js')
    
    return site   

def generate_prod():
    example(url='https://example.org/').generate(out='out')


if __name__ == '__main__':
    # Run CLI with `build` and `serve` commands. 
    SiteCli(build=example).run()

```

## Create a new project

Initialize a new project using `init` command:
```bash
lw init --url https://example.org example
```

It accepts multiple optional arguments:
```
lw init -h
usage: lw init [-h] [--title TITLE] location

Generate Lightweight skeleton application

positional arguments:
  location       the directory to initialize site generator in

optional arguments:
  -h, --help     show this help message and exit
  --title TITLE  the title of of the generated site
```

## Dev Server

Lightweight includes a simple static web server with live reload serving at `localhost:8080`:
```bash
python -m website serve
```
Here `website` is a Python module 

Host and port can be changed via:
```bash
python -m website serve --host 0.0.0.0 --port 80
```

The live reload can be disabled with `--no-live-reload` flag:
```bash
python -m website serve --no-live-reload
```
Otherwise every served HTML file will be injected with a javascript that polls `/__live_reload_id__`.
The script triggers page reload when the value at that location changes.
The `/__live_reload_id__` is changed after regenerating the site upon change in `--source` directory.

To stop the server press `Ctrl+C` in terminal.


[pypi]: https://pypi.org/project/lightweight/
[docs]: https://lightweight.readthedocs.io/en/latest/ 

            

Raw data

            {
    "_id": null,
    "home_page": "https://github.com/mdrachuk/lightweight",
    "name": "lightweight",
    "maintainer": "",
    "docs_url": null,
    "requires_python": ">=3.10",
    "maintainer_email": "",
    "keywords": "static-site-generator",
    "author": "mdrachuk",
    "author_email": "misha@drach.uk",
    "download_url": "https://files.pythonhosted.org/packages/fe/6f/81c6524e49c7b1d7cc72085cc99f595fc3769407b389dcedc48e13c3e37e/lightweight-1.0.0.dev53.tar.gz",
    "platform": null,
    "description": "# lightweight: a static site generator \n[![PyPI](https://img.shields.io/pypi/v/lightweight)][pypi]\n[![Build Status](https://img.shields.io/azure-devops/build/misha-drachuk/lightweight/8)](https://dev.azure.com/misha-drachuk/lightweight/_build/latest?definitionId=8&branchName=master)\n[![Test Coverage](https://img.shields.io/coveralls/github/mdrachuk/lightweight/master)](https://coveralls.io/github/mdrachuk/lightweight)\n[![Supported Python](https://img.shields.io/pypi/pyversions/lightweight)][pypi]\n\nCode over configuration.\n\n[Documentation][docs]\n\n[Examples](https://github.com/mdrachuk/lightweight-examples)\n\n\n\n## Features\n- [x] Jinja2 templates\n- [x] Markdown rendering with YAML frontmatter\n- [x] Sass/SCSS rendering\n- [x] Dev server\n- [x] Template project\n- [x] Clean extensible API \n- [x] Fast Enough\n- [x] Fails Fast\n\n## Installation\nAvailable from [PyPI][pypi]:\n```shell\npip install lightweight\n```\n\n## Quick Example\n```python\nfrom lightweight import Site, SiteCli, markdown, paths, jinja, template, sass\n\n\ndef blog_posts(source):\n    post_template = template('_templates_/blog/post.html')\n    # Use globs to select files. # source = 'posts/**.md'\n    return (markdown(path, post_template) for path in paths(source))\n\ndef example(url):\n    site = Site(url)\n    \n    # Render an index page from Jinja2 template.\n    site.add('index.html', jinja('index.html'))\n    \n    # Render markdown blog posts.\n    [site.add(f'blog/{post.source_path.stem}.html', post) for post in blog_posts('posts/**.md')]\n    site.add('blog.html', jinja('posts.html'))\n    \n    # Render SASS to CSS.\n    site.add('css/global.css', sass('styles/main.scss'))\n    \n    # Include a copy of a directory.\n    site.add('img')\n    site.add('fonts')\n    site.add('js')\n    \n    return site   \n\ndef generate_prod():\n    example(url='https://example.org/').generate(out='out')\n\n\nif __name__ == '__main__':\n    # Run CLI with `build` and `serve` commands. \n    SiteCli(build=example).run()\n\n```\n\n## Create a new project\n\nInitialize a new project using `init` command:\n```bash\nlw init --url https://example.org example\n```\n\nIt accepts multiple optional arguments:\n```\nlw init -h\nusage: lw init [-h] [--title TITLE] location\n\nGenerate Lightweight skeleton application\n\npositional arguments:\n  location       the directory to initialize site generator in\n\noptional arguments:\n  -h, --help     show this help message and exit\n  --title TITLE  the title of of the generated site\n```\n\n## Dev Server\n\nLightweight includes a simple static web server with live reload serving at `localhost:8080`:\n```bash\npython -m website serve\n```\nHere `website` is a Python module \n\nHost and port can be changed via:\n```bash\npython -m website serve --host 0.0.0.0 --port 80\n```\n\nThe live reload can be disabled with `--no-live-reload` flag:\n```bash\npython -m website serve --no-live-reload\n```\nOtherwise every served HTML file will be injected with a javascript that polls `/__live_reload_id__`.\nThe script triggers page reload when the value at that location changes.\nThe `/__live_reload_id__` is changed after regenerating the site upon change in `--source` directory.\n\nTo stop the server press `Ctrl+C` in terminal.\n\n\n[pypi]: https://pypi.org/project/lightweight/\n[docs]: https://lightweight.readthedocs.io/en/latest/ \n",
    "bugtrack_url": null,
    "license": "MIT",
    "summary": "Code over configuration static site generator.",
    "version": "1.0.0.dev53",
    "project_urls": {
        "Homepage": "https://github.com/mdrachuk/lightweight",
        "Issues": "https://github.com/mdrachuk/lightweight/issues",
        "Pipelines": "https://dev.azure.com/misha-drachuk/lightweight",
        "Source": "https://github.com/mdrachuk/lightweight/"
    },
    "split_keywords": [
        "static-site-generator"
    ],
    "urls": [
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "38c439f7d381eb44d761f8e03d8f80aadf271c54ea0a30199152b5a6ed4a1e58",
                "md5": "95a373c2055ae2d14736a4db5a0421d2",
                "sha256": "6046a5fcb738c73475ad7f8692139e926136afc22be419ee5821e434c7dcf0d4"
            },
            "downloads": -1,
            "filename": "lightweight-1.0.0.dev53-py3-none-any.whl",
            "has_sig": false,
            "md5_digest": "95a373c2055ae2d14736a4db5a0421d2",
            "packagetype": "bdist_wheel",
            "python_version": "py3",
            "requires_python": ">=3.10",
            "size": 256947,
            "upload_time": "2023-09-26T21:38:42",
            "upload_time_iso_8601": "2023-09-26T21:38:42.652857Z",
            "url": "https://files.pythonhosted.org/packages/38/c4/39f7d381eb44d761f8e03d8f80aadf271c54ea0a30199152b5a6ed4a1e58/lightweight-1.0.0.dev53-py3-none-any.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "fe6f81c6524e49c7b1d7cc72085cc99f595fc3769407b389dcedc48e13c3e37e",
                "md5": "a3f322d479ca653627f84002d2c51163",
                "sha256": "9d9e3dede432e9deb787a032dc2949d17c7a6a9e59c33d56a800c22cb479d7c6"
            },
            "downloads": -1,
            "filename": "lightweight-1.0.0.dev53.tar.gz",
            "has_sig": false,
            "md5_digest": "a3f322d479ca653627f84002d2c51163",
            "packagetype": "sdist",
            "python_version": "source",
            "requires_python": ">=3.10",
            "size": 228227,
            "upload_time": "2023-09-26T21:38:45",
            "upload_time_iso_8601": "2023-09-26T21:38:45.329299Z",
            "url": "https://files.pythonhosted.org/packages/fe/6f/81c6524e49c7b1d7cc72085cc99f595fc3769407b389dcedc48e13c3e37e/lightweight-1.0.0.dev53.tar.gz",
            "yanked": false,
            "yanked_reason": null
        }
    ],
    "upload_time": "2023-09-26 21:38:45",
    "github": true,
    "gitlab": false,
    "bitbucket": false,
    "codeberg": false,
    "github_user": "mdrachuk",
    "github_project": "lightweight",
    "travis_ci": false,
    "coveralls": false,
    "github_actions": false,
    "requirements": [],
    "lcname": "lightweight"
}
        
Elapsed time: 0.15712s