def from_url(cls, path):
        """
        Instantiate a :class:`TemplateRepository` instance from the data in a
        file or url

        Args:
            path (str): Path or url to the json file to load

        Returns:
            TemplateRepository: A new instance
        """
        if os.path.isfile(path):
            with open(path) as fd:
                data = fd.read()
        else:
            try:
                response = urllib.urlopen(path)
                if response.code >= 300:
                    raise RuntimeError('Unable to load repo from %s' % path)

                data = response.read()
                response.close()
            except IOError:
                raise RuntimeError(
                    'Unable to load repo from %s (IO error)' % path
                )

        return cls(json.loads(data), path)