home *** CD-ROM | disk | FTP | other *** search
/ Maximum CD 2012 January / maximum-cd-2012-01.iso / DiscContents / digsby_setup.exe / lib / plugins / digsby_geoip / __init__.pyo (.txt) next >
Encoding:
Python Compiled Bytecode  |  2011-10-05  |  4.2 KB  |  112 lines

  1. # Source Generated with Decompyle++
  2. # File: in.pyo (Python 2.6)
  3.  
  4. from decimal import Decimal
  5. from logging import getLogger
  6. from peak.util.addons import AddOn
  7. from pyxmpp.objects import StanzaPayloadObject
  8. from pyxmpp.utils import from_utf8
  9. from pyxmpp.xmlextra import get_node_ns_uri
  10. import hooks
  11. import libxml2
  12. import traceback
  13. log = getLogger('plugins.digsby_geoip')
  14. DIGSBY_GEOIP_NS = 'digsby:geoip'
  15.  
  16. class Digsby_GeoIP(AddOn):
  17.     
  18.     def __init__(self, subject):
  19.         self.protocol = subject
  20.         super(Digsby_GeoIP, self).__init__(subject)
  21.  
  22.     
  23.     def setup(self, stream):
  24.         self.stream = stream
  25.         log.debug('setting up geoip')
  26.         stream.set_iq_set_handler('query', DIGSBY_GEOIP_NS, self.geoip_set)
  27.  
  28.     
  29.     def geoip_set(self, stanza):
  30.         
  31.         try:
  32.             f = stanza.get_from()
  33.             if f is not None and f.bare() != self.stream.peer.bare():
  34.                 return False
  35.             node = stanza.xpath_eval('g:query/g:geoip', {
  36.                 'g': DIGSBY_GEOIP_NS })[0]
  37.             geo = GeoIP(node)
  38.         except Exception:
  39.             traceback.print_exc()
  40.             return False
  41.  
  42.         hooks.notify('digsby.geoip.received', geo.AsDict(), self.protocol, self.stream)
  43.         return True
  44.  
  45.  
  46.  
  47. def setup(protocol, stream, *a, **k):
  48.     Digsby_GeoIP(protocol).setup(stream)
  49.  
  50.  
  51. class GeoIP(StanzaPayloadObject):
  52.     xml_element_name = 'geoip'
  53.     xml_element_namespace = DIGSBY_GEOIP_NS
  54.     strfields = [
  55.         'ip',
  56.         'city',
  57.         'country',
  58.         'region',
  59.         'state',
  60.         'postal']
  61.     decfields = [
  62.         'lat',
  63.         'lng']
  64.     
  65.     def __init__(self, xmlnode):
  66.         if isinstance(xmlnode, libxml2.xmlNode):
  67.             self._GeoIP__from_xml(xmlnode)
  68.         
  69.  
  70.     
  71.     def __from_xml(self, node):
  72.         if node.type != 'element':
  73.             raise ValueError, 'XML node is not a geoip (not en element)'
  74.         node.type != 'element'
  75.         ns = get_node_ns_uri(node)
  76.         if ns or ns != DIGSBY_GEOIP_NS or node.name != self.xml_element_name:
  77.             raise ValueError, 'XML node is not a geoip'
  78.         node.name != self.xml_element_name
  79.         for fields, convert in [
  80.             (self.strfields, from_utf8),
  81.             (self.decfields, Decimal)]:
  82.             for field in fields:
  83.                 val = None
  84.                 
  85.                 try:
  86.                     val2 = node.prop(field)
  87.                     val = None if val2 else None
  88.                 except Exception:
  89.                     traceback.print_exc()
  90.  
  91.                 setattr(self, field, val)
  92.             
  93.         
  94.  
  95.     
  96.     def complete_xml_element(self, xmlnode, _unused):
  97.         pass
  98.  
  99.     
  100.     def AsDict(self):
  101.         d = (dict,)((lambda .0: for field in .0:
  102. (field, getattr(self, field)))(self.strfields))
  103.         (d.update,)((lambda .0: for field in .0:
  104. (field, getattr(self, field)))(self.decfields))
  105.         return d
  106.  
  107.  
  108.  
  109. def print_geoip(geoip, *a, **k):
  110.     log.debug('got geoip information %r', geoip)
  111.  
  112.