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

eventloop

Package Overview
Dependencies
Maintainers
1
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

eventloop

Abstraction layer for filesystem events

  • 0.0.24
  • PyPI
  • Socket score

Maintainers
1

================================================== eventloop: Abstraction layer for filesystem events

Eventloop uses any of: pyuv or PySide2 or PyQt5 installed in the system to provide callback interface for filesystem events. And also timers.

Package intended to be a building block for utility scripts for recompiling or pushing files or restarting tests.

pyuv is used preferably as it's most efficient. uv is a library that powers nodejs event loop.

Installing

eventloop can be installed via pip as follows:

::

pip install eventloop

Author

Stanislav Doronin mugisbrows@gmail.com

Usage

In simple case you can use on_file_changed decorator. It creates event loop, system watch and schedule, then connects them, then starts the loop and calls decorated function on filesystem events.

.. code-block:: python

from eventloop import on_file_changed

if __name__ == "__main__":
    @on_file_changed("/path/to/dir")
    def your_handler(file_path):
        print(file_path)

Decorator accepts include and exclude args (list of globs or names to include or exclude files from watch) and timeout arg (read about timeout below) and loop arg.

If you need to watch more than one path you need to create and start EventLoop explicitly and pass it to decorators.

.. code-block:: python

from eventloop import EventLoop, on_file_changed

if __name__ == "__main__":

    loop = EventLoop()

    @on_file_changed("/path/to/first/dir", loop=loop)
    def first_handler(file_path):
        print(file_path)

    @on_file_changed("/path/to/second/dir", loop=loop)
    def second_handler(file_path):
        print(file_path)

    loop.start()

For finer control over things you can use classes, first example can be rewriten as

.. code-block:: python

from eventloop import EventLoop, FileSystemWatch, Schedule, base

class Executor(base.Executor):
    def execute(self, file_path):
        print(file_path)

if __name__ == "__main__":
    loop = EventLoop()
    def on_change(file_path, event):
        schedule.append(file_path, timeout=1)
    watch = FileSystemWatch()
    watch.start("/path/to/dir", on_change)
    executor = Executor()
    schedule = Schedule(executor)
    loop.start()

Schedule caches (deduplicates) tasks appended within timeout interval, so for example three immediate consecutive changed events on same file end up in just one Executor.execute(task) call. on_file_changed decorator also uses Schedule to cache events.

Cli

You can use onchange script in command line to execute commands

.. code-block:: shell

python -m eventloop.onchange D:\dev\app -- echo FILE
onchange D:\dev\app -- echo FILE
onchange D:\dev\app -i *.cpp *.ui -e build --cwd D:\dev\app\build -- ninja ^&^& ctest

License

Eventloop is distributed under the terms of MIT license, check LICENSE file.

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