annotate SrvTxtUtils.py @ 613:c57d80a649ea

CLOSED - # 281: List of thumbnails verschluckt Seite, wenn odd-scan-position gesetzt ist https://it-dev.mpiwg-berlin.mpg.de/tracs/mpdl-project-software/ticket/281
author casties
date Thu, 17 Oct 2013 16:25:39 +0200
parents 83eeed69793f
children d16da6e739ef
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
c57d80a649ea CLOSED - # 281: List of thumbnails verschluckt Seite, wenn odd-scan-position gesetzt ist
casties
parents: 585
diff changeset
25 srvTxtUtilsVersion = "1.12.1"
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
c57d80a649ea CLOSED - # 281: List of thumbnails verschluckt Seite, wenn odd-scan-position gesetzt ist
casties
parents: 585
diff changeset
87 else:
553
2fe04b61ed95 make sure unicodify and utf8ify return str and unicode.
casties
parents: 546
diff changeset
88 return s.encode('utf-8')
514
c55e376be01b search works even with unicode...
casties
parents: 490
diff changeset
89
490
6f116b86a226 more new template stuff. moved ImageFile index method to SrvTxtUtils
casties
parents: 464
diff changeset
90 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
91 """returns all text content of a (etree) node and its subnodes"""
458
48b135b089c8 more renovation
casties
parents:
diff changeset
92 if node is None:
490
6f116b86a226 more new template stuff. moved ImageFile index method to SrvTxtUtils
casties
parents: 464
diff changeset
93 return ''
6f116b86a226 more new template stuff. moved ImageFile index method to SrvTxtUtils
casties
parents: 464
diff changeset
94
458
48b135b089c8 more renovation
casties
parents:
diff changeset
95 # ElementTree:
490
6f116b86a226 more new template stuff. moved ImageFile index method to SrvTxtUtils
casties
parents: 464
diff changeset
96 text = node.text or ''
458
48b135b089c8 more renovation
casties
parents:
diff changeset
97 for e in node:
490
6f116b86a226 more new template stuff. moved ImageFile index method to SrvTxtUtils
casties
parents: 464
diff changeset
98 if recursive:
6f116b86a226 more new template stuff. moved ImageFile index method to SrvTxtUtils
casties
parents: 464
diff changeset
99 text += getText(e)
6f116b86a226 more new template stuff. moved ImageFile index method to SrvTxtUtils
casties
parents: 464
diff changeset
100 else:
6f116b86a226 more new template stuff. moved ImageFile index method to SrvTxtUtils
casties
parents: 464
diff changeset
101 text += e.text or ''
458
48b135b089c8 more renovation
casties
parents:
diff changeset
102 if e.tail:
48b135b089c8 more renovation
casties
parents:
diff changeset
103 text += e.tail
48b135b089c8 more renovation
casties
parents:
diff changeset
104
48b135b089c8 more renovation
casties
parents:
diff changeset
105 # 4Suite:
48b135b089c8 more renovation
casties
parents:
diff changeset
106 #nodelist=node.childNodes
48b135b089c8 more renovation
casties
parents:
diff changeset
107 #text = ""
48b135b089c8 more renovation
casties
parents:
diff changeset
108 #for n in nodelist:
48b135b089c8 more renovation
casties
parents:
diff changeset
109 # if n.nodeType == node.TEXT_NODE:
48b135b089c8 more renovation
casties
parents:
diff changeset
110 # text = text + n.data
48b135b089c8 more renovation
casties
parents:
diff changeset
111
48b135b089c8 more renovation
casties
parents:
diff changeset
112 return text
48b135b089c8 more renovation
casties
parents:
diff changeset
113
48b135b089c8 more renovation
casties
parents:
diff changeset
114
613
c57d80a649ea CLOSED - # 281: List of thumbnails verschluckt Seite, wenn odd-scan-position gesetzt ist
casties
parents: 585
diff changeset
115 def serialize(node):
c57d80a649ea CLOSED - # 281: List of thumbnails verschluckt Seite, wenn odd-scan-position gesetzt ist
casties
parents: 585
diff changeset
116 """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
117 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
118 # snip off XML declaration
c57d80a649ea CLOSED - # 281: List of thumbnails verschluckt Seite, wenn odd-scan-position gesetzt ist
casties
parents: 585
diff changeset
119 if s.startswith('<?xml'):
c57d80a649ea CLOSED - # 281: List of thumbnails verschluckt Seite, wenn odd-scan-position gesetzt ist
casties
parents: 585
diff changeset
120 i = s.find('?>')
c57d80a649ea CLOSED - # 281: List of thumbnails verschluckt Seite, wenn odd-scan-position gesetzt ist
casties
parents: 585
diff changeset
121 return s[i+3:]
458
48b135b089c8 more renovation
casties
parents:
diff changeset
122
613
c57d80a649ea CLOSED - # 281: List of thumbnails verschluckt Seite, wenn odd-scan-position gesetzt ist
casties
parents: 585
diff changeset
123 return s
c57d80a649ea CLOSED - # 281: List of thumbnails verschluckt Seite, wenn odd-scan-position gesetzt ist
casties
parents: 585
diff changeset
124
c57d80a649ea CLOSED - # 281: List of thumbnails verschluckt Seite, wenn odd-scan-position gesetzt ist
casties
parents: 585
diff changeset
125
c57d80a649ea CLOSED - # 281: List of thumbnails verschluckt Seite, wenn odd-scan-position gesetzt ist
casties
parents: 585
diff changeset
126 def getMonthName(mon, lang):
c57d80a649ea CLOSED - # 281: List of thumbnails verschluckt Seite, wenn odd-scan-position gesetzt ist
casties
parents: 585
diff changeset
127 """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
128 return map_months[lang][mon]
c57d80a649ea CLOSED - # 281: List of thumbnails verschluckt Seite, wenn odd-scan-position gesetzt ist
casties
parents: 585
diff changeset
129
c57d80a649ea CLOSED - # 281: List of thumbnails verschluckt Seite, wenn odd-scan-position gesetzt ist
casties
parents: 585
diff changeset
130
c57d80a649ea CLOSED - # 281: List of thumbnails verschluckt Seite, wenn odd-scan-position gesetzt ist
casties
parents: 585
diff changeset
131 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
132 """Return formatted date string."""
c57d80a649ea CLOSED - # 281: List of thumbnails verschluckt Seite, wenn odd-scan-position gesetzt ist
casties
parents: 585
diff changeset
133 if date is None:
c57d80a649ea CLOSED - # 281: List of thumbnails verschluckt Seite, wenn odd-scan-position gesetzt ist
casties
parents: 585
diff changeset
134 return None
c57d80a649ea CLOSED - # 281: List of thumbnails verschluckt Seite, wenn odd-scan-position gesetzt ist
casties
parents: 585
diff changeset
135
c57d80a649ea CLOSED - # 281: List of thumbnails verschluckt Seite, wenn odd-scan-position gesetzt ist
casties
parents: 585
diff changeset
136 ds = None
c57d80a649ea CLOSED - # 281: List of thumbnails verschluckt Seite, wenn odd-scan-position gesetzt ist
casties
parents: 585
diff changeset
137 if callable(date.day):
c57d80a649ea CLOSED - # 281: List of thumbnails verschluckt Seite, wenn odd-scan-position gesetzt ist
casties
parents: 585
diff changeset
138 # callable members
c57d80a649ea CLOSED - # 281: List of thumbnails verschluckt Seite, wenn odd-scan-position gesetzt ist
casties
parents: 585
diff changeset
139 day = date.day()
c57d80a649ea CLOSED - # 281: List of thumbnails verschluckt Seite, wenn odd-scan-position gesetzt ist
casties
parents: 585
diff changeset
140 month = date.month()
c57d80a649ea CLOSED - # 281: List of thumbnails verschluckt Seite, wenn odd-scan-position gesetzt ist
casties
parents: 585
diff changeset
141 year = date.year()
c57d80a649ea CLOSED - # 281: List of thumbnails verschluckt Seite, wenn odd-scan-position gesetzt ist
casties
parents: 585
diff changeset
142 else:
c57d80a649ea CLOSED - # 281: List of thumbnails verschluckt Seite, wenn odd-scan-position gesetzt ist
casties
parents: 585
diff changeset
143 # data members
c57d80a649ea CLOSED - # 281: List of thumbnails verschluckt Seite, wenn odd-scan-position gesetzt ist
casties
parents: 585
diff changeset
144 day = date.day
c57d80a649ea CLOSED - # 281: List of thumbnails verschluckt Seite, wenn odd-scan-position gesetzt ist
casties
parents: 585
diff changeset
145 month = date.month
c57d80a649ea CLOSED - # 281: List of thumbnails verschluckt Seite, wenn odd-scan-position gesetzt ist
casties
parents: 585
diff changeset
146 year = date.year
c57d80a649ea CLOSED - # 281: List of thumbnails verschluckt Seite, wenn odd-scan-position gesetzt ist
casties
parents: 585
diff changeset
147
c57d80a649ea CLOSED - # 281: List of thumbnails verschluckt Seite, wenn odd-scan-position gesetzt ist
casties
parents: 585
diff changeset
148 if lang.lower() == 'en':
c57d80a649ea CLOSED - # 281: List of thumbnails verschluckt Seite, wenn odd-scan-position gesetzt ist
casties
parents: 585
diff changeset
149 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
150 if withYear:
c57d80a649ea CLOSED - # 281: List of thumbnails verschluckt Seite, wenn odd-scan-position gesetzt ist
casties
parents: 585
diff changeset
151 ds += ", %s"%year
c57d80a649ea CLOSED - # 281: List of thumbnails verschluckt Seite, wenn odd-scan-position gesetzt ist
casties
parents: 585
diff changeset
152
c57d80a649ea CLOSED - # 281: List of thumbnails verschluckt Seite, wenn odd-scan-position gesetzt ist
casties
parents: 585
diff changeset
153 elif lang.lower() == 'de':
c57d80a649ea CLOSED - # 281: List of thumbnails verschluckt Seite, wenn odd-scan-position gesetzt ist
casties
parents: 585
diff changeset
154 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
155 if withYear:
c57d80a649ea CLOSED - # 281: List of thumbnails verschluckt Seite, wenn odd-scan-position gesetzt ist
casties
parents: 585
diff changeset
156 ds += " %s"%year
c57d80a649ea CLOSED - # 281: List of thumbnails verschluckt Seite, wenn odd-scan-position gesetzt ist
casties
parents: 585
diff changeset
157
c57d80a649ea CLOSED - # 281: List of thumbnails verschluckt Seite, wenn odd-scan-position gesetzt ist
casties
parents: 585
diff changeset
158 elif lang.lower() == 'iso':
c57d80a649ea CLOSED - # 281: List of thumbnails verschluckt Seite, wenn odd-scan-position gesetzt ist
casties
parents: 585
diff changeset
159 ds = date.isoformat()
c57d80a649ea CLOSED - # 281: List of thumbnails verschluckt Seite, wenn odd-scan-position gesetzt ist
casties
parents: 585
diff changeset
160
c57d80a649ea CLOSED - # 281: List of thumbnails verschluckt Seite, wenn odd-scan-position gesetzt ist
casties
parents: 585
diff changeset
161 return ds
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
c57d80a649ea CLOSED - # 281: List of thumbnails verschluckt Seite, wenn odd-scan-position gesetzt ist
casties
parents: 585
diff changeset
164 def getDate(date):
c57d80a649ea CLOSED - # 281: List of thumbnails verschluckt Seite, wenn odd-scan-position gesetzt ist
casties
parents: 585
diff changeset
165 """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
166 if isinstance(date, datetime.datetime):
c57d80a649ea CLOSED - # 281: List of thumbnails verschluckt Seite, wenn odd-scan-position gesetzt ist
casties
parents: 585
diff changeset
167 # strip time
c57d80a649ea CLOSED - # 281: List of thumbnails verschluckt Seite, wenn odd-scan-position gesetzt ist
casties
parents: 585
diff changeset
168 return date.date()
c57d80a649ea CLOSED - # 281: List of thumbnails verschluckt Seite, wenn odd-scan-position gesetzt ist
casties
parents: 585
diff changeset
169
c57d80a649ea CLOSED - # 281: List of thumbnails verschluckt Seite, wenn odd-scan-position gesetzt ist
casties
parents: 585
diff changeset
170 return 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
c57d80a649ea CLOSED - # 281: List of thumbnails verschluckt Seite, wenn odd-scan-position gesetzt ist
casties
parents: 585
diff changeset
173 def getDatetime(date):
c57d80a649ea CLOSED - # 281: List of thumbnails verschluckt Seite, wenn odd-scan-position gesetzt ist
casties
parents: 585
diff changeset
174 """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
175 if isinstance(date, datetime.date):
c57d80a649ea CLOSED - # 281: List of thumbnails verschluckt Seite, wenn odd-scan-position gesetzt ist
casties
parents: 585
diff changeset
176 # add time 0:00
c57d80a649ea CLOSED - # 281: List of thumbnails verschluckt Seite, wenn odd-scan-position gesetzt ist
casties
parents: 585
diff changeset
177 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
178
c57d80a649ea CLOSED - # 281: List of thumbnails verschluckt Seite, wenn odd-scan-position gesetzt ist
casties
parents: 585
diff changeset
179 return date
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
c57d80a649ea CLOSED - # 281: List of thumbnails verschluckt Seite, wenn odd-scan-position gesetzt ist
casties
parents: 585
diff changeset
182 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
183 """returns result from url+data HTTP request"""
48b135b089c8 more renovation
casties
parents:
diff changeset
184 # we do GET (by appending data to url)
48b135b089c8 more renovation
casties
parents:
diff changeset
185 if isinstance(data, str) or isinstance(data, unicode):
48b135b089c8 more renovation
casties
parents:
diff changeset
186 # if data is string then append
48b135b089c8 more renovation
casties
parents:
diff changeset
187 url = "%s?%s"%(url,data)
48b135b089c8 more renovation
casties
parents:
diff changeset
188 elif isinstance(data, dict) or isinstance(data, list) or isinstance(data, tuple):
48b135b089c8 more renovation
casties
parents:
diff changeset
189 # urlencode
48b135b089c8 more renovation
casties
parents:
diff changeset
190 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
191
458
48b135b089c8 more renovation
casties
parents:
diff changeset
192 errmsg = None
613
c57d80a649ea CLOSED - # 281: List of thumbnails verschluckt Seite, wenn odd-scan-position gesetzt ist
casties
parents: 585
diff changeset
193 if httplib == 'httplib2':
c57d80a649ea CLOSED - # 281: List of thumbnails verschluckt Seite, wenn odd-scan-position gesetzt ist
casties
parents: 585
diff changeset
194 # use httplib2
c57d80a649ea CLOSED - # 281: List of thumbnails verschluckt Seite, wenn odd-scan-position gesetzt ist
casties
parents: 585
diff changeset
195 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
196 try:
c57d80a649ea CLOSED - # 281: List of thumbnails verschluckt Seite, wenn odd-scan-position gesetzt ist
casties
parents: 585
diff changeset
197 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
198 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
199 if username:
c57d80a649ea CLOSED - # 281: List of thumbnails verschluckt Seite, wenn odd-scan-position gesetzt ist
casties
parents: 585
diff changeset
200 h.add_credentials(username, password)
c57d80a649ea CLOSED - # 281: List of thumbnails verschluckt Seite, wenn odd-scan-position gesetzt ist
casties
parents: 585
diff changeset
201
c57d80a649ea CLOSED - # 281: List of thumbnails verschluckt Seite, wenn odd-scan-position gesetzt ist
casties
parents: 585
diff changeset
202 resp, data = h.request(url)
c57d80a649ea CLOSED - # 281: List of thumbnails verschluckt Seite, wenn odd-scan-position gesetzt ist
casties
parents: 585
diff changeset
203 return data
c57d80a649ea CLOSED - # 281: List of thumbnails verschluckt Seite, wenn odd-scan-position gesetzt ist
casties
parents: 585
diff changeset
204
c57d80a649ea CLOSED - # 281: List of thumbnails verschluckt Seite, wenn odd-scan-position gesetzt ist
casties
parents: 585
diff changeset
205 except httplib2.HttpLib2Error, e:
c57d80a649ea CLOSED - # 281: List of thumbnails verschluckt Seite, wenn odd-scan-position gesetzt ist
casties
parents: 585
diff changeset
206 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
207 errmsg = str(e)
c57d80a649ea CLOSED - # 281: List of thumbnails verschluckt Seite, wenn odd-scan-position gesetzt ist
casties
parents: 585
diff changeset
208 # stop trying
c57d80a649ea CLOSED - # 281: List of thumbnails verschluckt Seite, wenn odd-scan-position gesetzt ist
casties
parents: 585
diff changeset
209 break
c57d80a649ea CLOSED - # 281: List of thumbnails verschluckt Seite, wenn odd-scan-position gesetzt ist
casties
parents: 585
diff changeset
210
c57d80a649ea CLOSED - # 281: List of thumbnails verschluckt Seite, wenn odd-scan-position gesetzt ist
casties
parents: 585
diff changeset
211 else:
c57d80a649ea CLOSED - # 281: List of thumbnails verschluckt Seite, wenn odd-scan-position gesetzt ist
casties
parents: 585
diff changeset
212 # use urllib2
c57d80a649ea CLOSED - # 281: List of thumbnails verschluckt Seite, wenn odd-scan-position gesetzt ist
casties
parents: 585
diff changeset
213 response = None
c57d80a649ea CLOSED - # 281: List of thumbnails verschluckt Seite, wenn odd-scan-position gesetzt ist
casties
parents: 585
diff changeset
214 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
215 try:
c57d80a649ea CLOSED - # 281: List of thumbnails verschluckt Seite, wenn odd-scan-position gesetzt ist
casties
parents: 585
diff changeset
216 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
217 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
218 # set timeout on socket -- ugly :-(
c57d80a649ea CLOSED - # 281: List of thumbnails verschluckt Seite, wenn odd-scan-position gesetzt ist
casties
parents: 585
diff changeset
219 import socket
c57d80a649ea CLOSED - # 281: List of thumbnails verschluckt Seite, wenn odd-scan-position gesetzt ist
casties
parents: 585
diff changeset
220 socket.setdefaulttimeout(float(timeout))
c57d80a649ea CLOSED - # 281: List of thumbnails verschluckt Seite, wenn odd-scan-position gesetzt ist
casties
parents: 585
diff changeset
221 response = urllib2.urlopen(url)
c57d80a649ea CLOSED - # 281: List of thumbnails verschluckt Seite, wenn odd-scan-position gesetzt ist
casties
parents: 585
diff changeset
222 else:
c57d80a649ea CLOSED - # 281: List of thumbnails verschluckt Seite, wenn odd-scan-position gesetzt ist
casties
parents: 585
diff changeset
223 # timeout as parameter
c57d80a649ea CLOSED - # 281: List of thumbnails verschluckt Seite, wenn odd-scan-position gesetzt ist
casties
parents: 585
diff changeset
224 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
225 # check result?
c57d80a649ea CLOSED - # 281: List of thumbnails verschluckt Seite, wenn odd-scan-position gesetzt ist
casties
parents: 585
diff changeset
226 data = response.read()
c57d80a649ea CLOSED - # 281: List of thumbnails verschluckt Seite, wenn odd-scan-position gesetzt ist
casties
parents: 585
diff changeset
227 response.close()
c57d80a649ea CLOSED - # 281: List of thumbnails verschluckt Seite, wenn odd-scan-position gesetzt ist
casties
parents: 585
diff changeset
228 return data
458
48b135b089c8 more renovation
casties
parents:
diff changeset
229
613
c57d80a649ea CLOSED - # 281: List of thumbnails verschluckt Seite, wenn odd-scan-position gesetzt ist
casties
parents: 585
diff changeset
230 except urllib2.HTTPError, e:
c57d80a649ea CLOSED - # 281: List of thumbnails verschluckt Seite, wenn odd-scan-position gesetzt ist
casties
parents: 585
diff changeset
231 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
232 errmsg = str(e)
c57d80a649ea CLOSED - # 281: List of thumbnails verschluckt Seite, wenn odd-scan-position gesetzt ist
casties
parents: 585
diff changeset
233 # stop trying
c57d80a649ea CLOSED - # 281: List of thumbnails verschluckt Seite, wenn odd-scan-position gesetzt ist
casties
parents: 585
diff changeset
234 break
c57d80a649ea CLOSED - # 281: List of thumbnails verschluckt Seite, wenn odd-scan-position gesetzt ist
casties
parents: 585
diff changeset
235 except urllib2.URLError, e:
c57d80a649ea CLOSED - # 281: List of thumbnails verschluckt Seite, wenn odd-scan-position gesetzt ist
casties
parents: 585
diff changeset
236 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
237 errmsg = str(e)
c57d80a649ea CLOSED - # 281: List of thumbnails verschluckt Seite, wenn odd-scan-position gesetzt ist
casties
parents: 585
diff changeset
238 # stop trying
c57d80a649ea CLOSED - # 281: List of thumbnails verschluckt Seite, wenn odd-scan-position gesetzt ist
casties
parents: 585
diff changeset
239 #break
458
48b135b089c8 more renovation
casties
parents:
diff changeset
240
546
2928037f9a75 ASSIGNED - # 249: Annotations shared in groups
casties
parents: 528
diff changeset
241 if noExceptions:
2928037f9a75 ASSIGNED - # 249: Annotations shared in groups
casties
parents: 528
diff changeset
242 return None
2928037f9a75 ASSIGNED - # 249: Annotations shared in groups
casties
parents: 528
diff changeset
243
458
48b135b089c8 more renovation
casties
parents:
diff changeset
244 raise IOError("ERROR fetching HTTP data from %s: %s"%(url,errmsg))
48b135b089c8 more renovation
casties
parents:
diff changeset
245 #return None
48b135b089c8 more renovation
casties
parents:
diff changeset
246
490
6f116b86a226 more new template stuff. moved ImageFile index method to SrvTxtUtils
casties
parents: 464
diff changeset
247
6f116b86a226 more new template stuff. moved ImageFile index method to SrvTxtUtils
casties
parents: 464
diff changeset
248 def refreshingImageFileIndexHtml(self, REQUEST, RESPONSE):
6f116b86a226 more new template stuff. moved ImageFile index method to SrvTxtUtils
casties
parents: 464
diff changeset
249 """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
250 stat_info = os.stat(self.path)
6f116b86a226 more new template stuff. moved ImageFile index method to SrvTxtUtils
casties
parents: 464
diff changeset
251 self.size = stat_info[stat.ST_SIZE]
6f116b86a226 more new template stuff. moved ImageFile index method to SrvTxtUtils
casties
parents: 464
diff changeset
252 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
253 self.lmh = rfc1123_date(self.lmt)
6f116b86a226 more new template stuff. moved ImageFile index method to SrvTxtUtils
casties
parents: 464
diff changeset
254 # call original method
6f116b86a226 more new template stuff. moved ImageFile index method to SrvTxtUtils
casties
parents: 464
diff changeset
255 return ImageFile.index_html(self, REQUEST, RESPONSE)
6f116b86a226 more new template stuff. moved ImageFile index method to SrvTxtUtils
casties
parents: 464
diff changeset
256
585
83eeed69793f new annotator layer for images.
casties
parents: 553
diff changeset
257
613
c57d80a649ea CLOSED - # 281: List of thumbnails verschluckt Seite, wenn odd-scan-position gesetzt ist
casties
parents: 585
diff changeset
258 def shortenString(s, l, ellipsis='...'):
c57d80a649ea CLOSED - # 281: List of thumbnails verschluckt Seite, wenn odd-scan-position gesetzt ist
casties
parents: 585
diff changeset
259 """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
260 if len(s) <= l:
c57d80a649ea CLOSED - # 281: List of thumbnails verschluckt Seite, wenn odd-scan-position gesetzt ist
casties
parents: 585
diff changeset
261 return s
c57d80a649ea CLOSED - # 281: List of thumbnails verschluckt Seite, wenn odd-scan-position gesetzt ist
casties
parents: 585
diff changeset
262
c57d80a649ea CLOSED - # 281: List of thumbnails verschluckt Seite, wenn odd-scan-position gesetzt ist
casties
parents: 585
diff changeset
263 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
264 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
265
c57d80a649ea CLOSED - # 281: List of thumbnails verschluckt Seite, wenn odd-scan-position gesetzt ist
casties
parents: 585
diff changeset
266
c57d80a649ea CLOSED - # 281: List of thumbnails verschluckt Seite, wenn odd-scan-position gesetzt ist
casties
parents: 585
diff changeset
267 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
268 """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
269 if s is None:
c57d80a649ea CLOSED - # 281: List of thumbnails verschluckt Seite, wenn odd-scan-position gesetzt ist
casties
parents: 585
diff changeset
270 return ""
c57d80a649ea CLOSED - # 281: List of thumbnails verschluckt Seite, wenn odd-scan-position gesetzt ist
casties
parents: 585
diff changeset
271
c57d80a649ea CLOSED - # 281: List of thumbnails verschluckt Seite, wenn odd-scan-position gesetzt ist
casties
parents: 585
diff changeset
272 if not isinstance(s, basestring):
c57d80a649ea CLOSED - # 281: List of thumbnails verschluckt Seite, wenn odd-scan-position gesetzt ist
casties
parents: 585
diff changeset
273 # make string object
c57d80a649ea CLOSED - # 281: List of thumbnails verschluckt Seite, wenn odd-scan-position gesetzt ist
casties
parents: 585
diff changeset
274 s = str(s)
c57d80a649ea CLOSED - # 281: List of thumbnails verschluckt Seite, wenn odd-scan-position gesetzt ist
casties
parents: 585
diff changeset
275
c57d80a649ea CLOSED - # 281: List of thumbnails verschluckt Seite, wenn odd-scan-position gesetzt ist
casties
parents: 585
diff changeset
276 # remove '
c57d80a649ea CLOSED - # 281: List of thumbnails verschluckt Seite, wenn odd-scan-position gesetzt ist
casties
parents: 585
diff changeset
277 s = s.replace("'","")
c57d80a649ea CLOSED - # 281: List of thumbnails verschluckt Seite, wenn odd-scan-position gesetzt ist
casties
parents: 585
diff changeset
278 # all else -> "_"
c57d80a649ea CLOSED - # 281: List of thumbnails verschluckt Seite, wenn odd-scan-position gesetzt ist
casties
parents: 585
diff changeset
279 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
280 if lc:
c57d80a649ea CLOSED - # 281: List of thumbnails verschluckt Seite, wenn odd-scan-position gesetzt ist
casties
parents: 585
diff changeset
281 return s.lower()
c57d80a649ea CLOSED - # 281: List of thumbnails verschluckt Seite, wenn odd-scan-position gesetzt ist
casties
parents: 585
diff changeset
282
c57d80a649ea CLOSED - # 281: List of thumbnails verschluckt Seite, wenn odd-scan-position gesetzt ist
casties
parents: 585
diff changeset
283 return s
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
585
83eeed69793f new annotator layer for images.
casties
parents: 553
diff changeset
286 def getBrowserType(self):
613
c57d80a649ea CLOSED - # 281: List of thumbnails verschluckt Seite, wenn odd-scan-position gesetzt ist
casties
parents: 585
diff changeset
287 """(legacy) check the browsers request to find out the browser type"""
585
83eeed69793f new annotator layer for images.
casties
parents: 553
diff changeset
288 bt = {}
83eeed69793f new annotator layer for images.
casties
parents: 553
diff changeset
289 ua = self.REQUEST.get_header("HTTP_USER_AGENT")
83eeed69793f new annotator layer for images.
casties
parents: 553
diff changeset
290 bt['ua'] = ua
83eeed69793f new annotator layer for images.
casties
parents: 553
diff changeset
291 bt['isIE'] = False
83eeed69793f new annotator layer for images.
casties
parents: 553
diff changeset
292 bt['isN4'] = False
83eeed69793f new annotator layer for images.
casties
parents: 553
diff changeset
293 if string.find(ua, 'MSIE') > -1:
83eeed69793f new annotator layer for images.
casties
parents: 553
diff changeset
294 bt['isIE'] = True
83eeed69793f new annotator layer for images.
casties
parents: 553
diff changeset
295 else:
83eeed69793f new annotator layer for images.
casties
parents: 553
diff changeset
296 bt['isN4'] = (string.find(ua, 'Mozilla/4.') > -1)
83eeed69793f new annotator layer for images.
casties
parents: 553
diff changeset
297
83eeed69793f new annotator layer for images.
casties
parents: 553
diff changeset
298 try:
83eeed69793f new annotator layer for images.
casties
parents: 553
diff changeset
299 nav = ua[string.find(ua, '('):]
83eeed69793f new annotator layer for images.
casties
parents: 553
diff changeset
300 ie = string.split(nav, "; ")[1]
83eeed69793f new annotator layer for images.
casties
parents: 553
diff changeset
301 if string.find(ie, "MSIE") > -1:
83eeed69793f new annotator layer for images.
casties
parents: 553
diff changeset
302 bt['versIE'] = string.split(ie, " ")[1]
83eeed69793f new annotator layer for images.
casties
parents: 553
diff changeset
303 except: pass
83eeed69793f new annotator layer for images.
casties
parents: 553
diff changeset
304
83eeed69793f new annotator layer for images.
casties
parents: 553
diff changeset
305 bt['isMac'] = string.find(ua, 'Macintosh') > -1
83eeed69793f new annotator layer for images.
casties
parents: 553
diff changeset
306 bt['isWin'] = string.find(ua, 'Windows') > -1
83eeed69793f new annotator layer for images.
casties
parents: 553
diff changeset
307 bt['isIEWin'] = bt['isIE'] and bt['isWin']
83eeed69793f new annotator layer for images.
casties
parents: 553
diff changeset
308 bt['isIEMac'] = bt['isIE'] and bt['isMac']
83eeed69793f new annotator layer for images.
casties
parents: 553
diff changeset
309 bt['staticHTML'] = False
83eeed69793f new annotator layer for images.
casties
parents: 553
diff changeset
310
83eeed69793f new annotator layer for images.
casties
parents: 553
diff changeset
311 return bt
83eeed69793f new annotator layer for images.
casties
parents: 553
diff changeset
312