Author: dmeyer
Date: Mon Sep 24 17:06:48 2007
New Revision: 2838

Log:
make it work as standalone module

Added:
   trunk/feedmanager/TODO
Modified:
   trunk/feedmanager/bin/kaa-feedmanager
   trunk/feedmanager/setup.py
   trunk/feedmanager/src/__init__.py
   trunk/feedmanager/src/core.py
   trunk/feedmanager/src/manager.py
   trunk/feedmanager/src/rss.py

Added: trunk/feedmanager/TODO
==============================================================================
--- (empty file)
+++ trunk/feedmanager/TODO      Mon Sep 24 17:06:48 2007
@@ -0,0 +1,15 @@
+- Add password code
+- Improve RSS feed for better video and audio feed support
+  https://feedguide.participatoryculture.org/front
+- Torrent downloader (needed for some democracy feeds)
+- Add parallel download function
+- make sure update() is called only once at a time
+- add username / password stuff to rpc or config
+
+External plugins
+- Flickr image feed
+- Gallery support
+- Youtube / Stage6 plugin
+
+Known Bugs
+- Unhanlded InProgress exception after download

Modified: trunk/feedmanager/bin/kaa-feedmanager
==============================================================================
--- trunk/feedmanager/bin/kaa-feedmanager       (original)
+++ trunk/feedmanager/bin/kaa-feedmanager       Mon Sep 24 17:06:48 2007
@@ -1,12 +1,12 @@
 #!/usr/bin/python
 # -*- coding: iso-8859-1 -*-
 # -----------------------------------------------------------------------------
-# beacon-feedmanager
+# kaa-feedmanager
 # -----------------------------------------------------------------------------
 # $Id$
 #
 # -----------------------------------------------------------------------------
-# kaa.beacon - A virtual filesystem with metadata
+# kaa.feedmanager - Manage RSS/Atom Feeds
 # Copyright (C) 2007 Dirk Meyer
 #
 # First Edition: Dirk Meyer <[EMAIL PROTECTED]>
@@ -31,23 +31,27 @@
 # -----------------------------------------------------------------------------
 
 # python imports
+import os
 import sys
+import logging
 
 # kaa imports
 import kaa.notifier
 import kaa.beacon
+import kaa.feedmanager
 
-kaa.beacon.connect()
+kaa.feedmanager.set_database(os.path.expanduser('~/.beacon'))
+logging.getLogger('feedmanager').setLevel(logging.DEBUG)
 
 def help():
-    print 'beacon-feedmanager'
+    print 'kaa-feedmanager'
     print 'options:'
     print '-l          list all feeds'
     print '-a options  add a feed, see examples below'
     print '-r id       remove feed with the given id'
     print '-u [ id ]   update all feeds or only the feed with the given id'
     print
-    print 'The beacon-feedmanager adds feeds like audio and video podcasts'
+    print 'The kaa-feedmanager adds feeds like audio and video podcasts'
     print 'to the filesystem. It either downloads the files or just adds'
     print 'the url into the directory. The later is hidden from the normal'
     print 'filessytem, only beacon clients such as Freevo can see it.'
@@ -64,11 +68,11 @@
     print
     print 'Example:'
     print 'download all entries and keep old one'
-    print 'beacon-feedmanager -a http://url /media/mypodcasts'
+    print 'kaa-feedmanager -a http://url /media/mypodcasts'
     print 'link to all entries and not keep old one'
-    print 'beacon-feedmanager -a http://url /media/mypodcasts False 0 False'
+    print 'kaa-feedmanager -a http://url /media/mypodcasts False 0 False'
     print 'download up to 4 entries and delete old one'
-    print 'beacon-feedmanager -a http://url /media/mypodcasts True 4 False'
+    print 'kaa-feedmanager -a http://url /media/mypodcasts True 4 False'
     print
     sys.exit(0)
     
@@ -76,31 +80,31 @@
     help()
     
 if sys.argv[1] in ('--update', '-u'):
-    if len(sys.argv) > 2:
-        def update(feeds, id):
-            for f in feeds:
-                if f.get('id') == id:
-                    f.update().connect(sys.exit)
-                    break
-            else:
-                print 'feed not found'
-                sys.exit(0)
 
-        kaa.beacon.list_feeds().connect(update, int(sys.argv[2]))
-    else:
-        kaa.beacon.update_feeds().connect(sys.exit)
-
-elif sys.argv[1] in ('--list', '-l'):
-    def show(feeds):
-        for f in feeds:
-            print 'Feed %d' % f['id']
-            for key in ('id', 'url', 'directory', 'download', 'num', 'keep'):
-                print '  %10s = %s' % (key, f[key])
-            print
-        sys.exit(0)
-    kaa.beacon.list_feeds().connect(show)
+    @kaa.notifier.yield_execution()
+    def update():
+        n = None
+        if len(sys.argv) > 2:
+            n = int(sys.argv[2])
+
+        for f in kaa.feedmanager.list_feeds():
+            if n is None or n == f.get('id'):
+                yield f.update()
+
+    kaa.beacon.connect()
+    update().connect(sys.exit)
+    kaa.notifier.loop()
+    sys.exit(0)
+    
+if sys.argv[1] in ('--list', '-l'):
+    for f in kaa.feedmanager.list_feeds():
+        print 'Feed %d' % f['id']
+        for key in ('id', 'url', 'directory', 'download', 'num', 'keep'):
+            print '  %10s = %s' % (key, f[key])
+        print
+    sys.exit(0)
 
-elif sys.argv[1] in ('--add', '-a') and len(sys.argv) > 3:
+if sys.argv[1] in ('--add', '-a') and len(sys.argv) > 3:
     url = sys.argv[2]
     destdir = sys.argv[3]
     if len(sys.argv) > 4:
@@ -115,23 +119,19 @@
             keep = True
         elif sys.argv[6].lower() in ('false', 'no'):
             keep = False
-        kaa.beacon.add_feed(url, destdir, download, num, 
keep).connect(sys.exit)
+        kaa.feedmanager.add_feed(url, destdir, download, num, keep)
     else:
-        kaa.beacon.add_feed(url, destdir).connect(sys.exit)
+        kaa.feedmanager.add_feed(url, destdir)
+    sys.exit(0)
 
-elif sys.argv[1] in ('--remove', '-r') and len(sys.argv) > 2:
-    def remove(feeds, id):
-        for f in feeds:
-            if f.get('id') == id:
-                f.remove().connect(sys.exit)
-                break
-        else:
-            print 'feed not found'
-            sys.exit(0)
-            
-    kaa.beacon.list_feeds().connect(remove, int(sys.argv[2]))
+if sys.argv[1] in ('--remove', '-r') and len(sys.argv) > 2:
+    for f in kaa.feedmanager.list_feeds():
+        if f.get('id') == int(sys.argv[2]):
+            f.remove()
+            break
+    else:
+        print 'feed not found'
+    sys.exit(0)
     
-else:
-    help()
+help()
     
-kaa.notifier.loop()

Modified: trunk/feedmanager/setup.py
==============================================================================
--- trunk/feedmanager/setup.py  (original)
+++ trunk/feedmanager/setup.py  Mon Sep 24 17:06:48 2007
@@ -41,6 +41,7 @@
       version      = '0.1.0',
       license      = 'LGPL',
       summary      = 'RSS/Atom Feedmanager',
+      scripts     = [ 'bin/kaa-feedmanager' ],
       rpminfo      = {
           'requires':       'python-kaa-beacon >= 0.1.0',
           'build_requires': 'python-kaa-beacon >= 0.1.0'

Modified: trunk/feedmanager/src/__init__.py
==============================================================================
--- trunk/feedmanager/src/__init__.py   (original)
+++ trunk/feedmanager/src/__init__.py   Mon Sep 24 17:06:48 2007
@@ -5,7 +5,7 @@
 # $Id$
 #
 # -----------------------------------------------------------------------------
-# kaa.beacon.server - A virtual filesystem with metadata
+# kaa.feedmanager - Manage RSS/Atom Feeds
 # Copyright (C) 2007 Dirk Meyer
 #
 # First Edition: Dirk Meyer <[EMAIL PROTECTED]>
@@ -28,22 +28,6 @@
 # 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
 #
 # -----------------------------------------------------------------------------
-#
-# TODO
-#
-# - Improve RSS feed for better video and audio feed support
-#   https://feedguide.participatoryculture.org/front
-# - Torrent downloader (needed for some democracy feeds)
-# - Add parallel download function
-# - make sure update() is called only once at a time
-# - add username / password stuff to rpc or config
-#
-# External plugins
-# - Flickr image feed
-# - Gallery support
-# - Youtube / Stage6 plugin
-#
-# ##################################################################
 
 # python imports
 import os
@@ -56,56 +40,48 @@
 import core
 import rss
 
[EMAIL PROTECTED]('feeds.update')
-def update(id=None):
-    """
-    Update feed with given id or all if id is None
-    """
-    if id == None:
-        return manager.update()
-    for c in manager.list_feeds():
-        if id == c.id:
-            return c.update()
-    return False
-
+class Feed(dict):
+    def remove(self):
+        """
+        Remove feed
+        """
+        for c in manager.list_feeds():
+            if self.get('id') == c.id:
+                manager.remove_feed(c)
+                return True
+        return False
+
+    def update(self):
+        """
+        Update feed
+        """
+        for c in manager.list_feeds():
+            if self.get('id') == c.id:
+                return c.update()
+        return False
 
[EMAIL PROTECTED]('feeds.list')
 def list_feeds():
     """
     List all feeds. Returns a list of dicts.
     """
     feeds = []
     for c in manager.list_feeds():
-        feeds.append(c.get_config())
+        feeds.append(Feed(c.get_config()))
     return feeds
 
 
[EMAIL PROTECTED]('feeds.add')
 def add_feed(url, destdir, download=True, num=0, keep=True):
     """
     Add a new feed.
     """
-    return manager.add_feed(url, destdir, download, num, keep).get_config()
-
-
[EMAIL PROTECTED]('feeds.remove')
-def remove_feed(id):
-    """
-    Remove feed with given id.
-    """
-    for c in manager.list_feeds():
-        if id == c.id:
-            manager.remove_feed(c)
-            return True
-    return False
+    return Feed(manager.add_feed(url, destdir, download, num, 
keep).get_config())
 
 
 def set_database(database):
     """
     Set the database. Called by server at startup.
     """
-    core.Feed._db = database
-    core.Feed.IMAGEDIR = os.path.join(database.get_directory(), 'images')
+    core.Feed.IMAGEDIR = os.path.join(database, 'images')
     if not os.path.isdir(core.Feed.IMAGEDIR):
         os.makedirs(core.Feed.IMAGEDIR)
-    manager.init(os.path.join(database.get_directory(), 'feeds.xml'))
+    manager.init(os.path.join(database, 'feeds.xml'))

Modified: trunk/feedmanager/src/core.py
==============================================================================
--- trunk/feedmanager/src/core.py       (original)
+++ trunk/feedmanager/src/core.py       Mon Sep 24 17:06:48 2007
@@ -5,7 +5,7 @@
 # $Id$
 #
 # -----------------------------------------------------------------------------
-# kaa.beacon.server - A virtual filesystem with metadata
+# kaa.feedmanager - Manage RSS/Atom Feeds
 # Copyright (C) 2007 Dirk Meyer
 #
 # First Edition: Dirk Meyer <[EMAIL PROTECTED]>
@@ -41,13 +41,14 @@
 # kaa imports
 import kaa.notifier
 import kaa.notifier.url
+import kaa.beacon
 from kaa.strutils import str_to_unicode, unicode_to_str
 
 # get manager module
 import manager
 
 # get logging object
-log = logging.getLogger('beacon.feed')
+log = logging.getLogger('feedmanager')
 
 # ##################################################################
 # some generic entry/feed stuff
@@ -73,7 +74,6 @@
 
 class Feed(object):
 
-    _db = None
     NEXT_ID = 0
     IMAGEDIR = None
 
@@ -130,7 +130,7 @@
                     continue
                 fname = unicode_to_str(node.getAttribute('filename')) or None
                 self._entries.append((node.getAttribute('url'), fname))
-
+        
 
     def _writexml(self, node):
         """
@@ -152,7 +152,7 @@
             e.setAttribute('url', url)
             if fname:
                 e.setAttribute('filename', str_to_unicode(fname))
-            node.appendChild(e)
+            d.appendChild(e)
 
 
     @kaa.notifier.yield_execution()
@@ -182,7 +182,7 @@
         log.info('update feed %s', self.url)
 
         # get directory information
-        beacondir = self._db.query(filename=self.dirname)
+        beacondir = kaa.beacon.get(self.dirname)
         listing = beacondir.list()
         if isinstance(listing, kaa.notifier.InProgress):
             yield listing
@@ -207,12 +207,9 @@
                 # already in beacon list
                 pass
             elif not self._download:
-                # add to beacon
-                while self._db.read_lock.is_locked():
-                    yield self._db.read_lock.yield_unlock()
                 # use url as name
                 entry['name'] = unicode_to_str(entry.url)
-                i = self._db.add_object(parent=beacondir, **entry)
+                i = kaa.beacon.add_item(parent=beacondir, **entry)
             else:
                 # download
                 filename = os.path.join(self.dirname, entry.basename)
@@ -234,7 +231,7 @@
                         continue
 
                 if os.path.isfile(filename):
-                    item = self._db.query(filename=filename)
+                    item = kaa.beacon.get(filename)
                     if not item.scanned():
                         async = item.scan()
                         if isinstance(async, kaa.notifier.InProgress):
@@ -276,7 +273,7 @@
             return
 
         # get directory information
-        beacondir = self._db.query(filename=self.dirname)
+        beacondir = kaa.beacon.get(self.dirname)
         allurls = [ e[0] for e in self._entries ]
         listing = beacondir.list()
         if isinstance(listing, kaa.notifier.InProgress):

Modified: trunk/feedmanager/src/manager.py
==============================================================================
--- trunk/feedmanager/src/manager.py    (original)
+++ trunk/feedmanager/src/manager.py    Mon Sep 24 17:06:48 2007
@@ -5,7 +5,7 @@
 # $Id$
 #
 # -----------------------------------------------------------------------------
-# kaa.beacon.server - A virtual filesystem with metadata
+# kaa.feedmanager - Manage RSS/Atom Feeds
 # Copyright (C) 2007 Dirk Meyer
 #
 # First Edition: Dirk Meyer <[EMAIL PROTECTED]>
@@ -42,7 +42,7 @@
 import rss
 
 # get logging object
-log = logging.getLogger('beacon.feed')
+log = logging.getLogger('feedmanager')
 
 # cache file
 CACHE = None
@@ -151,22 +151,3 @@
             parse_feed(c)
         except:
             log.exception('bad cache file: %s' % CACHE)
-
-
-_updating = False
-
[EMAIL PROTECTED]()
-def update(verbose=False):
-    """
-    Update all feeds
-    """
-    global _updating
-    if _updating:
-        log.error('update already in progress')
-        yield False
-    log.info('start feed update')
-    _updating = True
-    for feed in _feeds:
-        yield feed.update(verbose=verbose)
-    _updating = False
-    yield True

Modified: trunk/feedmanager/src/rss.py
==============================================================================
--- trunk/feedmanager/src/rss.py        (original)
+++ trunk/feedmanager/src/rss.py        Mon Sep 24 17:06:48 2007
@@ -5,7 +5,7 @@
 # $Id$
 #
 # -----------------------------------------------------------------------------
-# kaa.beacon.server - A virtual filesystem with metadata
+# kaa.feedmanager - Manage RSS/Atom Feeds
 # Copyright (C) 2007 Dirk Meyer
 #
 # First Edition: Dirk Meyer <[EMAIL PROTECTED]>
@@ -42,7 +42,7 @@
 import core
 
 # get logging object
-log = logging.getLogger('beacon.feed')
+log = logging.getLogger('feedmanager')
 isotime = '%a, %d %b %Y %H:%M:%S'
 
 @kaa.notifier.execute_in_thread()

-------------------------------------------------------------------------
This SF.net email is sponsored by: Microsoft
Defy all challenges. Microsoft(R) Visual Studio 2005.
http://clk.atdmt.com/MRT/go/vse0120000070mrt/direct/01/
_______________________________________________
Freevo-cvslog mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/freevo-cvslog

Reply via email to