'kw arguments can be:
oracle_resolve_synonyms
dblink'

@reflection.cache
def get_foreign_keys(self, connection, table_name, schema=None, **kw):

    requested_schema = schema
    resolve_synonyms = kw.get('oracle_resolve_synonyms', False)
    dblink = kw.get('dblink', '')
    info_cache = kw.get('info_cache')
    (table_name, schema, dblink, synonym) = self._prepare_reflection_args(connection, table_name, schema, resolve_synonyms, dblink, info_cache=info_cache)
    constraint_data = self._get_constraint_data(connection, table_name, schema, dblink, info_cache=kw.get('info_cache'))
    def fkey_rec():
        return {'name': None, 'constrained_columns': [], 'referred_schema': None, 'referred_table': None, 'referred_columns': []}
    fkeys = util.defaultdict(fkey_rec)
    for row in constraint_data:
        (cons_name, cons_type, local_column, remote_table, remote_column, remote_owner) = (row[0:2] + tuple([self.normalize_name(x) for x in row[2:6]]))
        if (cons_type == 'R'):
            if (remote_table is None):
                util.warn(("Got    'None'    querying    'table_name'    from    all_cons_columns%(dblink)s    -    does    the    user    have    proper    rights    to    the    table?" % {'dblink': dblink}))
                continue
            rec = fkeys[cons_name]
            rec['name'] = cons_name
            (local_cols, remote_cols) = (rec['constrained_columns'], rec['referred_columns'])
            if (not rec['referred_table']):
                if resolve_synonyms:
                    (ref_remote_name, ref_remote_owner, ref_dblink, ref_synonym) = self._resolve_synonym(connection, desired_owner=self.denormalize_name(remote_owner), desired_table=self.denormalize_name(remote_table))
                    if ref_synonym:
                        remote_table = self.normalize_name(ref_synonym)
                        remote_owner = self.normalize_name(ref_remote_owner)
                rec['referred_table'] = remote_table
                if ((requested_schema is not None) or (self.denormalize_name(remote_owner) != schema)):
                    rec['referred_schema'] = remote_owner
            local_cols.append(local_column)
            remote_cols.append(remote_column)
    return list(fkeys.values())
