Some objects could be smarter
Project description
Smarter
Some objects could be smarter
pip install smarter
SmartList
regular list
operations
from smarter import SmartList
colors = SmartList(['red', 'green', 'blue'])
colors.append('yellow')
colors.extend(['orange', 'purple'])
colors.insert(1, 'black')
colors.remove('black')
smart list
operations
colors.first() # 'red'
colors.last() # 'purple'
colors.first_or(13) # 'red'
colors.last_or("default") # 'purple'
items = SmartList([]) # empty list
items.first_or(13) # 13
items.last_or("default") # 'default'
items = SmartList([None, "", [], 13])
items.first_not_null() # ""
items = SmartList([None, "", [], 13])
items.first_not_nullable() # 13
Smart Result
Wrapper
Instead of calling error prone functions, wrap it in a Result
object
def this_fails(x):
return x / 0
w = Result(this_fails, 5) # instead of w = this_fails(5)
w.is_error() # True
w.is_ok() # False
w.exc # ZeroDivisionError
w.unwrap_or(5) # 5
w.unwrap_or_else(lambda: 5) # 5
w.and_then(lambda x: x + 1, 5) # Raises ZerodivisionError
w.unwrap() # Raises ZeroDivisionError
def this_succeeds(x):
return 1 + x
w = Result(this_succeeds, 5) # Instead of w = this_succeeds(5)
w.is_error() # False
w.is_ok() # True
w.exc # None
w.unwrap_or(5) # 6
w.unwrap_or_else(lambda: 'default') # 6
w.and_then(lambda value, x: value * x, 5).unwrap() # 30
w.unwrap() # 6
def double_integer(x):
return x * 2
result = (
w.and_then(double_integer) # 12
.and_then(double_integer) # 24
.and_then(double_integer) # 48
.and_then(double_integer) # 96
.unwrap()
) # 96
w.ok() # 6
By default all exceptions are wrapped
in a Result
object but it is
possible to specify the exception type.
person = {'name': 'John', 'age': '25'}
w = Result(person.__getitem__, 'city', suppress=KeyError)
w.is_error() # True
w.exc # KeyError
w.unwrap_or('Gotham') # 'Gotham'
# When exception type is specified, other exceptions are not wrapped
# raising the original exception eagerly/immediately.
w = Result(person.get, 'city', 'other', 'another', suppress=KeyError)
Traceback (most recent call last):
...
TypeError: get expected at most 2 arguments, got 3
However the above example is better covered by the smart >> get
described below.
Smart get
operations
Given the following objects
person = {'name': 'John', 'age': 30}
colors = ['red', 'green', 'blue']
position = (1, 2, 6, 9)
class Person:
name = "John"
Ubiquitous get
operations using >>
operator
# On a `dict` gets by `key`
person >> get('name') # 'John'
person >> get('age') # 30
person >> get('city', default='Gotham') # Gotham
# On a `list` gets by `index`
colors >> get(0) # 'red'
colors >> get(1) # 'green'
colors >> get(2) # 'blue'
colors >> get(3) # None
colors >> get(4, "default") # 'default'
# On a `tuple` gets by `index`
position >> get(0) # 1
position >> get(1) # 2
# On a `class` gets by `attribute`
p = Person()
p >> get('name') # 'John'
p >> get('age', default=45) # 45
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
smarter-0.1.3.tar.gz
(6.7 kB
view details)
Built Distribution
File details
Details for the file smarter-0.1.3.tar.gz
.
File metadata
- Download URL: smarter-0.1.3.tar.gz
- Upload date:
- Size: 6.7 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/3.4.2 importlib_metadata/4.6.3 pkginfo/1.7.1 requests/2.26.0 requests-toolbelt/0.9.1 tqdm/4.62.0 CPython/3.9.6
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | 7aad9f71f7e6588618d5617679bc383df52478e15e9d3afff46faa80d778de1d |
|
MD5 | fac10549f5277a5475f27b20c7e17d8a |
|
BLAKE2b-256 | 978ca5cf0390ba38c8a18e52470783bf67f29fc4c768209c7d5e70baaaaef971 |
File details
Details for the file smarter-0.1.3-py3-none-any.whl
.
File metadata
- Download URL: smarter-0.1.3-py3-none-any.whl
- Upload date:
- Size: 6.6 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/3.4.2 importlib_metadata/4.6.3 pkginfo/1.7.1 requests/2.26.0 requests-toolbelt/0.9.1 tqdm/4.62.0 CPython/3.9.6
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | e327cfa7ddfd9167ab4852a2b46bd85d3c8f15dfe05c627b2cb1c8d8927a00ce |
|
MD5 | 9e8562764c71f83b8c769a716f841c8a |
|
BLAKE2b-256 | 3b2e4ec45dd1d183e2842e9dd3fca5a7f3861243c019ba81ae68a9db7a14611a |