def read_meta(self, document_id=None):
        """
        Load metadata associated with the document

        .. note::
           This method is called automatically if needed when a property is first accessed. You will not normally have
           to use this method manually.

        :param document_id: (optional) set the document id if this is an :py:meth:`abstract` document
        :return: self
        """
        if document_id:
            if not self.abstract:
                raise ImmutableDocumentException()
            self._id = document_id

        if self.abstract:
            raise AbstractDocumentException()

        metadata = self._api.get_document_meta(self.id)

        self._name = metadata['document_name']
        self._public = metadata['public']
        self._owner = metadata['owner']
        self._created_at = parse_xsd_datetime(metadata['created_at'])
        self._views = metadata['views_count']

        self._bundles = BundleManager(self._api, self)

        return self