Skip to main content

Rusty types for Python

Project description

patina

Documentation Status Supports Python 3.6 and up PyPI

This is an implementation of Rust's Result and Option types in Python. Most methods have been implemented, and the (very good) original documentation has been adapted into docstrings.

The documentation for this package can be read here. All doctests are run and type-checked as part of the CI pipeline as unit tests. The tests are direct ports of those in the Rust documentation.

Why?

2 reasons:

  • Python (in 3.10) now has pattern matching, wouldn't it be cool if we could make the most of that?
  • Sometimes it's nice to have types for your errors.
  • Being able to map over possible failure can be very powerful.

Check this out:

from patina import Some, None_

# This value is an Option[str]
maybe_value = api_call_that_might_produce_a_value()

match maybe_value.map(str.upper):  # Make it uppercase if it exists
    case Some(val):
        print("We got a val:", val)
    case None_():  # Don't forget the parentheses (otherwise it's binding a name)
        print("There was no val :(")

A similar thing can be done with the Result type (matching on Ok or Err). This can be handy if you want to be more explicit about the fact that a function might fail. If the function returns a Result, we can explicitly type the possible error values.

If this all sounds good, I recommend looking into functional programming, particularly of the ML variety (e.g. Haskell, OCaml, SML) or Rust.

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

patina-0.4.0.tar.gz (16.8 kB view details)

Uploaded Source

Built Distribution

patina-0.4.0-py3-none-any.whl (18.1 kB view details)

Uploaded Python 3

File details

Details for the file patina-0.4.0.tar.gz.

File metadata

  • Download URL: patina-0.4.0.tar.gz
  • Upload date:
  • Size: 16.8 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: poetry/1.1.4 CPython/3.9.0 Darwin/20.3.0

File hashes

Hashes for patina-0.4.0.tar.gz
Algorithm Hash digest
SHA256 5c5599d3cbf320f0fdd68197ecaf96aeda9dc0536a1199b17d0bcc9e35fbd0aa
MD5 2bff1256ff1d50569df18e7bc30f7e7e
BLAKE2b-256 6509ddb35014cdb8a5e63430cef0299adf5c6802f1067b226da2f4cf47f15886

See more details on using hashes here.

File details

Details for the file patina-0.4.0-py3-none-any.whl.

File metadata

  • Download URL: patina-0.4.0-py3-none-any.whl
  • Upload date:
  • Size: 18.1 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: poetry/1.1.4 CPython/3.9.0 Darwin/20.3.0

File hashes

Hashes for patina-0.4.0-py3-none-any.whl
Algorithm Hash digest
SHA256 4b0044b1526e4b8f86a00c9ff95af7944dc86c1cfdd3bce3de0fca94a5a865f0
MD5 3af33d495c79978a8b2c6cdd45f63ffa
BLAKE2b-256 bb9ee779c0c77c02b7f066a15f13078b36f7a3988bcc865bd4b41d0dd4d8454a

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