plugin.video.torrenter/resources/utorrent/dopal/persistency.py

62 lines
2.3 KiB
Python

# File: persistency.py
# Library: DOPAL - DO Python Azureus Library
#
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation; version 2 of the License.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details ( see the COPYING file ).
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
'''
Support module containing code which supports the persistency functionality offered by DOPAL.
'''
_refresh_methods = {
# Simple ones.
'PluginConfig': lambda pi, obj: \
pi.getPluginconfig(),
'DownloadManager': lambda pi, obj: \
pi.getDownloadManager(),
'IPFilter': lambda pi, obj: \
pi.getIPFilter(),
'ShortCuts': lambda pi, obj: \
pi.getShortCuts(),
'TorrentManager': lambda pi, obj: \
pi.getTorrentManager(),
'PluginInterface': lambda pi, obj: \
pi,
# Not so simple ones.
'Download': lambda pi, obj: \
pi.getShortCuts().getDownload(obj.torrent.hash),
'Torrent': lambda pi, obj: \
pi.getShortCuts().getDownload(obj.hash).torrent,
}
# XXX: Test and document.
def get_equivalent_object_from_root(original_object, plugin_interface):
import dopal.objects
if not isinstance(original_object, dopal.objects.RemoteObject):
raise ValueError, "%s is not a RemoteObject" % (original_object,)
from dopal.errors import NonRefreshableObjectTypeError, \
MissingRemoteAttributeError, NonRefreshableIncompleteObjectError
remote_type = original_object.get_remote_type()
try:
refresh_function = _refresh_methods[remote_type]
except KeyError:
raise NonRefreshableObjectTypeError(obj=original_object)
try:
return refresh_function(plugin_interface, original_object)
except MissingRemoteAttributeError, error:
raise NonRefreshableIncompleteObjectError(obj=original_object, error=error)