def _patch_cursor()

in aws_xray_sdk/ext/django/db.py [0:0]


def _patch_cursor(cursor_name, conn):
    attr = '_xray_original_{}'.format(cursor_name)

    if hasattr(conn, attr):
        log.debug('django built-in db {} already patched'.format(cursor_name))
        return

    if not hasattr(conn, cursor_name):
        log.debug('django built-in db does not have {}'.format(cursor_name))
        return

    setattr(conn, attr, getattr(conn, cursor_name))

    meta = {}

    if hasattr(conn, 'vendor'):
        meta['database_type'] = conn.vendor

    def cursor(self, *args, **kwargs):

        host = None
        user = None

        if hasattr(self, 'settings_dict'):
            settings = self.settings_dict
            host = settings.get('HOST', None)
            user = settings.get('USER', None)

        if host:
            meta['name'] = host
        if user:
            meta['user'] = user

        original_cursor = getattr(self, attr)(*args, **kwargs)
        return DjangoXRayTracedCursor(original_cursor, meta)

    setattr(conn, cursor_name, cursor)