Skip to main content

Pydantic URL types that are based on the str class.

Project description

Tests Linting

pydantic-string-url

Pydantic URL types that are based on the str class.

Introduction

Since Pydantic v2 the types realated to URLs are not based on the standard Python str class any more.

This decision comes with some issues:

  • URLs cannot be directly passed to library packages that expect str, you must use str(url) instead
  • some internal normalization is done, so the input strings are not always preserved when a URL object is created (trailing slashes could be added), which might be problematic for some applications

This package provides direct replacements for the Pydantic types:

  • AnyUrl
  • AnyHttpUrl
  • HttpUrl
  • AnyWebsocketUrl
  • WebsocketUrl
  • FileUrl
  • FtpUrl

Those replacement types are based on strings, so they are also a str, preserve the original input string and use the same validation functions as their Pydantic counterparts. You can still use the replacement type's .url property to access the original Pydantic URL type.

See also the discussions here:

Usage

The package pydantic-string-url is available on PyPi, so it can be installed with Python package managers such as pip or poetry.

Usage example:

"""Example."""

from pydantic import BaseModel, TypeAdapter, ValidationError

from pydantic_string_url import HttpUrl


# Use inside BaseModel
class User(BaseModel):
    """A user."""

    name: str
    age: int
    homepage: HttpUrl


user = {"name": "John Doe", "age": 33, "homepage": "https://example.com"}

invalid_user = {"name": "Alice", "age": 32, "homepage": "not a url"}

john = User.model_validate(user)
assert john.homepage == "https://example.com"  # no trailing slash was added
try:
    alice = User.model_validate(invalid_user)
except ValidationError as e:
    print(str(e))

# Use standalone
urls = ["https://test.com", "some wrong url"]

url_a = TypeAdapter(HttpUrl).validate_python(urls[0])
try:
    url_b = TypeAdapter(HttpUrl).validate_python(urls[1])
except ValidationError as e:
    print(str(e))

# You can still access the Pydantic type by using the string's .url property
assert url_a.url.scheme == "https"
assert john.homepage.url.scheme == "https"

Licence

MIT

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

pydantic_string_url-1.0.2.tar.gz (4.0 kB view details)

Uploaded Source

Built Distribution

pydantic_string_url-1.0.2-py3-none-any.whl (4.4 kB view details)

Uploaded Python 3

File details

Details for the file pydantic_string_url-1.0.2.tar.gz.

File metadata

  • Download URL: pydantic_string_url-1.0.2.tar.gz
  • Upload date:
  • Size: 4.0 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: poetry/1.5.1 CPython/3.11.9 Darwin/23.6.0

File hashes

Hashes for pydantic_string_url-1.0.2.tar.gz
Algorithm Hash digest
SHA256 fa7690f7231b47ac89e2f0546ef1137af182bcaa9c93f9a3c0deaff2afbb79ca
MD5 316a53a7ecb95179167601a5ec58e8a3
BLAKE2b-256 01b730548d006fb1d57a6b7ec69c4852742669cab49a52daaf8c29dcb210de6d

See more details on using hashes here.

File details

Details for the file pydantic_string_url-1.0.2-py3-none-any.whl.

File metadata

File hashes

Hashes for pydantic_string_url-1.0.2-py3-none-any.whl
Algorithm Hash digest
SHA256 9f97d415aa99f392d08882f2702f7eda9b8f979bb2526dbf75df9bc9ff062f21
MD5 d8e35f1490064c279a70695824067610
BLAKE2b-256 218113a0edf1eb6f4a704fc4f7f2047d5e721c828e381cdb2c5dc7587b90f559

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