Skip to main content

simplify your HTML building.

Project description

haitch logo

simplify your HTML building.

builds.sr.ht status PyPI - Version

haitch

alternative pronunciation for the letter "H"

My goal is to make writing HTML as fun as writing Python.

Features

  • Lazily build HTML elements.
  • 100% test and type coverage.
  • No dependencies.
  • Documentation for common elements.

Quickstart

Install haitch using pip:

$ pip install haitch

Importing the package like so, allows you to build any element you like:

import haitch as H

# Render known `h1` tag.
print(H.h1("Hello, world"))
# <h1>Hello, world</h1>

# Render custom `foo` tag (useful for web components).
print(H.foo("Hello, world"))
# <foo>Hello, world!</foo>

# Fetch emails from data store.
emails = ["jane@aol.com", "bob@example.com", "mark@mail.org"]

# Build an ordered list of emails with ".com" domains.
email_list = H.ol(class_="emails")(
    H.li(H.a(href=f"mailto:{email}")(email))
    for email in sorted(emails)
    if email.endswith(".com")
)

print(email_list)
# <ol class="email-list">
#   <li>
#     <a href="mailto:bob@example.com">bob@example.com</a>
#   </li>
#   <li>
#     <a href="mailto:jane@aol.com">jane@aol.com</a>
#   </li>
# </ol>

Note: printed output above is prettified for readability, but the actual output is minified.

Motivation

Inspired by the htbuilder library as an alternative to templating. The library met most of my needs, but lacked type annotations and documentation for HTML elements and attributes. This made me consistently context switch between the MDN docs and my editor. This library attempts to solve this problem by bringing the HTML spec to where you program.

Non-goals

The following features will not be supported:

  • Deprecated elements and attributes: if you want to use them, you can since haitch supports generic elements and attributes. However, I am not going to write the annotations and documentation for them.
  • 100% input validation: this library is meant to assist the developer to write valid HTML with the help of type annotations and documentation. In the end, it is up to the developer and browser to verify that the input is of the correct type. So for example, I will not add any validation to make sure that a <col> element is directly nested inside of a <colgroup> element or that the span attribute for the <col> element is a positive integer.

Releases

This library tries to adhere to semantic versioning and keeps a changelog.

Examples

These repositories should help you integrate haitch into your web application:

License

haitch is distributed under the terms of the BSD-3-Clause license.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

haitch-0.12.0.tar.gz (49.3 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

haitch-0.12.0-py3-none-any.whl (99.3 kB view details)

Uploaded Python 3

File details

Details for the file haitch-0.12.0.tar.gz.

File metadata

  • Download URL: haitch-0.12.0.tar.gz
  • Upload date:
  • Size: 49.3 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: python-httpx/0.28.1

File hashes

Hashes for haitch-0.12.0.tar.gz
Algorithm Hash digest
SHA256 63c57223786b680d2f9548eb57d8dc468431f294cf75963213b1fe717db34bca
MD5 073a2f2031d1547e28abbb6bb2a39bb1
BLAKE2b-256 1ec0e7763d6fd87989b270c20a04a2cd6f3be98a41abb2ce4364b731086efd7b

See more details on using hashes here.

File details

Details for the file haitch-0.12.0-py3-none-any.whl.

File metadata

  • Download URL: haitch-0.12.0-py3-none-any.whl
  • Upload date:
  • Size: 99.3 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: python-httpx/0.28.1

File hashes

Hashes for haitch-0.12.0-py3-none-any.whl
Algorithm Hash digest
SHA256 26781cd5b274db960316b3180bea60ae10e9b965f919ac25633896a44911aa68
MD5 4a4b6a926e42925cbd10549958a2bdb9
BLAKE2b-256 79d702c9943f6332b6ef98518afd480daa588510c8c2a9d0fb79aa3b09da73ae

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page