Skip to main content

Enable function chaining for any object

Project description

Enable function chaining for any object.

Contained is a class that can wrap any type and make it possible to do function chaining on that object, much like functional piping.

Any method that is defined on the contained type is possible to call, whether it returns a copy or mutates in place. It is also possible to call operators and any builtin function, without breaking the chain. To get the original variable back out of the Contained, just call it with no args.

from contained import Contained
ex = ['hello', 'world']
Contained(ex)() == ex  # True

# methods
Contained(['hello']).extend(['world'])() == ex  # True

# operators
Contained(['hello']).add(['world']).contains('hello')()  # True

# builtins
Contained(ex).len().type()()  # <class 'int'>

Contained can also be given an additional namespace to allow for custom chained methods. This can be a module dict, class dict, globals, locals, or any other dict mapping names to objects.

def stringify_number_colleciton(c):
    return (s if not str(s).isdigit() else int(s) for s in c)

(Contained({1, "A", 3.02, ()}, additional_methods=locals())
    .stringify_number_colleciton()
    .sorted(key=lambda s: str(s))
    () == 
[(), 1, 3.02, 'A'])
import functools, itertools

# if you are on Python >= 3.9 use `additional_methods=(vars(functools) | vars(itertools))`
(Contained(42, reversed=True, additional_methods=Contained(vars(functools)).update(vars(itertools))())
    .range()
    .list()
    .takewhile(lambda x: x < 18)
    .dropwhile(lambda x: x <= 5)
    .map(hex)
    .reduce(lambda y, x: f"{y} {x}")
    () ==
"0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10 0x11")

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

contained-0.0.2.tar.gz (4.0 kB view details)

Uploaded Source

Built Distribution

contained-0.0.2-py3-none-any.whl (3.2 kB view details)

Uploaded Python 3

File details

Details for the file contained-0.0.2.tar.gz.

File metadata

  • Download URL: contained-0.0.2.tar.gz
  • Upload date:
  • Size: 4.0 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: python-requests/2.27.1

File hashes

Hashes for contained-0.0.2.tar.gz
Algorithm Hash digest
SHA256 62445ef57fe2b40ea636d62c972c53ca3750b80cd0759d1cd79598ea301e97f9
MD5 8e8836077edb586b5777dc2e8b123012
BLAKE2b-256 07d2fe4a1b16710d09efdc80f0328889a36f7f25ea8c29b872f586b2aef8de08

See more details on using hashes here.

File details

Details for the file contained-0.0.2-py3-none-any.whl.

File metadata

  • Download URL: contained-0.0.2-py3-none-any.whl
  • Upload date:
  • Size: 3.2 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: python-requests/2.27.1

File hashes

Hashes for contained-0.0.2-py3-none-any.whl
Algorithm Hash digest
SHA256 ba15152bf006f443ceb9e051583bc7b584a74a466c425c7c7e5aaa1544b139eb
MD5 5c8a6a974f99154f2ba4d1b8f52ea2ea
BLAKE2b-256 0bf37428191f018ba029bb33b78a0ae06958c0b3005a6567ae0c13b02882ae8c

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