Return the profile with the received ID as a dict

        If a local copy of the profile exists, it'll be returned. If not, it'll
        be downloaded from the web. The results are cached, so any subsequent
        calls won't hit the filesystem or the web.

        This method raises DataPackageRegistryException if there were any
        errors.

def get(self, profile_id):
        '''Return the profile with the received ID as a dict

        If a local copy of the profile exists, it'll be returned. If not, it'll
        be downloaded from the web. The results are cached, so any subsequent
        calls won't hit the filesystem or the web.

        This method raises DataPackageRegistryException if there were any
        errors.
        '''
        if profile_id not in self._profiles:
            try:
                self._profiles[profile_id] = self._get_profile(profile_id)
            except (IOError,
                    ValueError,
                    requests.exceptions.RequestException) as e:
                six.raise_from(DataPackageRegistryException(e), e)
        return self._profiles[profile_id]