# 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"
}