shimport
|
|
![]() |
Import utilities for python |
Import utilities for python
See pypi for available releases.
pip install shimport
>>> import shimport
>>> pathlib = shimport.lazy('pathlib')
>>> print(pathlib.Path('.').absolute)
<bound method Path.absolute of PosixPath('.')>
>>>
Suppose you want to retrieve just the function-definitions from a module namespace.
Using shimport.wrapper
let's you slice and dice:
>>> import shimport
>>> wrapper = shimport.wrapper("os.path")
>>> wrapper = wrapper.prune(only_functions=True)
>>> print(wrapper.namespace.keys())
dict_keys(['abspath', 'basename', 'commonpath', 'commonprefix', 'dirname', 'exists', 'expanduser', 'expandvars', 'getatime', 'getctime', 'getmtime', 'getsize', 'isabs', 'isdir', 'isfile', 'islink', 'ismount', 'join', 'lexists', 'normcase', 'normpath', 'realpath', 'relpath', 'samefile', 'sameopenfile', 'samestat', 'split', 'splitdrive', 'splitext'])
>>>
Some use-cases for shimport
involve scenarios that aren't great with declarative-style development.
So, there's good support for chaining (aka fluent) programming style as you can see below. (Note that indention here follows fluent-style that shed/black should support)
>>> import shimport
>>> (
... shimport
... .wrapper('os.path')
... .prune(only_data=True)
... .prune(val_predicate=lambda v: v=='/')
... .namespace.keys()
... )
dict_keys(['sep'])
>>>
>>> import typing, shimport
>>> (
... shimport
... .wrapper("os.path")
... .prune(
... exclude_private=True,
... filter_module_origin=True)
... )
<ModulesWrapper[os.path]>
>>>
Grab only the classes from the given namespace:
>>> import shimport
>>> namespace=shimport.wrapper('pathlib').filter(only_classes=True)
>>> assert 'Path' in namespace
# Grab only subclasses of a given class from the given namespace
#>>> plugins = shimport.wrapper('my_app.plugins').prune(...)
#>>>
Grab only the classes from the given namespace:
>>> import shimport
>>> namespace = shimport.wrapper('os.path').filter(only_data=True)
>>> assert 'sep' in namespace
>>>