46 lines
1.4 KiB
Python
Executable File
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()
|