
from watchdog.events import FileSystemEventHandler
from watchdog.events import FileSystemEvent
import psutil
import os
import sys
import logging

logger = logging.getLogger('Botte')

class EventHandler(FileSystemEventHandler):
    def on_any_event(self, event: FileSystemEvent):
        logger.info('* Detected changes in: %s, reloading', (event.src_path))
        restart_file()

def restart_file():
    try:
        p = psutil.Process(os.getpid())
        for handler in p.open_files() + p.connections():
            os.close(handler.fd)
    except OSError:
        pass
    except Exception as e:
        logger.error(e)

    python = sys.executable
    
    if os.name == 'nt':
        os.execv(sys.executable, ['python'] + sys.argv)
    else:
        os.execl(python, python, *sys.argv)
