Skip to main content

Hyperlinks for pydantic models

Project description

Read a blog post from the library author discussing why this library exists.

In a typical web application relationships between resources are modeled by primary and foreign keys in a database (integers, UUIDs, etc.). The most natural way to represent relationships in REST APIs is by URLs to the related resources (explained in this blog).

hrefs makes it easy to add hyperlinks between pydantic models in a declarative way. Just declare a Href field and the library will automatically convert between keys and URLs:

from hrefs import Href, BaseReferrableModel
from pydantic import BaseModel

class Book(BaseReferrableModel):
    id: int

    class Config:
        details_view = "get_book"

class Library(BaseModel):
    books: list[Href[Book]]

@app.get("/books/{id}")
def get_book(id: int) -> Book:
    return Book(id=id)

@app.get("/library")
def get_library() -> Library:
    """
    Will serialize into:
    {"books":["https://example.com/books/1","https://example.com/books/2","https://example.com/books/3"]}
    """
    return Library(books=[1,2,3])

@app.post("/library")
def post_library(library: Library):
    """
    Assuming the request contains
    {"books":["https://example.com/books/1","https://example.com/books/2","https://example.com/books/3"]}
    Will deserialize into: [1,2,3]
    """
    write_to_database([href.key for href in library.books])

hrefs was written especially with FastAPI in mind, but integrates into any application or framework using pydantic to parse and serialize models.

Check out the documentation to get started!

Installation

Install the library using pip or your favorite package management tool:

$ pip install hrefs

Download files

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

Source Distribution

hrefs-0.14.tar.gz (42.6 kB view details)

Uploaded Source

Built Distribution

hrefs-0.14-py3-none-any.whl (17.3 kB view details)

Uploaded Python 3

File details

Details for the file hrefs-0.14.tar.gz.

File metadata

  • Download URL: hrefs-0.14.tar.gz
  • Upload date:
  • Size: 42.6 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: python-requests/2.32.3

File hashes

Hashes for hrefs-0.14.tar.gz
Algorithm Hash digest
SHA256 a55a39a65b38eeabb76a24de3b8f3a98c16efd13019cff5f891f91208e46c253
MD5 37b32811f49a0dcbcf1c0ca162677e7f
BLAKE2b-256 627075ffeae9229352fbd2ac55d496fd717f1243257448dbe84a389c6ff3b41b

See more details on using hashes here.

File details

Details for the file hrefs-0.14-py3-none-any.whl.

File metadata

  • Download URL: hrefs-0.14-py3-none-any.whl
  • Upload date:
  • Size: 17.3 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: python-requests/2.32.3

File hashes

Hashes for hrefs-0.14-py3-none-any.whl
Algorithm Hash digest
SHA256 7040be02cabb4a9e998a3b5c62650b93199d05b27414573e2918f188e7c8b47f
MD5 7203939badadab86da1d0d890db63327
BLAKE2b-256 3a513ceacb47b789b10f0777ee8029716b4cdada8cbe2ce5d3ea8b7143d9cf1b

See more details on using hashes here.

Supported by

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