Skip to content

Commit 673ef4b

Browse files
authored
✨ feat: support force polling when watch files (#61)
1 parent 26e5d27 commit 673ef4b

File tree

1 file changed

+12
-6
lines changed

1 file changed

+12
-6
lines changed

src/watchfs/__main__.py

Lines changed: 12 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -20,9 +20,9 @@
2020
if TYPE_CHECKING:
2121
from watchfiles.filters import BaseFilter
2222

23-
BADGE_ADD = Badge("ADDED", Fore.black, Back.green)
24-
BADGE_DEL = Badge("DELETED", Fore.black, Back.red)
25-
BADGE_MOD = Badge("MODIFIED", Fore.black, Back.blue)
23+
BADGE_ADD = Badge("ADDED", Fore.black, Back.green) # type: ignore
24+
BADGE_DEL = Badge("DELETED", Fore.black, Back.red) # type: ignore
25+
BADGE_MOD = Badge("MODIFIED", Fore.black, Back.blue) # type: ignore
2626
CHANGE_TYPE_TO_BADGE = {
2727
Change.added: BADGE_ADD,
2828
Change.deleted: BADGE_DEL,
@@ -59,10 +59,10 @@ async def handle_removed(src_dir: Path, dst_dir: Path, changed: Path):
5959
dst.unlink()
6060

6161

62-
async def sync(src_dir: str, dst_dir: str, filter: BaseFilter):
62+
async def sync(src_dir: str, dst_dir: str, filter: BaseFilter, *, force_polling: bool = False):
6363
src = Path(src_dir).absolute()
6464
dst = Path(dst_dir).absolute()
65-
async for changes in awatch(src, watch_filter=filter):
65+
async for changes in awatch(src, watch_filter=filter, force_polling=force_polling):
6666
for change, path in changes:
6767
path = Path(path).absolute()
6868
print(f"{CHANGE_TYPE_TO_BADGE[change]} {path}")
@@ -105,6 +105,7 @@ async def main():
105105
parser.add_argument("sync_mapping", metavar="SRC_DIR:DST_DIR", type=str, nargs="+", help="Sync mapping file.")
106106
parser.add_argument("--exclude", type=str, help="Exclude directories or files, separated by comma.")
107107
parser.add_argument("-cc", "--enable-content-caching", action="store_true", help="Enable content caching.")
108+
parser.add_argument("--force-polling", action="store_true", help="Enable force polling.")
108109
args = parser.parse_args()
109110
parsed_sync_mapping: list[tuple[str, str]] = []
110111
for sync_src_with_dst in args.sync_mapping:
@@ -125,7 +126,12 @@ async def main():
125126
print(f"Starting watch {', '.join(f'{src_dst[0]} -> {src_dst[1]}' for src_dst in parsed_sync_mapping)}")
126127
print("Press Ctrl+C to exit.")
127128
try:
128-
await asyncio.gather(*[sync(src_dir, dst_dir, combined_filter) for src_dir, dst_dir in parsed_sync_mapping])
129+
await asyncio.gather(
130+
*[
131+
sync(src_dir, dst_dir, combined_filter, force_polling=args.force_polling)
132+
for src_dir, dst_dir in parsed_sync_mapping
133+
]
134+
)
129135
except asyncio.exceptions.CancelledError:
130136
print("Bye!")
131137

0 commit comments

Comments
 (0)