Intermediate work commit.
[straw/fork.git] / straw / FeedDiscovery.py
blob3531665e82d53db0ad9965fd31b46bed64b57125
1 """
3 """
5 __copyright__ = "Copyright (c) 2002-2005 Free Software Foundation, Inc."
6 __license__ = """
7 Straw is free software; you can redistribute it and/or modify it under the
8 terms of the GNU General Public License as published by the Free Software
9 Foundation; either version 2 of the License, or (at your option) any later
10 version.
12 Straw is distributed in the hope that it will be useful, but WITHOUT ANY
13 WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR
14 A PARTICULAR PURPOSE. See the GNU General Public License for more details.
16 You should have received a copy of the GNU General Public License along with
17 this program; if not, write to the Free Software Foundation, Inc., 59 Temple
18 Place - Suite 330, Boston, MA 02111-1307, USA. """
20 from straw.JobManager import Job, TaskResult, TaskThread, TaskInfo, ThreadPoolJobHandler
21 import time
22 from threading import Lock
23 import feedfinder
25 class FeedDiscoveryJobHandler(ThreadPoolJobHandler):
26 job_id = "feed-discovery"
28 def __init__(self, job):
29 ThreadPoolJobHandler.__init__(self, job)
31 self.pool_size = 1
32 self.result_class = FeedDiscoveryTaskResult
33 self.task_class = FeedDiscoveryTaskThread
35 def _split(self):
36 ti = TaskInfo(1, { "url" : self.job.data })
37 self.task_queue.put(ti)
39 def _prepare_result(self):
40 list = []
42 while not self.result_queue.empty():
43 list.append(self.result_queue.get())
45 return list
47 class FeedDiscoveryTaskResult(TaskResult):
48 def __init__(self, task_info, result):
49 self.task_info = task_info
50 self.result = result
52 def get(self):
53 raise NotImplementedError
55 class FeedDiscoveryTaskThread(TaskThread):
56 def __init__(self, handler, task_queue, result_queue):
57 TaskThread.__init__(self, handler, task_queue, result_queue)
59 def _process(self, task):
60 url = task.data["url"]
62 import feedfinder
63 return feedfinder.feeds(url, True)
65 import straw.JobManager as JobManager
67 JobManager.register_handler(FeedDiscoveryJobHandler)
69 def discover(url, observers):
70 update = Job("feed-discovery")
71 update.data = url
72 update.observers = observers
73 JobManager.start_job(update)