1
0
Fork 0
slidge-whatsapp/watcher.py

46 lines
1.4 KiB
Python
Executable File

"""
Hot-reloader for both go and python files (in the docker-compose dev setup)
"""
import os
import subprocess
import sys
from watchdog.observers import Observer
from watchdog.tricks import AutoRestartTrick, ShellCommandTrick
if __name__ == "__main__":
observer = Observer()
auto_restart = AutoRestartTrick(
command=["python", "-m", "slidge"] + sys.argv[2:] if len(sys.argv) > 2 else [],
patterns=["*.py"],
ignore_patterns=["generated/*.py"],
)
gopy_cmd = "gopy build -output=generated -no-make=true ."
gopy_build = ShellCommandTrick(
shell_command='cd "$(dirname ${watch_src_path})" && '
+ gopy_cmd
+ ' && touch "$(dirname ${watch_src_path})/__init__.py"',
patterns=["*.go"],
ignore_patterns=["generated/*.go"],
drop_during_process=True,
)
path = sys.argv[1] if len(sys.argv) > 1 else "."
for p in path.split(":"):
observer.schedule(auto_restart, p, recursive=True)
observer.schedule(gopy_build, p, recursive=True)
observer.start()
try:
for p in path.split(":"):
for dirpath, _, filenames in os.walk(p):
if "go.mod" in filenames:
subprocess.run(gopy_cmd, shell=True, cwd=dirpath)
auto_restart.start()
while observer.is_alive():
observer.join(1)
finally:
observer.stop()
observer.join()