Edit front matter with Jinja2 templates
Project description
Batch Edit Yaml Front Matter
Edit front matter markdown files with Jinja2 templates.
Description:
This is a python3
(v3.5.3+) class/module that can be used for batch processing and
editing front matter in markdown files. Front matter is managed via
Jinja2 template processor.
Features:
- Add / Update / Delete any front matter fields
- Preserves front matter element order via oyaml
- Uses Jinja2 Templates for configuration and processing:
- Use Jinja2 filters for complex processing
- Incrementally process files with multiple templates
- Uses Exceptions around sensitive areas of code
- Examples for implementation:
- Documented with Sphinx and hosted on Github
Documentation:
Installation:
pip install editfrontmatter
TL;DR Example Usage:
- Original markdown file with yaml front matter (example1.md)
---
title: "EditFrontMatter Class Example 1"
description: "Edit 2 fields in this front matter"
catagories: [programming, python, markdown]
deleteme: this will be deleted
tags: [front matter, administration, testing]
# comments and spaces will be eliminated (see docs)
author: "Karl N. Redman"
creatordisplayname: "Karl N. Redman"
creatoremail: "karl.redman@example.com"
date: 2019-05-23T17:43:45-05:00
lastmodifierdisplayname: "Karl N. Redman"
lastmodifieremail: "karl.redman@gmail.com"
lastmod: 2019-05-23T17:43:45-05:00
toc: false
type: "page"
hasMath: false
draft: false
weight: 5
---
# EditFontMatter Class Example 1
Edit several fields of front matter.
## Fields affected in this example:
* toc
* note: uses local template variable
* pre: false
* post: true
* draft:
* note: uses jinja2 filter (callback)
* pre: false
* post: true
* hasMath
* note: uses program variable
* pre: true
* post: false
* stuff:
* note: uses program variable to create field
* pre: did not exist
* post: (list) ['one', 'two', 'three']
* deleteme:
* note: removed from final result
* pre: this will be deleted
* post: N/A
- Jinja2 template that will update the front matter data of the source markdown file (template1.j2)
{% set toc = "true" %}
toc: {{ toc }}
draft: {{ false | canPublish }}
hasMath: {{ hasMath }}
stuff: {{ addedVariable }}
- Python program to edit the markdown file with the Jinja2 template (example1.py)
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
from editfrontmatter import EditFrontMatter
import os
def canPublish_func(val):
# do some processing....
return True
def main():
# generic path - overridden by env var `TEST_DATA_DIR`
DATA_PATH = "../data/"
if "TEST_DATA_DIR" in os.environ:
DATA_PATH = os.path.abspath(os.environ.get("TEST_DATA_DIR")) + "/"
# set path to input file
file_path = os.path.abspath(DATA_PATH + "example1.md")
# initialize `template_str` with template file content
template_str = ''.join(open(os.path.abspath(DATA_PATH + "template1.j2"), "r").readlines())
print(template_str)
# instantiate the processor
proc = EditFrontMatter(file_path=file_path, template_str=template_str)
# set fields to delete from yaml
proc.keys_toDelete = ['deleteme']
# add a filter and callback function
proc.add_JinjaFilter('canPublish', canPublish_func)
# populate variables and run processor
proc.run({'toc': 'no effect', 'hasMath': "false",
'addedVariable': ['one', 'two', 'three']})
# dump file
print(proc.dumpFileData())
if __name__ == '__main__':
main()
- Final Output:
---
title: EditFrontMatter Class Example 1
description: Edit 2 fields in this front matter
catagories:
- programming
- python
- markdown
tags:
- front matter
- administration
- testing
author: Karl N. Redman
creatordisplayname: Karl N. Redman
creatoremail: karl.redman@example.com
date: 2019-05-23 22:43:45
lastmodifierdisplayname: Karl N. Redman
lastmodifieremail: karl.redman@gmail.com
lastmod: 2019-05-23 22:43:45
toc: true
type: page
hasMath: false
draft: true
weight: 5
stuff:
- one
- two
- three
---
# EditFontMatter Class Example 1
Edit several fields of front matter.
## Fields affected in this example:
* toc
* note: uses local template variable
* pre: false
* post: true
* draft:
* note: uses jinja2 filter (callback)
* pre: false
* post: true
* hasMath
* note: uses program variable
* pre: true
* post: false
* stuff:
* note: uses program variable to create field
* pre: did not exist
* post: (list) ['one', 'two', 'three']
* deleteme:
* note: removed from final result
* pre: this will be deleted
* post: N/A
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
editfrontmatter-0.0.1.tar.gz
(7.8 kB
view details)
Built Distribution
File details
Details for the file editfrontmatter-0.0.1.tar.gz
.
File metadata
- Download URL: editfrontmatter-0.0.1.tar.gz
- Upload date:
- Size: 7.8 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/1.13.0 pkginfo/1.5.0.1 requests/2.22.0 setuptools/41.0.1 requests-toolbelt/0.9.1 tqdm/4.32.1 CPython/3.5.3
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | aefb2d584e1ca380bbfff2bcb069f82a8ee59cfb875558c3d7a6c18a2bf3f04e |
|
MD5 | 1d2f99c1cf4eb0888180f0c2f61acbc1 |
|
BLAKE2b-256 | 51851d02aa4fc89425ff295604898fd4f6315eaa4b9f0eb5250faa99ee7c6905 |
File details
Details for the file editfrontmatter-0.0.1-py3-none-any.whl
.
File metadata
- Download URL: editfrontmatter-0.0.1-py3-none-any.whl
- Upload date:
- Size: 8.9 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/1.13.0 pkginfo/1.5.0.1 requests/2.22.0 setuptools/41.0.1 requests-toolbelt/0.9.1 tqdm/4.32.1 CPython/3.5.3
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | 323e1e729e361b77b02f94fdfadd566f4b4e552d7fb2864c9dad78738fca50b0 |
|
MD5 | 66a2933fb0f0aa9b15047d70c2af49a9 |
|
BLAKE2b-256 | 1881c4d808ce3d9ebb5bcb2ebdd88c3e14eef1f7b20d4d38bb3ef3244c99cd42 |