Skip to main content

A library for building HTML documents with a simple and learnable syntax

Project description

PyHTML Enhanced

A library for building HTML documents with a simple and learnable syntax, inspired by, and similar to the original PyHTML library, but with improved documentation and type safety.

Features

  • Inline documentation and type safety for all tags. Documentation for tags is pulled from MDN Web Docs.

  • A modern and readable codebase.

  • No dependencies.

  • 100% test coverage

Usage

import pyhtml as h

my_website = h.html(
    h.head(
        h.title("Hello, world!"),
        h.script(src="http://example.com/script.js"),
    ),
    h.body(
        h.h1("Hello, world!"),
        h.p("This is my amazing website rendered with PyHTML Enhanced!"),
    ),
)

# Converting it to a string is all you need to do to render it!
print(str(my_website))

This will produce the following HTML code:

<html>
  <head>
    <title>
      Hello, world!
    </title>
    <script src="http://example.com/script.js" type="text/javascript"></script>
  </head>
  <body>
    <h1>
      Hello, world!
    </h1>
    <p>
      This is my amazing website rendered with PyHTML Enhanced!
    </p>
  </body>
</html>

Differences to PyHTML

There are some minor usage differences compared to the original PyHTML library.

Uninstantiated classes are only rendered if they are given as the child of an instantiated element.

>>> br
<class 'pyhtml.__tags.generated.br'>
>>> html(body(br))
<html>
  <body>
    <br>
  </body>
</html>

Calling an instance of a Tag will return a new tag containing all elements of the original tag combined with the new attributes and children, but will not modify the original instance, as I found the old behaviour confusing and bug-prone.

>>> para = p("Base paragraph")
>>> para2 = para("Extra text")
>>> para2
<p>
  Base paragraph
  Extra text
</p>
>>> para
<p>
  Base paragraph
</p>

Known issues

There are a couple of things I haven't gotten round to sorting out yet

  • Add default attributes to more tags
  • Some tags (eg <pre>, <script>) currently aren't properly implemented and escape their contents.

How it works

Since there are so many HTML tags, it would be extremely tedious to document them all manually. In the meta directory, you will find code that solves this problem with the following steps:

  1. Download the Markdown source for MDN's documentation of all HTML elements.

  2. Parse the markdown to gather all tag names and descriptions, discarding garbage data and obsolete tags.

  3. Use data from a YAML configuration file (meta/tags.yml) to gather information on suggested attributes and base classes to use for each tag.

  4. Generate Python code to represent all of these tags, including their documentation.

Credits

Cenkalti/PyHTML

Cenk Altı's work was used as a source of inspiration and reference. Although all the code in pyhtml-enhanced was written by me, I want to thank them for the significant help their hard work provided while creating this project.

MDN Web Docs

Almost all of the documentation was gathered from the MDN Web Docs. It's super neat that all their documentation is open (licensed as CC-BY-SA-2.5 if you're interested).

License

All code in this project is licensed under the MIT License.

However, the documentation found in pyhtml/__tags/generated.py was copied from MDN Web Docs, and is licensed under CC-BY-SA-2.5. See LICENSE_DOCS.md for a copy of the 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

pyhtml_enhanced-1.0.0.tar.gz (27.7 kB view details)

Uploaded Source

Built Distribution

pyhtml_enhanced-1.0.0-py3-none-any.whl (24.6 kB view details)

Uploaded Python 3

File details

Details for the file pyhtml_enhanced-1.0.0.tar.gz.

File metadata

  • Download URL: pyhtml_enhanced-1.0.0.tar.gz
  • Upload date:
  • Size: 27.7 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: poetry/1.6.1 CPython/3.11.5 Linux/6.2.0-1012-azure

File hashes

Hashes for pyhtml_enhanced-1.0.0.tar.gz
Algorithm Hash digest
SHA256 bdd3c62cf23071075282abde413a7312e06f78a920a04fbe917b0fb8bcb3bf9d
MD5 d69ff469cf891e444f3ad123e86c546c
BLAKE2b-256 4b8f7091441a7890ffaffcc53a9dbe20496eb6598cd47c3219ea4d184e8a260f

See more details on using hashes here.

File details

Details for the file pyhtml_enhanced-1.0.0-py3-none-any.whl.

File metadata

  • Download URL: pyhtml_enhanced-1.0.0-py3-none-any.whl
  • Upload date:
  • Size: 24.6 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: poetry/1.6.1 CPython/3.11.5 Linux/6.2.0-1012-azure

File hashes

Hashes for pyhtml_enhanced-1.0.0-py3-none-any.whl
Algorithm Hash digest
SHA256 a3c6344eb25622b78685f34af496648edba6e3be2652d3b1d2bfc90f4110fc68
MD5 bf9378f6d89494051e624fee1213cf2b
BLAKE2b-256 9b18ff7e0e8bc6e9a6b1be0330fb538bb5b4614b9a216f3cd8d0d7e856ff59c2

See more details on using hashes here.

Supported by

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