annotate SrvTxtUtils.py @ 614:d16da6e739ef

fix problem with utf8ify trying to encode ints.
author casties
date Mon, 21 Oct 2013 10:36:54 +0200
parents c57d80a649ea
children a71ae589d342
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
458
48b135b089c8 more renovation
casties
parents:
diff changeset
1 """Utility methods for handling XML, reading HTTP, etc"""
48b135b089c8 more renovation
casties
parents:
diff changeset
2
490
6f116b86a226 more new template stuff. moved ImageFile index method to SrvTxtUtils
casties
parents: 464
diff changeset
3 from App.ImageFile import ImageFile
6f116b86a226 more new template stuff. moved ImageFile index method to SrvTxtUtils
casties
parents: 464
diff changeset
4 from App.Common import rfc1123_date
6f116b86a226 more new template stuff. moved ImageFile index method to SrvTxtUtils
casties
parents: 464
diff changeset
5
458
48b135b089c8 more renovation
casties
parents:
diff changeset
6 import sys
490
6f116b86a226 more new template stuff. moved ImageFile index method to SrvTxtUtils
casties
parents: 464
diff changeset
7 import os
6f116b86a226 more new template stuff. moved ImageFile index method to SrvTxtUtils
casties
parents: 464
diff changeset
8 import stat
458
48b135b089c8 more renovation
casties
parents:
diff changeset
9 import urllib
48b135b089c8 more renovation
casties
parents:
diff changeset
10 import logging
613
c57d80a649ea CLOSED - # 281: List of thumbnails verschluckt Seite, wenn odd-scan-position gesetzt ist
casties
parents: 585
diff changeset
11 import time
c57d80a649ea CLOSED - # 281: List of thumbnails verschluckt Seite, wenn odd-scan-position gesetzt ist
casties
parents: 585
diff changeset
12 import re
c57d80a649ea CLOSED - # 281: List of thumbnails verschluckt Seite, wenn odd-scan-position gesetzt ist
casties
parents: 585
diff changeset
13 import string
c57d80a649ea CLOSED - # 281: List of thumbnails verschluckt Seite, wenn odd-scan-position gesetzt ist
casties
parents: 585
diff changeset
14 import datetime
c57d80a649ea CLOSED - # 281: List of thumbnails verschluckt Seite, wenn odd-scan-position gesetzt ist
casties
parents: 585
diff changeset
15 try:
c57d80a649ea CLOSED - # 281: List of thumbnails verschluckt Seite, wenn odd-scan-position gesetzt ist
casties
parents: 585
diff changeset
16 import httplib2
c57d80a649ea CLOSED - # 281: List of thumbnails verschluckt Seite, wenn odd-scan-position gesetzt ist
casties
parents: 585
diff changeset
17 httplib = 'httplib2'
c57d80a649ea CLOSED - # 281: List of thumbnails verschluckt Seite, wenn odd-scan-position gesetzt ist
casties
parents: 585
diff changeset
18 except:
c57d80a649ea CLOSED - # 281: List of thumbnails verschluckt Seite, wenn odd-scan-position gesetzt ist
casties
parents: 585
diff changeset
19 logging.warn("Unable to import httplib2! Falling back to urllib2!")
c57d80a649ea CLOSED - # 281: List of thumbnails verschluckt Seite, wenn odd-scan-position gesetzt ist
casties
parents: 585
diff changeset
20 import urllib2
c57d80a649ea CLOSED - # 281: List of thumbnails verschluckt Seite, wenn odd-scan-position gesetzt ist
casties
parents: 585
diff changeset
21 httplib = 'urllib2'
c57d80a649ea CLOSED - # 281: List of thumbnails verschluckt Seite, wenn odd-scan-position gesetzt ist
casties
parents: 585
diff changeset
22
c57d80a649ea CLOSED - # 281: List of thumbnails verschluckt Seite, wenn odd-scan-position gesetzt ist
casties
parents: 585
diff changeset
23 import xml.etree.ElementTree as ET
c57d80a649ea CLOSED - # 281: List of thumbnails verschluckt Seite, wenn odd-scan-position gesetzt ist
casties
parents: 585
diff changeset
24
614
d16da6e739ef fix problem with utf8ify trying to encode ints.
casties
parents: 613
diff changeset
25 srvTxtUtilsVersion = "1.12.2"
458
48b135b089c8 more renovation
casties
parents:
diff changeset
26
613
c57d80a649ea CLOSED - # 281: List of thumbnails verschluckt Seite, wenn odd-scan-position gesetzt ist
casties
parents: 585
diff changeset
27 map_months = {'en': [u"",
c57d80a649ea CLOSED - # 281: List of thumbnails verschluckt Seite, wenn odd-scan-position gesetzt ist
casties
parents: 585
diff changeset
28 u"January",
c57d80a649ea CLOSED - # 281: List of thumbnails verschluckt Seite, wenn odd-scan-position gesetzt ist
casties
parents: 585
diff changeset
29 u"February",
c57d80a649ea CLOSED - # 281: List of thumbnails verschluckt Seite, wenn odd-scan-position gesetzt ist
casties
parents: 585
diff changeset
30 u"March",
c57d80a649ea CLOSED - # 281: List of thumbnails verschluckt Seite, wenn odd-scan-position gesetzt ist
casties
parents: 585
diff changeset
31 u"April",
c57d80a649ea CLOSED - # 281: List of thumbnails verschluckt Seite, wenn odd-scan-position gesetzt ist
casties
parents: 585
diff changeset
32 u"May",
c57d80a649ea CLOSED - # 281: List of thumbnails verschluckt Seite, wenn odd-scan-position gesetzt ist
casties
parents: 585
diff changeset
33 u"June",
c57d80a649ea CLOSED - # 281: List of thumbnails verschluckt Seite, wenn odd-scan-position gesetzt ist
casties
parents: 585
diff changeset
34 u"July",
c57d80a649ea CLOSED - # 281: List of thumbnails verschluckt Seite, wenn odd-scan-position gesetzt ist
casties
parents: 585
diff changeset
35 u"August",
c57d80a649ea CLOSED - # 281: List of thumbnails verschluckt Seite, wenn odd-scan-position gesetzt ist
casties
parents: 585
diff changeset
36 u"September",
c57d80a649ea CLOSED - # 281: List of thumbnails verschluckt Seite, wenn odd-scan-position gesetzt ist
casties
parents: 585
diff changeset
37 u"October",
c57d80a649ea CLOSED - # 281: List of thumbnails verschluckt Seite, wenn odd-scan-position gesetzt ist
casties
parents: 585
diff changeset
38 u"November",
c57d80a649ea CLOSED - # 281: List of thumbnails verschluckt Seite, wenn odd-scan-position gesetzt ist
casties
parents: 585
diff changeset
39 u"December"],
c57d80a649ea CLOSED - # 281: List of thumbnails verschluckt Seite, wenn odd-scan-position gesetzt ist
casties
parents: 585
diff changeset
40 'de': [u"",
c57d80a649ea CLOSED - # 281: List of thumbnails verschluckt Seite, wenn odd-scan-position gesetzt ist
casties
parents: 585
diff changeset
41 u"Januar",
c57d80a649ea CLOSED - # 281: List of thumbnails verschluckt Seite, wenn odd-scan-position gesetzt ist
casties
parents: 585
diff changeset
42 u"Februar",
c57d80a649ea CLOSED - # 281: List of thumbnails verschluckt Seite, wenn odd-scan-position gesetzt ist
casties
parents: 585
diff changeset
43 u"M\u00e4rz",
c57d80a649ea CLOSED - # 281: List of thumbnails verschluckt Seite, wenn odd-scan-position gesetzt ist
casties
parents: 585
diff changeset
44 u"April",
c57d80a649ea CLOSED - # 281: List of thumbnails verschluckt Seite, wenn odd-scan-position gesetzt ist
casties
parents: 585
diff changeset
45 u"Mai",
c57d80a649ea CLOSED - # 281: List of thumbnails verschluckt Seite, wenn odd-scan-position gesetzt ist
casties
parents: 585
diff changeset
46 u"Juni",
c57d80a649ea CLOSED - # 281: List of thumbnails verschluckt Seite, wenn odd-scan-position gesetzt ist
casties
parents: 585
diff changeset
47 u"Juli",
c57d80a649ea CLOSED - # 281: List of thumbnails verschluckt Seite, wenn odd-scan-position gesetzt ist
casties
parents: 585
diff changeset
48 u"August",
c57d80a649ea CLOSED - # 281: List of thumbnails verschluckt Seite, wenn odd-scan-position gesetzt ist
casties
parents: 585
diff changeset
49 u"September",
c57d80a649ea CLOSED - # 281: List of thumbnails verschluckt Seite, wenn odd-scan-position gesetzt ist
casties
parents: 585
diff changeset
50 u"Oktober",
c57d80a649ea CLOSED - # 281: List of thumbnails verschluckt Seite, wenn odd-scan-position gesetzt ist
casties
parents: 585
diff changeset
51 u"November",
c57d80a649ea CLOSED - # 281: List of thumbnails verschluckt Seite, wenn odd-scan-position gesetzt ist
casties
parents: 585
diff changeset
52 u"Dezember"]}
458
48b135b089c8 more renovation
casties
parents:
diff changeset
53
48b135b089c8 more renovation
casties
parents:
diff changeset
54 def getInt(number, default=0):
48b135b089c8 more renovation
casties
parents:
diff changeset
55 """returns always an int (0 in case of problems)"""
48b135b089c8 more renovation
casties
parents:
diff changeset
56 try:
48b135b089c8 more renovation
casties
parents:
diff changeset
57 return int(number)
48b135b089c8 more renovation
casties
parents:
diff changeset
58 except:
48b135b089c8 more renovation
casties
parents:
diff changeset
59 return int(default)
48b135b089c8 more renovation
casties
parents:
diff changeset
60
490
6f116b86a226 more new template stuff. moved ImageFile index method to SrvTxtUtils
casties
parents: 464
diff changeset
61 def getAt(array, idx, default=None):
6f116b86a226 more new template stuff. moved ImageFile index method to SrvTxtUtils
casties
parents: 464
diff changeset
62 """returns element idx from array or default (in case of problems)"""
6f116b86a226 more new template stuff. moved ImageFile index method to SrvTxtUtils
casties
parents: 464
diff changeset
63 try:
6f116b86a226 more new template stuff. moved ImageFile index method to SrvTxtUtils
casties
parents: 464
diff changeset
64 return array[idx]
6f116b86a226 more new template stuff. moved ImageFile index method to SrvTxtUtils
casties
parents: 464
diff changeset
65 except:
6f116b86a226 more new template stuff. moved ImageFile index method to SrvTxtUtils
casties
parents: 464
diff changeset
66 return default
6f116b86a226 more new template stuff. moved ImageFile index method to SrvTxtUtils
casties
parents: 464
diff changeset
67
514
c55e376be01b search works even with unicode...
casties
parents: 490
diff changeset
68 def unicodify(s):
c55e376be01b search works even with unicode...
casties
parents: 490
diff changeset
69 """decode str (utf-8 or latin-1 representation) into unicode object"""
c55e376be01b search works even with unicode...
casties
parents: 490
diff changeset
70 if not s:
c55e376be01b search works even with unicode...
casties
parents: 490
diff changeset
71 return u""
c55e376be01b search works even with unicode...
casties
parents: 490
diff changeset
72 if isinstance(s, str):
c55e376be01b search works even with unicode...
casties
parents: 490
diff changeset
73 try:
c55e376be01b search works even with unicode...
casties
parents: 490
diff changeset
74 return s.decode('utf-8')
c55e376be01b search works even with unicode...
casties
parents: 490
diff changeset
75 except:
c55e376be01b search works even with unicode...
casties
parents: 490
diff changeset
76 return s.decode('latin-1')
c55e376be01b search works even with unicode...
casties
parents: 490
diff changeset
77 else:
613
c57d80a649ea CLOSED - # 281: List of thumbnails verschluckt Seite, wenn odd-scan-position gesetzt ist
casties
parents: 585
diff changeset
78 return s
514
c55e376be01b search works even with unicode...
casties
parents: 490
diff changeset
79
c55e376be01b search works even with unicode...
casties
parents: 490
diff changeset
80 def utf8ify(s):
c55e376be01b search works even with unicode...
casties
parents: 490
diff changeset
81 """encode unicode object or string into byte string in utf-8 representation.
c55e376be01b search works even with unicode...
casties
parents: 490
diff changeset
82 assumes string objects to be utf-8"""
c55e376be01b search works even with unicode...
casties
parents: 490
diff changeset
83 if not s:
c55e376be01b search works even with unicode...
casties
parents: 490
diff changeset
84 return ""
613
c57d80a649ea CLOSED - # 281: List of thumbnails verschluckt Seite, wenn odd-scan-position gesetzt ist
casties
parents: 585
diff changeset
85 if isinstance(s, str):
c57d80a649ea CLOSED - # 281: List of thumbnails verschluckt Seite, wenn odd-scan-position gesetzt ist
casties
parents: 585
diff changeset
86 return s
614
d16da6e739ef fix problem with utf8ify trying to encode ints.
casties
parents: 613
diff changeset
87 elif isinstance(s, unicode):
d16da6e739ef fix problem with utf8ify trying to encode ints.
casties
parents: 613
diff changeset
88 return s.encode('utf-8')
613
c57d80a649ea CLOSED - # 281: List of thumbnails verschluckt Seite, wenn odd-scan-position gesetzt ist
casties
parents: 585
diff changeset
89 else:
614
d16da6e739ef fix problem with utf8ify trying to encode ints.
casties
parents: 613
diff changeset
90 return str(s)
514
c55e376be01b search works even with unicode...
casties
parents: 490
diff changeset
91
490
6f116b86a226 more new template stuff. moved ImageFile index method to SrvTxtUtils
casties
parents: 464
diff changeset
92 def getText(node, recursive=0):
613
c57d80a649ea CLOSED - # 281: List of thumbnails verschluckt Seite, wenn odd-scan-position gesetzt ist
casties
parents: 585
diff changeset
93 """returns all text content of a (etree) node and its subnodes"""
458
48b135b089c8 more renovation
casties
parents:
diff changeset
94 if node is None:
490
6f116b86a226 more new template stuff. moved ImageFile index method to SrvTxtUtils
casties
parents: 464
diff changeset
95 return ''
6f116b86a226 more new template stuff. moved ImageFile index method to SrvTxtUtils
casties
parents: 464
diff changeset
96
458
48b135b089c8 more renovation
casties
parents:
diff changeset
97 # ElementTree:
490
6f116b86a226 more new template stuff. moved ImageFile index method to SrvTxtUtils
casties
parents: 464
diff changeset
98 text = node.text or ''
458
48b135b089c8 more renovation
casties
parents:
diff changeset
99 for e in node:
490
6f116b86a226 more new template stuff. moved ImageFile index method to SrvTxtUtils
casties
parents: 464
diff changeset
100 if recursive:
6f116b86a226 more new template stuff. moved ImageFile index method to SrvTxtUtils
casties
parents: 464
diff changeset
101 text += getText(e)
6f116b86a226 more new template stuff. moved ImageFile index method to SrvTxtUtils
casties
parents: 464
diff changeset
102 else:
6f116b86a226 more new template stuff. moved ImageFile index method to SrvTxtUtils
casties
parents: 464
diff changeset
103 text += e.text or ''
458
48b135b089c8 more renovation
casties
parents:
diff changeset
104 if e.tail:
48b135b089c8 more renovation
casties
parents:
diff changeset
105 text += e.tail
48b135b089c8 more renovation
casties
parents:
diff changeset
106
48b135b089c8 more renovation
casties
parents:
diff changeset
107 # 4Suite:
48b135b089c8 more renovation
casties
parents:
diff changeset
108 #nodelist=node.childNodes
48b135b089c8 more renovation
casties
parents:
diff changeset
109 #text = ""
48b135b089c8 more renovation
casties
parents:
diff changeset
110 #for n in nodelist:
48b135b089c8 more renovation
casties
parents:
diff changeset
111 # if n.nodeType == node.TEXT_NODE:
48b135b089c8 more renovation
casties
parents:
diff changeset
112 # text = text + n.data
48b135b089c8 more renovation
casties
parents:
diff changeset
113
48b135b089c8 more renovation
casties
parents:
diff changeset
114 return text
48b135b089c8 more renovation
casties
parents:
diff changeset
115
48b135b089c8 more renovation
casties
parents:
diff changeset
116
613
c57d80a649ea CLOSED - # 281: List of thumbnails verschluckt Seite, wenn odd-scan-position gesetzt ist
casties
parents: 585
diff changeset
117 def serialize(node):
c57d80a649ea CLOSED - # 281: List of thumbnails verschluckt Seite, wenn odd-scan-position gesetzt ist
casties
parents: 585
diff changeset
118 """returns a string containing an XML snippet of (etree) node"""
c57d80a649ea CLOSED - # 281: List of thumbnails verschluckt Seite, wenn odd-scan-position gesetzt ist
casties
parents: 585
diff changeset
119 s = ET.tostring(node, 'UTF-8')
c57d80a649ea CLOSED - # 281: List of thumbnails verschluckt Seite, wenn odd-scan-position gesetzt ist
casties
parents: 585
diff changeset
120 # snip off XML declaration
c57d80a649ea CLOSED - # 281: List of thumbnails verschluckt Seite, wenn odd-scan-position gesetzt ist
casties
parents: 585
diff changeset
121 if s.startswith('<?xml'):
c57d80a649ea CLOSED - # 281: List of thumbnails verschluckt Seite, wenn odd-scan-position gesetzt ist
casties
parents: 585
diff changeset
122 i = s.find('?>')
c57d80a649ea CLOSED - # 281: List of thumbnails verschluckt Seite, wenn odd-scan-position gesetzt ist
casties
parents: 585
diff changeset
123 return s[i+3:]
458
48b135b089c8 more renovation
casties
parents:
diff changeset
124
613
c57d80a649ea CLOSED - # 281: List of thumbnails verschluckt Seite, wenn odd-scan-position gesetzt ist
casties
parents: 585
diff changeset
125 return s
c57d80a649ea CLOSED - # 281: List of thumbnails verschluckt Seite, wenn odd-scan-position gesetzt ist
casties
parents: 585
diff changeset
126
c57d80a649ea CLOSED - # 281: List of thumbnails verschluckt Seite, wenn odd-scan-position gesetzt ist
casties
parents: 585
diff changeset
127
c57d80a649ea CLOSED - # 281: List of thumbnails verschluckt Seite, wenn odd-scan-position gesetzt ist
casties
parents: 585
diff changeset
128 def getMonthName(mon, lang):
c57d80a649ea CLOSED - # 281: List of thumbnails verschluckt Seite, wenn odd-scan-position gesetzt ist
casties
parents: 585
diff changeset
129 """returns the name of the month mon in the language lang"""
c57d80a649ea CLOSED - # 281: List of thumbnails verschluckt Seite, wenn odd-scan-position gesetzt ist
casties
parents: 585
diff changeset
130 return map_months[lang][mon]
c57d80a649ea CLOSED - # 281: List of thumbnails verschluckt Seite, wenn odd-scan-position gesetzt ist
casties
parents: 585
diff changeset
131
c57d80a649ea CLOSED - # 281: List of thumbnails verschluckt Seite, wenn odd-scan-position gesetzt ist
casties
parents: 585
diff changeset
132
c57d80a649ea CLOSED - # 281: List of thumbnails verschluckt Seite, wenn odd-scan-position gesetzt ist
casties
parents: 585
diff changeset
133 def getDateString(date=None, lang='en', withYear=True, monthNames=True, abbrev=False):
c57d80a649ea CLOSED - # 281: List of thumbnails verschluckt Seite, wenn odd-scan-position gesetzt ist
casties
parents: 585
diff changeset
134 """Return formatted date string."""
c57d80a649ea CLOSED - # 281: List of thumbnails verschluckt Seite, wenn odd-scan-position gesetzt ist
casties
parents: 585
diff changeset
135 if date is None:
c57d80a649ea CLOSED - # 281: List of thumbnails verschluckt Seite, wenn odd-scan-position gesetzt ist
casties
parents: 585
diff changeset
136 return None
c57d80a649ea CLOSED - # 281: List of thumbnails verschluckt Seite, wenn odd-scan-position gesetzt ist
casties
parents: 585
diff changeset
137
c57d80a649ea CLOSED - # 281: List of thumbnails verschluckt Seite, wenn odd-scan-position gesetzt ist
casties
parents: 585
diff changeset
138 ds = None
c57d80a649ea CLOSED - # 281: List of thumbnails verschluckt Seite, wenn odd-scan-position gesetzt ist
casties
parents: 585
diff changeset
139 if callable(date.day):
c57d80a649ea CLOSED - # 281: List of thumbnails verschluckt Seite, wenn odd-scan-position gesetzt ist
casties
parents: 585
diff changeset
140 # callable members
c57d80a649ea CLOSED - # 281: List of thumbnails verschluckt Seite, wenn odd-scan-position gesetzt ist
casties
parents: 585
diff changeset
141 day = date.day()
c57d80a649ea CLOSED - # 281: List of thumbnails verschluckt Seite, wenn odd-scan-position gesetzt ist
casties
parents: 585
diff changeset
142 month = date.month()
c57d80a649ea CLOSED - # 281: List of thumbnails verschluckt Seite, wenn odd-scan-position gesetzt ist
casties
parents: 585
diff changeset
143 year = date.year()
c57d80a649ea CLOSED - # 281: List of thumbnails verschluckt Seite, wenn odd-scan-position gesetzt ist
casties
parents: 585
diff changeset
144 else:
c57d80a649ea CLOSED - # 281: List of thumbnails verschluckt Seite, wenn odd-scan-position gesetzt ist
casties
parents: 585
diff changeset
145 # data members
c57d80a649ea CLOSED - # 281: List of thumbnails verschluckt Seite, wenn odd-scan-position gesetzt ist
casties
parents: 585
diff changeset
146 day = date.day
c57d80a649ea CLOSED - # 281: List of thumbnails verschluckt Seite, wenn odd-scan-position gesetzt ist
casties
parents: 585
diff changeset
147 month = date.month
c57d80a649ea CLOSED - # 281: List of thumbnails verschluckt Seite, wenn odd-scan-position gesetzt ist
casties
parents: 585
diff changeset
148 year = date.year
c57d80a649ea CLOSED - # 281: List of thumbnails verschluckt Seite, wenn odd-scan-position gesetzt ist
casties
parents: 585
diff changeset
149
c57d80a649ea CLOSED - # 281: List of thumbnails verschluckt Seite, wenn odd-scan-position gesetzt ist
casties
parents: 585
diff changeset
150 if lang.lower() == 'en':
c57d80a649ea CLOSED - # 281: List of thumbnails verschluckt Seite, wenn odd-scan-position gesetzt ist
casties
parents: 585
diff changeset
151 ds = "%s %s"%(getMonthName(month, lang), day)
c57d80a649ea CLOSED - # 281: List of thumbnails verschluckt Seite, wenn odd-scan-position gesetzt ist
casties
parents: 585
diff changeset
152 if withYear:
c57d80a649ea CLOSED - # 281: List of thumbnails verschluckt Seite, wenn odd-scan-position gesetzt ist
casties
parents: 585
diff changeset
153 ds += ", %s"%year
c57d80a649ea CLOSED - # 281: List of thumbnails verschluckt Seite, wenn odd-scan-position gesetzt ist
casties
parents: 585
diff changeset
154
c57d80a649ea CLOSED - # 281: List of thumbnails verschluckt Seite, wenn odd-scan-position gesetzt ist
casties
parents: 585
diff changeset
155 elif lang.lower() == 'de':
c57d80a649ea CLOSED - # 281: List of thumbnails verschluckt Seite, wenn odd-scan-position gesetzt ist
casties
parents: 585
diff changeset
156 ds = "%s. %s"%(day, getMonthName(month, lang))
c57d80a649ea CLOSED - # 281: List of thumbnails verschluckt Seite, wenn odd-scan-position gesetzt ist
casties
parents: 585
diff changeset
157 if withYear:
c57d80a649ea CLOSED - # 281: List of thumbnails verschluckt Seite, wenn odd-scan-position gesetzt ist
casties
parents: 585
diff changeset
158 ds += " %s"%year
c57d80a649ea CLOSED - # 281: List of thumbnails verschluckt Seite, wenn odd-scan-position gesetzt ist
casties
parents: 585
diff changeset
159
c57d80a649ea CLOSED - # 281: List of thumbnails verschluckt Seite, wenn odd-scan-position gesetzt ist
casties
parents: 585
diff changeset
160 elif lang.lower() == 'iso':
c57d80a649ea CLOSED - # 281: List of thumbnails verschluckt Seite, wenn odd-scan-position gesetzt ist
casties
parents: 585
diff changeset
161 ds = date.isoformat()
c57d80a649ea CLOSED - # 281: List of thumbnails verschluckt Seite, wenn odd-scan-position gesetzt ist
casties
parents: 585
diff changeset
162
c57d80a649ea CLOSED - # 281: List of thumbnails verschluckt Seite, wenn odd-scan-position gesetzt ist
casties
parents: 585
diff changeset
163 return ds
c57d80a649ea CLOSED - # 281: List of thumbnails verschluckt Seite, wenn odd-scan-position gesetzt ist
casties
parents: 585
diff changeset
164
c57d80a649ea CLOSED - # 281: List of thumbnails verschluckt Seite, wenn odd-scan-position gesetzt ist
casties
parents: 585
diff changeset
165
c57d80a649ea CLOSED - # 281: List of thumbnails verschluckt Seite, wenn odd-scan-position gesetzt ist
casties
parents: 585
diff changeset
166 def getDate(date):
c57d80a649ea CLOSED - # 281: List of thumbnails verschluckt Seite, wenn odd-scan-position gesetzt ist
casties
parents: 585
diff changeset
167 """return date object from date or datetime date."""
c57d80a649ea CLOSED - # 281: List of thumbnails verschluckt Seite, wenn odd-scan-position gesetzt ist
casties
parents: 585
diff changeset
168 if isinstance(date, datetime.datetime):
c57d80a649ea CLOSED - # 281: List of thumbnails verschluckt Seite, wenn odd-scan-position gesetzt ist
casties
parents: 585
diff changeset
169 # strip time
c57d80a649ea CLOSED - # 281: List of thumbnails verschluckt Seite, wenn odd-scan-position gesetzt ist
casties
parents: 585
diff changeset
170 return date.date()
c57d80a649ea CLOSED - # 281: List of thumbnails verschluckt Seite, wenn odd-scan-position gesetzt ist
casties
parents: 585
diff changeset
171
c57d80a649ea CLOSED - # 281: List of thumbnails verschluckt Seite, wenn odd-scan-position gesetzt ist
casties
parents: 585
diff changeset
172 return date
c57d80a649ea CLOSED - # 281: List of thumbnails verschluckt Seite, wenn odd-scan-position gesetzt ist
casties
parents: 585
diff changeset
173
c57d80a649ea CLOSED - # 281: List of thumbnails verschluckt Seite, wenn odd-scan-position gesetzt ist
casties
parents: 585
diff changeset
174
c57d80a649ea CLOSED - # 281: List of thumbnails verschluckt Seite, wenn odd-scan-position gesetzt ist
casties
parents: 585
diff changeset
175 def getDatetime(date):
c57d80a649ea CLOSED - # 281: List of thumbnails verschluckt Seite, wenn odd-scan-position gesetzt ist
casties
parents: 585
diff changeset
176 """return datetime object from date or datetime date."""
c57d80a649ea CLOSED - # 281: List of thumbnails verschluckt Seite, wenn odd-scan-position gesetzt ist
casties
parents: 585
diff changeset
177 if isinstance(date, datetime.date):
c57d80a649ea CLOSED - # 281: List of thumbnails verschluckt Seite, wenn odd-scan-position gesetzt ist
casties
parents: 585
diff changeset
178 # add time 0:00
c57d80a649ea CLOSED - # 281: List of thumbnails verschluckt Seite, wenn odd-scan-position gesetzt ist
casties
parents: 585
diff changeset
179 return datetime.datetime.combine(date, datetime.time())
c57d80a649ea CLOSED - # 281: List of thumbnails verschluckt Seite, wenn odd-scan-position gesetzt ist
casties
parents: 585
diff changeset
180
c57d80a649ea CLOSED - # 281: List of thumbnails verschluckt Seite, wenn odd-scan-position gesetzt ist
casties
parents: 585
diff changeset
181 return date
c57d80a649ea CLOSED - # 281: List of thumbnails verschluckt Seite, wenn odd-scan-position gesetzt ist
casties
parents: 585
diff changeset
182
c57d80a649ea CLOSED - # 281: List of thumbnails verschluckt Seite, wenn odd-scan-position gesetzt ist
casties
parents: 585
diff changeset
183
c57d80a649ea CLOSED - # 281: List of thumbnails verschluckt Seite, wenn odd-scan-position gesetzt ist
casties
parents: 585
diff changeset
184 def getHttpData(url, data=None, num_tries=3, timeout=10, username=None, password=None, cache=None, insecure=False, noExceptions=False):
458
48b135b089c8 more renovation
casties
parents:
diff changeset
185 """returns result from url+data HTTP request"""
48b135b089c8 more renovation
casties
parents:
diff changeset
186 # we do GET (by appending data to url)
48b135b089c8 more renovation
casties
parents:
diff changeset
187 if isinstance(data, str) or isinstance(data, unicode):
48b135b089c8 more renovation
casties
parents:
diff changeset
188 # if data is string then append
48b135b089c8 more renovation
casties
parents:
diff changeset
189 url = "%s?%s"%(url,data)
48b135b089c8 more renovation
casties
parents:
diff changeset
190 elif isinstance(data, dict) or isinstance(data, list) or isinstance(data, tuple):
48b135b089c8 more renovation
casties
parents:
diff changeset
191 # urlencode
48b135b089c8 more renovation
casties
parents:
diff changeset
192 url = "%s?%s"%(url,urllib.urlencode(data))
613
c57d80a649ea CLOSED - # 281: List of thumbnails verschluckt Seite, wenn odd-scan-position gesetzt ist
casties
parents: 585
diff changeset
193
458
48b135b089c8 more renovation
casties
parents:
diff changeset
194 errmsg = None
613
c57d80a649ea CLOSED - # 281: List of thumbnails verschluckt Seite, wenn odd-scan-position gesetzt ist
casties
parents: 585
diff changeset
195 if httplib == 'httplib2':
c57d80a649ea CLOSED - # 281: List of thumbnails verschluckt Seite, wenn odd-scan-position gesetzt ist
casties
parents: 585
diff changeset
196 # use httplib2
c57d80a649ea CLOSED - # 281: List of thumbnails verschluckt Seite, wenn odd-scan-position gesetzt ist
casties
parents: 585
diff changeset
197 for cnt in range(num_tries):
c57d80a649ea CLOSED - # 281: List of thumbnails verschluckt Seite, wenn odd-scan-position gesetzt ist
casties
parents: 585
diff changeset
198 try:
c57d80a649ea CLOSED - # 281: List of thumbnails verschluckt Seite, wenn odd-scan-position gesetzt ist
casties
parents: 585
diff changeset
199 logging.debug("getHttp(lib2)Data(#%s %ss) url=%s"%(cnt+1,timeout,url))
c57d80a649ea CLOSED - # 281: List of thumbnails verschluckt Seite, wenn odd-scan-position gesetzt ist
casties
parents: 585
diff changeset
200 h = httplib2.Http(cache=cache, timeout=float(timeout), disable_ssl_certificate_validation=insecure)
c57d80a649ea CLOSED - # 281: List of thumbnails verschluckt Seite, wenn odd-scan-position gesetzt ist
casties
parents: 585
diff changeset
201 if username:
c57d80a649ea CLOSED - # 281: List of thumbnails verschluckt Seite, wenn odd-scan-position gesetzt ist
casties
parents: 585
diff changeset
202 h.add_credentials(username, password)
c57d80a649ea CLOSED - # 281: List of thumbnails verschluckt Seite, wenn odd-scan-position gesetzt ist
casties
parents: 585
diff changeset
203
c57d80a649ea CLOSED - # 281: List of thumbnails verschluckt Seite, wenn odd-scan-position gesetzt ist
casties
parents: 585
diff changeset
204 resp, data = h.request(url)
c57d80a649ea CLOSED - # 281: List of thumbnails verschluckt Seite, wenn odd-scan-position gesetzt ist
casties
parents: 585
diff changeset
205 return data
c57d80a649ea CLOSED - # 281: List of thumbnails verschluckt Seite, wenn odd-scan-position gesetzt ist
casties
parents: 585
diff changeset
206
c57d80a649ea CLOSED - # 281: List of thumbnails verschluckt Seite, wenn odd-scan-position gesetzt ist
casties
parents: 585
diff changeset
207 except httplib2.HttpLib2Error, e:
c57d80a649ea CLOSED - # 281: List of thumbnails verschluckt Seite, wenn odd-scan-position gesetzt ist
casties
parents: 585
diff changeset
208 logging.error("getHttp(lib2)Data: HTTP error(%s): %s"%(e.code,e))
c57d80a649ea CLOSED - # 281: List of thumbnails verschluckt Seite, wenn odd-scan-position gesetzt ist
casties
parents: 585
diff changeset
209 errmsg = str(e)
c57d80a649ea CLOSED - # 281: List of thumbnails verschluckt Seite, wenn odd-scan-position gesetzt ist
casties
parents: 585
diff changeset
210 # stop trying
c57d80a649ea CLOSED - # 281: List of thumbnails verschluckt Seite, wenn odd-scan-position gesetzt ist
casties
parents: 585
diff changeset
211 break
c57d80a649ea CLOSED - # 281: List of thumbnails verschluckt Seite, wenn odd-scan-position gesetzt ist
casties
parents: 585
diff changeset
212
c57d80a649ea CLOSED - # 281: List of thumbnails verschluckt Seite, wenn odd-scan-position gesetzt ist
casties
parents: 585
diff changeset
213 else:
c57d80a649ea CLOSED - # 281: List of thumbnails verschluckt Seite, wenn odd-scan-position gesetzt ist
casties
parents: 585
diff changeset
214 # use urllib2
c57d80a649ea CLOSED - # 281: List of thumbnails verschluckt Seite, wenn odd-scan-position gesetzt ist
casties
parents: 585
diff changeset
215 response = None
c57d80a649ea CLOSED - # 281: List of thumbnails verschluckt Seite, wenn odd-scan-position gesetzt ist
casties
parents: 585
diff changeset
216 for cnt in range(num_tries):
c57d80a649ea CLOSED - # 281: List of thumbnails verschluckt Seite, wenn odd-scan-position gesetzt ist
casties
parents: 585
diff changeset
217 try:
c57d80a649ea CLOSED - # 281: List of thumbnails verschluckt Seite, wenn odd-scan-position gesetzt ist
casties
parents: 585
diff changeset
218 logging.debug("getHttpData(#%s %ss) url=%s"%(cnt+1,timeout,url))
c57d80a649ea CLOSED - # 281: List of thumbnails verschluckt Seite, wenn odd-scan-position gesetzt ist
casties
parents: 585
diff changeset
219 if sys.version_info < (2, 6):
c57d80a649ea CLOSED - # 281: List of thumbnails verschluckt Seite, wenn odd-scan-position gesetzt ist
casties
parents: 585
diff changeset
220 # set timeout on socket -- ugly :-(
c57d80a649ea CLOSED - # 281: List of thumbnails verschluckt Seite, wenn odd-scan-position gesetzt ist
casties
parents: 585
diff changeset
221 import socket
c57d80a649ea CLOSED - # 281: List of thumbnails verschluckt Seite, wenn odd-scan-position gesetzt ist
casties
parents: 585
diff changeset
222 socket.setdefaulttimeout(float(timeout))
c57d80a649ea CLOSED - # 281: List of thumbnails verschluckt Seite, wenn odd-scan-position gesetzt ist
casties
parents: 585
diff changeset
223 response = urllib2.urlopen(url)
c57d80a649ea CLOSED - # 281: List of thumbnails verschluckt Seite, wenn odd-scan-position gesetzt ist
casties
parents: 585
diff changeset
224 else:
c57d80a649ea CLOSED - # 281: List of thumbnails verschluckt Seite, wenn odd-scan-position gesetzt ist
casties
parents: 585
diff changeset
225 # timeout as parameter
c57d80a649ea CLOSED - # 281: List of thumbnails verschluckt Seite, wenn odd-scan-position gesetzt ist
casties
parents: 585
diff changeset
226 response = urllib2.urlopen(url,timeout=float(timeout))
c57d80a649ea CLOSED - # 281: List of thumbnails verschluckt Seite, wenn odd-scan-position gesetzt ist
casties
parents: 585
diff changeset
227 # check result?
c57d80a649ea CLOSED - # 281: List of thumbnails verschluckt Seite, wenn odd-scan-position gesetzt ist
casties
parents: 585
diff changeset
228 data = response.read()
c57d80a649ea CLOSED - # 281: List of thumbnails verschluckt Seite, wenn odd-scan-position gesetzt ist
casties
parents: 585
diff changeset
229 response.close()
c57d80a649ea CLOSED - # 281: List of thumbnails verschluckt Seite, wenn odd-scan-position gesetzt ist
casties
parents: 585
diff changeset
230 return data
458
48b135b089c8 more renovation
casties
parents:
diff changeset
231
613
c57d80a649ea CLOSED - # 281: List of thumbnails verschluckt Seite, wenn odd-scan-position gesetzt ist
casties
parents: 585
diff changeset
232 except urllib2.HTTPError, e:
c57d80a649ea CLOSED - # 281: List of thumbnails verschluckt Seite, wenn odd-scan-position gesetzt ist
casties
parents: 585
diff changeset
233 logging.error("getHttpData: HTTP error(%s): %s"%(e.code,e))
c57d80a649ea CLOSED - # 281: List of thumbnails verschluckt Seite, wenn odd-scan-position gesetzt ist
casties
parents: 585
diff changeset
234 errmsg = str(e)
c57d80a649ea CLOSED - # 281: List of thumbnails verschluckt Seite, wenn odd-scan-position gesetzt ist
casties
parents: 585
diff changeset
235 # stop trying
c57d80a649ea CLOSED - # 281: List of thumbnails verschluckt Seite, wenn odd-scan-position gesetzt ist
casties
parents: 585
diff changeset
236 break
c57d80a649ea CLOSED - # 281: List of thumbnails verschluckt Seite, wenn odd-scan-position gesetzt ist
casties
parents: 585
diff changeset
237 except urllib2.URLError, e:
c57d80a649ea CLOSED - # 281: List of thumbnails verschluckt Seite, wenn odd-scan-position gesetzt ist
casties
parents: 585
diff changeset
238 logging.error("getHttpData: URLLIB error(%s): %s"%(e.reason,e))
c57d80a649ea CLOSED - # 281: List of thumbnails verschluckt Seite, wenn odd-scan-position gesetzt ist
casties
parents: 585
diff changeset
239 errmsg = str(e)
c57d80a649ea CLOSED - # 281: List of thumbnails verschluckt Seite, wenn odd-scan-position gesetzt ist
casties
parents: 585
diff changeset
240 # stop trying
c57d80a649ea CLOSED - # 281: List of thumbnails verschluckt Seite, wenn odd-scan-position gesetzt ist
casties
parents: 585
diff changeset
241 #break
458
48b135b089c8 more renovation
casties
parents:
diff changeset
242
546
2928037f9a75 ASSIGNED - # 249: Annotations shared in groups
casties
parents: 528
diff changeset
243 if noExceptions:
2928037f9a75 ASSIGNED - # 249: Annotations shared in groups
casties
parents: 528
diff changeset
244 return None
2928037f9a75 ASSIGNED - # 249: Annotations shared in groups
casties
parents: 528
diff changeset
245
458
48b135b089c8 more renovation
casties
parents:
diff changeset
246 raise IOError("ERROR fetching HTTP data from %s: %s"%(url,errmsg))
48b135b089c8 more renovation
casties
parents:
diff changeset
247 #return None
48b135b089c8 more renovation
casties
parents:
diff changeset
248
490
6f116b86a226 more new template stuff. moved ImageFile index method to SrvTxtUtils
casties
parents: 464
diff changeset
249
6f116b86a226 more new template stuff. moved ImageFile index method to SrvTxtUtils
casties
parents: 464
diff changeset
250 def refreshingImageFileIndexHtml(self, REQUEST, RESPONSE):
6f116b86a226 more new template stuff. moved ImageFile index method to SrvTxtUtils
casties
parents: 464
diff changeset
251 """index_html method for App.ImageFile that updates the file info for each request."""
6f116b86a226 more new template stuff. moved ImageFile index method to SrvTxtUtils
casties
parents: 464
diff changeset
252 stat_info = os.stat(self.path)
6f116b86a226 more new template stuff. moved ImageFile index method to SrvTxtUtils
casties
parents: 464
diff changeset
253 self.size = stat_info[stat.ST_SIZE]
6f116b86a226 more new template stuff. moved ImageFile index method to SrvTxtUtils
casties
parents: 464
diff changeset
254 self.lmt = float(stat_info[stat.ST_MTIME]) or time.time()
6f116b86a226 more new template stuff. moved ImageFile index method to SrvTxtUtils
casties
parents: 464
diff changeset
255 self.lmh = rfc1123_date(self.lmt)
6f116b86a226 more new template stuff. moved ImageFile index method to SrvTxtUtils
casties
parents: 464
diff changeset
256 # call original method
6f116b86a226 more new template stuff. moved ImageFile index method to SrvTxtUtils
casties
parents: 464
diff changeset
257 return ImageFile.index_html(self, REQUEST, RESPONSE)
6f116b86a226 more new template stuff. moved ImageFile index method to SrvTxtUtils
casties
parents: 464
diff changeset
258
585
83eeed69793f new annotator layer for images.
casties
parents: 553
diff changeset
259
613
c57d80a649ea CLOSED - # 281: List of thumbnails verschluckt Seite, wenn odd-scan-position gesetzt ist
casties
parents: 585
diff changeset
260 def shortenString(s, l, ellipsis='...'):
c57d80a649ea CLOSED - # 281: List of thumbnails verschluckt Seite, wenn odd-scan-position gesetzt ist
casties
parents: 585
diff changeset
261 """returns a string of length l (or l-1) by omitting characters in the middle of s, replacing with ellipsis."""
c57d80a649ea CLOSED - # 281: List of thumbnails verschluckt Seite, wenn odd-scan-position gesetzt ist
casties
parents: 585
diff changeset
262 if len(s) <= l:
c57d80a649ea CLOSED - # 281: List of thumbnails verschluckt Seite, wenn odd-scan-position gesetzt ist
casties
parents: 585
diff changeset
263 return s
c57d80a649ea CLOSED - # 281: List of thumbnails verschluckt Seite, wenn odd-scan-position gesetzt ist
casties
parents: 585
diff changeset
264
c57d80a649ea CLOSED - # 281: List of thumbnails verschluckt Seite, wenn odd-scan-position gesetzt ist
casties
parents: 585
diff changeset
265 l1 = int((l - len(ellipsis)) / 2)
c57d80a649ea CLOSED - # 281: List of thumbnails verschluckt Seite, wenn odd-scan-position gesetzt ist
casties
parents: 585
diff changeset
266 return "%s%s%s"%(s[:l1],ellipsis,s[-l1:])
c57d80a649ea CLOSED - # 281: List of thumbnails verschluckt Seite, wenn odd-scan-position gesetzt ist
casties
parents: 585
diff changeset
267
c57d80a649ea CLOSED - # 281: List of thumbnails verschluckt Seite, wenn odd-scan-position gesetzt ist
casties
parents: 585
diff changeset
268
c57d80a649ea CLOSED - # 281: List of thumbnails verschluckt Seite, wenn odd-scan-position gesetzt ist
casties
parents: 585
diff changeset
269 def sqlName(s, lc=True, more=''):
c57d80a649ea CLOSED - # 281: List of thumbnails verschluckt Seite, wenn odd-scan-position gesetzt ist
casties
parents: 585
diff changeset
270 """returns restricted ASCII-only version of string"""
c57d80a649ea CLOSED - # 281: List of thumbnails verschluckt Seite, wenn odd-scan-position gesetzt ist
casties
parents: 585
diff changeset
271 if s is None:
c57d80a649ea CLOSED - # 281: List of thumbnails verschluckt Seite, wenn odd-scan-position gesetzt ist
casties
parents: 585
diff changeset
272 return ""
c57d80a649ea CLOSED - # 281: List of thumbnails verschluckt Seite, wenn odd-scan-position gesetzt ist
casties
parents: 585
diff changeset
273
c57d80a649ea CLOSED - # 281: List of thumbnails verschluckt Seite, wenn odd-scan-position gesetzt ist
casties
parents: 585
diff changeset
274 if not isinstance(s, basestring):
c57d80a649ea CLOSED - # 281: List of thumbnails verschluckt Seite, wenn odd-scan-position gesetzt ist
casties
parents: 585
diff changeset
275 # make string object
c57d80a649ea CLOSED - # 281: List of thumbnails verschluckt Seite, wenn odd-scan-position gesetzt ist
casties
parents: 585
diff changeset
276 s = str(s)
c57d80a649ea CLOSED - # 281: List of thumbnails verschluckt Seite, wenn odd-scan-position gesetzt ist
casties
parents: 585
diff changeset
277
c57d80a649ea CLOSED - # 281: List of thumbnails verschluckt Seite, wenn odd-scan-position gesetzt ist
casties
parents: 585
diff changeset
278 # remove '
c57d80a649ea CLOSED - # 281: List of thumbnails verschluckt Seite, wenn odd-scan-position gesetzt ist
casties
parents: 585
diff changeset
279 s = s.replace("'","")
c57d80a649ea CLOSED - # 281: List of thumbnails verschluckt Seite, wenn odd-scan-position gesetzt ist
casties
parents: 585
diff changeset
280 # all else -> "_"
c57d80a649ea CLOSED - # 281: List of thumbnails verschluckt Seite, wenn odd-scan-position gesetzt ist
casties
parents: 585
diff changeset
281 s = re.sub('[^A-Za-z0-9_'+more+']','_',s)
c57d80a649ea CLOSED - # 281: List of thumbnails verschluckt Seite, wenn odd-scan-position gesetzt ist
casties
parents: 585
diff changeset
282 if lc:
c57d80a649ea CLOSED - # 281: List of thumbnails verschluckt Seite, wenn odd-scan-position gesetzt ist
casties
parents: 585
diff changeset
283 return s.lower()
c57d80a649ea CLOSED - # 281: List of thumbnails verschluckt Seite, wenn odd-scan-position gesetzt ist
casties
parents: 585
diff changeset
284
c57d80a649ea CLOSED - # 281: List of thumbnails verschluckt Seite, wenn odd-scan-position gesetzt ist
casties
parents: 585
diff changeset
285 return s
c57d80a649ea CLOSED - # 281: List of thumbnails verschluckt Seite, wenn odd-scan-position gesetzt ist
casties
parents: 585
diff changeset
286
c57d80a649ea CLOSED - # 281: List of thumbnails verschluckt Seite, wenn odd-scan-position gesetzt ist
casties
parents: 585
diff changeset
287
585
83eeed69793f new annotator layer for images.
casties
parents: 553
diff changeset
288 def getBrowserType(self):
613
c57d80a649ea CLOSED - # 281: List of thumbnails verschluckt Seite, wenn odd-scan-position gesetzt ist
casties
parents: 585
diff changeset
289 """(legacy) check the browsers request to find out the browser type"""
585
83eeed69793f new annotator layer for images.
casties
parents: 553
diff changeset
290 bt = {}
83eeed69793f new annotator layer for images.
casties
parents: 553
diff changeset
291 ua = self.REQUEST.get_header("HTTP_USER_AGENT")
83eeed69793f new annotator layer for images.
casties
parents: 553
diff changeset
292 bt['ua'] = ua
83eeed69793f new annotator layer for images.
casties
parents: 553
diff changeset
293 bt['isIE'] = False
83eeed69793f new annotator layer for images.
casties
parents: 553
diff changeset
294 bt['isN4'] = False
83eeed69793f new annotator layer for images.
casties
parents: 553
diff changeset
295 if string.find(ua, 'MSIE') > -1:
83eeed69793f new annotator layer for images.
casties
parents: 553
diff changeset
296 bt['isIE'] = True
83eeed69793f new annotator layer for images.
casties
parents: 553
diff changeset
297 else:
83eeed69793f new annotator layer for images.
casties
parents: 553
diff changeset
298 bt['isN4'] = (string.find(ua, 'Mozilla/4.') > -1)
83eeed69793f new annotator layer for images.
casties
parents: 553
diff changeset
299
83eeed69793f new annotator layer for images.
casties
parents: 553
diff changeset
300 try:
83eeed69793f new annotator layer for images.
casties
parents: 553
diff changeset
301 nav = ua[string.find(ua, '('):]
83eeed69793f new annotator layer for images.
casties
parents: 553
diff changeset
302 ie = string.split(nav, "; ")[1]
83eeed69793f new annotator layer for images.
casties
parents: 553
diff changeset
303 if string.find(ie, "MSIE") > -1:
83eeed69793f new annotator layer for images.
casties
parents: 553
diff changeset
304 bt['versIE'] = string.split(ie, " ")[1]
83eeed69793f new annotator layer for images.
casties
parents: 553
diff changeset
305 except: pass
83eeed69793f new annotator layer for images.
casties
parents: 553
diff changeset
306
83eeed69793f new annotator layer for images.
casties
parents: 553
diff changeset
307 bt['isMac'] = string.find(ua, 'Macintosh') > -1
83eeed69793f new annotator layer for images.
casties
parents: 553
diff changeset
308 bt['isWin'] = string.find(ua, 'Windows') > -1
83eeed69793f new annotator layer for images.
casties
parents: 553
diff changeset
309 bt['isIEWin'] = bt['isIE'] and bt['isWin']
83eeed69793f new annotator layer for images.
casties
parents: 553
diff changeset
310 bt['isIEMac'] = bt['isIE'] and bt['isMac']
83eeed69793f new annotator layer for images.
casties
parents: 553
diff changeset
311 bt['staticHTML'] = False
83eeed69793f new annotator layer for images.
casties
parents: 553
diff changeset
312
83eeed69793f new annotator layer for images.
casties
parents: 553
diff changeset
313 return bt
83eeed69793f new annotator layer for images.
casties
parents: 553
diff changeset
314