https://github.com/ken-morel/comberload
Stop letting heavy, unnecessary package import block your python code from running!
https://github.com/ken-morel/comberload
comberload module-loader python thread threads
Last synced: 11 days ago
JSON representation
Stop letting heavy, unnecessary package import block your python code from running!
- Host: GitHub
- URL: https://github.com/ken-morel/comberload
- Owner: ken-morel
- License: mit
- Created: 2024-07-24T10:16:59.000Z (over 1 year ago)
- Default Branch: main
- Last Pushed: 2024-08-08T13:57:40.000Z (over 1 year ago)
- Last Synced: 2026-01-02T16:21:48.089Z (3 months ago)
- Topics: comberload, module-loader, python, thread, threads
- Language: Python
- Homepage: https://pypi.org/project/comberload
- Size: 118 KB
- Stars: 0
- Watchers: 1
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- Funding: .github/FUNDING.yml
- License: LICENSE
Awesome Lists containing this project
README
[](https://github.com/ken-morel/comberload/releases)
[](https://pypi.org/project/comberload)
[](https://pypi.org/project/comberload)
[](https://github.com/ken-morel/comberload/actions/workflows/test.yml)
[](https://coveralls.io/github/ken-morel/comberload?branch=main)
[](https://pypi.org/project/comberload)
[](https://pypi.org/project/comberload)
[](https://github.com/psf/black)
# comberload
I have recently built some little command line utility. It simply
receives a command, parses the command and evaluates it with syntax coloring
and autocompletion from [prompt_toolkit](https://pypi.org/project/prompt_toolkit).
But there was an issue, prompt_toolkit loaded **extremely**, I was wasting alot
time to load a package which was not indispensable to my app.
Comberloads, since comberload 1.0.2, were added two more methods to comberloader,
`failback` and `fail`
comberload permits you to register modules for queued loading and callbacks
if they are not loaded yet, howaworks?
a simple example for a function which uses prompt_toolkit.prompt but can
fallback to simple input
## fallback
```python
import comberload
@comberload("prompt_toolkit")
def get_input():
import prompt_toolkit
return prompt_toolkit.prompt()
@get_input.fallback
def fallback_get_input():
return input()
get_input() # immediately uses fallback
get_input() # abit later, uses prompt_toolkit
```
comberload uses a worker function running on a seperate thread to load the
modules as listed in the queue. Each time you call on `comberload("module1", "module2")`
the modules are queued and loaded.
## multiple fallbacks
You can easily queue fallbacks as:
```python
import comberload
comberload("mod1", "mod2")
def first():
pass
@first.fallback
@comberload("mod3")
def second():
pass
@second.fallback
def third():
pass
```
## fail
Use this handler in case the module fails to import
```python
import comberload
comberload("mod1", "mod2")
def first():
pass
@first.fail
def second():
print(first.error)
```
## failback
This is what I advice to use, it uses the default handler in case the module is
not loaded due to error or any else.
```python
import comberload
comberload("mod1", "mod2")
def first():
pass
@first.failback
def second():
pass
```
# callbacks
comberload also permits you to register callbacks when some modules finish loading
as
```python
import comberload
@comberload("mod", "mod2").fallback
def mod_and_mod2_loaded():
pass
```
## best practice
### Only what necessary
I will advice to load only what is necessary taking such an approach
## Loading in beginning
What I will advice is to queue all the required import at the begining of each
of your modules to permit all of them load without having to fallback.
```python
... # imports
import comberload
comberload("all", "my", "modules")
... # rest of code
```
Well, you're all set. Listening for issues at https://github.com/ken-morel/comberload ,
till then, good coding!