This is a quick hack so that anyone else who runs this from source doesn't have to spend
the time I spent tracking down why directory.list failed silently.
There are two options that are much cleaner that come to mind:
- Subclass ImportException so as to differentiate missing requirements from
parse errors etc.
- Provide a method for plugins to list their requirements, so that
the loader can be the one to use imp.find_module().
Using imp.find_module() seems wise, either way.
Previously any exception that made it all the way up to the default
exception handler would be expected to take (errno, string) pairs,
as is the python standard for exceptions thrown by system calls.
All exceptions that don't take enough arguments throw a ValueError.
Based on the errno tested, it appears that this code
is meant to silently ignore when a socket receives a SIGINT (from
e.g. a timeout.) This seems to be the only instance where handling
EINTR in this manner is desired - though having this bubble up this
far seems odd.
The existing code would also handle any other EINTR, though, which
includes those raised by OSError, WindowsError, and
anything that subclasses EnvironmentError, barring KeyboardError
because it is handled separately. This is a bug as there is already
some use of the signals module elsewhere in CouchPotato.py to trap
SIGINT and SIGTERM outside of system calls, and most of these other
EINTRs should be handled by code lower down the stack.
A default exception handler is also added, so that unhandled
exceptions will be logged, and raised.