Skip to content

Commit

Permalink
fix: take into account the output directory when detecting changes
Browse files Browse the repository at this point in the history
  • Loading branch information
vberlier committed Nov 20, 2021
1 parent 86bcf15 commit a5749f4
Show file tree
Hide file tree
Showing 2 changed files with 41 additions and 6 deletions.
7 changes: 6 additions & 1 deletion mudkip/application.py
Original file line number Diff line number Diff line change
Expand Up @@ -379,7 +379,12 @@ def develop(
with build_manager(server_url=server_url, notebook_url=notebook_url):
self.build()

for event_batch in DirectoryWatcher(dirs, patterns, ignore_patterns):
for event_batch in DirectoryWatcher(
directories=dirs,
patterns=patterns,
ignore_patterns=ignore_patterns,
output_directory=self.config.output_dir,
):
with build_manager(event_batch):
self.build()

Expand Down
40 changes: 35 additions & 5 deletions mudkip/watch.py
Original file line number Diff line number Diff line change
@@ -1,12 +1,12 @@
from queue import Queue, Empty
from threading import Timer
from pathlib import Path
from functools import partial
from itertools import chain
from pathlib import Path
from queue import Empty, Queue
from threading import Timer
from typing import NamedTuple

from watchdog.observers import Observer
from watchdog.events import PatternMatchingEventHandler
from watchdog.observers import Observer


class EventBatch(NamedTuple):
Expand All @@ -20,6 +20,31 @@ def all_events(self):
return list(chain(self.moved, self.created, self.modified, self.deleted))


class EventHandler(PatternMatchingEventHandler):
def __init__(
self,
patterns=None,
ignore_patterns=None,
ignore_directories=False,
case_sensitive=False,
output_directory=None,
):
super().__init__(
patterns=patterns,
ignore_patterns=ignore_patterns,
ignore_directories=ignore_directories,
case_sensitive=case_sensitive,
)
self.output_directory = output_directory

def dispatch(self, event):
if self.output_directory:
if path := getattr(event, "dest_path", getattr(event, "src_path", None)):
if path.startswith(self.output_directory):
return
return super().dispatch(event)


class DirectoryWatcher:
def __init__(
self,
Expand All @@ -28,6 +53,7 @@ def __init__(
ignore_patterns=None,
ignore_directories=False,
case_sensitive=False,
output_directory=None,
recursive=True,
debounce_time=0.25,
queue_timeout=2,
Expand All @@ -37,6 +63,9 @@ def __init__(
self.ignore_patterns = ignore_patterns
self.ignore_directories = ignore_directories
self.case_sensitive = case_sensitive
self.output_directory = output_directory and str(
Path(output_directory).resolve()
)
self.recursive = recursive
self.debounce_time = debounce_time
self.queue_timeout = queue_timeout
Expand Down Expand Up @@ -66,11 +95,12 @@ def __iter__(self):
observer = Observer()

for directory in self.directories:
handler = PatternMatchingEventHandler(
handler = EventHandler(
self.patterns,
self.ignore_patterns,
self.ignore_directories,
self.case_sensitive,
self.output_directory,
)
handler.on_moved = partial(self.callback, self.moved)
handler.on_created = partial(self.callback, self.created)
Expand Down

0 comments on commit a5749f4

Please sign in to comment.