Browse Source

Merge branch 'errors'

master
Julio Biason 14 years ago
parent
commit
cf01f355a1
  1. 13
      mitterlib/network/__init__.py
  2. 53
      mitterlib/network/networkbase.py
  3. 10
      mitterlib/network/twitter.py
  4. 2
      mitterlib/ui/helpers/gtk_messagegrid.py
  5. 26
      mitterlib/ui/ui_pygtk.py

13
mitterlib/network/__init__.py

@ -20,6 +20,7 @@
import logging import logging
import os.path import os.path
import urllib2 import urllib2
import gettext
from mitterlib.network.networkbase import NetworkData from mitterlib.network.networkbase import NetworkData
from mitterlib import module_search from mitterlib import module_search
@ -29,6 +30,13 @@ _log = logging.getLogger('mitterlib.network.Networks')
# List of files that are not networks # List of files that are not networks
SKIPPABLES = ('__init__.py', 'networkbase.py') SKIPPABLES = ('__init__.py', 'networkbase.py')
#--------------------------------------------------------------------
# i18n
#--------------------------------------------------------------------
t = gettext.translation('networks', fallback=True)
_ = t.gettext
N_ = t.ngettext
#-------------------------------------------------------------------- #--------------------------------------------------------------------
# Helper functions # Helper functions
#-------------------------------------------------------------------- #--------------------------------------------------------------------
@ -56,12 +64,15 @@ class NetworksNoSuchNetworkError(NetworksError):
self._network = network self._network = network
def __str__(self): def __str__(self):
return 'Unknown network %s' % (self._network) return _('Unknown network %s') % (self._network)
pass pass
class NetworksNoNetworkSetupError(NetworksError): class NetworksNoNetworkSetupError(NetworksError):
"""There are no networks set up.""" """There are no networks set up."""
def __str__(self):
return _('No networks set up.')
pass pass

53
mitterlib/network/networkbase.py

@ -24,6 +24,7 @@ The :mod:`networkbase` module defines the base classes for all networks.
""" """
import logging import logging
import gettext
from mitterlib.constants import version from mitterlib.constants import version
@ -39,6 +40,12 @@ def auth_options(namespace, options, auths):
default=None, default=None,
help=option['help'], help=option['help'],
*(option['flags'])) *(option['flags']))
#--------------------------------------------------------------------
# i18n
#--------------------------------------------------------------------
t = gettext.translation('networks', fallback=True)
_ = t.gettext
N_ = t.ngettext
#-------------------------------------------------------------------- #--------------------------------------------------------------------
# Exceptions # Exceptions
@ -56,36 +63,77 @@ class NetworkUnknownError(NetworkError):
class NetworkLimitExceededError(NetworkError): class NetworkLimitExceededError(NetworkError):
"""The number of requests available was exceeded.""" """The number of requests available was exceeded."""
def __init__(self, network_name):
self.name = network_name
def __str__(self):
return _('No more available requests on %s') % (self.name)
pass pass
class NetworkDNSError(NetworkError): class NetworkDNSError(NetworkError):
"""A DNS failure prevented the request to continue.""" """A DNS failure prevented the request to continue."""
def __init__(self, network_name):
self.name = network_name
def __str__(self):
return _('DNS failure on a request to %s') % (self.name)
pass pass
class NetworkInvalidResponseError(NetworkError): class NetworkInvalidResponseError(NetworkError):
"""The server returned the information in an unexpected way.""" """The server returned the information in an unexpected way."""
def __init__(self, network_name):
self.name = network_name
def __str__(self):
return _('The server on %s return the information in an ' \
'unexpected way.') % (self.name)
pass pass
class NetworkLowLevelError(NetworkError): class NetworkLowLevelError(NetworkError):
"""A low level error occurred in the network layer.""" """A low level error occurred in the network layer."""
def __init__(self, network_name):
self.name = network_name
def __str__(self):
return _('Low level error in the network layer when talking ' \
'to %s') % (self.name)
pass pass
class NetworkBadStatusLineError(NetworkError): class NetworkBadStatusLineError(NetworkError):
"""Bad status line exception.""" """Bad status line exception."""
def __init__(self, network_name):
self.name = network_name
def __str__(self):
return _('Bad status line in network %s') % (self.name)
pass pass
class NetworkAuthorizationFailError(NetworkError): class NetworkAuthorizationFailError(NetworkError):
"""Authorization failure.""" """Authorization failure."""
def __init__(self, network_name):
self.name = network_name
def __str__(self):
return _('Autorization failed for %s') % (self.name)
pass pass
class NetworkPermissionDeniedError(NetworkError): class NetworkPermissionDeniedError(NetworkError):
"""Permission denied when accessing the message/list.""" """Permission denied when accessing the message/list."""
def __init__(self, network_name):
self.name = network_name
def __str__(self):
return _('Permission denied received on %s') % (self.name)
pass pass
#-------------------------------------------------------------------- #--------------------------------------------------------------------
@ -99,6 +147,11 @@ class NetworkWarning(Warning):
class MessageTooLongWarning(NetworkWarning): class MessageTooLongWarning(NetworkWarning):
"""The message is too long for the network.""" """The message is too long for the network."""
def __init__(self, network_name):
self.name = network_name
def __str__(self):
return _('Message too long for %s') % (self.name)
pass pass
#-------------------------------------------------------------------- #--------------------------------------------------------------------

10
mitterlib/network/twitter.py

@ -276,17 +276,17 @@ class Connection(NetworkBase):
# pages. # pages.
if exc.code == 403: if exc.code == 403:
# Permission denied. # Permission denied.
raise NetworkPermissionDeniedError raise NetworkPermissionDeniedError(self.NAMESPACE)
raise NetworkInvalidResponseError raise NetworkInvalidResponseError(self.NAMESPACE)
except urllib2.URLError, exc: except urllib2.URLError, exc:
_log.error('URL error: %s' % exc.reason) _log.error('URL error: %s' % exc.reason)
raise NetworkDNSError raise NetworkDNSError(self.NAMESPACE)
except BadStatusLine: except BadStatusLine:
_log.error('Bad status line (Twitter is going bananas)') _log.error('Bad status line (Twitter is going bananas)')
raise NetworkBadStatusLineError raise NetworkBadStatusLineError(self.NAMESPACE)
except socketError: # That's the worst exception ever. except socketError: # That's the worst exception ever.
_log.error('Socket connection error') _log.error('Socket connection error')
raise NetworkLowLevelError raise NetworkLowLevelError(self.NAMESPACE)
# TODO: Permission denied? # TODO: Permission denied?
# Introduced in Twitter in 2009.03.27 # Introduced in Twitter in 2009.03.27

2
mitterlib/ui/helpers/gtk_messagegrid.py

@ -247,7 +247,7 @@ class MessageGrid(gtk.ScrolledWindow, gobject.GObject):
# not right click # not right click
return False return False
path = widget.get_path_at_pos(event.x, event.y) path = widget.get_path_at_pos(int(event.x), int(event.y))
if not path: if not path:
return False return False

26
mitterlib/ui/ui_pygtk.py

@ -26,6 +26,7 @@ import logging
import urllib2 import urllib2
import gettext import gettext
import datetime import datetime
import warnings
from mitterlib.ui.helpers.image_helpers import find_image from mitterlib.ui.helpers.image_helpers import find_image
from mitterlib.ui.helpers.gtk_threading import ThreadManager from mitterlib.ui.helpers.gtk_threading import ThreadManager
@ -801,11 +802,11 @@ class Interface(object):
"""Function called if the retrival of current messages returns an """Function called if the retrival of current messages returns an
exception.""" exception."""
_log.debug(str(exception)) _log.debug(str(exception))
message = _('%s\nAuto-refresh is now disabled. Use the "refresh" ' \
'option to re-enable it.') % (str(exception))
error_win = gtk.MessageDialog(parent=self._main_window, error_win = gtk.MessageDialog(parent=self._main_window,
type=gtk.MESSAGE_ERROR, type=gtk.MESSAGE_ERROR,
message_format=_('Error retrieving current messages. ' \ message_format=_message,
'Auto-refresh disabled. Use the "Refresh" option ' \
'to re-enable it.'),
buttons=gtk.BUTTONS_OK) buttons=gtk.BUTTONS_OK)
error_win.run() error_win.run()
error_win.hide() error_win.hide()
@ -902,10 +903,10 @@ class Interface(object):
"""Called when there is an exception updating the status.""" """Called when there is an exception updating the status."""
_log.debug('Update error') _log.debug('Update error')
_log.debug(str(exception)) _log.debug(str(exception))
message = _('%s\nPlease, try again.') % (message)
error_win = gtk.MessageDialog(parent=self._main_window, error_win = gtk.MessageDialog(parent=self._main_window,
type=gtk.MESSAGE_ERROR, type=gtk.MESSAGE_ERROR,
message_format=_('Error updating your status. Please ' \ message_format=message,
'try again.'),
buttons=gtk.BUTTONS_OK) buttons=gtk.BUTTONS_OK)
error_win.run() error_win.run()
error_win.hide() error_win.hide()
@ -928,6 +929,12 @@ class Interface(object):
"""Called when the message cannot be deleted.""" """Called when the message cannot be deleted."""
_log.debug('Delete error') _log.debug('Delete error')
_log.debug(str(exception)) _log.debug(str(exception))
error_win = gtk.MessageDialog(parent=self._main_window,
type=gtk.MESSAGE_ERROR,
message_format=str(exception),
buttons=gtk.BUTTONS_OK)
error_win.run()
error_win.hide()
return return
### Results for the repost message call ### Results for the repost message call
@ -944,8 +951,7 @@ class Interface(object):
error_win = gtk.MessageDialog(parent=self._main_window, error_win = gtk.MessageDialog(parent=self._main_window,
type=gtk.MESSAGE_ERROR, type=gtk.MESSAGE_ERROR,
message_format=_('Error reposting message. Please ' \ message_format=str(exception),
'try again.'),
buttons=gtk.BUTTONS_OK) buttons=gtk.BUTTONS_OK)
error_win.run() error_win.run()
error_win.hide() error_win.hide()
@ -969,8 +975,7 @@ class Interface(object):
error_win = gtk.MessageDialog(parent=self._main_window, error_win = gtk.MessageDialog(parent=self._main_window,
type=gtk.MESSAGE_ERROR, type=gtk.MESSAGE_ERROR,
message_format=_('Error changing favorite status of the ' \ message_format=str(exception),
'message. Please, try again.'),
buttons=gtk.BUTTONS_OK) buttons=gtk.BUTTONS_OK)
error_win.run() error_win.run()
error_win.hide() error_win.hide()
@ -1018,6 +1023,9 @@ class Interface(object):
"""Call function; displays the interface. This method should """Call function; displays the interface. This method should
appear on every interface.""" appear on every interface."""
# turn warnings into exception (so we can catch them)
warnings.simplefilter('error')
if self._options[self.NAMESPACE]['statusicon']: if self._options[self.NAMESPACE]['statusicon']:
self._statusicon = gtk.StatusIcon() self._statusicon = gtk.StatusIcon()
self._statusicon.set_from_pixbuf(self._images['icon']) self._statusicon.set_from_pixbuf(self._images['icon'])

Loading…
Cancel
Save