Huge News!Announcing our $40M Series B led by Abstract Ventures.Learn More
Socket
Sign inDemoInstall
Socket

hotfunc

Package Overview
Dependencies
Maintainers
1
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

hotfunc

Make functions hot-reloadable with a decorator

  • 0.0.1
  • PyPI
  • Socket score

Maintainers
1

hotfunc

This package provides a decorator for hot-reloading python functions.

It allows to redefine the function in the source code and see the changes immediately without restarting the program.

Installation

Install with pip

$ python -m pip install hotfunc

Usage

The following example uses the REPL, but hotfunc can be used in any python program.

Begin with importing the module and decorating the function that you want to hot-reload.

# myfile.py
from hotfunc import hotreload

name = "Mike"

@hotreload
def say():
    print(f"Hello world! My name is {name}.")

Start python REPL, import the source file and call your function.

>>> from myfile import say
>>> say()
Hello world! My name is Mike.

Now, without stopping the interpreter, edit the source file changing the decorated function's body.

# myfile.py
from hotfunc import hotreload

name = "Mike"

@hotreload
def say():
    print(f"Ciao mondo! Mi chiamo {name}.")

Switch back to REPL and call the function again.

>>> say()
Ciao mondo! Mi chiamo Mike.

As you can see, the function has been redefined, but its local environment (name variable defined outside the function) was preserved.

Caveats

When hot-reloading a function, its source file is read, definition found and the function itself redefined. Currenty it is done on every call, so is rather slow.

As of now, only top-level functions (defined at indentation level zero) are supported.

By default, exceptions raised when redefining or calling hot-reloaded functions are not re-raised. Instead, they are printed to stdout and the result of last successful function call is returned. This behaviour can be changed by enabling reraise flag:

@hotreload(reraise=True)
def myfunc():
    # ...

License

Copyright (c) 2023 Michał Szajbe

Licensed under The MIT License.

Keywords

FAQs


Did you know?

Socket

Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.

Install

Related posts

SocketSocket SOC 2 Logo

Product

  • Package Alerts
  • Integrations
  • Docs
  • Pricing
  • FAQ
  • Roadmap
  • Changelog

Packages

npm

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc