def features(self):
        """
        lazy fetch and cache features
        """
        if self._features is None:
            metadata = self.metadata()
            if "features" in metadata:
                self._features = metadata["features"]
            else:
                self._features = []
        return self._features
lazy fetch and cache features