Skip to main content

Lektor Polymorphic Type

PyPI version PyPI Supported Python Versions GitHub license GitHub Actions (Tests)

This plugin adds a new polymorphic lektor field type, polymorphic. The determination of the actual type implementation of the field value is deferred until evaluation time.

A motivating use case is to support having a “body” field whose formatting can be switched between, e.g., markdown, and html (or some other formatted type, such as reStructuredText.)

Installation

Add lektor-polymorphic-type to your project from command line:

lektor plugins add lektor-polymorphic-type

See the Lektor plugin documentation for more information.

How It Works

If the field has a polymorphic_type option set, that value is evaluated and the result is interpreted as the name of the final type for the field.

If no polymorphic_type option is set for the field, then we look for a field on the current record whose name is name of the current field with “_type” appended.

Examples

Simple Example

Here is an example model file for a simple page, with a selectable body format:

# page.ini

[model]
name = Page
label = {{ this.title }}

[fields.title]
label = Title
type = string

[fields.body]
label = Body
type = polymorphic

[fields.body_type]
label = Body Type
type = select
choices = markdown, html, text
default = markdown

Here, the value of the body_type field on a particular page will determine whether the body field is interpreted as being markdown, html or text.

Contrived Example

Here is a contrived example showing the use of the polymorphic_type option:

# page.ini

[model]
name = Page
label = {{ this.title }}

[fields.title]
label = Title
type = string

[fields.body]
label = Body
type = polymorphic
polymorphic_type = 'html' if this.body.lstrip().startswith('<') else 'markdown'

In this case, the body field will be interpreted as raw HTML if the content of that field starts with a “<”, otherwise it will be interpreted as Markdown text.

Author

Jeff Dairiki dairiki@dairiki.org

Changelog

0.1 — 2021-02-05

No code changes.

Update development status classifier to "stable".

Test under python 3.9. Stop testing under 3.5.

0.1b1 — 2020-05-04

Initial release.

Metadata

Release files for lektor-polymorphic-type 0.1

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for lektor-polymorphic-type 0.1
File Size Uploaded
lektor-polymorphic-type-0.1.tar.gz 8.9 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for lektor-polymorphic-type 0.1
File Interpreter ABI Platform
lektor_polymorphic_type-0.1-py2.py3-none-any.whl Python 3, Python 2 none any Details

Total release size: 13.6 kB

Release files / lektor-polymorphic-type-0.1.tar.gz

Download URL lektor-polymorphic-type-0.1.tar.gz
Size 8.9 kB
Tags Source
SHA-256 checksum
How to use checksums
2f348940430a9339f28f0bba80cb151ea40d4e39cf75e1f73ffed3c3b826a326
BLAKE2b-256 checksum
How to use checksums
b6f17a2ac865e2cd3ad4e11447882e19b90cac9fb5baa192296fc6cdd32085ca
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/3.3.0 pkginfo/1.7.0 requests/2.25.1 setuptools/52.0.0 requests-toolbelt/0.9.1 tqdm/4.56.0 CPython/3.9.0+

Release files / lektor_polymorphic_type-0.1-py2.py3-none-any.whl

Download URL lektor_polymorphic_type-0.1-py2.py3-none-any.whl
Size 4.6 kB
Tags Python 2 Python 3
SHA-256 checksum
How to use checksums
b5539d4badcca0ec548544341fd95e888c2fd948e57852cf096d44c39ae6fd4f
BLAKE2b-256 checksum
How to use checksums
44a56e415da4b447642a5765fee67fccbf1a76d01e5b8cc1671fde83c92e3932
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/3.3.0 pkginfo/1.7.0 requests/2.25.1 setuptools/52.0.0 requests-toolbelt/0.9.1 tqdm/4.56.0 CPython/3.9.0+

Release history Release notifications | RSS feed

This release

0.1 This release

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page