def export_filenames_and_read_urls_by_tag_id(
        self,
        tag_id: str,
    ) -> List[Dict[str, str]]:
        """Fetches filenames, read URLs, and datasource URLs from the given tag.

        More information:
        https://docs.lightly.ai/docs/filenames-and-readurls

        Args:
            tag_id:
                ID of the tag which should exported.

        Returns:
            A list of dictionaries with the keys "filename", "readUrl" and "datasourceUrl".
            An example:
            [
                {
                    "fileName": "sample1.jpg",
                    "readUrl": "s3://my_datasource/sample1.jpg?read_url_key=EAIFUIENDLFN",
                    "datasourceUrl": "s3://my_datasource/sample1.jpg",
                },
                {
                    "fileName": "sample2.jpg",
                    "readUrl": "s3://my_datasource/sample2.jpg?read_url_key=JSBFIEUHVSJ",
                    "datasourceUrl": "s3://my_datasource/sample2.jpg",
                },
            ]

        """
        filenames_string = "\n".join(
            utils.paginate_endpoint(
                self._tags_api.export_tag_to_basic_filenames,
                dataset_id=self.dataset_id,
                tag_id=tag_id,
                file_name_format=FileNameFormat.NAME,
            )
        )
        read_urls_string = "\n".join(
            utils.paginate_endpoint(
                self._tags_api.export_tag_to_basic_filenames,
                dataset_id=self.dataset_id,
                tag_id=tag_id,
                file_name_format=FileNameFormat.REDIRECTED_READ_URL,
            )
        )
        datasource_urls_string = "\n".join(
            utils.paginate_endpoint(
                self._tags_api.export_tag_to_basic_filenames,
                dataset_id=self.dataset_id,
                tag_id=tag_id,
                file_name_format=FileNameFormat.DATASOURCE_FULL,
            )
        )
        # The endpoint exportTagToBasicFilenames returns a plain string so we
        # have to split it by newlines in order to get the individual entries.
        # The order of the fileNames and readUrls and datasourceUrls is guaranteed to be the same
        # by the API so we can simply zip them.
        filenames = filenames_string.split("\n")
        read_urls = read_urls_string.split("\n")
        datasource_urls = datasource_urls_string.split("\n")
        return [
            {
                "fileName": filename,
                "readUrl": read_url,
                "datasourceUrl": datasource_url,
            }
            for filename, read_url, datasource_url in zip(
                filenames, read_urls, datasource_urls
            )
        ]
Fetches filenames, read URLs, and datasource URLs from the given tag.

        More information:
        https://docs.lightly.ai/docs/filenames-and-readurls

        Args:
            tag_id:
                ID of the tag which should exported.

        Returns:
            A list of dictionaries with the keys "filename", "readUrl" and "datasourceUrl".
            An example:
            [
                {
                    "fileName": "sample1.jpg",
                    "readUrl": "s3://my_datasource/sample1.jpg?read_url_key=EAIFUIENDLFN",
                    "datasourceUrl": "s3://my_datasource/sample1.jpg",
                },
                {
                    "fileName": "sample2.jpg",
                    "readUrl": "s3://my_datasource/sample2.jpg?read_url_key=JSBFIEUHVSJ",
                    "datasourceUrl": "s3://my_datasource/sample2.jpg",
                },
            ]

        
lightly/api/api_workflow_export.py