Fixes to enable an import of the watchdog module

This commit is contained in:
croneter 2020-12-18 18:08:39 +01:00
parent 750cf953da
commit ac4b6fc7b5
14 changed files with 111 additions and 46 deletions

View file

@ -88,7 +88,7 @@ Event Handler Classes
import os.path import os.path
import logging import logging
import re import re
from watchdog.utils.patterns import match_any_paths from .utils.patterns import match_any_paths
EVENT_TYPE_MOVED = 'moved' EVENT_TYPE_MOVED = 'moved'

View file

@ -54,8 +54,8 @@ Class Platforms Note
""" """
import warnings import warnings
from watchdog.utils import platform from ..utils import platform
from watchdog.utils import UnsupportedLibc from ..utils import UnsupportedLibc
if platform.is_linux(): if platform.is_linux():
try: try:

View file

@ -19,8 +19,8 @@ import queue
import threading import threading
from pathlib import Path from pathlib import Path
from watchdog.utils import BaseThread from ..utils import BaseThread
from watchdog.utils.bricks import SkipRepeatsQueue from ..utils.bricks import SkipRepeatsQueue
DEFAULT_EMITTER_TIMEOUT = 1 # in seconds. DEFAULT_EMITTER_TIMEOUT = 1 # in seconds.
DEFAULT_OBSERVER_TIMEOUT = 1 # in seconds. DEFAULT_OBSERVER_TIMEOUT = 1 # in seconds.

View file

@ -28,7 +28,7 @@ import threading
import unicodedata import unicodedata
import _watchdog_fsevents as _fsevents import _watchdog_fsevents as _fsevents
from watchdog.events import ( from ..events import (
FileDeletedEvent, FileDeletedEvent,
FileModifiedEvent, FileModifiedEvent,
FileCreatedEvent, FileCreatedEvent,
@ -39,7 +39,7 @@ from watchdog.events import (
DirMovedEvent DirMovedEvent
) )
from watchdog.observers.api import ( from .api import (
BaseObserver, BaseObserver,
EventEmitter, EventEmitter,
DEFAULT_EMITTER_TIMEOUT, DEFAULT_EMITTER_TIMEOUT,

View file

@ -26,7 +26,7 @@ import queue
import unicodedata import unicodedata
from threading import Thread from threading import Thread
from watchdog.events import ( from ..events import (
FileDeletedEvent, FileDeletedEvent,
FileModifiedEvent, FileModifiedEvent,
FileCreatedEvent, FileCreatedEvent,
@ -36,7 +36,7 @@ from watchdog.events import (
DirCreatedEvent, DirCreatedEvent,
DirMovedEvent DirMovedEvent
) )
from watchdog.observers.api import ( from .api import (
BaseObserver, BaseObserver,
EventEmitter, EventEmitter,
DEFAULT_EMITTER_TIMEOUT, DEFAULT_EMITTER_TIMEOUT,

View file

@ -70,14 +70,14 @@ import os
import threading import threading
from .inotify_buffer import InotifyBuffer from .inotify_buffer import InotifyBuffer
from watchdog.observers.api import ( from .api import (
EventEmitter, EventEmitter,
BaseObserver, BaseObserver,
DEFAULT_EMITTER_TIMEOUT, DEFAULT_EMITTER_TIMEOUT,
DEFAULT_OBSERVER_TIMEOUT DEFAULT_OBSERVER_TIMEOUT
) )
from watchdog.events import ( from ..events import (
DirDeletedEvent, DirDeletedEvent,
DirModifiedEvent, DirModifiedEvent,
DirMovedEvent, DirMovedEvent,

View file

@ -15,9 +15,9 @@
# limitations under the License. # limitations under the License.
import logging import logging
from watchdog.utils import BaseThread from ..utils import BaseThread
from watchdog.utils.delayed_queue import DelayedQueue from ..utils.delayed_queue import DelayedQueue
from watchdog.observers.inotify_c import Inotify from .inotify_c import Inotify
logger = logging.getLogger(__name__) logger = logging.getLogger(__name__)

View file

@ -23,7 +23,7 @@ import ctypes
import ctypes.util import ctypes.util
from functools import reduce from functools import reduce
from ctypes import c_int, c_char_p, c_uint32 from ctypes import c_int, c_char_p, c_uint32
from watchdog.utils import UnsupportedLibc from ..utils import UnsupportedLibc
def _load_libc(): def _load_libc():

View file

@ -67,7 +67,7 @@ Collections and Utility Classes
""" """
from watchdog.utils import platform from ..utils import platform
import threading import threading
import errno import errno
@ -78,16 +78,16 @@ import select
from pathlib import Path from pathlib import Path
from watchdog.observers.api import ( from .api import (
BaseObserver, BaseObserver,
EventEmitter, EventEmitter,
DEFAULT_OBSERVER_TIMEOUT, DEFAULT_OBSERVER_TIMEOUT,
DEFAULT_EMITTER_TIMEOUT DEFAULT_EMITTER_TIMEOUT
) )
from watchdog.utils.dirsnapshot import DirectorySnapshot from ..utils.dirsnapshot import DirectorySnapshot
from watchdog.events import ( from ..events import (
DirMovedEvent, DirMovedEvent,
DirDeletedEvent, DirDeletedEvent,
DirCreatedEvent, DirCreatedEvent,

View file

@ -38,15 +38,15 @@ import os
import threading import threading
from functools import partial from functools import partial
from watchdog.utils.dirsnapshot import DirectorySnapshot, DirectorySnapshotDiff from ..utils.dirsnapshot import DirectorySnapshot, DirectorySnapshotDiff
from watchdog.observers.api import ( from .api import (
EventEmitter, EventEmitter,
BaseObserver, BaseObserver,
DEFAULT_OBSERVER_TIMEOUT, DEFAULT_OBSERVER_TIMEOUT,
DEFAULT_EMITTER_TIMEOUT DEFAULT_EMITTER_TIMEOUT
) )
from watchdog.events import ( from ..events import (
DirMovedEvent, DirMovedEvent,
DirDeletedEvent, DirDeletedEvent,
DirCreatedEvent, DirCreatedEvent,

View file

@ -20,7 +20,7 @@ import threading
import os.path import os.path
import time import time
from watchdog.events import ( from ..events import (
DirCreatedEvent, DirCreatedEvent,
DirDeletedEvent, DirDeletedEvent,
DirMovedEvent, DirMovedEvent,
@ -33,14 +33,14 @@ from watchdog.events import (
generate_sub_created_events, generate_sub_created_events,
) )
from watchdog.observers.api import ( from api import (
EventEmitter, EventEmitter,
BaseObserver, BaseObserver,
DEFAULT_OBSERVER_TIMEOUT, DEFAULT_OBSERVER_TIMEOUT,
DEFAULT_EMITTER_TIMEOUT DEFAULT_EMITTER_TIMEOUT
) )
from watchdog.observers.winapi import ( from winapi import (
read_events, read_events,
get_directory_handle, get_directory_handle,
close_directory_handle, close_directory_handle,

View file

@ -46,8 +46,8 @@ import signal
import subprocess import subprocess
import time import time
from watchdog.utils import echo from ..utils import echo
from watchdog.events import PatternMatchingEventHandler from ..events import PatternMatchingEventHandler
class Trick(PatternMatchingEventHandler): class Trick(PatternMatchingEventHandler):

View file

@ -35,7 +35,6 @@ Classes
.. autoclass:: OrderedSet .. autoclass:: OrderedSet
""" """
import queue import queue
@ -100,3 +99,69 @@ class SkipRepeatsQueue(queue.Queue):
if item is self._last_item: if item is self._last_item:
self._last_item = None self._last_item = None
return item return item
class OrderedSetQueue(queue.Queue):
"""Thread-safe implementation of an ordered set queue.
Disallows adding a duplicate item while maintaining the
order of items in the queue. The implementation leverages
locking already implemented in the base class
redefining only the primitives. Since the internal queue
is not replaced, the order is maintained. The set is used
merely to check for the existence of an item.
Queued items must be immutable and hashable so that they can be used
as dictionary keys. You must implement **only read-only properties** and
the :meth:`Item.__hash__()`, :meth:`Item.__eq__()`, and
:meth:`Item.__ne__()` methods for items to be hashable.
An example implementation follows::
class Item(object):
def __init__(self, a, b):
self._a = a
self._b = b
@property
def a(self):
return self._a
@property
def b(self):
return self._b
def _key(self):
return (self._a, self._b)
def __eq__(self, item):
return self._key() == item._key()
def __ne__(self, item):
return self._key() != item._key()
def __hash__(self):
return hash(self._key())
:author: lalinsky@gmail.com (Lukáš Lalinský)
:url: http://stackoverflow.com/questions/1581895/how-check-if-a-task-is-already-in-python-queue
"""
def _init(self, maxsize):
queue.Queue._init(self, maxsize)
self._set_of_items = set()
def _put(self, item):
if item not in self._set_of_items:
queue.Queue._put(self, item)
self._set_of_items.add(item)
else:
# `put` increments `unfinished_tasks` even if we did not put
# anything into the queue here
self.unfinished_tasks -= 1
def _get(self):
item = queue.Queue._get(self)
self._set_of_items.remove(item)
return item

View file

@ -32,8 +32,8 @@ import logging
from io import StringIO from io import StringIO
from argh import arg, aliases, ArghParser, expects_obj from argh import arg, aliases, ArghParser, expects_obj
from watchdog.version import VERSION_STRING from .version import VERSION_STRING
from watchdog.utils import WatchdogShutdown, load_class from .utils import WatchdogShutdown, load_class
logging.basicConfig(level=logging.INFO) logging.basicConfig(level=logging.INFO)
@ -162,7 +162,7 @@ def tricks_from(args):
:param args: :param args:
Command line argument options. Command line argument options.
""" """
from watchdog.observers import Observer from .observers import Observer
add_to_sys_path(path_split(args.python_path)) add_to_sys_path(path_split(args.python_path))
observers = [] observers = []
@ -312,8 +312,8 @@ def log(args):
:param args: :param args:
Command line argument options. Command line argument options.
""" """
from watchdog.utils import echo from .utils import echo
from watchdog.tricks import LoggerTrick from .tricks import LoggerTrick
if args.trace: if args.trace:
echo.echo_class(LoggerTrick) echo.echo_class(LoggerTrick)
@ -324,23 +324,23 @@ def log(args):
ignore_patterns=ignore_patterns, ignore_patterns=ignore_patterns,
ignore_directories=args.ignore_directories) ignore_directories=args.ignore_directories)
if args.debug_force_polling: if args.debug_force_polling:
from watchdog.observers.polling import PollingObserver as Observer from .observers.polling import PollingObserver as Observer
elif args.debug_force_kqueue: elif args.debug_force_kqueue:
from watchdog.observers.kqueue import KqueueObserver as Observer from .observers.kqueue import KqueueObserver as Observer
elif args.debug_force_winapi_async: elif args.debug_force_winapi_async:
from watchdog.observers.read_directory_changes_async import\ from .observers.read_directory_changes_async import\
WindowsApiAsyncObserver as Observer WindowsApiAsyncObserver as Observer
elif args.debug_force_winapi: elif args.debug_force_winapi:
from watchdog.observers.read_directory_changes import\ from .observers.read_directory_changes import\
WindowsApiObserver as Observer WindowsApiObserver as Observer
elif args.debug_force_inotify: elif args.debug_force_inotify:
from watchdog.observers.inotify import InotifyObserver as Observer from .observers.inotify import InotifyObserver as Observer
elif args.debug_force_fsevents: elif args.debug_force_fsevents:
from watchdog.observers.fsevents import FSEventsObserver as Observer from .observers.fsevents import FSEventsObserver as Observer
else: else:
# Automatically picks the most appropriate observer for the platform # Automatically picks the most appropriate observer for the platform
# on which it is running. # on which it is running.
from watchdog.observers import Observer from .observers import Observer
observer = Observer(timeout=args.timeout) observer = Observer(timeout=args.timeout)
observe_with(observer, handler, args.directories, args.recursive) observe_with(observer, handler, args.directories, args.recursive)
@ -420,15 +420,15 @@ def shell_command(args):
:param args: :param args:
Command line argument options. Command line argument options.
""" """
from watchdog.tricks import ShellCommandTrick from .tricks import ShellCommandTrick
if not args.command: if not args.command:
args.command = None args.command = None
if args.debug_force_polling: if args.debug_force_polling:
from watchdog.observers.polling import PollingObserver as Observer from .observers.polling import PollingObserver as Observer
else: else:
from watchdog.observers import Observer from .observers import Observer
patterns, ignore_patterns = parse_patterns(args.patterns, patterns, ignore_patterns = parse_patterns(args.patterns,
args.ignore_patterns) args.ignore_patterns)
@ -510,11 +510,11 @@ def auto_restart(args):
""" """
if args.debug_force_polling: if args.debug_force_polling:
from watchdog.observers.polling import PollingObserver as Observer from .observers.polling import PollingObserver as Observer
else: else:
from watchdog.observers import Observer from .observers import Observer
from watchdog.tricks import AutoRestartTrick from .tricks import AutoRestartTrick
import signal import signal
if not args.directories: if not args.directories: