Author: dmeyer
Date: Thu Jun 28 18:50:47 2007
New Revision: 2743
Modified:
trunk/WIP/beacon2/src/server/crawl.py
Log:
crawler can handle queries if async return
Modified: trunk/WIP/beacon2/src/server/crawl.py
==============================================================================
--- trunk/WIP/beacon2/src/server/crawl.py (original)
+++ trunk/WIP/beacon2/src/server/crawl.py Thu Jun 28 18:50:47 2007
@@ -177,6 +177,7 @@
# Internal functions - INotify
# -------------------------------------------------------------------------
+ @kaa.notifier.yield_execution(lock=True)
def _inotify_event(self, mask, name, *args):
"""
Callback for inotify.
@@ -193,6 +194,9 @@
log.info('inotify: event %s for "%s"', mask, name)
item = self.db.query(filename=name)
+ if isinstance(item, kaa.notifier.InProgress):
+ yield item
+ item = item()
if not item._beacon_parent.filename in self.monitoring:
# that is a different monitor, ignore it
# FIXME: this is a bug (missing feature) in inotify
@@ -214,6 +218,9 @@
if mask & INotify.MOVE and args and item._beacon_id:
# Move information with source and destination
move = self.db.query(filename=args[0])
+ if isinstance(move, kaa.notifier.InProgress):
+ yield move
+ move = move()
if move._beacon_name.startswith('.'):
# move to hidden file, delete
log.info('inotify: move to hidden file, delete')
@@ -461,6 +468,9 @@
self.monitoring.add(directory.filename, use_inotify=False)
dirname = os.path.realpath(directory.filename)
directory = self.db.query(filename=dirname)
+ if isinstance(directory, kaa.notifier.InProgress):
+ yield directory
+ directory = directory()
async = parse(self.db, directory, check_image=self._startup)
if isinstance(async, kaa.notifier.InProgress):
yield async
@@ -471,8 +481,12 @@
# iterate through the files
subdirs = []
counter = 0
-
- for child in self.db.query(parent=directory):
+
+ result = self.db.query(parent=directory)
+ if isinstance(result, kaa.notifier.InProgress):
+ yield result
+ result = result()
+ for child in result:
if child._beacon_isdir:
# add directory to list of files to return
subdirs.append(child)
@@ -494,10 +508,13 @@
if not subdirs:
# No subdirectories that need to be checked. Add some extra
# attributes based on the found items (recursive back to parents)
- self._add_directory_attributes(directory)
+ result = self._add_directory_attributes(directory)
+ if isinstance(result, kaa.notifier.InProgress):
+ yield result
yield subdirs
+ @kaa.notifier.yield_execution()
def _add_directory_attributes(self, directory):
"""
Add some extra attributes for a directory recursive. This function
@@ -508,7 +525,11 @@
check_attr = data.keys()[:]
check_attr.remove('length')
- for child in self.db.query(parent=directory):
+ result = self.db.query(parent=directory)
+ if isinstance(result, kaa.notifier.InProgress):
+ yield result
+ result = result()
+ for child in result:
data['length'] += child._beacon_data.get('length', 0) or 0
for attr in check_attr:
value = child._beacon_data.get(attr, data[attr])
@@ -552,4 +573,6 @@
# check parent
if directory._beacon_parent.filename in self.monitoring:
- self._add_directory_attributes(directory._beacon_parent)
+ result = self._add_directory_attributes(directory._beacon_parent)
+ if isinstance(result, kaa.notifier.InProgress):
+ yield result
-------------------------------------------------------------------------
This SF.net email is sponsored by DB2 Express
Download DB2 Express C - the FREE version of DB2 express and take
control of your XML. No limits. Just data. Click to get it now.
http://sourceforge.net/powerbar/db2/
_______________________________________________
Freevo-cvslog mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/freevo-cvslog