http://groups.google.com/group/web2py/browse_thread/thread/987f0d84db729a76#, fixed Google Anlytics problem with SSL, thanks Dave
This commit is contained in:
@@ -1 +1 @@
|
|||||||
Version 1.99.3 (2011-11-28 08:28:56) dev
|
Version 1.99.3 (2011-11-28 23:00:42) dev
|
||||||
|
|||||||
@@ -158,6 +158,6 @@
|
|||||||
<script src="{{=URL('static','js/dd_belatedpng.js')}}"></script>
|
<script src="{{=URL('static','js/dd_belatedpng.js')}}"></script>
|
||||||
<script> DD_belatedPNG.fix('img, .png_bg'); //fix any <img> or .png_bg background-images </script>
|
<script> DD_belatedPNG.fix('img, .png_bg'); //fix any <img> or .png_bg background-images </script>
|
||||||
<![endif]-->
|
<![endif]-->
|
||||||
{{if response.google_analytics_id:}}<script>/* http://mathiasbynens.be/notes/async-analytics-snippet */ var _gaq=[['_setAccount','{{=response.google_analytics_id}}'],['_trackPageview']];(function(d,t){var g=d.createElement(t),s=d.getElementsByTagName(t)[0];g.src='//www.google-analytics.com/ga.js';s.parentNode.insertBefore(g,s)}(document,'script')) </script>{{pass}}
|
{{if response.google_analytics_id:}}<script type="text/javascript"> var _gaq = _gaq || []; _gaq.push(['_setAccount', '{{=response.google_analytics_id}}']); _gaq.push(['_trackPageview']); (function() { var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true; ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js'; var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s); })(); </script> {{pass}}
|
||||||
</body>
|
</body>
|
||||||
</html>
|
</html>
|
||||||
|
|||||||
+50
-45
@@ -320,22 +320,22 @@ if not 'google' in drivers:
|
|||||||
logger.debug('no mongoDB driver')
|
logger.debug('no mongoDB driver')
|
||||||
|
|
||||||
PLURALIZE_RULES = [
|
PLURALIZE_RULES = [
|
||||||
(re.compile('child$'), re.compile('child$'), 'children'),
|
(re.compile('child$'), re.compile('child$'), 'children'),
|
||||||
(re.compile('oot$'), re.compile('oot$'), 'eet'),
|
(re.compile('oot$'), re.compile('oot$'), 'eet'),
|
||||||
(re.compile('ooth$'), re.compile('ooth$'), 'eeth'),
|
(re.compile('ooth$'), re.compile('ooth$'), 'eeth'),
|
||||||
(re.compile('l[eo]af$'), re.compile('l([eo])af$'), 'l\\1aves'),
|
(re.compile('l[eo]af$'), re.compile('l([eo])af$'), 'l\\1aves'),
|
||||||
(re.compile('sis$'), re.compile('sis$'), 'ses'),
|
(re.compile('sis$'), re.compile('sis$'), 'ses'),
|
||||||
(re.compile('man$'), re.compile('man$'), 'men'),
|
(re.compile('man$'), re.compile('man$'), 'men'),
|
||||||
(re.compile('ife$'), re.compile('ife$'), 'ives'),
|
(re.compile('ife$'), re.compile('ife$'), 'ives'),
|
||||||
(re.compile('eau$'), re.compile('eau$'), 'eaux'),
|
(re.compile('eau$'), re.compile('eau$'), 'eaux'),
|
||||||
(re.compile('lf$'), re.compile('lf$'), 'lves'),
|
(re.compile('lf$'), re.compile('lf$'), 'lves'),
|
||||||
(re.compile('[sxz]$'), re.compile('$'), 'es'),
|
(re.compile('[sxz]$'), re.compile('$'), 'es'),
|
||||||
(re.compile('[^aeioudgkprt]h$'), re.compile('$'), 'es'),
|
(re.compile('[^aeioudgkprt]h$'), re.compile('$'), 'es'),
|
||||||
(re.compile('(qu|[^aeiou])y$'), re.compile('y$'), 'ies'),
|
(re.compile('(qu|[^aeiou])y$'), re.compile('y$'), 'ies'),
|
||||||
(re.compile('$'), re.compile('$'), 's'),
|
(re.compile('$'), re.compile('$'), 's'),
|
||||||
]
|
]
|
||||||
|
|
||||||
def pluralize(singular, rules=PLURALIZE_RULES):
|
def pluralize(singular, rules=PLURALIZE_RULES):
|
||||||
for line in rules:
|
for line in rules:
|
||||||
re_search, re_sub, replace = line
|
re_search, re_sub, replace = line
|
||||||
plural = re_search.search(singular) and re_sub.sub(replace, singular)
|
plural = re_search.search(singular) and re_sub.sub(replace, singular)
|
||||||
@@ -448,7 +448,7 @@ class ConnectionPool(object):
|
|||||||
while True:
|
while True:
|
||||||
sql_locker.acquire()
|
sql_locker.acquire()
|
||||||
if not uri in ConnectionPool.pools:
|
if not uri in ConnectionPool.pools:
|
||||||
ConnectionPool.pools[uri] = []
|
ConnectionPool.pools[uri] = []
|
||||||
if ConnectionPool.pools[uri]:
|
if ConnectionPool.pools[uri]:
|
||||||
self.connection = ConnectionPool.pools[uri].pop()
|
self.connection = ConnectionPool.pools[uri].pop()
|
||||||
sql_locker.release()
|
sql_locker.release()
|
||||||
@@ -1689,7 +1689,7 @@ class JDBCSQLiteAdapter(SQLiteAdapter):
|
|||||||
# FIXME http://www.zentus.com/sqlitejdbc/custom_functions.html for UDFs
|
# FIXME http://www.zentus.com/sqlitejdbc/custom_functions.html for UDFs
|
||||||
self.connection.create_function('web2py_extract', 2, SQLiteAdapter.web2py_extract)
|
self.connection.create_function('web2py_extract', 2, SQLiteAdapter.web2py_extract)
|
||||||
|
|
||||||
def execute(self, a):
|
def execute(self, a):
|
||||||
return self.log_execute(a)
|
return self.log_execute(a)
|
||||||
|
|
||||||
|
|
||||||
@@ -2303,6 +2303,14 @@ class FireBirdAdapter(BaseAdapter):
|
|||||||
def __init__(self,db,uri,pool_size=0,folder=None,db_codec ='UTF-8',
|
def __init__(self,db,uri,pool_size=0,folder=None,db_codec ='UTF-8',
|
||||||
credential_decoder=lambda x:x, driver_args={},
|
credential_decoder=lambda x:x, driver_args={},
|
||||||
adapter_args={}):
|
adapter_args={}):
|
||||||
|
if adapter_args.has_key('driver_name'):
|
||||||
|
if adapter_args['driver_name'] == 'kinterbasdb':
|
||||||
|
self.driver = kinterbasdb
|
||||||
|
elif adapter_args['driver_name'] == 'firebirdsql':
|
||||||
|
self.driver = firebirdsql
|
||||||
|
else:
|
||||||
|
self.driver = kinterbasdb
|
||||||
|
|
||||||
if not self.driver:
|
if not self.driver:
|
||||||
raise RuntimeError, "Unable to import driver"
|
raise RuntimeError, "Unable to import driver"
|
||||||
self.db = db
|
self.db = db
|
||||||
@@ -2334,13 +2342,7 @@ class FireBirdAdapter(BaseAdapter):
|
|||||||
user = credential_decoder(user),
|
user = credential_decoder(user),
|
||||||
password = credential_decoder(password),
|
password = credential_decoder(password),
|
||||||
charset = charset))
|
charset = charset))
|
||||||
if adapter_args.has_key('driver_name'):
|
|
||||||
if adapter_args['driver_name'] == 'kinterbasdb':
|
|
||||||
self.driver = kinterbasdb
|
|
||||||
elif adapter_args['driver_name'] == 'firebirdsql':
|
|
||||||
self.driver = firebirdsql
|
|
||||||
else:
|
|
||||||
self.driver = kinterbasdb
|
|
||||||
def connect(driver_args=driver_args):
|
def connect(driver_args=driver_args):
|
||||||
return self.driver.connect(**driver_args)
|
return self.driver.connect(**driver_args)
|
||||||
self.pool_connection(connect)
|
self.pool_connection(connect)
|
||||||
@@ -2365,6 +2367,15 @@ class FireBirdEmbeddedAdapter(FireBirdAdapter):
|
|||||||
def __init__(self,db,uri,pool_size=0,folder=None,db_codec ='UTF-8',
|
def __init__(self,db,uri,pool_size=0,folder=None,db_codec ='UTF-8',
|
||||||
credential_decoder=lambda x:x, driver_args={},
|
credential_decoder=lambda x:x, driver_args={},
|
||||||
adapter_args={}):
|
adapter_args={}):
|
||||||
|
|
||||||
|
if adapter_args.has_key('driver_name'):
|
||||||
|
if adapter_args['driver_name'] == 'kinterbasdb':
|
||||||
|
self.driver = kinterbasdb
|
||||||
|
elif adapter_args['driver_name'] == 'firebirdsql':
|
||||||
|
self.driver = firebirdsql
|
||||||
|
else:
|
||||||
|
self.driver = kinterbasdb
|
||||||
|
|
||||||
if not self.driver:
|
if not self.driver:
|
||||||
raise RuntimeError, "Unable to import driver"
|
raise RuntimeError, "Unable to import driver"
|
||||||
self.db = db
|
self.db = db
|
||||||
@@ -2399,13 +2410,7 @@ class FireBirdEmbeddedAdapter(FireBirdAdapter):
|
|||||||
charset=charset))
|
charset=charset))
|
||||||
#def connect(driver_args=driver_args):
|
#def connect(driver_args=driver_args):
|
||||||
# return kinterbasdb.connect(**driver_args)
|
# return kinterbasdb.connect(**driver_args)
|
||||||
if adapter_args.has_key('driver_name'):
|
|
||||||
if adapter_args['driver_name'] == 'kinterbasdb':
|
|
||||||
self.driver = kinterbasdb
|
|
||||||
elif adapter_args['driver_name'] == 'firebirdsql':
|
|
||||||
self.driver = firebirdsql
|
|
||||||
else:
|
|
||||||
self.driver = kinterbasdb
|
|
||||||
def connect(driver_args=driver_args):
|
def connect(driver_args=driver_args):
|
||||||
return self.driver.connect(**driver_args)
|
return self.driver.connect(**driver_args)
|
||||||
self.pool_connection(connect)
|
self.pool_connection(connect)
|
||||||
@@ -2908,7 +2913,7 @@ class DatabaseStoredFile:
|
|||||||
web2py_filesystem = False
|
web2py_filesystem = False
|
||||||
|
|
||||||
def escape(self,obj):
|
def escape(self,obj):
|
||||||
return self.db._adapter.escape(obj)
|
return self.db._adapter.escape(obj)
|
||||||
|
|
||||||
def __init__(self,db,filename,mode):
|
def __init__(self,db,filename,mode):
|
||||||
if db._adapter.dbengine != 'mysql':
|
if db._adapter.dbengine != 'mysql':
|
||||||
@@ -3440,7 +3445,7 @@ class GoogleDatastoreAdapter(NoSQLAdapter):
|
|||||||
(items, tablename, fields) = self.select_raw(query,fields,attributes)
|
(items, tablename, fields) = self.select_raw(query,fields,attributes)
|
||||||
# self.db['_lastsql'] = self._select(query,fields,attributes)
|
# self.db['_lastsql'] = self._select(query,fields,attributes)
|
||||||
rows = [
|
rows = [
|
||||||
[t=='id' and (int(item.key().id()) if item.key().id() else
|
[t=='id' and (int(item.key().id()) if item.key().id() else
|
||||||
item.key().name()) or getattr(item, t) for t in fields]
|
item.key().name()) or getattr(item, t) for t in fields]
|
||||||
for item in items]
|
for item in items]
|
||||||
colnames = ['%s.%s' % (tablename, t) for t in fields]
|
colnames = ['%s.%s' % (tablename, t) for t in fields]
|
||||||
@@ -4018,18 +4023,18 @@ def smart_query(fields,text):
|
|||||||
field_map = {}
|
field_map = {}
|
||||||
for field in fields:
|
for field in fields:
|
||||||
n = field.name.lower()
|
n = field.name.lower()
|
||||||
if not n in field_map:
|
if not n in field_map:
|
||||||
field_map[n] = field
|
field_map[n] = field
|
||||||
n = str(field).lower()
|
n = str(field).lower()
|
||||||
if not n in field_map:
|
if not n in field_map:
|
||||||
field_map[n] = field
|
field_map[n] = field
|
||||||
re_constants = re.compile('(\"[^\"]*?\")|(\'[^\']*?\')')
|
re_constants = re.compile('(\"[^\"]*?\")|(\'[^\']*?\')')
|
||||||
constants = {}
|
constants = {}
|
||||||
i = 0
|
i = 0
|
||||||
while True:
|
while True:
|
||||||
m = re_constants.search(text)
|
m = re_constants.search(text)
|
||||||
if not m: break
|
if not m: break
|
||||||
text = text[:m.start()]+('#%i' % i)+text[m.end():]
|
text = text[:m.start()]+('#%i' % i)+text[m.end():]
|
||||||
constants[str(i)] = m.group()[1:-1]
|
constants[str(i)] = m.group()[1:-1]
|
||||||
i+=1
|
i+=1
|
||||||
text = re.sub('\s+',' ',text).lower()
|
text = re.sub('\s+',' ',text).lower()
|
||||||
@@ -4062,7 +4067,7 @@ def smart_query(fields,text):
|
|||||||
(' greater than ','>'),
|
(' greater than ','>'),
|
||||||
(' starts with ','startswith'),
|
(' starts with ','startswith'),
|
||||||
(' ends with ','endswith'),
|
(' ends with ','endswith'),
|
||||||
(' is ','==')]:
|
(' is ','==')]:
|
||||||
if a[0]==' ':
|
if a[0]==' ':
|
||||||
text = text.replace(' is'+a,' %s ' % b)
|
text = text.replace(' is'+a,' %s ' % b)
|
||||||
text = text.replace(a,' %s ' % b)
|
text = text.replace(a,' %s ' % b)
|
||||||
@@ -4075,7 +4080,7 @@ def smart_query(fields,text):
|
|||||||
elif not neg and not logic and item in ('and','or'):
|
elif not neg and not logic and item in ('and','or'):
|
||||||
logic = item
|
logic = item
|
||||||
elif item in field_map:
|
elif item in field_map:
|
||||||
field = field_map[item]
|
field = field_map[item]
|
||||||
else:
|
else:
|
||||||
raise RuntimeError, "Invalid syntax"
|
raise RuntimeError, "Invalid syntax"
|
||||||
elif not field is None and op is None:
|
elif not field is None and op is None:
|
||||||
@@ -4090,7 +4095,7 @@ def smart_query(fields,text):
|
|||||||
if op == '==': op = 'like'
|
if op == '==': op = 'like'
|
||||||
if op == '==': new_query = field==value
|
if op == '==': new_query = field==value
|
||||||
elif op == '<': new_query = field<value
|
elif op == '<': new_query = field<value
|
||||||
elif op == '>': new_query = field>value
|
elif op == '>': new_query = field>value
|
||||||
elif op == '<=': new_query = field<=value
|
elif op == '<=': new_query = field<=value
|
||||||
elif op == '>=': new_query = field>=value
|
elif op == '>=': new_query = field>=value
|
||||||
elif field.type in ('text','string'):
|
elif field.type in ('text','string'):
|
||||||
@@ -4100,13 +4105,13 @@ def smart_query(fields,text):
|
|||||||
elif op == 'endswith': new_query = field.endswith(value)
|
elif op == 'endswith': new_query = field.endswith(value)
|
||||||
else: raise RuntimeError, "Invalid operation"
|
else: raise RuntimeError, "Invalid operation"
|
||||||
else: raise RuntimeError, "Invalid operation"
|
else: raise RuntimeError, "Invalid operation"
|
||||||
if neg: new_query = ~new_query
|
if neg: new_query = ~new_query
|
||||||
if query is None:
|
if query is None:
|
||||||
query = new_query
|
query = new_query
|
||||||
elif logic == 'and':
|
elif logic == 'and':
|
||||||
query &= new_query
|
query &= new_query
|
||||||
elif logic == 'or':
|
elif logic == 'or':
|
||||||
query |= new_query
|
query |= new_query
|
||||||
field = op = neg = logic = None
|
field = op = neg = logic = None
|
||||||
return query
|
return query
|
||||||
|
|
||||||
@@ -4350,7 +4355,7 @@ def index():
|
|||||||
f = db[table][field]
|
f = db[table][field]
|
||||||
if not f.readable: continue
|
if not f.readable: continue
|
||||||
if f.type=='id' or 'slug' in field or f.type.startswith('reference'):
|
if f.type=='id' or 'slug' in field or f.type.startswith('reference'):
|
||||||
tag += '/{%s.%s}' % (table,field)
|
tag += '/{%s.%s}' % (table,field)
|
||||||
patterns.append(tag)
|
patterns.append(tag)
|
||||||
patterns.append(tag+'/:field')
|
patterns.append(tag+'/:field')
|
||||||
elif f.type.startswith('boolean'):
|
elif f.type.startswith('boolean'):
|
||||||
@@ -4416,11 +4421,11 @@ def index():
|
|||||||
for pattern in patterns:
|
for pattern in patterns:
|
||||||
otable=table=None
|
otable=table=None
|
||||||
if not isinstance(queries,dict):
|
if not isinstance(queries,dict):
|
||||||
dbset=db(queries)
|
dbset=db(queries)
|
||||||
i=0
|
i=0
|
||||||
tags = pattern[1:].split('/')
|
tags = pattern[1:].split('/')
|
||||||
if len(tags)!=len(args):
|
if len(tags)!=len(args):
|
||||||
continue
|
continue
|
||||||
for tag in tags:
|
for tag in tags:
|
||||||
if re1.match(tag):
|
if re1.match(tag):
|
||||||
# print 're1:'+tag
|
# print 're1:'+tag
|
||||||
@@ -4538,7 +4543,7 @@ def index():
|
|||||||
for key in args:
|
for key in args:
|
||||||
if key not in [
|
if key not in [
|
||||||
'migrate',
|
'migrate',
|
||||||
'primarykey',
|
'primarykey',
|
||||||
'fake_migrate',
|
'fake_migrate',
|
||||||
'format',
|
'format',
|
||||||
'singular',
|
'singular',
|
||||||
@@ -4694,7 +4699,7 @@ def index():
|
|||||||
def export_to_csv_file(self, ofile, *args, **kwargs):
|
def export_to_csv_file(self, ofile, *args, **kwargs):
|
||||||
step = int(kwargs.get('max_fetch_rows,',500))
|
step = int(kwargs.get('max_fetch_rows,',500))
|
||||||
write_colnames = kwargs['write_colnames'] = \
|
write_colnames = kwargs['write_colnames'] = \
|
||||||
kwargs.get("write_colnames", True)
|
kwargs.get("write_colnames", True)
|
||||||
for table in self.tables:
|
for table in self.tables:
|
||||||
ofile.write('TABLE %s\r\n' % table)
|
ofile.write('TABLE %s\r\n' % table)
|
||||||
query = self[table]._id > 0
|
query = self[table]._id > 0
|
||||||
|
|||||||
Reference in New Issue
Block a user