Skip to content

v1.0.0

Compare
Choose a tag to compare
@ken-morel ken-morel released this 24 Jul 10:45
· 26 commits to main since this release
f3c9b69

Full Changelog: https://github.com/ken-morel/comberload/commits/v1.0.0

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.
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.

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

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:

import comberload


comberload("mod1", "mod2")
def first():
    pass

@first.fallback
@comberload("mod3")
def second():
    pass

@second.fallback
def third():
    pass

callbacks

comberload also permits you to register callbacks when some modules finish loading
as

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.

... # 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!