def _save_dictionary_parameter(self, dict_param):
        full_msg = self.data
        # look for %(blah) fields in string;
        # ignore %% and deal with the
        # case where % is first character on the line
        keys = re.findall('(?:[^%]|^)%\((\w*)\)[a-z]', full_msg)

        # if we don't find any %(blah) blocks but have a %s
        if not keys and re.findall('(?:[^%]|^)%[a-z]', full_msg):
            # apparently the full dictionary is the parameter
            params = copy.deepcopy(dict_param)
        else:
            params = {}
            for key in keys:
                try:
                    params[key] = copy.deepcopy(dict_param[key])
                except __HOLE__:
                    # cast uncopyable thing to unicode string
                    params[key] = unicode(dict_param[key])

        return params
dataset/ETHPy150Open openstack-dev/heat-cfnclient/heat_cfnclient/openstack/common/gettextutils.py/Message._save_dictionary_parameter