Added support to remove specific events from being logged, including keylogging.
diff --git a/userale/ale.py b/userale/ale.py
index db898d6..8dbae53 100644
--- a/userale/ale.py
+++ b/userale/ale.py
@@ -13,11 +13,11 @@
# limitations under the License.
from userale.version import __version__
+from userale.format import StructuredMessage
+
from PyQt5.QtCore import QObject, QEvent
import datetime
-import time
import logging
-from userale.format import StructuredMessage
_ = StructuredMessage
@@ -34,11 +34,11 @@
shutoff=[]):
"""
:param output: [str] The file or url path to which logs will be sent
- :param autostart: [bool] Should UserAle start auotmatically on app rendering
+ :param autostart: [bool] Should UserAle start automatically on app rendering
:param interval: [int] The minimum time interval in ms betweeen batch transmission of logs
:param user: [str] Identifier for the user of the application
:param version: [str] The application version
- :param details: [bool] Should detailed logs (key strokes, input/change values) be recorded
+ :param details: [bool] Should detailed logs (key strokes, input/change values) be recorded. Default is False
:param resolution: [int] Delay in ms between instances of high frequency logs like mouseovers, scrolls, etc
:param shutoff: [list] Turn off logging for specific events. For example, to ignore mousedown events, ['mousedown']
@@ -70,6 +70,7 @@
self.version = version
self.details = details
self.resolution = resolution
+ self.shutoff = shutoff
# Store logs
self.logs = []
@@ -83,19 +84,29 @@
# Drag/Drop - track duration
self.dd = datetime.datetime.now ()
- # Mapping of events to methods
+ # Mapping of all events to methods
self.map = {
QEvent.MouseButtonPress: {'mousedown': self.handleMouseEvents},
QEvent.MouseButtonRelease: {'mouseup': self.handleMouseEvents},
QEvent.MouseMove: {'mousemove': self.handleMouseEvents},
- QEvent.KeyPress: {'keypress': self.handleKeyEvents},
- QEvent.KeyRelease: {'keyrelease': self.handleKeyEvents},
QEvent.DragEnter: {'dragstart': self.handleDragEvents},
QEvent.DragLeave: {'dragleave': self.handleDragEvents},
QEvent.DragMove: {'dragmove': self.handleDragEvents},
- QEvent.Drop: {'dragdrop': self.handleDragEvents}
+ QEvent.Drop: {'dragdrop': self.handleDragEvents},
+ QEvent.KeyPress: {'keypress': self.handleKeyEvents},
+ QEvent.KeyRelease: {'keyrelease': self.handleKeyEvents}
}
+ # Turn on/off keylogging & remove specific filters
+ for key in list(self.map):
+ val = self.map [key]
+ name = list (val) [0]
+ # Handle shutoff
+ if name in self.shutoff:
+ del self.map [key]
+ if self.details and (name == 'keypress' or name == 'keyrelease'):
+ del self.map [key]
+
def eventFilter(self, object, event):
'''
:param object: [QObject] The object being watched.
diff --git a/userale/tests/testdragndrop.py b/userale/tests/testdragndrop.py
index 7b67335..542e33c 100644
--- a/userale/tests/testdragndrop.py
+++ b/userale/tests/testdragndrop.py
@@ -62,7 +62,8 @@
def test_drag ():
app = QApplication(sys.argv)
- ale = Ale ()
+ # Turn off mouse click's and keylogging
+ ale = Ale (shutoff=['mousedown', 'mouseup'], details=True)
# install globally
app.installEventFilter (ale)
ex = Example()