# # From http://www.kosta.tk/2008/06/02/python-diigo-bookmarks-mover-and-diigo-api import logging logger = logging.getLogger("modules.Delicious") import conduit import conduit.utils as Utils import conduit.utils.Memstats as Memstats import conduit.TypeConverter as TypeConverter import conduit.dataproviders.DataProvider as DataProvider import conduit.dataproviders.DataProviderCategory as DataProviderCategory import conduit.dataproviders.SimpleFactory as SimpleFactory import conduit.dataproviders.Image as Image import conduit.dataproviders.File as FileDataProvider import conduit.Exceptions as Exceptions import conduit.Web as Web from conduit.datatypes import Rid, DataType, Bookmark # Installed with easy_install http://pydelicious.googlecode.com/files/pydelicious-0.5.0.zip import pydelicious MODULES = { "Delicious": {'type': 'dataprovider'}, } class Delicious(DataProvider.TwoWay): _name_ = "Delicious" _description_ = "Emits TestDataTypes" _category_ = conduit.dataproviders.CATEGORY_MISC _module_type_ = "twoway" _in_type_ = "Bookmark" _out_type_ = "Bookmark" _icon_ = "go-next" _configurable_ = True DEFAULT_NUM_DATA = 10 def __init__(self, *args): DataProvider.DataSource.__init__(self) self.data = {} self.numData = self.DEFAULT_NUM_DATA self.username = '' self.password = '' self.UID = 'Delicious' self.slow = False def initialize(self): return True def configure(self, window): import gtk import conduit.gtkui.SimpleConfigurator as SimpleConfigurator def setUsername(param): self.username = param def setPassword(param): self.password = param items = [ { "Name" : "Username:", "Widget" : gtk.Entry, "Callback" : setUsername, "InitialValue" : self.username }, { "Name" : "Password:", "Widget" : gtk.Entry, "Callback" : setPassword, "InitialValue" : self.password }, ] dialog = SimpleConfigurator.SimpleConfigurator(window, self._name_, items) dialog.run() def get_UID(self): return self.UID def get_configuration(self): return { "UID" : self.UID, "username" : self.username, "password" : self.password, } def refresh(self): DataProvider.DataSource.refresh(self) self.conn = pydelicious.DeliciousAPI(self.username, self.password) data = self.conn.posts_all() data = data['posts'] self.data = {} for obj in data: self.data[obj['href']] = obj def get_all(self): DataProvider.DataSource.get_all(self) logger.info("getall") data = [] for i in self.data: data.append(i) return data def get(self, LUID): DataProvider.DataSource.get(self, LUID) if self.slow: time.sleep(1) data = Bookmark.Bookmark(title=self.data[LUID]['description'], uri=LUID) data.set_UID(LUID) data.set_open_URI(LUID) return data def put(self, data, overwrite, LUID=None): logger.info("Putting %s %s"%(repr(data), overwrite)) DataProvider.DataSink.put(self, data, overwrite, LUID) if self.data.has_key(LUID): logger.info("Bookmark exists") data = self.data[LUID] else: logger.info("Bookmark created") data = Bookmark.Bookmark(title=data.get_title(), uri=data.get_uri()) data.set_UID(LUID) return data.get_rid() def finish(self, aborted, error, conflict): DataProvider.DataSource.finish(self) self.data = []