Skip to content

askonomm/flatmatter

Repository files navigation

FlatMatter

Coverage

A YAML-like data serialization language with support for functions. FlatMatter is considered feature-complete and is intentionally kept simple. Bug fixes and performance improvements are still made, of course.

Example FlatMatter:

title: "My Blog"
last_updated: (get-content "posts") / (limit 1) / (get "published_at") / (date "YYYY-mm-dd")
posts: "posts" / get-content

FlatMatter aims to be more-or-less syntactically compatible with YAML for the simple reason of not needing new editor plugins to have syntax highlighting, but it differs in that there is no indentation, but instead dots to indicate hierarchy, like site.title which would result in a site object that contains the title key.

FlatMatter also supports functions, allowing you to build your own data DSL, and functions can also be piped with the forward slash / character, meaning that the result of the left operation will be passed as the first argument of the next function, and so on, to produce an end result.

Install

pip install flatmatter

Requires Python 3.10 or higher.

Usage

The most basic usage looks like this:

from flatmatter import FlatMatter

config = FlatMatter("title: \"My blog\"").to_dict()

However, you most likely want to use it with functions. Those you have to create yourself. An example function looks like this:

from flatmatter import Function, fn

@fn('my-function')
class MyFunction(Function):
  def compute(self, args: list[Any]) -> Any:
    # do something with args here and return the desired result.

A FlatMatter function has to extend the Function base class, and has to use the fn decorator to name the function so that FlatMatter would know what to look for to find the function class. And like I mentioned before, a thing to keep in mind is that if the function is piped, its first arg will be the result of the previous operation.

Once you have your functions, simply pass them to FlatMatter like this:

from flatmatter import FlatMatter

config = FlatMatter("...", [
  MyFunction,
  MyOtherFunction,
  etc,
])

About

A data serialization language, and library.

Topics

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Languages