home *** CD-ROM | disk | FTP | other *** search
/ Maximum CD 2009 June / maximum-cd-2009-06.iso / DiscContents / digsby_setup.exe / lib / jabber / objects / si_filetransfer.pyo (.txt) < prev    next >
Encoding:
Python Compiled Bytecode  |  2009-02-26  |  7.0 KB  |  227 lines

  1. # Source Generated with Decompyle++
  2. # File: in.pyo (Python 2.5)
  3.  
  4. from pyxmpp.jabber.dataforms import DATAFORM_NS
  5. from pyxmpp.jabber.dataforms import Form
  6. from pyxmpp.jabber import dataforms
  7. from pyxmpp.utils import to_utf8
  8. from pyxmpp.xmlextra import common_doc
  9. from pyxmpp.utils import from_utf8
  10. from pyxmpp.xmlextra import get_node_ns_uri
  11. import libxml2
  12. from si import *
  13. SI_FILETRANSFER_NS = SI_NS + '/profile/file-transfer'
  14. FEATURE_NEG_NS = 'http://jabber.org/protocol/feature-neg'
  15.  
  16. class SI_FileTransfer(SI):
  17.     
  18.     def __init__(self, xmlnode_or_id = None, mime_type = None):
  19.         SI.__init__(self, xmlnode_or_id = xmlnode_or_id, mime_type = mime_type, profile_ns = SI_FILETRANSFER_NS)
  20.         self.file = None
  21.         self.feature = None
  22.         if isinstance(xmlnode_or_id, libxml2.xmlNode):
  23.             self.from_xml(xmlnode_or_id)
  24.         
  25.  
  26.     
  27.     def from_xml(self, node, strict = True):
  28.         n = node.children
  29.         while n:
  30.             if n.type != 'element':
  31.                 n = n.next
  32.                 continue
  33.             
  34.             ns = get_node_ns_uri(n)
  35.             if ns and ns != SI_FILETRANSFER_NS and ns != FEATURE_NEG_NS:
  36.                 n = n.next
  37.                 continue
  38.             
  39.             if n.name == 'file':
  40.                 
  41.                 try:
  42.                     self.file = File(n)
  43.                 except ValueError:
  44.                     if strict:
  45.                         raise 
  46.                     
  47.                 except:
  48.                     strict
  49.                 
  50.  
  51.             None<EXCEPTION MATCH>ValueError
  52.             if n.name == 'feature':
  53.                 
  54.                 try:
  55.                     self.feature = Feature(n)
  56.                 except ValueError:
  57.                     if strict:
  58.                         raise 
  59.                     
  60.                 except:
  61.                     strict
  62.                 
  63.  
  64.             None<EXCEPTION MATCH>ValueError
  65.             n = n.next
  66.  
  67.     
  68.     def complete_xml_element(self, xmlnode, _unused):
  69.         SI.complete_xml_element(self, xmlnode, _unused)
  70.         None if self.file else None
  71.         None if self.feature else None
  72.  
  73.     
  74.     def __str__(self):
  75.         n = self.as_xml(doc = common_doc)
  76.         r = n.serialize()
  77.         n.unlinkNode()
  78.         n.freeNode()
  79.         return r
  80.  
  81.  
  82.  
  83. class File(StanzaPayloadObject):
  84.     xml_element_name = 'file'
  85.     xml_element_namespace = SI_FILETRANSFER_NS
  86.     
  87.     def __init__(self, xmlnode_or_name = None, size = None, hash = None, date = None, desc = None, length = None, offset = None):
  88.         if isinstance(xmlnode_or_name, libxml2.xmlNode):
  89.             self.from_xml(xmlnode_or_name)
  90.         else:
  91.             self.name = xmlnode_or_name
  92.             self.size = size
  93.             self.hash = hash
  94.             self.date = date
  95.             self.length = length
  96.             self.desc = desc
  97.             self.offset = offset
  98.  
  99.     
  100.     def from_xml(self, node):
  101.         if node.type != 'element':
  102.             raise ValueError, 'XML node is not a file element (not en element)'
  103.         
  104.         ns = get_node_ns_uri(node)
  105.         if ns or ns != SI_FILETRANSFER_NS or node.name != 'file':
  106.             raise ValueError, 'XML node is not a file element'
  107.         
  108.         name = node.prop('name')
  109.         self.name = None if name else None
  110.         size = node.prop('size')
  111.         self.size = None if size else None
  112.         hash = node.prop('hash')
  113.         date = node.prop('date')
  114.         self.hash = None if hash else None
  115.         self.date = None if date else None
  116.         desc = None
  117.         length = None
  118.         offset = None
  119.         n = node.children
  120.         while n:
  121.             if n.type != 'element':
  122.                 n = n.next
  123.                 continue
  124.             
  125.             ns = get_node_ns_uri(n)
  126.             if ns and ns != SI_FILETRANSFER_NS:
  127.                 n = n.next
  128.                 continue
  129.             
  130.             if n.name == 'desc':
  131.                 desc = n.getContent()
  132.             elif n.name == 'range':
  133.                 offset = n.prop('offset')
  134.                 length = n.prop('length')
  135.             
  136.             n = n.next
  137.         self.desc = None if desc else None
  138.         self.offset = None if offset else None
  139.         self.length = None if length else None
  140.  
  141.     
  142.     def complete_xml_element(self, xmlnode, _unused):
  143.         None if self.name else None
  144.         None if self.size else None
  145.         None if self.hash else None
  146.         if self.length or self.offset:
  147.             range = xmlnode.newChild(None, 'range', None)
  148.             None if self.length else None
  149.             None if self.offset else None
  150.         
  151.         None if self.desc else None
  152.  
  153.     
  154.     def __str__(self):
  155.         n = self.as_xml(doc = common_doc)
  156.         r = n.serialize()
  157.         n.unlinkNode()
  158.         n.freeNode()
  159.         return r
  160.  
  161.  
  162.  
  163. class Feature(StanzaPayloadObject):
  164.     xml_element_name = 'feature'
  165.     xml_element_namespace = FEATURE_NEG_NS
  166.     
  167.     def __init__(self, xmlnode = None, possible_streams = None, selected_stream = None):
  168.         if isinstance(xmlnode, libxml2.xmlNode):
  169.             self.from_xml(xmlnode)
  170.         else:
  171.             self.possible_streams = possible_streams
  172.             self.selected_stream = selected_stream
  173.  
  174.     
  175.     def from_xml(self, node):
  176.         if node.type != 'element':
  177.             raise ValueError, 'XML node is not a feature element (not en element)'
  178.         
  179.         ns = get_node_ns_uri(node)
  180.         if ns or ns != FEATURE_NEG_NS or node.name != 'feature':
  181.             raise ValueError, 'XML node is not a feature element'
  182.         
  183.         possible_streams = []
  184.         self.selected_stream = None
  185.         n = node.children
  186.         while n:
  187.             if n.type != 'element':
  188.                 n = n.next
  189.                 continue
  190.             
  191.             ns = get_node_ns_uri(n)
  192.             if ns or ns != DATAFORM_NS or n.name != 'x':
  193.                 n = n.next
  194.                 continue
  195.             
  196.             form = dataforms.Form(n, strict = False)
  197.             if not form.type:
  198.                 form.type = 'form'
  199.             
  200.             
  201.             try:
  202.                 field = form['stream-method']
  203.             except KeyError:
  204.                 n = n.next
  205.                 continue
  206.  
  207.             self.selected_stream = field.value
  208.             possible_streams.extend(field.options)
  209.             n = n.next
  210.         if not [ v for o in possible_streams for v in o.values ]:
  211.             pass
  212.         self.possible_streams = None
  213.  
  214.     
  215.     def complete_xml_element(self, xmlnode, _unused):
  216.         f.as_xml(xmlnode, _unused)
  217.  
  218.     
  219.     def __str__(self):
  220.         n = self.as_xml(doc = common_doc)
  221.         r = n.serialize()
  222.         n.unlinkNode()
  223.         n.freeNode()
  224.         return r
  225.  
  226.  
  227.