coding style

This commit is contained in:
Denis Fomin 2011-01-03 23:08:13 +03:00
parent ed8b7a51d2
commit bd3d4f60a0
2 changed files with 194 additions and 180 deletions

View File

@ -981,7 +981,8 @@ def get_os_info():
path_to_file.endswith('arch-release'): path_to_file.endswith('arch-release'):
# file doesn't have version # file doesn't have version
text = distro_name text = distro_name
elif path_to_file.endswith('lfs-release'): # file just has version elif path_to_file.endswith('lfs-release'):
# file just has version
text = distro_name + ' ' + text text = distro_name + ' ' + text
os_info = text.replace('\n', '') os_info = text.replace('\n', '')
gajim.os_info = os_info gajim.os_info = os_info
@ -1131,16 +1132,14 @@ def get_notification_icon_tooltip_dict():
if total_non_messages > 0: if total_non_messages > 0:
if total_non_messages > max_ungrouped_events: if total_non_messages > max_ungrouped_events:
text = ngettext( text = ngettext(
'%d event pending', '%d event pending',
'%d events pending', '%d events pending',
total_non_messages, total_non_messages, total_non_messages) total_non_messages, total_non_messages,total_non_messages)
account['event_lines'].append(text) account['event_lines'].append(text)
else: else:
for jid in non_messages.keys(): for jid in non_messages.keys():
text = ngettext( text = ngettext('%d event pending', '%d events pending',
'%d event pending', non_messages[jid], non_messages[jid], non_messages[jid])
'%d events pending',
non_messages[jid], non_messages[jid], non_messages[jid])
text += _(' from user %s') % (jid) text += _(' from user %s') % (jid)
account[account]['event_lines'].append(text) account[account]['event_lines'].append(text)
@ -1273,9 +1272,11 @@ def prepare_and_validate_gpg_keyID(account, jid, keyID):
if keyID in public_keys: if keyID in public_keys:
for u in gajim.contacts.get_contacts(account, jid): for u in gajim.contacts.get_contacts(account, jid):
u.keyID = keyID u.keyID = keyID
keys_str = gajim.config.get_per('accounts', account, 'attached_gpg_keys') keys_str = gajim.config.get_per('accounts', account,
'attached_gpg_keys')
keys_str += jid + ' ' + keyID + ' ' keys_str += jid + ' ' + keyID + ' '
gajim.config.set_per('accounts', account, 'attached_gpg_keys', keys_str) gajim.config.set_per('accounts', account, 'attached_gpg_keys',
keys_str)
elif keyID is None: elif keyID is None:
keyID = 'UNKNOWN' keyID = 'UNKNOWN'
return keyID return keyID

View File

@ -23,126 +23,126 @@ sub- stanzas) handling routines
from simplexml import Node, NodeBuilder from simplexml import Node, NodeBuilder
import time import time
NS_ACTIVITY ='http://jabber.org/protocol/activity' # XEP-0108 NS_ACTIVITY = 'http://jabber.org/protocol/activity' # XEP-0108
NS_ADDRESS ='http://jabber.org/protocol/address' # XEP-0033 NS_ADDRESS = 'http://jabber.org/protocol/address' # XEP-0033
NS_AGENTS ='jabber:iq:agents' NS_AGENTS = 'jabber:iq:agents'
NS_AMP ='http://jabber.org/protocol/amp' NS_AMP = 'http://jabber.org/protocol/amp'
NS_AMP_ERRORS =NS_AMP+'#errors' NS_AMP_ERRORS = NS_AMP + '#errors'
NS_ARCHIVE ='urn:xmpp:archive' #XEP-0136 NS_ARCHIVE = 'urn:xmpp:archive' # XEP-0136
NS_ARCHIVE_AUTO =NS_ARCHIVE+':auto' #XEP-0136 NS_ARCHIVE_AUTO = NS_ARCHIVE + ':auto' # XEP-0136
NS_ARCHIVE_MANAGE =NS_ARCHIVE+':manage' #XEP-0136 NS_ARCHIVE_MANAGE = NS_ARCHIVE + ':manage' # XEP-0136
NS_ARCHIVE_MANUAL =NS_ARCHIVE+':manual' #XEP-0136 NS_ARCHIVE_MANUAL = NS_ARCHIVE + ':manual' # XEP-0136
NS_ARCHIVE_PREF =NS_ARCHIVE+':pref' NS_ARCHIVE_PREF = NS_ARCHIVE + ':pref'
NS_ATOM ='http://www.w3.org/2005/Atom' NS_ATOM = 'http://www.w3.org/2005/Atom'
NS_AUTH ='jabber:iq:auth' NS_AUTH = 'jabber:iq:auth'
NS_AVATAR ='http://www.xmpp.org/extensions/xep-0084.html#ns-metadata' NS_AVATAR = 'http://www.xmpp.org/extensions/xep-0084.html#ns-metadata'
NS_BIND ='urn:ietf:params:xml:ns:xmpp-bind' NS_BIND = 'urn:ietf:params:xml:ns:xmpp-bind'
NS_BOB ='urn:xmpp:bob' #XEP-0231 NS_BOB = 'urn:xmpp:bob' # XEP-0231
NS_BOOKMARKS ='storage:bookmarks' #XEP-0048 NS_BOOKMARKS = 'storage:bookmarks' # XEP-0048
NS_BROWSE ='jabber:iq:browse' NS_BROWSE = 'jabber:iq:browse'
NS_BROWSING ='http://jabber.org/protocol/browsing' # XEP-0195 NS_BROWSING = 'http://jabber.org/protocol/browsing' # XEP-0195
NS_BYTESTREAM ='http://jabber.org/protocol/bytestreams' # JEP-0065 NS_BYTESTREAM = 'http://jabber.org/protocol/bytestreams' # JEP-0065
NS_CAPS ='http://jabber.org/protocol/caps' # JEP-0115 NS_CAPS = 'http://jabber.org/protocol/caps' # JEP-0115
NS_CAPTCHA ='urn:xmpp:captcha' # XEP-0158 NS_CAPTCHA = 'urn:xmpp:captcha' # XEP-0158
NS_CHATSTATES ='http://jabber.org/protocol/chatstates' # JEP-0085 NS_CHATSTATES = 'http://jabber.org/protocol/chatstates' # JEP-0085
NS_CHATTING ='http://jabber.org/protocol/chatting' # XEP-0194 NS_CHATTING = 'http://jabber.org/protocol/chatting' # XEP-0194
NS_CLIENT ='jabber:client' NS_CLIENT = 'jabber:client'
NS_COMMANDS ='http://jabber.org/protocol/commands' NS_COMMANDS = 'http://jabber.org/protocol/commands'
NS_COMPONENT_ACCEPT='jabber:component:accept' NS_COMPONENT_ACCEPT = 'jabber:component:accept'
NS_COMPONENT_1 ='http://jabberd.jabberstudio.org/ns/component/1.0' NS_COMPONENT_1 = 'http://jabberd.jabberstudio.org/ns/component/1.0'
NS_COMPRESS ='http://jabber.org/protocol/compress' # XEP-0138 NS_COMPRESS = 'http://jabber.org/protocol/compress' # XEP-0138
NS_CONFERENCE ='jabber:x:conference' NS_CONFERENCE = 'jabber:x:conference'
NS_DATA ='jabber:x:data' # XEP-0004 NS_DATA = 'jabber:x:data' # XEP-0004
NS_DATA_MEDIA ='urn:xmpp:media-element' # XEP-0221 NS_DATA_MEDIA = 'urn:xmpp:media-element' # XEP-0221
NS_DELAY ='jabber:x:delay' NS_DELAY = 'jabber:x:delay'
NS_DELAY2 ='urn:xmpp:delay' NS_DELAY2 = 'urn:xmpp:delay'
NS_DIALBACK ='jabber:server:dialback' NS_DIALBACK = 'jabber:server:dialback'
NS_DISCO ='http://jabber.org/protocol/disco' NS_DISCO = 'http://jabber.org/protocol/disco'
NS_DISCO_INFO =NS_DISCO+'#info' NS_DISCO_INFO = NS_DISCO + '#info'
NS_DISCO_ITEMS =NS_DISCO+'#items' NS_DISCO_ITEMS = NS_DISCO + '#items'
NS_ENCRYPTED ='jabber:x:encrypted' # XEP-0027 NS_ENCRYPTED = 'jabber:x:encrypted' # XEP-0027
NS_ESESSION ='http://www.xmpp.org/extensions/xep-0116.html#ns' NS_ESESSION = 'http://www.xmpp.org/extensions/xep-0116.html#ns'
NS_ESESSION_INIT='http://www.xmpp.org/extensions/xep-0116.html#ns-init' # XEP-0116 NS_ESESSION_INIT = 'http://www.xmpp.org/extensions/xep-0116.html#ns-init' # XEP-0116
NS_EVENT ='jabber:x:event' # XEP-0022 NS_EVENT = 'jabber:x:event' # XEP-0022
NS_FEATURE ='http://jabber.org/protocol/feature-neg' NS_FEATURE = 'http://jabber.org/protocol/feature-neg'
NS_FILE ='http://jabber.org/protocol/si/profile/file-transfer' # JEP-0096 NS_FILE = 'http://jabber.org/protocol/si/profile/file-transfer' # JEP-0096
NS_GAMING ='http://jabber.org/protocol/gaming' # XEP-0196 NS_GAMING = 'http://jabber.org/protocol/gaming' # XEP-0196
NS_GATEWAY ='jabber:iq:gateway' # XEP-0100 NS_GATEWAY = 'jabber:iq:gateway' # XEP-0100
NS_GEOLOC ='http://jabber.org/protocol/geoloc' # JEP-0080 NS_GEOLOC = 'http://jabber.org/protocol/geoloc' # XEP-0080
NS_GROUPCHAT ='gc-1.0' NS_GROUPCHAT = 'gc-1.0'
NS_HTTP_AUTH ='http://jabber.org/protocol/http-auth' # XEP-0070 NS_HTTP_AUTH = 'http://jabber.org/protocol/http-auth' # XEP-0070
NS_HTTP_BIND ='http://jabber.org/protocol/httpbind' # XEP-0124 NS_HTTP_BIND = 'http://jabber.org/protocol/httpbind' # XEP-0124
NS_IBB ='http://jabber.org/protocol/ibb' NS_IBB = 'http://jabber.org/protocol/ibb'
NS_INVISIBLE ='presence-invisible' # Jabberd2 NS_INVISIBLE = 'presence-invisible' # Jabberd2
NS_IQ ='iq' # Jabberd2 NS_IQ = 'iq' # Jabberd2
NS_JINGLE ='urn:xmpp:jingle:1' # XEP-0166 NS_JINGLE ='urn:xmpp:jingle:1' # XEP-0166
NS_JINGLE_ERRORS='urn:xmpp:jingle:errors:1' # XEP-0166 NS_JINGLE_ERRORS = 'urn:xmpp:jingle:errors:1' # XEP-0166
NS_JINGLE_RTP ='urn:xmpp:jingle:apps:rtp:1' # XEP-0167 NS_JINGLE_RTP = 'urn:xmpp:jingle:apps:rtp:1' # XEP-0167
NS_JINGLE_RTP_AUDIO='urn:xmpp:jingle:apps:rtp:audio' # XEP-0167 NS_JINGLE_RTP_AUDIO = 'urn:xmpp:jingle:apps:rtp:audio' # XEP-0167
NS_JINGLE_RTP_VIDEO='urn:xmpp:jingle:apps:rtp:video' # XEP-0167 NS_JINGLE_RTP_VIDEO = 'urn:xmpp:jingle:apps:rtp:video' # XEP-0167
NS_JINGLE_RAW_UDP='urn:xmpp:jingle:transports:raw-udp:1' # XEP-0177 NS_JINGLE_RAW_UDP = 'urn:xmpp:jingle:transports:raw-udp:1' # XEP-0177
NS_JINGLE_ICE_UDP='urn:xmpp:jingle:transports:ice-udp:1' # XEP-0176 NS_JINGLE_ICE_UDP = 'urn:xmpp:jingle:transports:ice-udp:1' # XEP-0176
NS_LAST ='jabber:iq:last' NS_LAST = 'jabber:iq:last'
NS_LOCATION ='http://jabber.org/protocol/geoloc' # XEP-0080 NS_LOCATION = 'http://jabber.org/protocol/geoloc' # XEP-0080
NS_MESSAGE ='message' # Jabberd2 NS_MESSAGE = 'message' # Jabberd2
NS_MOOD ='http://jabber.org/protocol/mood' # XEP-0107 NS_MOOD = 'http://jabber.org/protocol/mood' # XEP-0107
NS_MUC ='http://jabber.org/protocol/muc' NS_MUC = 'http://jabber.org/protocol/muc'
NS_MUC_USER =NS_MUC+'#user' NS_MUC_USER = NS_MUC + '#user'
NS_MUC_ADMIN =NS_MUC+'#admin' NS_MUC_ADMIN = NS_MUC + '#admin'
NS_MUC_OWNER =NS_MUC+'#owner' NS_MUC_OWNER = NS_MUC + '#owner'
NS_MUC_UNIQUE =NS_MUC+'#unique' NS_MUC_UNIQUE = NS_MUC + '#unique'
NS_MUC_CONFIG =NS_MUC+'#roomconfig' NS_MUC_CONFIG = NS_MUC + '#roomconfig'
NS_NICK ='http://jabber.org/protocol/nick' # XEP-0172 NS_NICK = 'http://jabber.org/protocol/nick' # XEP-0172
NS_OFFLINE ='http://www.jabber.org/jeps/jep-0030.html' # XEP-0013 NS_OFFLINE = 'http://www.jabber.org/jeps/jep-0030.html' # XEP-0013
NS_PHYSLOC ='http://jabber.org/protocol/physloc' # XEP-0112 NS_PHYSLOC = 'http://jabber.org/protocol/physloc' # XEP-0112
NS_PING ='urn:xmpp:ping' # SEP-0199 NS_PING = 'urn:xmpp:ping' # SEP-0199
NS_PRESENCE ='presence' # Jabberd2 NS_PRESENCE = 'presence' # Jabberd2
NS_PRIVACY ='jabber:iq:privacy' NS_PRIVACY = 'jabber:iq:privacy'
NS_PRIVATE ='jabber:iq:private' NS_PRIVATE = 'jabber:iq:private'
NS_PROFILE ='http://jabber.org/protocol/profile' # XEP-0154 NS_PROFILE = 'http://jabber.org/protocol/profile' # XEP-0154
NS_PUBSUB ='http://jabber.org/protocol/pubsub' # XEP-0060 NS_PUBSUB = 'http://jabber.org/protocol/pubsub' # XEP-0060
NS_PUBSUB_EVENT = 'http://jabber.org/protocol/pubsub#event' NS_PUBSUB_EVENT = 'http://jabber.org/protocol/pubsub#event'
NS_PUBSUB_PUBLISH_OPTIONS = NS_PUBSUB + '#publish-options' # XEP-0060 NS_PUBSUB_PUBLISH_OPTIONS = NS_PUBSUB + '#publish-options' # XEP-0060
NS_PUBSUB_OWNER ='http://jabber.org/protocol/pubsub#owner' # JEP-0060 NS_PUBSUB_OWNER = 'http://jabber.org/protocol/pubsub#owner' # JEP-0060
NS_REGISTER ='jabber:iq:register' NS_REGISTER = 'jabber:iq:register'
NS_ROSTER ='jabber:iq:roster' NS_ROSTER = 'jabber:iq:roster'
NS_ROSTERNOTES ='storage:rosternotes' NS_ROSTERNOTES = 'storage:rosternotes'
NS_ROSTERX ='http://jabber.org/protocol/rosterx' # XEP-0144 NS_ROSTERX = 'http://jabber.org/protocol/rosterx' # XEP-0144
NS_ROSTER_VER ='urn:xmpp:features:rosterver' # XEP-0273 NS_ROSTER_VER = 'urn:xmpp:features:rosterver' # XEP-0273
NS_RPC ='jabber:iq:rpc' # XEP-0009 NS_RPC = 'jabber:iq:rpc' # XEP-0009
NS_RSM ='http://jabber.org/protocol/rsm' NS_RSM = 'http://jabber.org/protocol/rsm'
NS_SASL ='urn:ietf:params:xml:ns:xmpp-sasl' NS_SASL = 'urn:ietf:params:xml:ns:xmpp-sasl'
NS_SECLABEL ='urn:xmpp:sec-label:0' NS_SECLABEL = 'urn:xmpp:sec-label:0'
NS_SECLABEL_CATALOG ='urn:xmpp:sec-label:catalog:0' NS_SECLABEL_CATALOG = 'urn:xmpp:sec-label:catalog:0'
NS_SEARCH ='jabber:iq:search' NS_SEARCH = 'jabber:iq:search'
NS_SERVER ='jabber:server' NS_SERVER = 'jabber:server'
NS_SESSION ='urn:ietf:params:xml:ns:xmpp-session' NS_SESSION = 'urn:ietf:params:xml:ns:xmpp-session'
NS_SI ='http://jabber.org/protocol/si' # XEP-0096 NS_SI = 'http://jabber.org/protocol/si' # XEP-0096
NS_SI_PUB ='http://jabber.org/protocol/sipub' # XEP-0137 NS_SI_PUB = 'http://jabber.org/protocol/sipub' # XEP-0137
NS_SIGNED ='jabber:x:signed' # XEP-0027 NS_SIGNED = 'jabber:x:signed' # XEP-0027
NS_SSN ='urn:xmpp:ssn' # XEP-0155 NS_SSN = 'urn:xmpp:ssn' # XEP-0155
NS_STANZA_CRYPTO='http://www.xmpp.org/extensions/xep-0200.html#ns' # XEP-0200 NS_STANZA_CRYPTO = 'http://www.xmpp.org/extensions/xep-0200.html#ns' # XEP-0200
NS_STANZAS ='urn:ietf:params:xml:ns:xmpp-stanzas' NS_STANZAS = 'urn:ietf:params:xml:ns:xmpp-stanzas'
NS_STREAM ='http://affinix.com/jabber/stream' NS_STREAM = 'http://affinix.com/jabber/stream'
NS_STREAMS ='http://etherx.jabber.org/streams' NS_STREAMS = 'http://etherx.jabber.org/streams'
NS_TIME ='jabber:iq:time' # XEP-0900 NS_TIME = 'jabber:iq:time' # XEP-0900
NS_TIME_REVISED ='urn:xmpp:time' # XEP-0202 NS_TIME_REVISED = 'urn:xmpp:time' # XEP-0202
NS_TLS ='urn:ietf:params:xml:ns:xmpp-tls' NS_TLS = 'urn:ietf:params:xml:ns:xmpp-tls'
NS_TUNE ='http://jabber.org/protocol/tune' # XEP-0118 NS_TUNE = 'http://jabber.org/protocol/tune' # XEP-0118
NS_VACATION ='http://jabber.org/protocol/vacation' NS_VACATION = 'http://jabber.org/protocol/vacation'
NS_VCARD ='vcard-temp' NS_VCARD = 'vcard-temp'
NS_GMAILNOTIFY ='google:mail:notify' NS_GMAILNOTIFY = 'google:mail:notify'
NS_GTALKSETTING ='google:setting' NS_GTALKSETTING = 'google:setting'
NS_VCARD_UPDATE =NS_VCARD+':x:update' NS_VCARD_UPDATE = NS_VCARD + ':x:update'
NS_VERSION ='jabber:iq:version' NS_VERSION = 'jabber:iq:version'
NS_VIEWING ='http://jabber.org/protocol/viewing' # XEP--197 NS_VIEWING = 'http://jabber.org/protocol/viewing' # XEP--197
NS_WAITINGLIST ='http://jabber.org/protocol/waitinglist' # XEP-0130 NS_WAITINGLIST = 'http://jabber.org/protocol/waitinglist' # XEP-0130
NS_XHTML_IM ='http://jabber.org/protocol/xhtml-im' # XEP-0071 NS_XHTML_IM = 'http://jabber.org/protocol/xhtml-im' # XEP-0071
NS_XHTML = 'http://www.w3.org/1999/xhtml' # " NS_XHTML = 'http://www.w3.org/1999/xhtml' # "
NS_DATA_LAYOUT ='http://jabber.org/protocol/xdata-layout' # XEP-0141 NS_DATA_LAYOUT = 'http://jabber.org/protocol/xdata-layout' # XEP-0141
NS_DATA_VALIDATE='http://jabber.org/protocol/xdata-validate' # XEP-0122 NS_DATA_VALIDATE = 'http://jabber.org/protocol/xdata-validate' # XEP-0122
NS_XMPP_STREAMS ='urn:ietf:params:xml:ns:xmpp-streams' NS_XMPP_STREAMS = 'urn:ietf:params:xml:ns:xmpp-streams'
NS_RECEIPTS ='urn:xmpp:receipts' NS_RECEIPTS = 'urn:xmpp:receipts'
xmpp_stream_error_conditions = ''' xmpp_stream_error_conditions = '''
bad-format -- -- -- The entity has sent XML that cannot be processed. bad-format -- -- -- The entity has sent XML that cannot be processed.
@ -204,9 +204,9 @@ not-authorized -- -- -- The authentication failed because the initiating entit
temporary-auth-failure -- -- -- The authentication failed because of a temporary error condition within the receiving entity; sent in reply to an <auth/> element or <response/> element.''' temporary-auth-failure -- -- -- The authentication failed because of a temporary error condition within the receiving entity; sent in reply to an <auth/> element or <response/> element.'''
ERRORS, _errorcodes = {}, {} ERRORS, _errorcodes = {}, {}
for ns, errname, errpool in ((NS_XMPP_STREAMS, 'STREAM', xmpp_stream_error_conditions), for ns, errname, errpool in ((NS_XMPP_STREAMS, 'STREAM',
(NS_STANZAS, 'ERR', xmpp_stanza_error_conditions), xmpp_stream_error_conditions), (NS_STANZAS, 'ERR', xmpp_stanza_error_conditions),
(NS_SASL, 'SASL', sasl_error_conditions)): (NS_SASL, 'SASL', sasl_error_conditions)):
for err in errpool.split('\n')[1:]: for err in errpool.split('\n')[1:]:
cond, code, typ, text = err.split(' -- ') cond, code, typ, text = err.split(' -- ')
name = errname + '_' + cond.upper().replace('-', '_') name = errname + '_' + cond.upper().replace('-', '_')
@ -314,29 +314,29 @@ class XMLNotWellFormed(StreamError):
pass pass
stream_exceptions = {'bad-format': BadFormat, stream_exceptions = {'bad-format': BadFormat,
'bad-namespace-prefix': BadNamespacePrefix, 'bad-namespace-prefix': BadNamespacePrefix,
'conflict': Conflict, 'conflict': Conflict,
'connection-timeout': ConnectionTimeout, 'connection-timeout': ConnectionTimeout,
'host-gone': HostGone, 'host-gone': HostGone,
'host-unknown': HostUnknown, 'host-unknown': HostUnknown,
'improper-addressing': ImproperAddressing, 'improper-addressing': ImproperAddressing,
'internal-server-error': InternalServerError, 'internal-server-error': InternalServerError,
'invalid-from': InvalidFrom, 'invalid-from': InvalidFrom,
'invalid-id': InvalidID, 'invalid-id': InvalidID,
'invalid-namespace': InvalidNamespace, 'invalid-namespace': InvalidNamespace,
'invalid-xml': InvalidXML, 'invalid-xml': InvalidXML,
'not-authorized': NotAuthorized, 'not-authorized': NotAuthorized,
'policy-violation': PolicyViolation, 'policy-violation': PolicyViolation,
'remote-connection-failed': RemoteConnectionFailed, 'remote-connection-failed': RemoteConnectionFailed,
'resource-constraint': ResourceConstraint, 'resource-constraint': ResourceConstraint,
'restricted-xml': RestrictedXML, 'restricted-xml': RestrictedXML,
'see-other-host': SeeOtherHost, 'see-other-host': SeeOtherHost,
'system-shutdown': SystemShutdown, 'system-shutdown': SystemShutdown,
'undefined-condition': UndefinedCondition, 'undefined-condition': UndefinedCondition,
'unsupported-encoding': UnsupportedEncoding, 'unsupported-encoding': UnsupportedEncoding,
'unsupported-stanza-type': UnsupportedStanzaType, 'unsupported-stanza-type': UnsupportedStanzaType,
'unsupported-version': UnsupportedVersion, 'unsupported-version': UnsupportedVersion,
'xml-not-well-formed': XMLNotWellFormed} 'xml-not-well-formed': XMLNotWellFormed}
class JID: class JID:
""" """
@ -354,7 +354,8 @@ class JID:
if not jid and not domain: if not jid and not domain:
raise ValueError('JID must contain at least domain name') raise ValueError('JID must contain at least domain name')
elif type(jid) == type(self): elif type(jid) == type(self):
self.node, self.domain, self.resource = jid.node, jid.domain, jid.resource self.node, self.domain = jid.node, jid.domain
self.resource = jid.resource
elif domain: elif domain:
self.node, self.domain, self.resource = node, domain, resource self.node, self.domain, self.resource = node, domain, resource
else: else:
@ -375,7 +376,8 @@ class JID:
def setNode(self, node): def setNode(self, node):
""" """
Set the node part of the JID to new value. Specify None to remove the node part Set the node part of the JID to new value. Specify None to remove
the node part
""" """
self.node = node.lower() self.node = node.lower()
@ -418,7 +420,8 @@ class JID:
other = JID(other) other = JID(other)
except ValueError: except ValueError:
return 0 return 0
return self.resource == other.resource and self.__str__(0) == other.__str__(0) return self.resource == other.resource and \
self.__str__(0) == other.__str__(0)
def __ne__(self, other): def __ne__(self, other):
""" """
@ -446,7 +449,8 @@ class JID:
def __hash__(self): def __hash__(self):
""" """
Produce hash of the JID, Allows to use JID objects as keys of the dictionary Produce hash of the JID, Allows to use JID objects as keys of the
dictionary
""" """
return hash(str(self)) return hash(str(self))
@ -469,7 +473,8 @@ class Protocol(Node):
def __init__(self, name=None, to=None, typ=None, frm=None, attrs={}, def __init__(self, name=None, to=None, typ=None, frm=None, attrs={},
payload=[], timestamp=None, xmlns=None, node=None): payload=[], timestamp=None, xmlns=None, node=None):
""" """
Constructor, name is the name of the stanza i.e. 'message' or 'presence' or 'iq' Constructor, name is the name of the stanza
i.e. 'message' or 'presence'or 'iq'
to is the value of 'to' attribure, 'typ' - 'type' attribute to is the value of 'to' attribure, 'typ' - 'type' attribute
frn - from attribure, attrs - other attributes mapping, frn - from attribure, attrs - other attributes mapping,
@ -493,7 +498,8 @@ class Protocol(Node):
self.setTo(self['to']) self.setTo(self['to'])
if self['from']: if self['from']:
self.setFrom(self['from']) self.setFrom(self['from'])
if node and type(self) == type(node) and self.__class__ == node.__class__ and self.attrs.has_key('id'): if node and type(self) == type(node) and \
self.__class__ == node.__class__ and self.attrs.has_key('id'):
del self.attrs['id'] del self.attrs['id']
self.timestamp = None self.timestamp = None
for d in self.getTags('delay', namespace=NS_DELAY2): for d in self.getTags('delay', namespace=NS_DELAY2):
@ -584,19 +590,20 @@ class Protocol(Node):
def getError(self): def getError(self):
""" """
Return the error-condition (if present) or the textual description of the Return the error-condition (if present) or the textual description
error (otherwise) of the error (otherwise)
""" """
errtag = self.getTag('error') errtag = self.getTag('error')
if errtag: if errtag:
for tag in errtag.getChildren(): for tag in errtag.getChildren():
if tag.getName() <> 'text': if tag.getName() != 'text':
return tag.getName() return tag.getName()
return errtag.getData() return errtag.getData()
def getErrorMsg(self): def getErrorMsg(self):
""" """
Return the textual description of the error (if present) or the error condition Return the textual description of the error (if present)
or the error condition
""" """
errtag = self.getTag('error') errtag = self.getTag('error')
if errtag: if errtag:
@ -611,7 +618,7 @@ class Protocol(Node):
""" """
return self.getTagAttr('error', 'code') return self.getTagAttr('error', 'code')
def setError(self,error,code=None): def setError(self, error, code=None):
""" """
Set the error code. Obsolete. Use error-conditions instead Set the error code. Obsolete. Use error-conditions instead
""" """
@ -619,7 +626,8 @@ class Protocol(Node):
if str(code) in _errorcodes.keys(): if str(code) in _errorcodes.keys():
error = ErrorNode(_errorcodes[str(code)], text=error) error = ErrorNode(_errorcodes[str(code)], text=error)
else: else:
error = ErrorNode(ERR_UNDEFINED_CONDITION, code=code, typ='cancel', text=error) error = ErrorNode(ERR_UNDEFINED_CONDITION, code=code,
typ='cancel', text=error)
elif type(error) in [type(''), type(u'')]: elif type(error) in [type(''), type(u'')]:
error=ErrorNode(error) error=ErrorNode(error)
self.setType('error') self.setType('error')
@ -660,8 +668,8 @@ class Message(Protocol):
""" """
def __init__(self, to=None, body=None, xhtml=None, typ=None, subject=None, def __init__(self, to=None, body=None, xhtml=None, typ=None, subject=None,
attrs={}, frm=None, payload=[], timestamp=None, xmlns=NS_CLIENT, attrs={}, frm=None, payload=[], timestamp=None, xmlns=NS_CLIENT,
node=None): node=None):
""" """
You can specify recipient, text of message, type of message any You can specify recipient, text of message, type of message any
additional attributes, sender of the message, any additional payload additional attributes, sender of the message, any additional payload
@ -671,7 +679,7 @@ class Message(Protocol):
parameted to replicate it as message parameted to replicate it as message
""" """
Protocol.__init__(self, 'message', to=to, typ=typ, attrs=attrs, frm=frm, Protocol.__init__(self, 'message', to=to, typ=typ, attrs=attrs, frm=frm,
payload=payload, timestamp=timestamp, xmlns=xmlns, node=node) payload=payload, timestamp=timestamp, xmlns=xmlns, node=node)
if body: if body:
self.setBody(body) self.setBody(body)
if xhtml: if xhtml:
@ -724,7 +732,8 @@ class Message(Protocol):
""" """
try: try:
if xmllang: if xmllang:
dom = NodeBuilder('<body xmlns="%s" xml:lang="%s">%s</body>' % (NS_XHTML, xmllang, val)).getDom() dom = NodeBuilder('<body xmlns="%s" xml:lang="%s">%s</body>' \
% (NS_XHTML, xmllang, val)).getDom()
else: else:
dom = NodeBuilder('<body xmlns="%s">%s</body>' % (NS_XHTML, dom = NodeBuilder('<body xmlns="%s">%s</body>' % (NS_XHTML,
val), 0).getDom() val), 0).getDom()
@ -773,8 +782,8 @@ class Message(Protocol):
class Presence(Protocol): class Presence(Protocol):
def __init__(self, to=None, typ=None, priority=None, show=None, status=None, def __init__(self, to=None, typ=None, priority=None, show=None, status=None,
attrs={}, frm=None, timestamp=None, payload=[], xmlns=NS_CLIENT, attrs={}, frm=None, timestamp=None, payload=[], xmlns=NS_CLIENT,
node=None): node=None):
""" """
You can specify recipient, type of message, priority, show and status You can specify recipient, type of message, priority, show and status
values any additional attributes, sender of the presence, timestamp, any values any additional attributes, sender of the presence, timestamp, any
@ -783,7 +792,7 @@ class Presence(Protocol):
parameted to replicate it as presence parameted to replicate it as presence
""" """
Protocol.__init__(self, 'presence', to=to, typ=typ, attrs=attrs, frm=frm, Protocol.__init__(self, 'presence', to=to, typ=typ, attrs=attrs, frm=frm,
payload=payload, timestamp=timestamp, xmlns=xmlns, node=node) payload=payload, timestamp=timestamp, xmlns=xmlns, node=node)
if priority: if priority:
self.setPriority(priority) self.setPriority(priority)
if show: if show:
@ -848,6 +857,7 @@ class Presence(Protocol):
Return the presence role (for groupchat) Return the presence role (for groupchat)
""" """
return self._muc_getItemAttr('item', 'role') return self._muc_getItemAttr('item', 'role')
def getAffiliation(self): def getAffiliation(self):
""" """
Return the presence affiliation (for groupchat) Return the presence affiliation (for groupchat)
@ -903,7 +913,8 @@ class Iq(Protocol):
Alternatively you can pass in the other XML object as the 'node' Alternatively you can pass in the other XML object as the 'node'
parameted to replicate it as an iq parameted to replicate it as an iq
""" """
Protocol.__init__(self, 'iq', to=to, typ=typ, attrs=attrs, frm=frm, xmlns=xmlns, node=node) Protocol.__init__(self, 'iq', to=to, typ=typ, attrs=attrs, frm=frm,
xmlns=xmlns, node=node)
if payload: if payload:
self.setQueryPayload(payload) self.setQueryPayload(payload)
if queryNS: if queryNS:
@ -978,7 +989,8 @@ class ErrorNode(Node):
def __init__(self, name, code=None, typ=None, text=None): def __init__(self, name, code=None, typ=None, text=None):
""" """
Mandatory parameter: name - name of error condition. Mandatory parameter: name - name of error condition.
Optional parameters: code, typ, text. Used for backwards compartibility with older jabber protocol. Optional parameters: code, typ, text.
Used for backwards compartibility with older jabber protocol.
""" """
if name in ERRORS: if name in ERRORS:
cod, type_, txt = ERRORS[name] cod, type_, txt = ERRORS[name]
@ -1043,8 +1055,8 @@ class DataField(Node):
Create new data field of specified name,value and type Create new data field of specified name,value and type
Also 'required','desc' and 'options' fields can be set. Alternatively Also 'required','desc' and 'options' fields can be set. Alternatively
other XML object can be passed in as the 'node' parameted to replicate it other XML object can be passed in as the 'node' parameted
as a new datafiled. to replicate it as a new datafiled.
""" """
Node.__init__(self, 'field', node=node) Node.__init__(self, 'field', node=node)
if name: if name:
@ -1153,7 +1165,8 @@ class DataField(Node):
if isinstance(opt, basestring): if isinstance(opt, basestring):
self.addChild('option').setTagData('value', opt) self.addChild('option').setTagData('value', opt)
else: else:
self.addChild('option', {'label': opt[0]}).setTagData('value', opt[1]) self.addChild('option', {'label': opt[0]}).setTagData('value',
opt[1])
def getType(self): def getType(self):
""" """