# HG changeset patch # User Sylvain Thénault # Date 1249075502 -7200 # Node ID 16d9419a4a791071f11e8e1f2c745ad07276ad10 # Parent c97c4b56e6a01d40154667267d4b4d21b3d361a9 F: start to handle binary debug log level on the server side diff -r c97c4b56e6a0 -r 16d9419a4a79 server/__init__.py --- a/server/__init__.py Fri Jul 31 23:21:45 2009 +0200 +++ b/server/__init__.py Fri Jul 31 23:25:02 2009 +0200 @@ -15,8 +15,40 @@ from logilab.common.modutils import LazyObject +# server-side debugging ######################################################### + # server debugging flag -DEBUG = False +DBG_RQL = 1 # rql execution information +DBG_SQL = 2 # executed sql +DBG_REPO = 4 # repository events +DBG_MORE = 8 # repository events + + +# 2: + executed sql +# 3: + additional debug information +DEBUG = 0 +def set_debug(debugmode): + global DEBUG + if not debugmode: + DEBUG = 0 + return + if isinstance(debugmode, basestring): + debugmode = globals()[debugmode] + DEBUG |= debugmode + +def debugged(func): + """decorator to activate debug mode""" + def wrapped(*args, **kwargs): + global DEBUG + DEBUG = True + try: + return func(*args, **kwargs) + finally: + DEBUG = False + return wrapped + + +# database initialization ###################################################### def init_repository(config, interactive=True, drop=False, vreg=None): """initialise a repository database by creating tables add filling them @@ -160,20 +192,6 @@ for path in reversed(paths): mhandler.exec_event_script('post%s' % event, path) -def set_debug(debugmode): - global DEBUG - DEBUG = debugmode - -def debugged(func): - """decorator to activate debug mode""" - def wrapped(*args, **kwargs): - global DEBUG - DEBUG = True - try: - return func(*args, **kwargs) - finally: - DEBUG = False - return wrapped # sqlite'stored procedures have to be registered at connexion opening time SQL_CONNECT_HOOKS = {} diff -r c97c4b56e6a0 -r 16d9419a4a79 server/querier.py --- a/server/querier.py Fri Jul 31 23:21:45 2009 +0200 +++ b/server/querier.py Fri Jul 31 23:25:02 2009 +0200 @@ -189,8 +189,6 @@ return rqlst to actually execute """ - #if server.DEBUG: - # print '------- preprocessing', union.as_string('utf8') noinvariant = set() if security and not self.session.is_super_session: self._insert_security(union, noinvariant) @@ -586,9 +584,9 @@ always use substitute arguments in queries (eg avoid query such as 'Any X WHERE X eid 123'!) """ - if server.DEBUG: + if server.DEBUG & (server.DBG_RQL | server.DBG_RQL): print '*'*80 - print rql + print 'QUERIER INPUT', rql # parse the query and binds variables if eid_key is not None: if not isinstance(eid_key, (tuple, list)): diff -r c97c4b56e6a0 -r 16d9419a4a79 server/sources/native.py --- a/server/sources/native.py Fri Jul 31 23:21:45 2009 +0200 +++ b/server/sources/native.py Fri Jul 31 23:25:02 2009 +0200 @@ -44,7 +44,7 @@ """Execute a query. it's a function just so that it shows up in profiling """ - if server.DEBUG: + if server.DEBUG & server.DBG_SQL: print 'exec', query, args try: self.cu.execute(str(query), args) @@ -305,13 +305,15 @@ necessary to fetch the results (but not the results themselves) may be cached using this key. """ - if server.DEBUG: - print 'RQL FOR NATIVE SOURCE', self.uri, cachekey + if server.DEBUG & server.DBG_RQL: + print 'RQL FOR NATIVE SOURCE %s: %s' % (self.uri, union.as_string()) if varmap: - print 'USING VARMAP', varmap - print union.as_string() - if args: print 'ARGS', args - print 'SOLUTIONS', ','.join(str(s.solutions) for s in union.children) + print 'using varmap', varmap + if args: + print 'args', args + if server.DEBUG & server.DBG_MORE: + print 'cache key', cachekey + print 'solutions', ','.join(str(s.solutions) for s in union.children) # remember number of actually selected term (sql generation may append some) if cachekey is None: self.no_cache += 1 @@ -337,7 +339,7 @@ session.pool.reconnect(self) cursor = self.doexec(session, sql, args) res = self.process_result(cursor) - if server.DEBUG: + if server.DEBUG & (server.DBG_SQL | server.DBG_RQL): print '------>', res return res @@ -348,12 +350,12 @@ inserts all data by calling .executemany(). """ if self.uri == 'system': - if server.DEBUG: - print 'FLYING RQL FOR SOURCE', self.uri + if server.DEBUG & server.DBG_RQL: + print 'FLYING RQL FOR SOURCE %s: %s', self.uri, union.as_string() if varmap: print 'USING VARMAP', varmap - print union.as_string() - print 'SOLUTIONS', ','.join(str(s.solutions) for s in union.children) + if server.DEBUG & server.DBG_MORE: + print 'SOLUTIONS', ','.join(str(s.solutions) for s in union.children) # generate sql queries if we are able to do so sql, query_args = self._rql_sqlgen.generate(union, args, varmap) query = 'INSERT INTO %s %s' % (table, sql.encode(self.encoding)) @@ -437,6 +439,8 @@ if server.DEBUG: print 'exec', query, args cursor = session.pool[self.uri] + if server.DEBUG & server.DBG_SQL: + print 'exec', query, args, session.pool.connection(self.uri)._cnx try: # str(query) to avoid error if it's an unicode string cursor.execute(str(query), args) @@ -455,7 +459,7 @@ """Execute a query. it's a function just so that it shows up in profiling """ - if server.DEBUG: + if server.DEBUG & server.DBG_SQL: print 'execmany', query, 'with', len(args), 'arguments' cursor = session.pool[self.uri] try: diff -r c97c4b56e6a0 -r 16d9419a4a79 server/sources/pyrorql.py --- a/server/sources/pyrorql.py Fri Jul 31 23:21:45 2009 +0200 +++ b/server/sources/pyrorql.py Fri Jul 31 23:25:02 2009 +0200 @@ -270,11 +270,12 @@ """ if not args is None: args = args.copy() - if server.DEBUG: - print 'RQL FOR PYRO SOURCE', self.uri - print union.as_string() - if args: print 'ARGS', args - print 'SOLUTIONS', ','.join(str(s.solutions) for s in union.children) + if server.DEBUG & server.DBG_RQL: + print 'RQL FOR PYRO SOURCE %s: %s', self.uri, union.as_string() + if args: + print 'ARGS', args + if server.DEBUG & server.DBG_MORE: + print 'SOLUTIONS', ','.join(str(s.solutions) for s in union.children) # get cached cursor anyway cu = session.pool[self.uri] if cu is None: @@ -288,7 +289,7 @@ if server.DEBUG: print 'unknown eid', ex, 'no results' return [] - if server.DEBUG: + if server.DEBUG & server.DBG_RQL: print 'TRANSLATED RQL', rql try: rset = cu.execute(rql, args, cachekey) @@ -325,11 +326,11 @@ results = rows else: results = [] - if server.DEBUG: + if server.DEBUG & server.DBG_RQL: if len(results)>10: - print '--------------->', results[:10], '...', len(results) + print '-->', results[:10], '...', len(results) else: - print '--------------->', results + print '-->', results return results def _entity_relations_and_kwargs(self, session, entity):