screenlets.plugins.Loader

Package screenlets :: Package plugins :: Module Loader |
[hide private]
[frames] | no frames]

# Source Code for Module screenlets.plugins.Loader

     1  # -*- Mode: python; coding: utf-8; tab-width: 8; indent-tabs-mode: t; -*-
     2  #
     3  # Copyright (C) 2006 - Jonathan Matthew
     4  #
     5  # This program is free software; you can redistribute it and/or modify
     6  # it under the terms of the GNU General Public License as published by
     7  # the Free Software Foundation; either version 2, or (at your option)
     8  # any later version.
     9  #
    10  # This program is distributed in the hope that it will be useful,
    11  # but WITHOUT ANY WARRANTY; without even the implied warranty of
    12  # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    13  # GNU General Public License for more details.
    14  #
    15  # You should have received a copy of the GNU General Public License
    16  # along with this program; if not, write to the Free Software
    17  # Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301  USA.
    18
    19  import gobject
    20
    21  #try:
    22  #       import gnomevfs
    23  #       use_gnomevfs = True
    24  #except:
    25  import urllib
    26  use_gnomevfs = False
    27
    28
    29 -class GnomeVFSAsyncSrc (object):
    30 -        def __init__ (self):
    31                  self.chunk = 4096
    32
    33 -        def read_cb (self, handle, buffer, exc_type, bytes_requested, (data, callback, args)):
    34                  if exc_type:
    35                          if issubclass (exc_type, gnomevfs.EOFError):
    36                                  gobject.idle_add (callback, data, *args)
    37                                  handle.close (lambda *args: None)
    38                          else:
    39                                  gobject.idle_add (callback, None, *args)
    40                                  handle.close (lambda *args: None)
    41                          return
    42
    43                  data += buffer
    44                  handle.read (self.chunk, self.read_cb, (data, callback, args))
    45
    46 -        def open_cb (self, handle, exc_type, (data, callback, args)):
    47                  if exc_type:
    48                          gobject.idle_add (callback, None, *args)
    49                          return
    50
    51                  handle.read (self.chunk, self.read_cb, (data, callback, args))
    52
    53 -        def get_url (self, url, callback, *args):
    54                  gnomevfs.async.open (url, self.open_cb, data=("", callback, args))
    55
    56
    57 -class URLLibSrc (object):
    58 -    def get_url (self, url, callback, *args):
    59                          try:
    60                                  sock = urllib.urlopen (url)
    61                                  data = sock.read ()
    62                                  sock.close ()
    63                                  callback (data, *args)
    64                          except:
    65                                  callback (None, *args)
    66                                  raise
    67
    68
    69 -def Loader ():
    70          if use_gnomevfs:
    71                  return GnomeVFSAsyncSrc ()
    72          else:
    73                  return URLLibSrc ()
    74