Commit f42b8d51 authored by Vincent Pelletier's avatar Vincent Pelletier

Execute inode path expression and sense method with document owner.

Behaviour inspired by alarms.
parent 842bb92e
...@@ -33,6 +33,8 @@ from Products.ERP5Type.Tool.BaseTool import BaseTool ...@@ -33,6 +33,8 @@ from Products.ERP5Type.Tool.BaseTool import BaseTool
from Products.ERP5Type.TransactionalVariable import TransactionalResource from Products.ERP5Type.TransactionalVariable import TransactionalResource
from Products.ERP5Type import Permissions from Products.ERP5Type import Permissions
from Products.ERP5.mixin.timer_service import TimerServiceMixin from Products.ERP5.mixin.timer_service import TimerServiceMixin
from AccessControl.SecurityManagement import newSecurityManager, \
getSecurityManager, setSecurityManager
# TODO: Current API was designed to avoid compability issues in case it is # TODO: Current API was designed to avoid compability issues in case it is
# reimplemented using http://pypi.python.org/pypi/inotifyx # reimplemented using http://pypi.python.org/pypi/inotifyx
...@@ -70,8 +72,11 @@ class InotifyTool(TimerServiceMixin, BaseTool): ...@@ -70,8 +72,11 @@ class InotifyTool(TimerServiceMixin, BaseTool):
for x in self.objectValues() for x in self.objectValues()
if x.isEnabled() and current_node in x.getNodeList()] if x.isEnabled() and current_node in x.getNodeList()]
update_state_dict = {} update_state_dict = {}
original_security_manager = getSecurityManager()
for notify_id in notify_list: for notify_id in notify_list:
notify = self._getOb(notify_id) notify = self._getOb(notify_id)
newSecurityManager(None, notify.getWrappedOwner())
try:
inode_path = notify.getInodePath() inode_path = notify.getInodePath()
if inode_path: if inode_path:
path = notify.getPath() path = notify.getPath()
...@@ -100,6 +105,9 @@ class InotifyTool(TimerServiceMixin, BaseTool): ...@@ -100,6 +105,9 @@ class InotifyTool(TimerServiceMixin, BaseTool):
mask = IN_CREATE mask = IN_CREATE
events.append({'path': p, 'mask': mask}) events.append({'path': p, 'mask': mask})
getattr(notify, notify.getSenseMethodId())(events) getattr(notify, notify.getSenseMethodId())(events)
finally:
setSecurityManager(original_security_manager)
if update_state_dict: if update_state_dict:
TransactionalResource(tpc_finish=lambda txn: TransactionalResource(tpc_finish=lambda txn:
inotify_state_dict.update(update_state_dict)) inotify_state_dict.update(update_state_dict))
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment