# Path: hecatoncheir/DbDriverBase.py
# class DbDriverBase:
#     __metaclass__ = ABCMeta
# 
#     @abstractmethod
#     def __init__(self, connstr, dbuser, dbpass):
#         raise NotImplementedError
# 
#     @abstractmethod
#     def connect(self):
#         raise NotImplementedError
# 
#     @abstractmethod
#     def query_to_resultset(self, label, query, max_rows=10000, timeout=None):
#         raise NotImplementedError
# 
#     def q2rs(self, query, max_rows=10000, timeout=None):
#         return self.query_to_resultset(query, max_rows, timeout)
# 
#     @abstractmethod
#     def disconnect(self):
#         raise NotImplementedError
# 
# Path: hecatoncheir/logger.py
# def to_unicode(s):
# def str2unicode(s):
# def setup():
# def ts():
# def trace(msg):
# def debug(msg):
# def info(msg):
# def info_cont(msg):
# def info_end(msg):
# def warning(msg):
# def error(msg, detail=None, query=None):
# def dump_datetime_default(o):
# def dump(msg, obj):
# 
# Path: hecatoncheir/QueryResult.py
# class QueryResult():
#     query = None
#     column_names = None
#     resultset = None
# 
#     def __init__(self, query):
#         self.query = query
#         self.column_names = []
#         self.resultset = []
# 
#     def __repr__(self):
#         return u'QueryResult:' + repr({'query': self.query,
#                                        'column': self.column_names,
#                                        'result': self.resultset})
# 
# Path: hecatoncheir/exception.py
# class DriverError(Exception):
#     source = None
# 
#     def __init__(self, value, source=None):
#         self.value = value
#         self.source = source
# 
#     def __str__(self):
#         return self.value
# 
# class InternalError(Exception):
#     source = None
#     query = None
# 
#     def __init__(self, value, query=None, source=None):
#         self.value = value
#         self.query = query
#         self.source = source
# 
#     def __str__(self):
#         return self.value
# 
# class QueryError(Exception):
#     source = None
#     query = None
# 
#     def __init__(self, value, query, source=None):
#         self.value = value
#         self.query = query
#         self.source = source
# 
#     def __str__(self):
#         return self.value
# 
# class QueryTimeout(Exception):
#     source = None
#     query = None
# 
#     def __init__(self, value, query, source=None):
#         self.value = value
#         self.query = query
#         self.source = source
# 
#     def __str__(self):
#         return self.value


from copy import deepcopy
from hecatoncheir import DbDriverBase, logger as log
from hecatoncheir.QueryResult import QueryResult
from hecatoncheir.exception import (DriverError, InternalError, QueryError,
                                    QueryTimeout)
import threading
        except InternalError as e:
            raise e
        except DriverError as e:
            raise e
        except Exception as e:
            emsg = str(e.args[0])
            if emsg.startswith('ORA-01013: '):
                raise QueryTimeout(
                    "Query timeout: %s" % query,
                    query=query, source=e)
            msg = "Could not execute a query: %s" % (
                emsg.decode('utf-8').split('\n')[0])
            raise QueryError(msg, query=query, source=e)
        finally:
            if monitor:
                monitor.cancel()
            if self.conn:
                self.conn.rollback()
        log.trace('query_to_resultset: end')
        return res

    def disconnect(self):
        if self.conn is None:
            return False

        try:
            self.conn.close()
        except Exception as e:
            msg = (u"Could not disconnect from the server: %s" %
                   unicode(e).split('\n')[0])

# Path: hecatoncheir/DbDriverBase.py
# class DbDriverBase:
#     __metaclass__ = ABCMeta
# 
#     @abstractmethod
#     def __init__(self, connstr, dbuser, dbpass):
#         raise NotImplementedError
# 
#     @abstractmethod
#     def connect(self):
#         raise NotImplementedError
# 
#     @abstractmethod
#     def query_to_resultset(self, label, query, max_rows=10000, timeout=None):
#         raise NotImplementedError
# 
#     def q2rs(self, query, max_rows=10000, timeout=None):
#         return self.query_to_resultset(query, max_rows, timeout)
# 
#     @abstractmethod
#     def disconnect(self):
#         raise NotImplementedError
# 
# Path: hecatoncheir/logger.py
# def to_unicode(s):
# def str2unicode(s):
# def setup():
# def ts():
# def trace(msg):
# def debug(msg):
# def info(msg):
# def info_cont(msg):
# def info_end(msg):
# def warning(msg):
# def error(msg, detail=None, query=None):
# def dump_datetime_default(o):
# def dump(msg, obj):
# 
# Path: hecatoncheir/QueryResult.py
# class QueryResult():
#     query = None
#     column_names = None
#     resultset = None
# 
#     def __init__(self, query):
#         self.query = query
#         self.column_names = []
#         self.resultset = []
# 
#     def __repr__(self):
#         return u'QueryResult:' + repr({'query': self.query,
#                                        'column': self.column_names,
#                                        'result': self.resultset})
# 
# Path: hecatoncheir/exception.py
# class DriverError(Exception):
#     source = None
# 
#     def __init__(self, value, source=None):
#         self.value = value
#         self.source = source
# 
#     def __str__(self):
#         return self.value
# 
# class InternalError(Exception):
#     source = None
#     query = None
# 
#     def __init__(self, value, query=None, source=None):
#         self.value = value
#         self.query = query
#         self.source = source
# 
#     def __str__(self):
#         return self.value
# 
# class QueryError(Exception):
#     source = None
#     query = None
# 
#     def __init__(self, value, query, source=None):
#         self.value = value
#         self.query = query
#         self.source = source
# 
#     def __str__(self):
#         return self.value
# 
# class QueryTimeout(Exception):
#     source = None
#     query = None
# 
#     def __init__(self, value, query, source=None):
#         self.value = value
#         self.query = query
#         self.source = source
# 
#     def __str__(self):
#         return self.value


# Path: hecatoncheir/oracle/OraDriver.py
from copy import deepcopy
from hecatoncheir import DbDriverBase, logger as log
from hecatoncheir.QueryResult import QueryResult
from hecatoncheir.exception import (DriverError, InternalError, QueryError,
                                    QueryTimeout)
import threading

        except InternalError as e:
            raise e
        except DriverError as e:
            raise e
        except Exception as e:
            emsg = str(e.args[0])
            if emsg.startswith('ORA-01013: '):
                raise QueryTimeout(
                    "Query timeout: %s" % query,
                    query=query, source=e)
            msg = "Could not execute a query: %s" % (
                emsg.decode('utf-8').split('\n')[0])
            raise QueryError(msg, query=query, source=e)
        finally:
            if monitor:
                monitor.cancel()
            if self.conn:
                self.conn.rollback()
        log.trace('query_to_resultset: end')
        return res

    def disconnect(self):
        if self.conn is None:
            return False

        try:
            self.conn.close()
        except Exception as e:
            msg = (u"Could not disconnect from the server: %s" %
                   unicode(e).split('\n')[0])

            raise DriverError(msg, source=e)