Script 'mail_helper' called by obssrc
Hello community,

here is the log from the commit of package python-slack-sdk for 
openSUSE:Factory checked in at 2024-06-10 17:37:49
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/python-slack-sdk (Old)
 and      /work/SRC/openSUSE:Factory/.python-slack-sdk.new.19518 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Package is "python-slack-sdk"

Mon Jun 10 17:37:49 2024 rev:11 rq:1179640 version:3.27.2

Changes:
--------
--- /work/SRC/openSUSE:Factory/python-slack-sdk/python-slack-sdk.changes        
2024-03-06 23:05:40.395798092 +0100
+++ 
/work/SRC/openSUSE:Factory/.python-slack-sdk.new.19518/python-slack-sdk.changes 
    2024-06-10 17:38:04.751942806 +0200
@@ -1,0 +2,9 @@
+Mon Jun 10 07:58:03 UTC 2024 - Dirk Müller <dmuel...@suse.com>
+
+- update to 3.27.2:
+  * #1498 Fix #1496 Async client uses blocking call when
+    uploading file with v
+  * #1492 Fix #1468 `RichTextElement.elements` items are never
+    promoted to a proper Python object type
+
+-------------------------------------------------------------------

Old:
----
  slack-sdk-3.27.1.tar.gz

New:
----
  slack-sdk-3.27.2.tar.gz

++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Other differences:
------------------
++++++ python-slack-sdk.spec ++++++
--- /var/tmp/diff_new_pack.0xlxtT/_old  2024-06-10 17:38:05.763980243 +0200
+++ /var/tmp/diff_new_pack.0xlxtT/_new  2024-06-10 17:38:05.767980391 +0200
@@ -17,7 +17,7 @@
 
 
 Name:           python-slack-sdk
-Version:        3.27.1
+Version:        3.27.2
 Release:        0
 Summary:        Python SDKs for the Slack API
 License:        MIT

++++++ slack-sdk-3.27.1.tar.gz -> slack-sdk-3.27.2.tar.gz ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/python-slack-sdk-3.27.1/.github/dependabot.yml 
new/python-slack-sdk-3.27.2/.github/dependabot.yml
--- old/python-slack-sdk-3.27.1/.github/dependabot.yml  1970-01-01 
01:00:00.000000000 +0100
+++ new/python-slack-sdk-3.27.2/.github/dependabot.yml  2024-05-16 
04:54:21.000000000 +0200
@@ -0,0 +1,14 @@
+# Please see the documentation for all configuration options:
+# 
https://docs.github.com/code-security/dependabot/dependabot-version-updates/configuration-options-for-the-dependabot.yml-file
+
+version: 2
+updates:
+  - package-ecosystem: "pip"
+    directory: "/"
+    schedule:
+      interval: "monthly"
+    open-pull-requests-limit: 5
+  - package-ecosystem: "github-actions"
+    directory: "/"
+    schedule:
+      interval: "monthly"
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/python-slack-sdk-3.27.1/.github/workflows/ci-build.yml 
new/python-slack-sdk-3.27.2/.github/workflows/ci-build.yml
--- old/python-slack-sdk-3.27.1/.github/workflows/ci-build.yml  2024-02-28 
03:09:42.000000000 +0100
+++ new/python-slack-sdk-3.27.2/.github/workflows/ci-build.yml  2024-05-16 
04:54:21.000000000 +0200
@@ -26,11 +26,12 @@
     env:
       PYTHON_SLACK_SDK_MOCK_SERVER_MODE: 'threading'
       CI_LARGE_SOCKET_MODE_PAYLOAD_TESTING_DISABLED: '1'
+      CI_UNSTABLE_TESTS_SKIP_ENABLED: '1'
       FORCE_COLOR: '1'
     steps:
-    - uses: actions/checkout@v3
+    - uses: actions/checkout@v4
     - name: Set up Python ${{ matrix.python-version }}
-      uses: actions/setup-python@v4
+      uses: actions/setup-python@v5
       with:
         python-version: ${{ matrix.python-version }}
         cache: pip
@@ -53,7 +54,7 @@
         python setup.py unit_tests --test-target 
tests/slack_sdk/oauth/state_store/test_sqlalchemy.py
     - name: Run codecov (only 3.9)
       if: startsWith(matrix.python-version, '3.9')
-      uses: codecov/codecov-action@v3
+      uses: codecov/codecov-action@v4
       with:
         token: ${{ secrets.CODECOV_TOKEN }}
         # python setup.py validate generates the coverage file
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/python-slack-sdk-3.27.1/.github/workflows/pytype.yml 
new/python-slack-sdk-3.27.2/.github/workflows/pytype.yml
--- old/python-slack-sdk-3.27.1/.github/workflows/pytype.yml    2024-02-28 
03:09:42.000000000 +0100
+++ new/python-slack-sdk-3.27.2/.github/workflows/pytype.yml    2024-05-16 
04:54:21.000000000 +0200
@@ -13,9 +13,9 @@
       matrix:
         python-version: ['3.9']
     steps:
-    - uses: actions/checkout@v3
+    - uses: actions/checkout@v4
     - name: Set up Python ${{ matrix.python-version }}
-      uses: actions/setup-python@v4
+      uses: actions/setup-python@v5
       with:
         python-version: ${{ matrix.python-version }}
     - name: Install dependencies
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/python-slack-sdk-3.27.1/.github/workflows/triage-issues.yml 
new/python-slack-sdk-3.27.2/.github/workflows/triage-issues.yml
--- old/python-slack-sdk-3.27.1/.github/workflows/triage-issues.yml     
2024-02-28 03:09:42.000000000 +0100
+++ new/python-slack-sdk-3.27.2/.github/workflows/triage-issues.yml     
2024-05-16 04:54:21.000000000 +0200
@@ -17,7 +17,7 @@
   stale:
     runs-on: ubuntu-latest
     steps:
-      - uses: actions/stale@v4.0.0
+      - uses: actions/stale@v9.0.0
         with:
           days-before-issue-stale: 30
           days-before-issue-close: 10
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/python-slack-sdk-3.27.1/docs/api-docs/slack_sdk/index.html 
new/python-slack-sdk-3.27.2/docs/api-docs/slack_sdk/index.html
--- old/python-slack-sdk-3.27.1/docs/api-docs/slack_sdk/index.html      
2024-02-28 03:09:42.000000000 +0100
+++ new/python-slack-sdk-3.27.2/docs/api-docs/slack_sdk/index.html      
2024-05-16 04:54:21.000000000 +0200
@@ -3814,7 +3814,7 @@
 
         # step2: &#34;https://files.slack.com/upload/v1/...&#34; per file
         for f in files:
-            upload_result = _upload_file_via_v2_url(
+            upload_result = self._upload_file(
                 url=f[&#34;upload_url&#34;],
                 data=f[&#34;data&#34;],
                 logger=self._logger,
@@ -3822,9 +3822,9 @@
                 proxy=self.proxy,
                 ssl=self.ssl,
             )
-            if upload_result.get(&#34;status&#34;) != 200:
-                status = upload_result.get(&#34;status&#34;)
-                body = upload_result.get(&#34;body&#34;)
+            if upload_result.status != 200:
+                status = upload_result.status
+                body = upload_result.body
                 message = (
                     &#34;Failed to upload a file &#34;
                     f&#34;(status: {status}, body: {body}, filename: 
{f.get(&#39;filename&#39;)}, title: {f.get(&#39;title&#39;)})&#34;
@@ -10963,7 +10963,7 @@
 
     # step2: &#34;https://files.slack.com/upload/v1/...&#34; per file
     for f in files:
-        upload_result = _upload_file_via_v2_url(
+        upload_result = self._upload_file(
             url=f[&#34;upload_url&#34;],
             data=f[&#34;data&#34;],
             logger=self._logger,
@@ -10971,9 +10971,9 @@
             proxy=self.proxy,
             ssl=self.ssl,
         )
-        if upload_result.get(&#34;status&#34;) != 200:
-            status = upload_result.get(&#34;status&#34;)
-            body = upload_result.get(&#34;body&#34;)
+        if upload_result.status != 200:
+            status = upload_result.status
+            body = upload_result.body
             message = (
                 &#34;Failed to upload a file &#34;
                 f&#34;(status: {status}, body: {body}, filename: 
{f.get(&#39;filename&#39;)}, title: {f.get(&#39;title&#39;)})&#34;
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/python-slack-sdk-3.27.1/docs/api-docs/slack_sdk/models/blocks/block_elements.html
 
new/python-slack-sdk-3.27.2/docs/api-docs/slack_sdk/models/blocks/block_elements.html
--- 
old/python-slack-sdk-3.27.1/docs/api-docs/slack_sdk/models/blocks/block_elements.html
       2024-02-28 03:09:42.000000000 +0100
+++ 
new/python-slack-sdk-3.27.2/docs/api-docs/slack_sdk/models/blocks/block_elements.html
       2024-05-16 04:54:21.000000000 +0200
@@ -1896,7 +1896,7 @@
     ):
         super().__init__(type=self.type)
         show_unknown_key_warning(self, others)
-        self.elements = elements
+        self.elements = BlockElement.parse_all(elements)
         self.style = style
         self.indent = indent
         self.offset = offset
@@ -1919,7 +1919,7 @@
     ):
         super().__init__(type=self.type)
         show_unknown_key_warning(self, others)
-        self.elements = elements
+        self.elements = BlockElement.parse_all(elements)
         self.border = border
 
 
@@ -1938,7 +1938,7 @@
     ):
         super().__init__(type=self.type)
         show_unknown_key_warning(self, others)
-        self.elements = elements
+        self.elements = BlockElement.parse_all(elements)
 
 
 class RichTextSectionElement(RichTextElement):
@@ -1956,7 +1956,7 @@
     ):
         super().__init__(type=self.type)
         show_unknown_key_warning(self, others)
-        self.elements = elements
+        self.elements = BlockElement.parse_all(elements)
 
 
 class RichTextElementParts:
@@ -5350,7 +5350,7 @@
     ):
         super().__init__(type=self.type)
         show_unknown_key_warning(self, others)
-        self.elements = elements
+        self.elements = BlockElement.parse_all(elements)
         self.style = style
         self.indent = indent
         self.offset = offset
@@ -5425,7 +5425,7 @@
     ):
         super().__init__(type=self.type)
         show_unknown_key_warning(self, others)
-        self.elements = elements
+        self.elements = BlockElement.parse_all(elements)
         self.border = border</code></pre>
 </details>
 <h3>Ancestors</h3>
@@ -5496,7 +5496,7 @@
     ):
         super().__init__(type=self.type)
         show_unknown_key_warning(self, others)
-        self.elements = elements</code></pre>
+        self.elements = BlockElement.parse_all(elements)</code></pre>
 </details>
 <h3>Ancestors</h3>
 <ul class="hlist">
@@ -5566,7 +5566,7 @@
     ):
         super().__init__(type=self.type)
         show_unknown_key_warning(self, others)
-        self.elements = elements</code></pre>
+        self.elements = BlockElement.parse_all(elements)</code></pre>
 </details>
 <h3>Ancestors</h3>
 <ul class="hlist">
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/python-slack-sdk-3.27.1/docs/api-docs/slack_sdk/models/blocks/index.html 
new/python-slack-sdk-3.27.2/docs/api-docs/slack_sdk/models/blocks/index.html
--- 
old/python-slack-sdk-3.27.1/docs/api-docs/slack_sdk/models/blocks/index.html    
    2024-02-28 03:09:42.000000000 +0100
+++ 
new/python-slack-sdk-3.27.2/docs/api-docs/slack_sdk/models/blocks/index.html    
    2024-05-16 04:54:21.000000000 +0200
@@ -5464,7 +5464,7 @@
     ):
         super().__init__(type=self.type)
         show_unknown_key_warning(self, others)
-        self.elements = elements
+        self.elements = BlockElement.parse_all(elements)
         self.style = style
         self.indent = indent
         self.offset = offset
@@ -5539,7 +5539,7 @@
     ):
         super().__init__(type=self.type)
         show_unknown_key_warning(self, others)
-        self.elements = elements
+        self.elements = BlockElement.parse_all(elements)
         self.border = border</code></pre>
 </details>
 <h3>Ancestors</h3>
@@ -5610,7 +5610,7 @@
     ):
         super().__init__(type=self.type)
         show_unknown_key_warning(self, others)
-        self.elements = elements</code></pre>
+        self.elements = BlockElement.parse_all(elements)</code></pre>
 </details>
 <h3>Ancestors</h3>
 <ul class="hlist">
@@ -5680,7 +5680,7 @@
     ):
         super().__init__(type=self.type)
         show_unknown_key_warning(self, others)
-        self.elements = elements</code></pre>
+        self.elements = BlockElement.parse_all(elements)</code></pre>
 </details>
 <h3>Ancestors</h3>
 <ul class="hlist">
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/python-slack-sdk-3.27.1/docs/api-docs/slack_sdk/version.html 
new/python-slack-sdk-3.27.2/docs/api-docs/slack_sdk/version.html
--- old/python-slack-sdk-3.27.1/docs/api-docs/slack_sdk/version.html    
2024-02-28 03:09:42.000000000 +0100
+++ new/python-slack-sdk-3.27.2/docs/api-docs/slack_sdk/version.html    
2024-05-16 04:54:21.000000000 +0200
@@ -28,7 +28,7 @@
 <span>Expand source code</span>
 </summary>
 <pre><code class="python">&#34;&#34;&#34;Check the latest version at 
https://pypi.org/project/slack-sdk/&#34;&#34;&#34;
-__version__ = &#34;3.27.1&#34;</code></pre>
+__version__ = &#34;3.27.2&#34;</code></pre>
 </details>
 </section>
 <section>
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/python-slack-sdk-3.27.1/docs/api-docs/slack_sdk/web/async_base_client.html 
new/python-slack-sdk-3.27.2/docs/api-docs/slack_sdk/web/async_base_client.html
--- 
old/python-slack-sdk-3.27.1/docs/api-docs/slack_sdk/web/async_base_client.html  
    2024-02-28 03:09:42.000000000 +0100
+++ 
new/python-slack-sdk-3.27.2/docs/api-docs/slack_sdk/web/async_base_client.html  
    2024-05-16 04:54:21.000000000 +0200
@@ -39,6 +39,7 @@
 )  # type: ignore
 from .async_slack_response import AsyncSlackResponse
 from .deprecation import show_deprecation_warning_if_any
+from .file_upload_v2_result import FileUploadV2Result
 from .internal_utils import (
     convert_bool_to_0_or_1,
     _build_req_args,
@@ -241,6 +242,31 @@
             api_url=api_url,
             req_args=req_args,
             retry_handlers=self.retry_handlers,
+        )
+
+    async def _upload_file(
+        self,
+        *,
+        url: str,
+        data: bytes,
+        logger: logging.Logger,
+        timeout: int,
+        proxy: Optional[str],
+        ssl: Optional[SSLContext],
+    ) -&gt; FileUploadV2Result:
+        &#34;&#34;&#34;Upload a file using the issued upload URL&#34;&#34;&#34;
+        result = await _request_with_session(
+            current_session=self.session,
+            timeout=timeout,
+            logger=logger,
+            http_verb=&#34;POST&#34;,
+            api_url=url,
+            req_args={&#34;data&#34;: data, &#34;proxy&#34;: proxy, 
&#34;ssl&#34;: ssl},
+            retry_handlers=self.retry_handlers,
+        )
+        return FileUploadV2Result(
+            status=result.get(&#34;status_code&#34;),
+            body=result.get(&#34;body&#34;),
         )</code></pre>
 </details>
 </section>
@@ -453,6 +479,31 @@
             api_url=api_url,
             req_args=req_args,
             retry_handlers=self.retry_handlers,
+        )
+
+    async def _upload_file(
+        self,
+        *,
+        url: str,
+        data: bytes,
+        logger: logging.Logger,
+        timeout: int,
+        proxy: Optional[str],
+        ssl: Optional[SSLContext],
+    ) -&gt; FileUploadV2Result:
+        &#34;&#34;&#34;Upload a file using the issued upload URL&#34;&#34;&#34;
+        result = await _request_with_session(
+            current_session=self.session,
+            timeout=timeout,
+            logger=logger,
+            http_verb=&#34;POST&#34;,
+            api_url=url,
+            req_args={&#34;data&#34;: data, &#34;proxy&#34;: proxy, 
&#34;ssl&#34;: ssl},
+            retry_handlers=self.retry_handlers,
+        )
+        return FileUploadV2Result(
+            status=result.get(&#34;status_code&#34;),
+            body=result.get(&#34;body&#34;),
         )</code></pre>
 </details>
 <h3>Subclasses</h3>
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/python-slack-sdk-3.27.1/docs/api-docs/slack_sdk/web/async_client.html 
new/python-slack-sdk-3.27.2/docs/api-docs/slack_sdk/web/async_client.html
--- old/python-slack-sdk-3.27.1/docs/api-docs/slack_sdk/web/async_client.html   
2024-02-28 03:09:42.000000000 +0100
+++ new/python-slack-sdk-3.27.2/docs/api-docs/slack_sdk/web/async_client.html   
2024-05-16 04:54:21.000000000 +0200
@@ -52,7 +52,6 @@
     _warn_if_text_or_attachment_fallback_is_missing,
     _remove_none_values,
     _to_v2_file_upload_item,
-    _upload_file_via_v2_url,
     _validate_for_legacy_client,
     _print_files_upload_v2_suggestion,
 )
@@ -3613,7 +3612,7 @@
 
         # step2: &#34;https://files.slack.com/upload/v1/...&#34; per file
         for f in files:
-            upload_result = _upload_file_via_v2_url(
+            upload_result = await self._upload_file(
                 url=f[&#34;upload_url&#34;],
                 data=f[&#34;data&#34;],
                 logger=self._logger,
@@ -3621,9 +3620,9 @@
                 proxy=self.proxy,
                 ssl=self.ssl,
             )
-            if upload_result.get(&#34;status&#34;) != 200:
-                status = upload_result.get(&#34;status&#34;)
-                body = upload_result.get(&#34;body&#34;)
+            if upload_result.status != 200:
+                status = upload_result.status
+                body = upload_result.body
                 message = (
                     &#34;Failed to upload a file &#34;
                     f&#34;(status: {status}, body: {body}, filename: 
{f.get(&#39;filename&#39;)}, title: {f.get(&#39;title&#39;)})&#34;
@@ -8781,7 +8780,7 @@
 
         # step2: &#34;https://files.slack.com/upload/v1/...&#34; per file
         for f in files:
-            upload_result = _upload_file_via_v2_url(
+            upload_result = await self._upload_file(
                 url=f[&#34;upload_url&#34;],
                 data=f[&#34;data&#34;],
                 logger=self._logger,
@@ -8789,9 +8788,9 @@
                 proxy=self.proxy,
                 ssl=self.ssl,
             )
-            if upload_result.get(&#34;status&#34;) != 200:
-                status = upload_result.get(&#34;status&#34;)
-                body = upload_result.get(&#34;body&#34;)
+            if upload_result.status != 200:
+                status = upload_result.status
+                body = upload_result.body
                 message = (
                     &#34;Failed to upload a file &#34;
                     f&#34;(status: {status}, body: {body}, filename: 
{f.get(&#39;filename&#39;)}, title: {f.get(&#39;title&#39;)})&#34;
@@ -15930,7 +15929,7 @@
 
     # step2: &#34;https://files.slack.com/upload/v1/...&#34; per file
     for f in files:
-        upload_result = _upload_file_via_v2_url(
+        upload_result = await self._upload_file(
             url=f[&#34;upload_url&#34;],
             data=f[&#34;data&#34;],
             logger=self._logger,
@@ -15938,9 +15937,9 @@
             proxy=self.proxy,
             ssl=self.ssl,
         )
-        if upload_result.get(&#34;status&#34;) != 200:
-            status = upload_result.get(&#34;status&#34;)
-            body = upload_result.get(&#34;body&#34;)
+        if upload_result.status != 200:
+            status = upload_result.status
+            body = upload_result.body
             message = (
                 &#34;Failed to upload a file &#34;
                 f&#34;(status: {status}, body: {body}, filename: 
{f.get(&#39;filename&#39;)}, title: {f.get(&#39;title&#39;)})&#34;
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/python-slack-sdk-3.27.1/docs/api-docs/slack_sdk/web/async_internal_utils.html
 
new/python-slack-sdk-3.27.2/docs/api-docs/slack_sdk/web/async_internal_utils.html
--- 
old/python-slack-sdk-3.27.1/docs/api-docs/slack_sdk/web/async_internal_utils.html
   2024-02-28 03:09:42.000000000 +0100
+++ 
new/python-slack-sdk-3.27.2/docs/api-docs/slack_sdk/web/async_internal_utils.html
   2024-05-16 04:54:21.000000000 +0200
@@ -136,7 +136,7 @@
 
             try:
                 async with session.request(http_verb, api_url, **req_args) as 
res:
-                    data: Union[dict, bytes] = {}
+                    data: Union[dict, bytes, str] = {}
                     if res.content_type == &#34;application/gzip&#34;:
                         # admin.analytics.getFile
                         data = await res.read()
@@ -145,6 +145,14 @@
                             headers=res.headers,
                             data=data,
                         )
+                    elif res.content_type == &#34;text/plain&#34;:
+                        # https://files.slack.com/upload/v1/...
+                        data = await res.text()
+                        retry_response = RetryHttpResponse(
+                            status_code=res.status,
+                            headers=res.headers,
+                            data=data,
+                        )
                     else:
                         try:
                             data = await res.json()
@@ -171,7 +179,9 @@
                                 )
 
                     if logger.level &lt;= logging.DEBUG:
-                        body = data if isinstance(data, dict) else 
&#34;(binary)&#34;
+                        body = &#34;(binary)&#34;
+                        if isinstance(data, dict) or isinstance(data, str):
+                            body = data
                         logger.debug(
                             &#34;Received the following response - &#34;
                             f&#34;status: {res.status}, &#34;
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/python-slack-sdk-3.27.1/docs/api-docs/slack_sdk/web/base_client.html 
new/python-slack-sdk-3.27.2/docs/api-docs/slack_sdk/web/base_client.html
--- old/python-slack-sdk-3.27.1/docs/api-docs/slack_sdk/web/base_client.html    
2024-02-28 03:09:42.000000000 +0100
+++ new/python-slack-sdk-3.27.2/docs/api-docs/slack_sdk/web/base_client.html    
2024-05-16 04:54:21.000000000 +0200
@@ -50,12 +50,14 @@
 
 from slack_sdk.errors import SlackRequestError
 from .deprecation import show_deprecation_warning_if_any
+from .file_upload_v2_result import FileUploadV2Result
 from .internal_utils import (
     convert_bool_to_0_or_1,
     get_user_agent,
     _get_url,
     _build_req_args,
     _build_unexpected_body_error_message,
+    _upload_file_via_v2_url,
 )
 from .slack_response import SlackResponse
 from slack_sdk.http_retry import default_retry_handlers
@@ -589,10 +591,34 @@
         if has_json:
             headers.update({&#34;Content-Type&#34;: 
&#34;application/json;charset=utf-8&#34;})
         if has_files:
-            # will be set afterwards
+            # will be set afterward
             headers.pop(&#34;Content-Type&#34;, None)
         return headers
 
+    def _upload_file(
+        self,
+        *,
+        url: str,
+        data: bytes,
+        logger: logging.Logger,
+        timeout: int,
+        proxy: Optional[str],
+        ssl: Optional[SSLContext],
+    ) -&gt; FileUploadV2Result:
+        &#34;&#34;&#34;Upload a file using the issued upload URL&#34;&#34;&#34;
+        result = _upload_file_via_v2_url(
+            url=url,
+            data=data,
+            logger=logger,
+            timeout=timeout,
+            proxy=proxy,
+            ssl=ssl,
+        )
+        return FileUploadV2Result(
+            status=result.get(&#34;status&#34;),
+            body=result.get(&#34;body&#34;),
+        )
+
     # =================================================================
 
     @staticmethod
@@ -1173,10 +1199,34 @@
         if has_json:
             headers.update({&#34;Content-Type&#34;: 
&#34;application/json;charset=utf-8&#34;})
         if has_files:
-            # will be set afterwards
+            # will be set afterward
             headers.pop(&#34;Content-Type&#34;, None)
         return headers
 
+    def _upload_file(
+        self,
+        *,
+        url: str,
+        data: bytes,
+        logger: logging.Logger,
+        timeout: int,
+        proxy: Optional[str],
+        ssl: Optional[SSLContext],
+    ) -&gt; FileUploadV2Result:
+        &#34;&#34;&#34;Upload a file using the issued upload URL&#34;&#34;&#34;
+        result = _upload_file_via_v2_url(
+            url=url,
+            data=data,
+            logger=logger,
+            timeout=timeout,
+            proxy=proxy,
+            ssl=ssl,
+        )
+        return FileUploadV2Result(
+            status=result.get(&#34;status&#34;),
+            body=result.get(&#34;body&#34;),
+        )
+
     # =================================================================
 
     @staticmethod
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/python-slack-sdk-3.27.1/docs/api-docs/slack_sdk/web/client.html 
new/python-slack-sdk-3.27.2/docs/api-docs/slack_sdk/web/client.html
--- old/python-slack-sdk-3.27.1/docs/api-docs/slack_sdk/web/client.html 
2024-02-28 03:09:42.000000000 +0100
+++ new/python-slack-sdk-3.27.2/docs/api-docs/slack_sdk/web/client.html 
2024-05-16 04:54:21.000000000 +0200
@@ -43,7 +43,6 @@
     _warn_if_text_or_attachment_fallback_is_missing,
     _remove_none_values,
     _to_v2_file_upload_item,
-    _upload_file_via_v2_url,
     _validate_for_legacy_client,
     _print_files_upload_v2_suggestion,
 )
@@ -3604,7 +3603,7 @@
 
         # step2: &#34;https://files.slack.com/upload/v1/...&#34; per file
         for f in files:
-            upload_result = _upload_file_via_v2_url(
+            upload_result = self._upload_file(
                 url=f[&#34;upload_url&#34;],
                 data=f[&#34;data&#34;],
                 logger=self._logger,
@@ -3612,9 +3611,9 @@
                 proxy=self.proxy,
                 ssl=self.ssl,
             )
-            if upload_result.get(&#34;status&#34;) != 200:
-                status = upload_result.get(&#34;status&#34;)
-                body = upload_result.get(&#34;body&#34;)
+            if upload_result.status != 200:
+                status = upload_result.status
+                body = upload_result.body
                 message = (
                     &#34;Failed to upload a file &#34;
                     f&#34;(status: {status}, body: {body}, filename: 
{f.get(&#39;filename&#39;)}, title: {f.get(&#39;title&#39;)})&#34;
@@ -8772,7 +8771,7 @@
 
         # step2: &#34;https://files.slack.com/upload/v1/...&#34; per file
         for f in files:
-            upload_result = _upload_file_via_v2_url(
+            upload_result = self._upload_file(
                 url=f[&#34;upload_url&#34;],
                 data=f[&#34;data&#34;],
                 logger=self._logger,
@@ -8780,9 +8779,9 @@
                 proxy=self.proxy,
                 ssl=self.ssl,
             )
-            if upload_result.get(&#34;status&#34;) != 200:
-                status = upload_result.get(&#34;status&#34;)
-                body = upload_result.get(&#34;body&#34;)
+            if upload_result.status != 200:
+                status = upload_result.status
+                body = upload_result.body
                 message = (
                     &#34;Failed to upload a file &#34;
                     f&#34;(status: {status}, body: {body}, filename: 
{f.get(&#39;filename&#39;)}, title: {f.get(&#39;title&#39;)})&#34;
@@ -15921,7 +15920,7 @@
 
     # step2: &#34;https://files.slack.com/upload/v1/...&#34; per file
     for f in files:
-        upload_result = _upload_file_via_v2_url(
+        upload_result = self._upload_file(
             url=f[&#34;upload_url&#34;],
             data=f[&#34;data&#34;],
             logger=self._logger,
@@ -15929,9 +15928,9 @@
             proxy=self.proxy,
             ssl=self.ssl,
         )
-        if upload_result.get(&#34;status&#34;) != 200:
-            status = upload_result.get(&#34;status&#34;)
-            body = upload_result.get(&#34;body&#34;)
+        if upload_result.status != 200:
+            status = upload_result.status
+            body = upload_result.body
             message = (
                 &#34;Failed to upload a file &#34;
                 f&#34;(status: {status}, body: {body}, filename: 
{f.get(&#39;filename&#39;)}, title: {f.get(&#39;title&#39;)})&#34;
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/python-slack-sdk-3.27.1/docs/api-docs/slack_sdk/web/file_upload_v2_result.html
 
new/python-slack-sdk-3.27.2/docs/api-docs/slack_sdk/web/file_upload_v2_result.html
--- 
old/python-slack-sdk-3.27.1/docs/api-docs/slack_sdk/web/file_upload_v2_result.html
  1970-01-01 01:00:00.000000000 +0100
+++ 
new/python-slack-sdk-3.27.2/docs/api-docs/slack_sdk/web/file_upload_v2_result.html
  2024-05-16 04:54:21.000000000 +0200
@@ -0,0 +1,109 @@
+<!doctype html>
+<html lang="en">
+<head>
+<meta charset="utf-8">
+<meta name="viewport" content="width=device-width, initial-scale=1, 
minimum-scale=1" />
+<meta name="generator" content="pdoc 0.10.0" />
+<title>slack_sdk.web.file_upload_v2_result API documentation</title>
+<meta name="description" content="" />
+<link rel="preload stylesheet" as="style" 
href="https://cdnjs.cloudflare.com/ajax/libs/10up-sanitize.css/11.0.1/sanitize.min.css";
 integrity="sha256-PK9q560IAAa6WVRRh76LtCaI8pjTJ2z11v0miyNNjrs=" crossorigin>
+<link rel="preload stylesheet" as="style" 
href="https://cdnjs.cloudflare.com/ajax/libs/10up-sanitize.css/11.0.1/typography.min.css";
 integrity="sha256-7l/o7C8jubJiy74VsKTidCy1yBkRtiUGbVkYBylBqUg=" crossorigin>
+<link rel="stylesheet preload" as="style" 
href="https://cdnjs.cloudflare.com/ajax/libs/highlight.js/10.1.1/styles/github.min.css";
 crossorigin>
+<style>:root{--highlight-color:#fe9}.flex{display:flex 
!important}body{line-height:1.5em}#content{padding:20px}#sidebar{padding:30px;overflow:hidden}#sidebar
 > 
*:last-child{margin-bottom:2cm}.http-server-breadcrumbs{font-size:130%;margin:0 
0 15px 0}#footer{font-size:.75em;padding:5px 30px;border-top:1px solid 
#ddd;text-align:right}#footer p{margin:0 0 0 1em;display:inline-block}#footer 
p:last-child{margin-right:30px}h1,h2,h3,h4,h5{font-weight:300}h1{font-size:2.5em;line-height:1.1em}h2{font-size:1.75em;margin:1em
 0 .50em 0}h3{font-size:1.4em;margin:25px 0 10px 
0}h4{margin:0;font-size:105%}h1:target,h2:target,h3:target,h4:target,h5:target,h6:target{background:var(--highlight-color);padding:.2em
 0}a{color:#058;text-decoration:none;transition:color .3s 
ease-in-out}a:hover{color:#e82}.title 
code{font-weight:bold}h2[id^="header-"]{margin-top:2em}.ident{color:#900}pre 
code{background:#f8f8f8;font-size:.8em;line-height:1.4em}code{background:#f2f2f1;padding:1px
 4px;overflow-wrap:break-word}
 h1 code{background:transparent}pre{background:#f8f8f8;border:0;border-top:1px 
solid #ccc;border-bottom:1px solid #ccc;margin:1em 
0;padding:1ex}#http-server-module-list{display:flex;flex-flow:column}#http-server-module-list
 div{display:flex}#http-server-module-list 
dt{min-width:10%}#http-server-module-list p{margin-top:0}.toc 
ul,#index{list-style-type:none;margin:0;padding:0}#index 
code{background:transparent}#index h3{border-bottom:1px solid #ddd}#index 
ul{padding:0}#index h4{margin-top:.6em;font-weight:bold}@media 
(min-width:200ex){#index .two-column{column-count:2}}@media 
(min-width:300ex){#index .two-column{column-count:3}}dl{margin-bottom:2em}dl 
dl:last-child{margin-bottom:4em}dd{margin:0 0 1em 3em}#header-classes + dl > 
dd{margin-bottom:3em}dd dd{margin-left:2em}dd p{margin:10px 
0}.name{background:#eee;font-weight:bold;font-size:.85em;padding:5px 
10px;display:inline-block;min-width:40%}.name:hover{background:#e0e0e0}dt:target
 .name{background:var(--highlight-color)}.name > span
 :first-child{white-space:nowrap}.name.class > 
span:nth-child(2){margin-left:.4em}.inherited{color:#999;border-left:5px solid 
#eee;padding-left:1em}.inheritance em{font-style:normal;font-weight:bold}.desc 
h2{font-weight:400;font-size:1.25em}.desc h3{font-size:1em}.desc dt 
code{background:inherit}.source 
summary,.git-link-div{color:#666;text-align:right;font-weight:400;font-size:.8em;text-transform:uppercase}.source
 summary > 
*{white-space:nowrap;cursor:pointer}.git-link{color:inherit;margin-left:1em}.source
 pre{max-height:500px;overflow:auto;margin:0}.source pre 
code{font-size:12px;overflow:visible}.hlist{list-style:none}.hlist 
li{display:inline}.hlist li:after{content:',\2002'}.hlist 
li:last-child:after{content:none}.hlist 
.hlist{display:inline;padding-left:1em}img{max-width:100%}td{padding:0 
.5em}.admonition{padding:.1em 
.5em;margin-bottom:1em}.admonition-title{font-weight:bold}.admonition.note,.admonition.info,.admonition.important{background:#aef}.admonition.todo,.admonition.vers
 
ionadded,.admonition.tip,.admonition.hint{background:#dfd}.admonition.warning,.admonition.versionchanged,.admonition.deprecated{background:#fd4}.admonition.error,.admonition.danger,.admonition.caution{background:lightpink}</style>
+<style media="screen and (min-width: 700px)">@media screen and 
(min-width:700px){#sidebar{width:30%;height:100vh;overflow:auto;position:sticky;top:0}#content{width:70%;max-width:100ch;padding:3em
 4em;border-left:1px solid #ddd}pre code{font-size:1em}.item 
.name{font-size:1em}main{display:flex;flex-direction:row-reverse;justify-content:flex-end}.toc
 ul ul,#index ul{padding-left:1.5em}.toc > ul > li{margin-top:.5em}}</style>
+<style media="print">@media print{#sidebar 
h1{page-break-before:always}.source{display:none}}@media 
print{*{background:transparent !important;color:#000 !important;box-shadow:none 
!important;text-shadow:none !important}a[href]:after{content:" (" attr(href) 
")";font-size:90%}a[href][title]:after{content:none}abbr[title]:after{content:" 
(" attr(title) ")"}.ir 
a:after,a[href^="javascript:"]:after,a[href^="#"]:after{content:""}pre,blockquote{border:1px
 solid 
#999;page-break-inside:avoid}thead{display:table-header-group}tr,img{page-break-inside:avoid}img{max-width:100%
 
!important}@page{margin:0.5cm}p,h2,h3{orphans:3;widows:3}h1,h2,h3,h4,h5,h6{page-break-after:avoid}}</style>
+<script defer 
src="https://cdnjs.cloudflare.com/ajax/libs/highlight.js/10.1.1/highlight.min.js";
 integrity="sha256-Uv3H6lx7dJmRfRvH8TH6kJD1TSK1aFcwgx+mdg3epi8=" 
crossorigin></script>
+<script>window.addEventListener('DOMContentLoaded', () => 
hljs.initHighlighting())</script>
+</head>
+<body>
+<main>
+<article id="content">
+<header>
+<h1 class="title">Module <code>slack_sdk.web.file_upload_v2_result</code></h1>
+</header>
+<section id="section-intro">
+<details class="source">
+<summary>
+<span>Expand source code</span>
+</summary>
+<pre><code class="python">class FileUploadV2Result:
+    status: int
+    body: str
+
+    def __init__(self, status: int, body: str):
+        self.status = status
+        self.body = body</code></pre>
+</details>
+</section>
+<section>
+</section>
+<section>
+</section>
+<section>
+</section>
+<section>
+<h2 class="section-title" id="header-classes">Classes</h2>
+<dl>
+<dt id="slack_sdk.web.file_upload_v2_result.FileUploadV2Result"><code 
class="flex name class">
+<span>class <span class="ident">FileUploadV2Result</span></span>
+<span>(</span><span>status: int, body: str)</span>
+</code></dt>
+<dd>
+<div class="desc"></div>
+<details class="source">
+<summary>
+<span>Expand source code</span>
+</summary>
+<pre><code class="python">class FileUploadV2Result:
+    status: int
+    body: str
+
+    def __init__(self, status: int, body: str):
+        self.status = status
+        self.body = body</code></pre>
+</details>
+<h3>Class variables</h3>
+<dl>
+<dt id="slack_sdk.web.file_upload_v2_result.FileUploadV2Result.body"><code 
class="name">var <span class="ident">body</span> : str</code></dt>
+<dd>
+<div class="desc"></div>
+</dd>
+<dt id="slack_sdk.web.file_upload_v2_result.FileUploadV2Result.status"><code 
class="name">var <span class="ident">status</span> : int</code></dt>
+<dd>
+<div class="desc"></div>
+</dd>
+</dl>
+</dd>
+</dl>
+</section>
+</article>
+<nav id="sidebar">
+<h1>Index</h1>
+<div class="toc">
+<ul></ul>
+</div>
+<ul id="index">
+<li><h3>Super-module</h3>
+<ul>
+<li><code><a title="slack_sdk.web" 
href="index.html">slack_sdk.web</a></code></li>
+</ul>
+</li>
+<li><h3><a href="#header-classes">Classes</a></h3>
+<ul>
+<li>
+<h4><code><a title="slack_sdk.web.file_upload_v2_result.FileUploadV2Result" 
href="#slack_sdk.web.file_upload_v2_result.FileUploadV2Result">FileUploadV2Result</a></code></h4>
+<ul class="">
+<li><code><a 
title="slack_sdk.web.file_upload_v2_result.FileUploadV2Result.body" 
href="#slack_sdk.web.file_upload_v2_result.FileUploadV2Result.body">body</a></code></li>
+<li><code><a 
title="slack_sdk.web.file_upload_v2_result.FileUploadV2Result.status" 
href="#slack_sdk.web.file_upload_v2_result.FileUploadV2Result.status">status</a></code></li>
+</ul>
+</li>
+</ul>
+</li>
+</ul>
+</nav>
+</main>
+<footer id="footer">
+<p>Generated by <a href="https://pdoc3.github.io/pdoc"; title="pdoc: Python API 
documentation generator"><cite>pdoc</cite> 0.10.0</a>.</p>
+</footer>
+</body>
+</html>
\ No newline at end of file
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/python-slack-sdk-3.27.1/docs/api-docs/slack_sdk/web/index.html 
new/python-slack-sdk-3.27.2/docs/api-docs/slack_sdk/web/index.html
--- old/python-slack-sdk-3.27.1/docs/api-docs/slack_sdk/web/index.html  
2024-02-28 03:09:42.000000000 +0100
+++ new/python-slack-sdk-3.27.2/docs/api-docs/slack_sdk/web/index.html  
2024-05-16 04:54:21.000000000 +0200
@@ -71,6 +71,10 @@
 <dd>
 <div class="desc"></div>
 </dd>
+<dt><code class="name"><a title="slack_sdk.web.file_upload_v2_result" 
href="file_upload_v2_result.html">slack_sdk.web.file_upload_v2_result</a></code></dt>
+<dd>
+<div class="desc"></div>
+</dd>
 <dt><code class="name"><a title="slack_sdk.web.internal_utils" 
href="internal_utils.html">slack_sdk.web.internal_utils</a></code></dt>
 <dd>
 <div class="desc"></div>
@@ -4025,7 +4029,7 @@
 
         # step2: &#34;https://files.slack.com/upload/v1/...&#34; per file
         for f in files:
-            upload_result = _upload_file_via_v2_url(
+            upload_result = self._upload_file(
                 url=f[&#34;upload_url&#34;],
                 data=f[&#34;data&#34;],
                 logger=self._logger,
@@ -4033,9 +4037,9 @@
                 proxy=self.proxy,
                 ssl=self.ssl,
             )
-            if upload_result.get(&#34;status&#34;) != 200:
-                status = upload_result.get(&#34;status&#34;)
-                body = upload_result.get(&#34;body&#34;)
+            if upload_result.status != 200:
+                status = upload_result.status
+                body = upload_result.body
                 message = (
                     &#34;Failed to upload a file &#34;
                     f&#34;(status: {status}, body: {body}, filename: 
{f.get(&#39;filename&#39;)}, title: {f.get(&#39;title&#39;)})&#34;
@@ -11174,7 +11178,7 @@
 
     # step2: &#34;https://files.slack.com/upload/v1/...&#34; per file
     for f in files:
-        upload_result = _upload_file_via_v2_url(
+        upload_result = self._upload_file(
             url=f[&#34;upload_url&#34;],
             data=f[&#34;data&#34;],
             logger=self._logger,
@@ -11182,9 +11186,9 @@
             proxy=self.proxy,
             ssl=self.ssl,
         )
-        if upload_result.get(&#34;status&#34;) != 200:
-            status = upload_result.get(&#34;status&#34;)
-            body = upload_result.get(&#34;body&#34;)
+        if upload_result.status != 200:
+            status = upload_result.status
+            body = upload_result.body
             message = (
                 &#34;Failed to upload a file &#34;
                 f&#34;(status: {status}, body: {body}, filename: 
{f.get(&#39;filename&#39;)}, title: {f.get(&#39;title&#39;)})&#34;
@@ -13663,6 +13667,7 @@
 <li><code><a title="slack_sdk.web.base_client" 
href="base_client.html">slack_sdk.web.base_client</a></code></li>
 <li><code><a title="slack_sdk.web.client" 
href="client.html">slack_sdk.web.client</a></code></li>
 <li><code><a title="slack_sdk.web.deprecation" 
href="deprecation.html">slack_sdk.web.deprecation</a></code></li>
+<li><code><a title="slack_sdk.web.file_upload_v2_result" 
href="file_upload_v2_result.html">slack_sdk.web.file_upload_v2_result</a></code></li>
 <li><code><a title="slack_sdk.web.internal_utils" 
href="internal_utils.html">slack_sdk.web.internal_utils</a></code></li>
 <li><code><a title="slack_sdk.web.legacy_base_client" 
href="legacy_base_client.html">slack_sdk.web.legacy_base_client</a></code></li>
 <li><code><a title="slack_sdk.web.legacy_client" 
href="legacy_client.html">slack_sdk.web.legacy_client</a></code></li>
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/python-slack-sdk-3.27.1/docs/api-docs/slack_sdk/web/internal_utils.html 
new/python-slack-sdk-3.27.2/docs/api-docs/slack_sdk/web/internal_utils.html
--- old/python-slack-sdk-3.27.1/docs/api-docs/slack_sdk/web/internal_utils.html 
2024-02-28 03:09:42.000000000 +0100
+++ new/python-slack-sdk-3.27.2/docs/api-docs/slack_sdk/web/internal_utils.html 
2024-05-16 04:54:21.000000000 +0200
@@ -405,6 +405,9 @@
         else:
             raise SlackRequestError(f&#34;Invalid proxy detected: {proxy} must 
be a str value&#34;)
 
+    if logger.level &lt;= logging.DEBUG:
+        logger.debug(f&#34;Sending a request: POST {url}&#34;)
+
     resp: Optional[HTTPResponse] = None
     req: Request = Request(method=&#34;POST&#34;, url=url, data=data, 
headers={})
     if opener:
@@ -416,8 +419,10 @@
     body: str = resp.read().decode(charset)  # read the response body here
     if logger.level &lt;= logging.DEBUG:
         message = (
-            &#34;Received the following response - &#34;,
-            f&#34;status: {resp.status}, &#34; f&#34;headers: 
{dict(resp.headers)}, &#34; f&#34;body: {body}&#34;,
+            &#34;Received the following response - &#34;
+            f&#34;status: {resp.status}, &#34;
+            f&#34;headers: {dict(resp.headers)}, &#34;
+            f&#34;body: {body}&#34;
         )
         logger.debug(message)
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/python-slack-sdk-3.27.1/docs/api-docs/slack_sdk/web/legacy_base_client.html 
new/python-slack-sdk-3.27.2/docs/api-docs/slack_sdk/web/legacy_base_client.html
--- 
old/python-slack-sdk-3.27.1/docs/api-docs/slack_sdk/web/legacy_base_client.html 
    2024-02-28 03:09:42.000000000 +0100
+++ 
new/python-slack-sdk-3.27.2/docs/api-docs/slack_sdk/web/legacy_base_client.html 
    2024-05-16 04:54:21.000000000 +0200
@@ -55,12 +55,14 @@
 from slack_sdk.errors import SlackRequestError
 from .async_internal_utils import _files_to_data, _get_event_loop, 
_request_with_session
 from .deprecation import show_deprecation_warning_if_any
+from .file_upload_v2_result import FileUploadV2Result
 from .internal_utils import (
     convert_bool_to_0_or_1,
     get_user_agent,
     _get_url,
     _build_req_args,
     _build_unexpected_body_error_message,
+    _upload_file_via_v2_url,
 )
 from .legacy_slack_response import LegacySlackResponse as SlackResponse
 from ..proxy_env_variable_loader import load_http_proxy_from_env
@@ -550,10 +552,33 @@
         if has_json:
             headers.update({&#34;Content-Type&#34;: 
&#34;application/json;charset=utf-8&#34;})
         if has_files:
-            # will be set afterwards
+            # will be set afterward
             headers.pop(&#34;Content-Type&#34;, None)
         return headers
 
+    def _upload_file(
+        self,
+        *,
+        url: str,
+        data: bytes,
+        logger: logging.Logger,
+        timeout: int,
+        proxy: Optional[str],
+        ssl: Optional[SSLContext],
+    ) -&gt; FileUploadV2Result:
+        result = _upload_file_via_v2_url(
+            url=url,
+            data=data,
+            logger=logger,
+            timeout=timeout,
+            proxy=proxy,
+            ssl=ssl,
+        )
+        return FileUploadV2Result(
+            status=result.get(&#34;status&#34;),
+            body=result.get(&#34;body&#34;),
+        )
+
     # =================================================================
 
     @staticmethod
@@ -1091,10 +1116,33 @@
         if has_json:
             headers.update({&#34;Content-Type&#34;: 
&#34;application/json;charset=utf-8&#34;})
         if has_files:
-            # will be set afterwards
+            # will be set afterward
             headers.pop(&#34;Content-Type&#34;, None)
         return headers
 
+    def _upload_file(
+        self,
+        *,
+        url: str,
+        data: bytes,
+        logger: logging.Logger,
+        timeout: int,
+        proxy: Optional[str],
+        ssl: Optional[SSLContext],
+    ) -&gt; FileUploadV2Result:
+        result = _upload_file_via_v2_url(
+            url=url,
+            data=data,
+            logger=logger,
+            timeout=timeout,
+            proxy=proxy,
+            ssl=ssl,
+        )
+        return FileUploadV2Result(
+            status=result.get(&#34;status&#34;),
+            body=result.get(&#34;body&#34;),
+        )
+
     # =================================================================
 
     @staticmethod
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/python-slack-sdk-3.27.1/docs/api-docs/slack_sdk/web/legacy_client.html 
new/python-slack-sdk-3.27.2/docs/api-docs/slack_sdk/web/legacy_client.html
--- old/python-slack-sdk-3.27.1/docs/api-docs/slack_sdk/web/legacy_client.html  
2024-02-28 03:09:42.000000000 +0100
+++ new/python-slack-sdk-3.27.2/docs/api-docs/slack_sdk/web/legacy_client.html  
2024-05-16 04:54:21.000000000 +0200
@@ -53,7 +53,6 @@
     _warn_if_text_or_attachment_fallback_is_missing,
     _remove_none_values,
     _to_v2_file_upload_item,
-    _upload_file_via_v2_url,
     _validate_for_legacy_client,
     _print_files_upload_v2_suggestion,
 )
@@ -3614,7 +3613,7 @@
 
         # step2: &#34;https://files.slack.com/upload/v1/...&#34; per file
         for f in files:
-            upload_result = _upload_file_via_v2_url(
+            upload_result = self._upload_file(
                 url=f[&#34;upload_url&#34;],
                 data=f[&#34;data&#34;],
                 logger=self._logger,
@@ -3622,9 +3621,9 @@
                 proxy=self.proxy,
                 ssl=self.ssl,
             )
-            if upload_result.get(&#34;status&#34;) != 200:
-                status = upload_result.get(&#34;status&#34;)
-                body = upload_result.get(&#34;body&#34;)
+            if upload_result.status != 200:
+                status = upload_result.status
+                body = upload_result.body
                 message = (
                     &#34;Failed to upload a file &#34;
                     f&#34;(status: {status}, body: {body}, filename: 
{f.get(&#39;filename&#39;)}, title: {f.get(&#39;title&#39;)})&#34;
@@ -8782,7 +8781,7 @@
 
         # step2: &#34;https://files.slack.com/upload/v1/...&#34; per file
         for f in files:
-            upload_result = _upload_file_via_v2_url(
+            upload_result = self._upload_file(
                 url=f[&#34;upload_url&#34;],
                 data=f[&#34;data&#34;],
                 logger=self._logger,
@@ -8790,9 +8789,9 @@
                 proxy=self.proxy,
                 ssl=self.ssl,
             )
-            if upload_result.get(&#34;status&#34;) != 200:
-                status = upload_result.get(&#34;status&#34;)
-                body = upload_result.get(&#34;body&#34;)
+            if upload_result.status != 200:
+                status = upload_result.status
+                body = upload_result.body
                 message = (
                     &#34;Failed to upload a file &#34;
                     f&#34;(status: {status}, body: {body}, filename: 
{f.get(&#39;filename&#39;)}, title: {f.get(&#39;title&#39;)})&#34;
@@ -15931,7 +15930,7 @@
 
     # step2: &#34;https://files.slack.com/upload/v1/...&#34; per file
     for f in files:
-        upload_result = _upload_file_via_v2_url(
+        upload_result = self._upload_file(
             url=f[&#34;upload_url&#34;],
             data=f[&#34;data&#34;],
             logger=self._logger,
@@ -15939,9 +15938,9 @@
             proxy=self.proxy,
             ssl=self.ssl,
         )
-        if upload_result.get(&#34;status&#34;) != 200:
-            status = upload_result.get(&#34;status&#34;)
-            body = upload_result.get(&#34;body&#34;)
+        if upload_result.status != 200:
+            status = upload_result.status
+            body = upload_result.body
             message = (
                 &#34;Failed to upload a file &#34;
                 f&#34;(status: {status}, body: {body}, filename: 
{f.get(&#39;filename&#39;)}, title: {f.get(&#39;title&#39;)})&#34;
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/python-slack-sdk-3.27.1/requirements/optional.txt 
new/python-slack-sdk-3.27.2/requirements/optional.txt
--- old/python-slack-sdk-3.27.1/requirements/optional.txt       2024-02-28 
03:09:42.000000000 +0100
+++ new/python-slack-sdk-3.27.2/requirements/optional.txt       2024-05-16 
04:54:21.000000000 +0200
@@ -12,6 +12,5 @@
 SQLAlchemy>=1.4,<3
 # Socket Mode
 # websockets 9 is not compatible with Python 3.10
-websockets>=9.1,<10; python_version=="3.6"
-websockets>=10,<11; python_version>"3.6"
+websockets>=9.1,<13
 websocket-client>=1,<2
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/python-slack-sdk-3.27.1/requirements/testing.txt 
new/python-slack-sdk-3.27.2/requirements/testing.txt
--- old/python-slack-sdk-3.27.1/requirements/testing.txt        2024-02-28 
03:09:42.000000000 +0100
+++ new/python-slack-sdk-3.27.2/requirements/testing.txt        2024-05-16 
04:54:21.000000000 +0200
@@ -1,11 +1,11 @@
 # pip install -r requirements/testing.txt
 aiohttp<4  # used for a WebSocket server mock
-pytest>=7.0.1,<8
+pytest>=7.0.1,<9
 pytest-asyncio<1  # for async
-pytest-cov>=2,<3
+pytest-cov>=2,<6
 # while flake8 5.x have issues with Python 3.12, flake8 6.x requires Python >= 
3.8.1,
 # so 5.x should be kept in order to stay compatible with Python 3.6/3.7
-flake8>=5.0.4,<7
+flake8>=5.0.4,<8
 #  Don't change this version without running CI builds;
 #  The latest version may not be available for older Python runtime
 black>=22.8.0; python_version=="3.6"
@@ -15,6 +15,4 @@
 #  used only under slack_sdk/*_store
 boto3<=2
 # For AWS tests
-moto==4.0.13; python_version=="3.6"
-moto<5; python_version=="3.7"
-moto<6
+moto>=4.0.13,<6
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/python-slack-sdk-3.27.1/setup.py 
new/python-slack-sdk-3.27.2/setup.py
--- old/python-slack-sdk-3.27.1/setup.py        2024-02-28 03:09:42.000000000 
+0100
+++ new/python-slack-sdk-3.27.2/setup.py        2024-05-16 04:54:21.000000000 
+0200
@@ -79,6 +79,11 @@
                 async_source,
             )
             async_source = re.sub(
+                r" self._upload_file\(",
+                " await self._upload_file(",
+                async_source,
+            )
+            async_source = re.sub(
                 r" self.files_completeUploadExternal\(",
                 " await self.files_completeUploadExternal(",
                 async_source,
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/python-slack-sdk-3.27.1/slack_sdk/models/blocks/block_elements.py 
new/python-slack-sdk-3.27.2/slack_sdk/models/blocks/block_elements.py
--- old/python-slack-sdk-3.27.1/slack_sdk/models/blocks/block_elements.py       
2024-02-28 03:09:42.000000000 +0100
+++ new/python-slack-sdk-3.27.2/slack_sdk/models/blocks/block_elements.py       
2024-05-16 04:54:21.000000000 +0200
@@ -1868,7 +1868,7 @@
     ):
         super().__init__(type=self.type)
         show_unknown_key_warning(self, others)
-        self.elements = elements
+        self.elements = BlockElement.parse_all(elements)
         self.style = style
         self.indent = indent
         self.offset = offset
@@ -1891,7 +1891,7 @@
     ):
         super().__init__(type=self.type)
         show_unknown_key_warning(self, others)
-        self.elements = elements
+        self.elements = BlockElement.parse_all(elements)
         self.border = border
 
 
@@ -1910,7 +1910,7 @@
     ):
         super().__init__(type=self.type)
         show_unknown_key_warning(self, others)
-        self.elements = elements
+        self.elements = BlockElement.parse_all(elements)
 
 
 class RichTextSectionElement(RichTextElement):
@@ -1928,7 +1928,7 @@
     ):
         super().__init__(type=self.type)
         show_unknown_key_warning(self, others)
-        self.elements = elements
+        self.elements = BlockElement.parse_all(elements)
 
 
 class RichTextElementParts:
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/python-slack-sdk-3.27.1/slack_sdk/version.py 
new/python-slack-sdk-3.27.2/slack_sdk/version.py
--- old/python-slack-sdk-3.27.1/slack_sdk/version.py    2024-02-28 
03:09:42.000000000 +0100
+++ new/python-slack-sdk-3.27.2/slack_sdk/version.py    2024-05-16 
04:54:21.000000000 +0200
@@ -1,2 +1,2 @@
 """Check the latest version at https://pypi.org/project/slack-sdk/""";
-__version__ = "3.27.1"
+__version__ = "3.27.2"
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/python-slack-sdk-3.27.1/slack_sdk/web/async_base_client.py 
new/python-slack-sdk-3.27.2/slack_sdk/web/async_base_client.py
--- old/python-slack-sdk-3.27.1/slack_sdk/web/async_base_client.py      
2024-02-28 03:09:42.000000000 +0100
+++ new/python-slack-sdk-3.27.2/slack_sdk/web/async_base_client.py      
2024-05-16 04:54:21.000000000 +0200
@@ -11,6 +11,7 @@
 )  # type: ignore
 from .async_slack_response import AsyncSlackResponse
 from .deprecation import show_deprecation_warning_if_any
+from .file_upload_v2_result import FileUploadV2Result
 from .internal_utils import (
     convert_bool_to_0_or_1,
     _build_req_args,
@@ -214,3 +215,28 @@
             req_args=req_args,
             retry_handlers=self.retry_handlers,
         )
+
+    async def _upload_file(
+        self,
+        *,
+        url: str,
+        data: bytes,
+        logger: logging.Logger,
+        timeout: int,
+        proxy: Optional[str],
+        ssl: Optional[SSLContext],
+    ) -> FileUploadV2Result:
+        """Upload a file using the issued upload URL"""
+        result = await _request_with_session(
+            current_session=self.session,
+            timeout=timeout,
+            logger=logger,
+            http_verb="POST",
+            api_url=url,
+            req_args={"data": data, "proxy": proxy, "ssl": ssl},
+            retry_handlers=self.retry_handlers,
+        )
+        return FileUploadV2Result(
+            status=result.get("status_code"),
+            body=result.get("body"),
+        )
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/python-slack-sdk-3.27.1/slack_sdk/web/async_client.py 
new/python-slack-sdk-3.27.2/slack_sdk/web/async_client.py
--- old/python-slack-sdk-3.27.1/slack_sdk/web/async_client.py   2024-02-28 
03:09:42.000000000 +0100
+++ new/python-slack-sdk-3.27.2/slack_sdk/web/async_client.py   2024-05-16 
04:54:21.000000000 +0200
@@ -23,7 +23,6 @@
     _warn_if_text_or_attachment_fallback_is_missing,
     _remove_none_values,
     _to_v2_file_upload_item,
-    _upload_file_via_v2_url,
     _validate_for_legacy_client,
     _print_files_upload_v2_suggestion,
 )
@@ -3584,7 +3583,7 @@
 
         # step2: "https://files.slack.com/upload/v1/..."; per file
         for f in files:
-            upload_result = _upload_file_via_v2_url(
+            upload_result = await self._upload_file(
                 url=f["upload_url"],
                 data=f["data"],
                 logger=self._logger,
@@ -3592,9 +3591,9 @@
                 proxy=self.proxy,
                 ssl=self.ssl,
             )
-            if upload_result.get("status") != 200:
-                status = upload_result.get("status")
-                body = upload_result.get("body")
+            if upload_result.status != 200:
+                status = upload_result.status
+                body = upload_result.body
                 message = (
                     "Failed to upload a file "
                     f"(status: {status}, body: {body}, filename: 
{f.get('filename')}, title: {f.get('title')})"
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/python-slack-sdk-3.27.1/slack_sdk/web/async_internal_utils.py 
new/python-slack-sdk-3.27.2/slack_sdk/web/async_internal_utils.py
--- old/python-slack-sdk-3.27.1/slack_sdk/web/async_internal_utils.py   
2024-02-28 03:09:42.000000000 +0100
+++ new/python-slack-sdk-3.27.2/slack_sdk/web/async_internal_utils.py   
2024-05-16 04:54:21.000000000 +0200
@@ -108,7 +108,7 @@
 
             try:
                 async with session.request(http_verb, api_url, **req_args) as 
res:
-                    data: Union[dict, bytes] = {}
+                    data: Union[dict, bytes, str] = {}
                     if res.content_type == "application/gzip":
                         # admin.analytics.getFile
                         data = await res.read()
@@ -117,6 +117,14 @@
                             headers=res.headers,
                             data=data,
                         )
+                    elif res.content_type == "text/plain":
+                        # https://files.slack.com/upload/v1/...
+                        data = await res.text()
+                        retry_response = RetryHttpResponse(
+                            status_code=res.status,
+                            headers=res.headers,
+                            data=data,
+                        )
                     else:
                         try:
                             data = await res.json()
@@ -143,7 +151,9 @@
                                 )
 
                     if logger.level <= logging.DEBUG:
-                        body = data if isinstance(data, dict) else "(binary)"
+                        body = "(binary)"
+                        if isinstance(data, dict) or isinstance(data, str):
+                            body = data
                         logger.debug(
                             "Received the following response - "
                             f"status: {res.status}, "
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/python-slack-sdk-3.27.1/slack_sdk/web/base_client.py 
new/python-slack-sdk-3.27.2/slack_sdk/web/base_client.py
--- old/python-slack-sdk-3.27.1/slack_sdk/web/base_client.py    2024-02-28 
03:09:42.000000000 +0100
+++ new/python-slack-sdk-3.27.2/slack_sdk/web/base_client.py    2024-05-16 
04:54:21.000000000 +0200
@@ -21,12 +21,14 @@
 
 from slack_sdk.errors import SlackRequestError
 from .deprecation import show_deprecation_warning_if_any
+from .file_upload_v2_result import FileUploadV2Result
 from .internal_utils import (
     convert_bool_to_0_or_1,
     get_user_agent,
     _get_url,
     _build_req_args,
     _build_unexpected_body_error_message,
+    _upload_file_via_v2_url,
 )
 from .slack_response import SlackResponse
 from slack_sdk.http_retry import default_retry_handlers
@@ -560,10 +562,34 @@
         if has_json:
             headers.update({"Content-Type": "application/json;charset=utf-8"})
         if has_files:
-            # will be set afterwards
+            # will be set afterward
             headers.pop("Content-Type", None)
         return headers
 
+    def _upload_file(
+        self,
+        *,
+        url: str,
+        data: bytes,
+        logger: logging.Logger,
+        timeout: int,
+        proxy: Optional[str],
+        ssl: Optional[SSLContext],
+    ) -> FileUploadV2Result:
+        """Upload a file using the issued upload URL"""
+        result = _upload_file_via_v2_url(
+            url=url,
+            data=data,
+            logger=logger,
+            timeout=timeout,
+            proxy=proxy,
+            ssl=ssl,
+        )
+        return FileUploadV2Result(
+            status=result.get("status"),
+            body=result.get("body"),
+        )
+
     # =================================================================
 
     @staticmethod
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/python-slack-sdk-3.27.1/slack_sdk/web/client.py 
new/python-slack-sdk-3.27.2/slack_sdk/web/client.py
--- old/python-slack-sdk-3.27.1/slack_sdk/web/client.py 2024-02-28 
03:09:42.000000000 +0100
+++ new/python-slack-sdk-3.27.2/slack_sdk/web/client.py 2024-05-16 
04:54:21.000000000 +0200
@@ -14,7 +14,6 @@
     _warn_if_text_or_attachment_fallback_is_missing,
     _remove_none_values,
     _to_v2_file_upload_item,
-    _upload_file_via_v2_url,
     _validate_for_legacy_client,
     _print_files_upload_v2_suggestion,
 )
@@ -3575,7 +3574,7 @@
 
         # step2: "https://files.slack.com/upload/v1/..."; per file
         for f in files:
-            upload_result = _upload_file_via_v2_url(
+            upload_result = self._upload_file(
                 url=f["upload_url"],
                 data=f["data"],
                 logger=self._logger,
@@ -3583,9 +3582,9 @@
                 proxy=self.proxy,
                 ssl=self.ssl,
             )
-            if upload_result.get("status") != 200:
-                status = upload_result.get("status")
-                body = upload_result.get("body")
+            if upload_result.status != 200:
+                status = upload_result.status
+                body = upload_result.body
                 message = (
                     "Failed to upload a file "
                     f"(status: {status}, body: {body}, filename: 
{f.get('filename')}, title: {f.get('title')})"
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/python-slack-sdk-3.27.1/slack_sdk/web/file_upload_v2_result.py 
new/python-slack-sdk-3.27.2/slack_sdk/web/file_upload_v2_result.py
--- old/python-slack-sdk-3.27.1/slack_sdk/web/file_upload_v2_result.py  
1970-01-01 01:00:00.000000000 +0100
+++ new/python-slack-sdk-3.27.2/slack_sdk/web/file_upload_v2_result.py  
2024-05-16 04:54:21.000000000 +0200
@@ -0,0 +1,7 @@
+class FileUploadV2Result:
+    status: int
+    body: str
+
+    def __init__(self, status: int, body: str):
+        self.status = status
+        self.body = body
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/python-slack-sdk-3.27.1/slack_sdk/web/internal_utils.py 
new/python-slack-sdk-3.27.2/slack_sdk/web/internal_utils.py
--- old/python-slack-sdk-3.27.1/slack_sdk/web/internal_utils.py 2024-02-28 
03:09:42.000000000 +0100
+++ new/python-slack-sdk-3.27.2/slack_sdk/web/internal_utils.py 2024-05-16 
04:54:21.000000000 +0200
@@ -377,6 +377,9 @@
         else:
             raise SlackRequestError(f"Invalid proxy detected: {proxy} must be 
a str value")
 
+    if logger.level <= logging.DEBUG:
+        logger.debug(f"Sending a request: POST {url}")
+
     resp: Optional[HTTPResponse] = None
     req: Request = Request(method="POST", url=url, data=data, headers={})
     if opener:
@@ -388,8 +391,10 @@
     body: str = resp.read().decode(charset)  # read the response body here
     if logger.level <= logging.DEBUG:
         message = (
-            "Received the following response - ",
-            f"status: {resp.status}, " f"headers: {dict(resp.headers)}, " 
f"body: {body}",
+            "Received the following response - "
+            f"status: {resp.status}, "
+            f"headers: {dict(resp.headers)}, "
+            f"body: {body}"
         )
         logger.debug(message)
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/python-slack-sdk-3.27.1/slack_sdk/web/legacy_base_client.py 
new/python-slack-sdk-3.27.2/slack_sdk/web/legacy_base_client.py
--- old/python-slack-sdk-3.27.1/slack_sdk/web/legacy_base_client.py     
2024-02-28 03:09:42.000000000 +0100
+++ new/python-slack-sdk-3.27.2/slack_sdk/web/legacy_base_client.py     
2024-05-16 04:54:21.000000000 +0200
@@ -26,12 +26,14 @@
 from slack_sdk.errors import SlackRequestError
 from .async_internal_utils import _files_to_data, _get_event_loop, 
_request_with_session
 from .deprecation import show_deprecation_warning_if_any
+from .file_upload_v2_result import FileUploadV2Result
 from .internal_utils import (
     convert_bool_to_0_or_1,
     get_user_agent,
     _get_url,
     _build_req_args,
     _build_unexpected_body_error_message,
+    _upload_file_via_v2_url,
 )
 from .legacy_slack_response import LegacySlackResponse as SlackResponse
 from ..proxy_env_variable_loader import load_http_proxy_from_env
@@ -521,10 +523,33 @@
         if has_json:
             headers.update({"Content-Type": "application/json;charset=utf-8"})
         if has_files:
-            # will be set afterwards
+            # will be set afterward
             headers.pop("Content-Type", None)
         return headers
 
+    def _upload_file(
+        self,
+        *,
+        url: str,
+        data: bytes,
+        logger: logging.Logger,
+        timeout: int,
+        proxy: Optional[str],
+        ssl: Optional[SSLContext],
+    ) -> FileUploadV2Result:
+        result = _upload_file_via_v2_url(
+            url=url,
+            data=data,
+            logger=logger,
+            timeout=timeout,
+            proxy=proxy,
+            ssl=ssl,
+        )
+        return FileUploadV2Result(
+            status=result.get("status"),
+            body=result.get("body"),
+        )
+
     # =================================================================
 
     @staticmethod
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/python-slack-sdk-3.27.1/slack_sdk/web/legacy_client.py 
new/python-slack-sdk-3.27.2/slack_sdk/web/legacy_client.py
--- old/python-slack-sdk-3.27.1/slack_sdk/web/legacy_client.py  2024-02-28 
03:09:42.000000000 +0100
+++ new/python-slack-sdk-3.27.2/slack_sdk/web/legacy_client.py  2024-05-16 
04:54:21.000000000 +0200
@@ -25,7 +25,6 @@
     _warn_if_text_or_attachment_fallback_is_missing,
     _remove_none_values,
     _to_v2_file_upload_item,
-    _upload_file_via_v2_url,
     _validate_for_legacy_client,
     _print_files_upload_v2_suggestion,
 )
@@ -3586,7 +3585,7 @@
 
         # step2: "https://files.slack.com/upload/v1/..."; per file
         for f in files:
-            upload_result = _upload_file_via_v2_url(
+            upload_result = self._upload_file(
                 url=f["upload_url"],
                 data=f["data"],
                 logger=self._logger,
@@ -3594,9 +3593,9 @@
                 proxy=self.proxy,
                 ssl=self.ssl,
             )
-            if upload_result.get("status") != 200:
-                status = upload_result.get("status")
-                body = upload_result.get("body")
+            if upload_result.status != 200:
+                status = upload_result.status
+                body = upload_result.body
                 message = (
                     "Failed to upload a file "
                     f"(status: {status}, body: {body}, filename: 
{f.get('filename')}, title: {f.get('title')})"
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/python-slack-sdk-3.27.1/tests/slack_sdk/models/test_blocks.py 
new/python-slack-sdk-3.27.2/tests/slack_sdk/models/test_blocks.py
--- old/python-slack-sdk-3.27.1/tests/slack_sdk/models/test_blocks.py   
2024-02-28 03:09:42.000000000 +0100
+++ new/python-slack-sdk-3.27.2/tests/slack_sdk/models/test_blocks.py   
2024-05-16 04:54:21.000000000 +0200
@@ -1083,3 +1083,38 @@
             ],
         )
         self.assertDictEqual(dict_block, class_block.to_dict())
+
+    def test_elements_are_parsed(self):
+        dict_block = {
+            "type": "rich_text",
+            "elements": [
+                {
+                    "type": "rich_text_section",
+                    "elements": [{"type": "text", "text": "Hello there, I am a 
basic rich text block!"}],
+                },
+                {
+                    "type": "rich_text_quote",
+                    "elements": [{"type": "text", "text": "this is very 
important"}],
+                },
+                {
+                    "type": "rich_text_preformatted",
+                    "elements": [{"type": "text", "text": 'print("Hello 
world")'}],
+                },
+                {
+                    "type": "rich_text_list",
+                    "elements": [
+                        {"type": "rich_text_section", "elements": [{"type": 
"text", "text": "a"}]},
+                    ],
+                },
+            ],
+        }
+        block = RichTextBlock(**dict_block)
+        self.assertIsInstance(block.elements[0], RichTextSectionElement)
+        self.assertIsInstance(block.elements[0].elements[0], 
RichTextElementParts.Text)
+        self.assertIsInstance(block.elements[1], RichTextQuoteElement)
+        self.assertIsInstance(block.elements[1].elements[0], 
RichTextElementParts.Text)
+        self.assertIsInstance(block.elements[2], RichTextPreformattedElement)
+        self.assertIsInstance(block.elements[2].elements[0], 
RichTextElementParts.Text)
+        self.assertIsInstance(block.elements[3], RichTextListElement)
+        self.assertIsInstance(block.elements[3].elements[0], 
RichTextSectionElement)
+        self.assertIsInstance(block.elements[3].elements[0].elements[0], 
RichTextElementParts.Text)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/python-slack-sdk-3.27.1/tests/slack_sdk/socket_mode/test_interactions_builtin.py
 
new/python-slack-sdk-3.27.2/tests/slack_sdk/socket_mode/test_interactions_builtin.py
--- 
old/python-slack-sdk-3.27.1/tests/slack_sdk/socket_mode/test_interactions_builtin.py
        2024-02-28 03:09:42.000000000 +0100
+++ 
new/python-slack-sdk-3.27.2/tests/slack_sdk/socket_mode/test_interactions_builtin.py
        2024-05-16 04:54:21.000000000 +0200
@@ -13,7 +13,6 @@
 
 from slack_sdk import WebClient
 from slack_sdk.socket_mode import SocketModeClient
-from tests.helpers import is_ci_unstable_test_skip_enabled
 from tests.slack_sdk.socket_mode.mock_socket_mode_server import (
     start_socket_mode_server,
     socket_mode_envelopes,
@@ -48,9 +47,6 @@
             pass
 
     def test_interactions(self):
-        if is_ci_unstable_test_skip_enabled():
-            return
-
         default_recursion_limit = sys.getrecursionlimit()  # will restore later
         # This built-in WebSocket client internally has recursive method calls 
of _fetch_messages method.
         # In this test, the method calls can result in the following error 
when giving a quite small buffer size.
@@ -135,8 +131,6 @@
         self.logger.info(f"Passed with buffer size: {buffer_size_list}")
 
     def test_send_message_while_disconnection(self):
-        if is_ci_unstable_test_skip_enabled():
-            return
         t = Thread(target=start_socket_mode_server(self, 3011))
         t.daemon = True
         t.start()
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/python-slack-sdk-3.27.1/tests/slack_sdk/socket_mode/test_interactions_websocket_client.py
 
new/python-slack-sdk-3.27.2/tests/slack_sdk/socket_mode/test_interactions_websocket_client.py
--- 
old/python-slack-sdk-3.27.1/tests/slack_sdk/socket_mode/test_interactions_websocket_client.py
       2024-02-28 03:09:42.000000000 +0100
+++ 
new/python-slack-sdk-3.27.2/tests/slack_sdk/socket_mode/test_interactions_websocket_client.py
       2024-05-16 04:54:21.000000000 +0200
@@ -38,8 +38,6 @@
         cleanup_mock_web_api_server(self)
 
     def test_interactions(self):
-        if is_ci_unstable_test_skip_enabled():
-            return
         t = Thread(target=start_socket_mode_server(self, 3012))
         t.daemon = True
         t.start()
@@ -100,6 +98,7 @@
 
     def test_send_message_while_disconnection(self):
         if is_ci_unstable_test_skip_enabled():
+            # this test tends to fail on the GitHub Actions platform
             return
         t = Thread(target=start_socket_mode_server(self, 3012))
         t.daemon = True
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/python-slack-sdk-3.27.1/tests/slack_sdk_async/socket_mode/test_interactions_aiohttp.py
 
new/python-slack-sdk-3.27.2/tests/slack_sdk_async/socket_mode/test_interactions_aiohttp.py
--- 
old/python-slack-sdk-3.27.1/tests/slack_sdk_async/socket_mode/test_interactions_aiohttp.py
  2024-02-28 03:09:42.000000000 +0100
+++ 
new/python-slack-sdk-3.27.2/tests/slack_sdk_async/socket_mode/test_interactions_aiohttp.py
  2024-05-16 04:54:21.000000000 +0200
@@ -14,7 +14,6 @@
 
 from slack_sdk.socket_mode.aiohttp import SocketModeClient
 from slack_sdk.web.async_client import AsyncWebClient
-from tests.helpers import is_ci_unstable_test_skip_enabled
 from tests.slack_sdk.socket_mode.mock_socket_mode_server import (
     start_socket_mode_server,
     start_socket_mode_server_with_disconnection,
@@ -44,8 +43,6 @@
 
     @async_test
     async def test_interactions(self):
-        if is_ci_unstable_test_skip_enabled():
-            return
         t = Thread(target=start_socket_mode_server(self, 3001))
         t.daemon = True
         t.start()
@@ -108,8 +105,6 @@
 
     @async_test
     async def test_interactions_with_disconnection(self):
-        if is_ci_unstable_test_skip_enabled():
-            return
         t = Thread(target=start_socket_mode_server_with_disconnection(self, 
3001))
         t.daemon = True
         t.start()
@@ -196,8 +191,6 @@
 
     @async_test
     async def test_send_message_while_disconnection(self):
-        if is_ci_unstable_test_skip_enabled():
-            return
         t = Thread(target=start_socket_mode_server(self, 3001))
         t.daemon = True
         t.start()
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/python-slack-sdk-3.27.1/tests/slack_sdk_async/socket_mode/test_interactions_websockets.py
 
new/python-slack-sdk-3.27.2/tests/slack_sdk_async/socket_mode/test_interactions_websockets.py
--- 
old/python-slack-sdk-3.27.1/tests/slack_sdk_async/socket_mode/test_interactions_websockets.py
       2024-02-28 03:09:42.000000000 +0100
+++ 
new/python-slack-sdk-3.27.2/tests/slack_sdk_async/socket_mode/test_interactions_websockets.py
       2024-05-16 04:54:21.000000000 +0200
@@ -42,8 +42,6 @@
 
     @async_test
     async def test_interactions(self):
-        if is_ci_unstable_test_skip_enabled():
-            return
         t = Thread(target=start_socket_mode_server(self, 3002))
         t.daemon = True
         t.start()
@@ -109,6 +107,7 @@
     @async_test
     async def test_send_message_while_disconnection(self):
         if is_ci_unstable_test_skip_enabled():
+            # this test tends to fail on the GitHub Actions platform
             return
         t = Thread(target=start_socket_mode_server(self, 3001))
         t.daemon = True

Reply via email to