]> code.delx.au - pymsnt/blob - src/utils.py
Reverted a change that broke challenges.
[pymsnt] / src / utils.py
1 # Copyright 2004-2005 James Bunton <james@delx.cjb.net>
2 # Licensed for distribution under the GPL version 2, check COPYING for details
3
4
5
6 try:
7 from twisted.words.protocols.jabber import intern as jid
8 except:
9 from tlib.jabber.jid import intern as jid
10
11
12 def getLang(el):
13 return el.getAttribute((u'http://www.w3.org/XML/1998/namespace', u'lang'))
14
15
16 try:
17 import Image
18 import StringIO
19
20 def convertToPNG(imageData):
21 inbuff = StringIO.StringIO(imageData)
22 outbuff = StringIO.StringIO()
23 Image.open(inbuff).save(outbuff, "PNG")
24 outbuff.seek(0)
25 imageData = outbuff.read()
26 return imageData
27 except ImportError:
28 print "WARNING! Only PNG avatars will be understood by this transport. Please install the Python Imaging Library."
29
30 def convertToPNG(imageData):
31 return ""
32
33
34 errorCodeMap = {
35 "bad-request" : 400,
36 "conflict" : 409,
37 "feature-not-implemented" : 501,
38 "forbidden" : 403,
39 "gone" : 302,
40 "internal-server-error" : 500,
41 "item-not-found" : 404,
42 "jid-malformed" : 400,
43 "not-acceptable" : 406,
44 "not-allowed" : 405,
45 "not-authorized" : 401,
46 "payment-required" : 402,
47 "recipient-unavailable" : 404,
48 "redirect" : 302,
49 "registration-required" : 407,
50 "remote-server-not-found" : 404,
51 "remote-server-timeout" : 504,
52 "resource-constraint" : 500,
53 "service-unavailable" : 503,
54 "subscription-required" : 407,
55 "undefined-condition" : 500,
56 "unexpected-request" : 400
57 }
58
59
60 def parseText(text, beExtremelyLenient=False):
61 t = TextParser(beExtremelyLenient)
62 t.parseString(text)
63 return t.root
64
65 def parseFile(filename, beExtremelyLenient=False):
66 t = TextParser(beExtremelyLenient)
67 t.parseFile(filename)
68 return t.root
69
70
71 checkTwistedCached = None
72 def checkTwisted():
73 """ Returns False if we're using an old version that needs tlib, otherwise returns True """
74 global checkTwistedCached
75 if checkTwistedCached == None:
76 import twisted.copyright
77 checkTwistedCached = (VersionNumber(twisted.copyright.version) >= VersionNumber("2.0.0"))
78 return checkTwistedCached
79
80 class VersionNumber:
81 def __init__(self, vstring):
82 self.varray = [0]
83 index = 0
84 flag = True
85 for c in vstring:
86 if c == '.':
87 self.varray.append(0)
88 index += 1
89 flag = True
90 elif c.isdigit() and flag:
91 self.varray[index] *= 10
92 self.varray[index] += int(c)
93 else:
94 flag = False
95
96 def __cmp__(self, other):
97 i = 0
98 while(True):
99 if i == len(other.varray):
100 if i < len(self.varray):
101 return 1
102 else:
103 return 0
104 if i == len(self.varray):
105 if i < len(other.varray):
106 return -1
107 else:
108 return 0
109
110 if self.varray[i] > other.varray[i]:
111 return 1
112 elif self.varray[i] < other.varray[i]:
113 return -1
114
115 i += 1
116
117
118 if checkTwisted():
119 from twisted.xish.domish import SuxElementStream
120 else:
121 from tlib.domish import SuxElementStream
122 class TextParser:
123 """ Taken from http://xoomer.virgilio.it/dialtone/rsschannel.py """
124
125 def __init__(self, beExtremelyLenient=False):
126 self.root = None
127 self.beExtremelyLenient = beExtremelyLenient
128
129 def parseFile(self, filename):
130 return self.parseString(file(filename).read())
131
132 def parseString(self, data):
133 es = SuxElementStream()
134 es.beExtremelyLenient = self.beExtremelyLenient
135 es.DocumentStartEvent = self.docStart
136 es.DocumentEndEvent = self.docEnd
137 es.ElementEvent = self.element
138 es.parse(data)
139 return self.root
140
141 def docStart(self, e):
142 self.root = e
143
144 def docEnd(self):
145 pass
146
147 def element(self, e):
148 self.root.addChild(e)
149
150