Skip to main content

Method chaining with funcy.

Project description

funcy-chain

Simple Python data processing using method-chaining style and the funcy library.

>>> users = [
...   { 'first_name': 'barney',  'age': 36 },
...   { 'first_name': 'fred',    'age': 40 },
...   { 'first_name': 'pebbles', 'age': 1 }
... ]
>>> (Chain(users)
...     .sort(key=itemgetter("age"))
...     .map(itemgetter("first_name"))
...     .thru(lambda names: names + ["wilma"])
...     .map(str.capitalize)
... ).value
['Pebbles', 'Barney', 'Fred', 'Wilma']

Why?

  • Method chaining can make some multi-stage data processing easier to read and write.
  • Funcy is great, but doesn't support method chaining.
  • Other method-chaining implementations have too much "magic", are overly complex, and support too many ways of doing one thing. (see: pydash, fluentpy)
  • Being simple and straightforward is a great boon, making it easier to reason about code, debug, etc.

Key Features

  • Useful out of the box, supporting built-in, stdlib and funcy functions (see below).
  • Easy to compose with additional utilities (see Chain.thru()).
  • Both "immediate" (list-based) and "lazy" (iterator-based) computations supported, via parallel Chain and IterChain classes.
>>> from funcy_chain import Chain
>>> (Chain([1, 2, 3, 7, 6, 5, 4])
...     .without(3)
...     .filter(lambda x: x > 2)
...     .remove(lambda x: x > 6)
...     .sort(reverse=True)
... ).value
[6, 5, 4]

Supported Methods

built-in

Note: funcy's map and filter are used rather than the built-ins.

stdlib

funcy

The following is a sub-set of the funcy cheat sheet including only functions supported as methods on Chain and IterChain objects.

Sequences

Slicedrop take rest butlast takewhile dropwhile split_at split_by
Transformmap mapcat keep pluck pluck_attr invoke
Filterfilter remove keep distinct where without
Joinconcat flatten mapcat interleave interpose
Partitionchunks partition partition_by split_at split_by
Groupsplit count_by count_reps group_by group_by_keys group_values
Aggregatewith_prev with_next accumulate reductions sums
Iteratepairwise with_prev with_next zip_values zip_dicts

Collections

Joinjoin join_with
Transformwalk walk_keys walk_values
Filterselect select_keys select_values compact
Dictsflip pluck where project zip_values zip_dicts

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

funcy_chain-0.3.1.tar.gz (15.4 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

funcy_chain-0.3.1-py3-none-any.whl (8.5 kB view details)

Uploaded Python 3

File details

Details for the file funcy_chain-0.3.1.tar.gz.

File metadata

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

File hashes

Hashes for funcy_chain-0.3.1.tar.gz
Algorithm Hash digest
SHA256 b263356feb25206c21589741347b20304c54cd4eaaddfda21624f1fd996540e6
MD5 0f5e62d80bd844f49f4c41c6651e6b05
BLAKE2b-256 ecf456d3ae9f174940a3d33f5761740b4613135134922f11b4555f1c3b7d9503

See more details on using hashes here.

File details

Details for the file funcy_chain-0.3.1-py3-none-any.whl.

File metadata

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

File hashes

Hashes for funcy_chain-0.3.1-py3-none-any.whl
Algorithm Hash digest
SHA256 b016104e2faa81deacab4e3924d960a068b980e008fe6d8ba2969f56060e9651
MD5 57fb0a4ba98066152983698ba982964f
BLAKE2b-256 448b74fe7596e8b8f69a8c791f33237563e0115b32aa787e0672f15482222cbd

See more details on using hashes here.

Supported by

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