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 2023-01-14 00:03:38
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/python-slack-sdk (Old)
 and      /work/SRC/openSUSE:Factory/.python-slack-sdk.new.32243 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Package is "python-slack-sdk"

Sat Jan 14 00:03:38 2023 rev:6 rq:1058292 version:3.19.5

Changes:
--------
--- /work/SRC/openSUSE:Factory/python-slack-sdk/python-slack-sdk.changes        
2022-12-03 10:04:11.995428136 +0100
+++ 
/work/SRC/openSUSE:Factory/.python-slack-sdk.new.32243/python-slack-sdk.changes 
    2023-01-14 00:04:25.378132113 +0100
@@ -1,0 +2,5 @@
+Fri Jan  6 17:50:46 UTC 2023 - Yogalakshmi Arunachalam <yarunacha...@suse.com>
+
+- Change log is upto date with the version. 
+
+-------------------------------------------------------------------

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

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

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

Other differences:
------------------
++++++ python-slack-sdk.spec ++++++
--- /var/tmp/diff_new_pack.NKZlqV/_old  2023-01-14 00:04:25.994135700 +0100
+++ /var/tmp/diff_new_pack.NKZlqV/_new  2023-01-14 00:04:25.998135723 +0100
@@ -1,7 +1,7 @@
 #
 # spec file for package python-slack-sdk
 #
-# Copyright (c) 2022 SUSE LLC
+# Copyright (c) 2023 SUSE LLC
 #
 # All modifications and additions to the file contributed by third parties
 # remain the property of their copyright owners, unless otherwise agreed
@@ -18,7 +18,7 @@
 
 %{?!python_module:%define python_module() python3-%{**}}
 Name:           python-slack-sdk
-Version:        3.19.3
+Version:        3.19.5
 Release:        0
 Summary:        Python SDKs for the Slack API
 License:        MIT

++++++ slack-sdk-3.19.3.tar.gz -> slack-sdk-3.19.5.tar.gz ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/python-slack-sdk-3.19.3/.github/workflows/ci-build.yml 
new/python-slack-sdk-3.19.5/.github/workflows/ci-build.yml
--- old/python-slack-sdk-3.19.3/.github/workflows/ci-build.yml  2022-11-08 
05:32:09.000000000 +0100
+++ new/python-slack-sdk-3.19.5/.github/workflows/ci-build.yml  2022-12-02 
03:26:05.000000000 +0100
@@ -8,7 +8,8 @@
 
 jobs:
   build:
-    runs-on: ubuntu-latest
+    # Avoiding -latest due to 
https://github.com/actions/setup-python/issues/162
+    runs-on: ubuntu-20.04
     timeout-minutes: 10
     strategy:
       matrix:
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/python-slack-sdk-3.19.3/.github/workflows/pytype.yml 
new/python-slack-sdk-3.19.5/.github/workflows/pytype.yml
--- old/python-slack-sdk-3.19.3/.github/workflows/pytype.yml    2022-11-08 
05:32:09.000000000 +0100
+++ new/python-slack-sdk-3.19.5/.github/workflows/pytype.yml    2022-12-02 
03:26:05.000000000 +0100
@@ -24,7 +24,7 @@
         pip install -e ".[testing]"
         pip install -e ".[optional]"
         # As pytype can change its behavior in newer versions, we manually 
upgrade it
-        pip install "pytype==2022.10.26"
+        pip install "pytype==2022.11.10"
     - name: Run pytype
       run: |
         pytype slack_sdk/
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/python-slack-sdk-3.19.3/docs/api-docs/slack_sdk/audit_logs/v1/logs.html 
new/python-slack-sdk-3.19.5/docs/api-docs/slack_sdk/audit_logs/v1/logs.html
--- old/python-slack-sdk-3.19.3/docs/api-docs/slack_sdk/audit_logs/v1/logs.html 
2022-11-08 05:32:09.000000000 +0100
+++ new/python-slack-sdk-3.19.5/docs/api-docs/slack_sdk/audit_logs/v1/logs.html 
2022-12-02 03:26:05.000000000 +0100
@@ -191,6 +191,19 @@
         self.unknown_fields = kwargs
 
 
+class SharedWith:
+    channel_id: Optional[str]
+
+    def __init__(
+        self,
+        *,
+        channel_id: Optional[str] = None,
+        **kwargs,
+    ) -&gt; None:
+        self.channel_id = channel_id
+        self.unknown_fields = kwargs
+
+
 class Details:
     name: Optional[str]
     new_value: Optional[Union[str, List[str], Dict[str, Any]]]
@@ -262,6 +275,11 @@
     enable_at_here: Optional[FeatureEnablement]
     enable_at_channel: Optional[FeatureEnablement]
     can_huddle: Optional[FeatureEnablement]
+    url_private: Optional[str]
+    shared_with: Optional[SharedWith]
+    initiated_by: Optional[str]
+    source_team: Optional[str]
+    destination_team: Optional[str]
 
     def __init__(
         self,
@@ -335,6 +353,11 @@
         enable_at_here: Optional[Union[Dict[str, Any], FeatureEnablement]] = 
None,
         enable_at_channel: Optional[Union[Dict[str, Any], FeatureEnablement]] 
= None,
         can_huddle: Optional[Union[Dict[str, Any], FeatureEnablement]] = None,
+        url_private: Optional[str] = None,
+        shared_with: Optional[Union[Dict[str, Any], SharedWith]] = None,
+        initiated_by: Optional[str] = None,
+        source_team: Optional[str] = None,
+        destination_team: Optional[str] = None,
         **kwargs,
     ) -&gt; None:
         self.name = name
@@ -433,6 +456,13 @@
             if can_huddle is None or isinstance(can_huddle, FeatureEnablement)
             else FeatureEnablement(**can_huddle)
         )
+        self.url_private = url_private
+        self.shared_with = (
+            shared_with if shared_with is None or isinstance(shared_with, 
SharedWith) else SharedWith(**shared_with)
+        )
+        self.initiated_by = initiated_by
+        self.source_team = source_team
+        self.destination_team = destination_team
 
 
 class Channel:
@@ -967,7 +997,7 @@
 </dd>
 <dt id="slack_sdk.audit_logs.v1.logs.Details"><code class="flex name class">
 <span>class <span class="ident">Details</span></span>
-<span>(</span><span>*, name: Optional[str] = None, new_value: Union[str, 
List[str], Dict[str, Any], ForwardRef(None)] = None, previous_value: 
Union[str, List[str], Dict[str, Any], ForwardRef(None)] = None, 
expires_on: Optional[int] = None, mobile_only: Optional[bool] = None, 
web_only: Optional[bool] = None, non_sso_only: Optional[bool] = None, 
type: Optional[str] = None, is_workflow: Optional[bool] = None, inviter: 
Union[<a title="slack_sdk.audit_logs.v1.logs.User" 
href="#slack_sdk.audit_logs.v1.logs.User">User</a>, Dict[str, Any], 
ForwardRef(None)] = None, kicker: Union[<a 
title="slack_sdk.audit_logs.v1.logs.User" 
href="#slack_sdk.audit_logs.v1.logs.User">User</a>, Dict[str, Any], 
ForwardRef(None)] = None, shared_to: Optional[str] = None, reason: 
Optional[str] = None, origin_team: Optional[str] = None, target_team: 
Optional[str] = None, is_internal_integration: Optional[bool] = None, 
cleared_resolution: Optional[str] =
  None, app_owner_id: Optional[str] = None, bot_scopes: 
Optional[List[str]] = None, new_scopes: Optional[List[str]] = None, 
previous_scopes: Optional[List[str]] = None, granular_bot_token: 
Optional[bool] = None, scopes: Optional[List[str]] = None, scopes_bot: 
Optional[List[str]] = None, resolution: Optional[str] = None, 
app_previously_resolved: Optional[bool] = None, admin_app_id: 
Optional[str] = None, bot_id: Optional[str] = None, installer_user_id: 
Optional[str] = None, approver_id: Optional[str] = None, approval_type: 
Optional[str] = None, app_previously_approved: Optional[bool] = None, 
old_scopes: Optional[List[str]] = None, channels: Optional[List[str]] = 
None, permissions: Optional[List[Dict[str, Any]]] = None, new_version_id: 
Optional[str] = None, trigger: Optional[str] = None, export_type: 
Optional[str] = None, export_start_ts: Optional[str] = None, 
export_end_ts: Optional[str] = None, barrier_id: Optiona
 l[str] = None, primary_usergroup_id: Optional[str] = None, 
barriered_from_usergroup_ids: Optional[List[str]] = None, 
restricted_subjects: Optional[List[str]] = None, duration: Optional[int] 
= None, desktop_app_browser_quit: Optional[bool] = None, invite_id: 
Optional[str] = None, external_organization_id: Optional[str] = None, 
external_organization_name: Optional[str] = None, external_user_id: 
Optional[str] = None, external_user_email: Optional[str] = None, 
channel_id: Optional[str] = None, added_team_id: Optional[str] = None, 
is_token_rotation_enabled_app: Optional[bool] = None, old_retention_policy: 
Union[Dict[str, Any], <a title="slack_sdk.audit_logs.v1.logs.RetentionPolicy" 
href="#slack_sdk.audit_logs.v1.logs.RetentionPolicy">RetentionPolicy</a>, 
ForwardRef(None)] = None, new_retention_policy: Union[Dict[str, Any], <a 
title="slack_sdk.audit_logs.v1.logs.RetentionPolicy" 
href="#slack_sdk.audit_logs.v1.logs.RetentionPolicy">Retentio
 nPolicy</a>, ForwardRef(None)] = None, who_can_post: Union[Dict[str, 
List[str]], <a title="slack_sdk.audit_logs.v1.logs.ConversationPref" 
href="#slack_sdk.audit_logs.v1.logs.ConversationPref">ConversationPref</a>, 
ForwardRef(None)] = None, can_thread: Union[Dict[str, List[str]], <a 
title="slack_sdk.audit_logs.v1.logs.ConversationPref" 
href="#slack_sdk.audit_logs.v1.logs.ConversationPref">ConversationPref</a>, 
ForwardRef(None)] = None, is_external_limited: Optional[bool] = None, 
exporting_team_id: Optional[int] = None, session_search_start: 
Optional[int] = None, deprecation_search_end: Optional[int] = None, 
is_error: Optional[bool] = None, creator: Optional[str] = None, team: 
Optional[str] = None, app_id: Optional[str] = None, enable_at_here: 
Union[Dict[str, Any], <a 
title="slack_sdk.audit_logs.v1.logs.FeatureEnablement" 
href="#slack_sdk.audit_logs.v1.logs.FeatureEnablement">FeatureEnablement</a>, 
ForwardRef(None)] = None, enable_at_channe
 l: Union[Dict[str, Any], <a 
title="slack_sdk.audit_logs.v1.logs.FeatureEnablement" 
href="#slack_sdk.audit_logs.v1.logs.FeatureEnablement">FeatureEnablement</a>, 
ForwardRef(None)] = None, can_huddle: Union[Dict[str, Any], <a 
title="slack_sdk.audit_logs.v1.logs.FeatureEnablement" 
href="#slack_sdk.audit_logs.v1.logs.FeatureEnablement">FeatureEnablement</a>, 
ForwardRef(None)] = None, **kwargs)</span>
+<span>(</span><span>*, name: Optional[str] = None, new_value: Union[str, 
List[str], Dict[str, Any], ForwardRef(None)] = None, previous_value: 
Union[str, List[str], Dict[str, Any], ForwardRef(None)] = None, 
expires_on: Optional[int] = None, mobile_only: Optional[bool] = None, 
web_only: Optional[bool] = None, non_sso_only: Optional[bool] = None, 
type: Optional[str] = None, is_workflow: Optional[bool] = None, inviter: 
Union[<a title="slack_sdk.audit_logs.v1.logs.User" 
href="#slack_sdk.audit_logs.v1.logs.User">User</a>, Dict[str, Any], 
ForwardRef(None)] = None, kicker: Union[<a 
title="slack_sdk.audit_logs.v1.logs.User" 
href="#slack_sdk.audit_logs.v1.logs.User">User</a>, Dict[str, Any], 
ForwardRef(None)] = None, shared_to: Optional[str] = None, reason: 
Optional[str] = None, origin_team: Optional[str] = None, target_team: 
Optional[str] = None, is_internal_integration: Optional[bool] = None, 
cleared_resolution: Optional[str] =
  None, app_owner_id: Optional[str] = None, bot_scopes: 
Optional[List[str]] = None, new_scopes: Optional[List[str]] = None, 
previous_scopes: Optional[List[str]] = None, granular_bot_token: 
Optional[bool] = None, scopes: Optional[List[str]] = None, scopes_bot: 
Optional[List[str]] = None, resolution: Optional[str] = None, 
app_previously_resolved: Optional[bool] = None, admin_app_id: 
Optional[str] = None, bot_id: Optional[str] = None, installer_user_id: 
Optional[str] = None, approver_id: Optional[str] = None, approval_type: 
Optional[str] = None, app_previously_approved: Optional[bool] = None, 
old_scopes: Optional[List[str]] = None, channels: Optional[List[str]] = 
None, permissions: Optional[List[Dict[str, Any]]] = None, new_version_id: 
Optional[str] = None, trigger: Optional[str] = None, export_type: 
Optional[str] = None, export_start_ts: Optional[str] = None, 
export_end_ts: Optional[str] = None, barrier_id: Optiona
 l[str] = None, primary_usergroup_id: Optional[str] = None, 
barriered_from_usergroup_ids: Optional[List[str]] = None, 
restricted_subjects: Optional[List[str]] = None, duration: Optional[int] 
= None, desktop_app_browser_quit: Optional[bool] = None, invite_id: 
Optional[str] = None, external_organization_id: Optional[str] = None, 
external_organization_name: Optional[str] = None, external_user_id: 
Optional[str] = None, external_user_email: Optional[str] = None, 
channel_id: Optional[str] = None, added_team_id: Optional[str] = None, 
is_token_rotation_enabled_app: Optional[bool] = None, old_retention_policy: 
Union[Dict[str, Any], <a title="slack_sdk.audit_logs.v1.logs.RetentionPolicy" 
href="#slack_sdk.audit_logs.v1.logs.RetentionPolicy">RetentionPolicy</a>, 
ForwardRef(None)] = None, new_retention_policy: Union[Dict[str, Any], <a 
title="slack_sdk.audit_logs.v1.logs.RetentionPolicy" 
href="#slack_sdk.audit_logs.v1.logs.RetentionPolicy">Retentio
 nPolicy</a>, ForwardRef(None)] = None, who_can_post: Union[Dict[str, 
List[str]], <a title="slack_sdk.audit_logs.v1.logs.ConversationPref" 
href="#slack_sdk.audit_logs.v1.logs.ConversationPref">ConversationPref</a>, 
ForwardRef(None)] = None, can_thread: Union[Dict[str, List[str]], <a 
title="slack_sdk.audit_logs.v1.logs.ConversationPref" 
href="#slack_sdk.audit_logs.v1.logs.ConversationPref">ConversationPref</a>, 
ForwardRef(None)] = None, is_external_limited: Optional[bool] = None, 
exporting_team_id: Optional[int] = None, session_search_start: 
Optional[int] = None, deprecation_search_end: Optional[int] = None, 
is_error: Optional[bool] = None, creator: Optional[str] = None, team: 
Optional[str] = None, app_id: Optional[str] = None, enable_at_here: 
Union[Dict[str, Any], <a 
title="slack_sdk.audit_logs.v1.logs.FeatureEnablement" 
href="#slack_sdk.audit_logs.v1.logs.FeatureEnablement">FeatureEnablement</a>, 
ForwardRef(None)] = None, enable_at_channe
 l: Union[Dict[str, Any], <a 
title="slack_sdk.audit_logs.v1.logs.FeatureEnablement" 
href="#slack_sdk.audit_logs.v1.logs.FeatureEnablement">FeatureEnablement</a>, 
ForwardRef(None)] = None, can_huddle: Union[Dict[str, Any], <a 
title="slack_sdk.audit_logs.v1.logs.FeatureEnablement" 
href="#slack_sdk.audit_logs.v1.logs.FeatureEnablement">FeatureEnablement</a>, 
ForwardRef(None)] = None, url_private: Optional[str] = None, shared_with: 
Union[Dict[str, Any], <a title="slack_sdk.audit_logs.v1.logs.SharedWith" 
href="#slack_sdk.audit_logs.v1.logs.SharedWith">SharedWith</a>, 
ForwardRef(None)] = None, initiated_by: Optional[str] = None, 
source_team: Optional[str] = None, destination_team: Optional[str] = 
None, **kwargs)</span>
 </code></dt>
 <dd>
 <div class="desc"></div>
@@ -1046,6 +1076,11 @@
     enable_at_here: Optional[FeatureEnablement]
     enable_at_channel: Optional[FeatureEnablement]
     can_huddle: Optional[FeatureEnablement]
+    url_private: Optional[str]
+    shared_with: Optional[SharedWith]
+    initiated_by: Optional[str]
+    source_team: Optional[str]
+    destination_team: Optional[str]
 
     def __init__(
         self,
@@ -1119,6 +1154,11 @@
         enable_at_here: Optional[Union[Dict[str, Any], FeatureEnablement]] = 
None,
         enable_at_channel: Optional[Union[Dict[str, Any], FeatureEnablement]] 
= None,
         can_huddle: Optional[Union[Dict[str, Any], FeatureEnablement]] = None,
+        url_private: Optional[str] = None,
+        shared_with: Optional[Union[Dict[str, Any], SharedWith]] = None,
+        initiated_by: Optional[str] = None,
+        source_team: Optional[str] = None,
+        destination_team: Optional[str] = None,
         **kwargs,
     ) -&gt; None:
         self.name = name
@@ -1216,7 +1256,14 @@
             can_huddle
             if can_huddle is None or isinstance(can_huddle, FeatureEnablement)
             else FeatureEnablement(**can_huddle)
-        )</code></pre>
+        )
+        self.url_private = url_private
+        self.shared_with = (
+            shared_with if shared_with is None or isinstance(shared_with, 
SharedWith) else SharedWith(**shared_with)
+        )
+        self.initiated_by = initiated_by
+        self.source_team = source_team
+        self.destination_team = destination_team</code></pre>
 </details>
 <h3>Class variables</h3>
 <dl>
@@ -1300,6 +1347,10 @@
 <dd>
 <div class="desc"></div>
 </dd>
+<dt id="slack_sdk.audit_logs.v1.logs.Details.destination_team"><code 
class="name">var <span class="ident">destination_team</span> : 
Optional[str]</code></dt>
+<dd>
+<div class="desc"></div>
+</dd>
 <dt id="slack_sdk.audit_logs.v1.logs.Details.duration"><code class="name">var 
<span class="ident">duration</span> : Optional[int]</code></dt>
 <dd>
 <div class="desc"></div>
@@ -1352,6 +1403,10 @@
 <dd>
 <div class="desc"></div>
 </dd>
+<dt id="slack_sdk.audit_logs.v1.logs.Details.initiated_by"><code 
class="name">var <span class="ident">initiated_by</span> : 
Optional[str]</code></dt>
+<dd>
+<div class="desc"></div>
+</dd>
 <dt id="slack_sdk.audit_logs.v1.logs.Details.installer_user_id"><code 
class="name">var <span class="ident">installer_user_id</span> : 
Optional[str]</code></dt>
 <dd>
 <div class="desc"></div>
@@ -1472,6 +1527,14 @@
 <dd>
 <div class="desc"></div>
 </dd>
+<dt id="slack_sdk.audit_logs.v1.logs.Details.shared_with"><code 
class="name">var <span class="ident">shared_with</span> : Optional[<a 
title="slack_sdk.audit_logs.v1.logs.SharedWith" 
href="#slack_sdk.audit_logs.v1.logs.SharedWith">SharedWith</a>]</code></dt>
+<dd>
+<div class="desc"></div>
+</dd>
+<dt id="slack_sdk.audit_logs.v1.logs.Details.source_team"><code 
class="name">var <span class="ident">source_team</span> : 
Optional[str]</code></dt>
+<dd>
+<div class="desc"></div>
+</dd>
 <dt id="slack_sdk.audit_logs.v1.logs.Details.target_team"><code 
class="name">var <span class="ident">target_team</span> : 
Optional[str]</code></dt>
 <dd>
 <div class="desc"></div>
@@ -1492,6 +1555,10 @@
 <dd>
 <div class="desc"></div>
 </dd>
+<dt id="slack_sdk.audit_logs.v1.logs.Details.url_private"><code 
class="name">var <span class="ident">url_private</span> : 
Optional[str]</code></dt>
+<dd>
+<div class="desc"></div>
+</dd>
 <dt id="slack_sdk.audit_logs.v1.logs.Details.web_only"><code class="name">var 
<span class="ident">web_only</span> : Optional[bool]</code></dt>
 <dd>
 <div class="desc"></div>
@@ -2019,6 +2086,36 @@
 </dd>
 </dl>
 </dd>
+<dt id="slack_sdk.audit_logs.v1.logs.SharedWith"><code class="flex name class">
+<span>class <span class="ident">SharedWith</span></span>
+<span>(</span><span>*, channel_id: Optional[str] = None, **kwargs)</span>
+</code></dt>
+<dd>
+<div class="desc"></div>
+<details class="source">
+<summary>
+<span>Expand source code</span>
+</summary>
+<pre><code class="python">class SharedWith:
+    channel_id: Optional[str]
+
+    def __init__(
+        self,
+        *,
+        channel_id: Optional[str] = None,
+        **kwargs,
+    ) -&gt; None:
+        self.channel_id = channel_id
+        self.unknown_fields = kwargs</code></pre>
+</details>
+<h3>Class variables</h3>
+<dl>
+<dt id="slack_sdk.audit_logs.v1.logs.SharedWith.channel_id"><code 
class="name">var <span class="ident">channel_id</span> : 
Optional[str]</code></dt>
+<dd>
+<div class="desc"></div>
+</dd>
+</dl>
+</dd>
 <dt id="slack_sdk.audit_logs.v1.logs.User"><code class="flex name class">
 <span>class <span class="ident">User</span></span>
 <span>(</span><span>*, id: Optional[str] = None, name: Optional[str] = 
None, email: Optional[str] = None, team: Optional[str] = None, 
**kwargs)</span>
@@ -2256,6 +2353,7 @@
 <li><code><a title="slack_sdk.audit_logs.v1.logs.Details.creator" 
href="#slack_sdk.audit_logs.v1.logs.Details.creator">creator</a></code></li>
 <li><code><a 
title="slack_sdk.audit_logs.v1.logs.Details.deprecation_search_end" 
href="#slack_sdk.audit_logs.v1.logs.Details.deprecation_search_end">deprecation_search_end</a></code></li>
 <li><code><a 
title="slack_sdk.audit_logs.v1.logs.Details.desktop_app_browser_quit" 
href="#slack_sdk.audit_logs.v1.logs.Details.desktop_app_browser_quit">desktop_app_browser_quit</a></code></li>
+<li><code><a title="slack_sdk.audit_logs.v1.logs.Details.destination_team" 
href="#slack_sdk.audit_logs.v1.logs.Details.destination_team">destination_team</a></code></li>
 <li><code><a title="slack_sdk.audit_logs.v1.logs.Details.duration" 
href="#slack_sdk.audit_logs.v1.logs.Details.duration">duration</a></code></li>
 <li><code><a title="slack_sdk.audit_logs.v1.logs.Details.enable_at_channel" 
href="#slack_sdk.audit_logs.v1.logs.Details.enable_at_channel">enable_at_channel</a></code></li>
 <li><code><a title="slack_sdk.audit_logs.v1.logs.Details.enable_at_here" 
href="#slack_sdk.audit_logs.v1.logs.Details.enable_at_here">enable_at_here</a></code></li>
@@ -2269,6 +2367,7 @@
 <li><code><a title="slack_sdk.audit_logs.v1.logs.Details.external_user_email" 
href="#slack_sdk.audit_logs.v1.logs.Details.external_user_email">external_user_email</a></code></li>
 <li><code><a title="slack_sdk.audit_logs.v1.logs.Details.external_user_id" 
href="#slack_sdk.audit_logs.v1.logs.Details.external_user_id">external_user_id</a></code></li>
 <li><code><a title="slack_sdk.audit_logs.v1.logs.Details.granular_bot_token" 
href="#slack_sdk.audit_logs.v1.logs.Details.granular_bot_token">granular_bot_token</a></code></li>
+<li><code><a title="slack_sdk.audit_logs.v1.logs.Details.initiated_by" 
href="#slack_sdk.audit_logs.v1.logs.Details.initiated_by">initiated_by</a></code></li>
 <li><code><a title="slack_sdk.audit_logs.v1.logs.Details.installer_user_id" 
href="#slack_sdk.audit_logs.v1.logs.Details.installer_user_id">installer_user_id</a></code></li>
 <li><code><a title="slack_sdk.audit_logs.v1.logs.Details.invite_id" 
href="#slack_sdk.audit_logs.v1.logs.Details.invite_id">invite_id</a></code></li>
 <li><code><a title="slack_sdk.audit_logs.v1.logs.Details.inviter" 
href="#slack_sdk.audit_logs.v1.logs.Details.inviter">inviter</a></code></li>
@@ -2299,11 +2398,14 @@
 <li><code><a title="slack_sdk.audit_logs.v1.logs.Details.scopes_bot" 
href="#slack_sdk.audit_logs.v1.logs.Details.scopes_bot">scopes_bot</a></code></li>
 <li><code><a title="slack_sdk.audit_logs.v1.logs.Details.session_search_start" 
href="#slack_sdk.audit_logs.v1.logs.Details.session_search_start">session_search_start</a></code></li>
 <li><code><a title="slack_sdk.audit_logs.v1.logs.Details.shared_to" 
href="#slack_sdk.audit_logs.v1.logs.Details.shared_to">shared_to</a></code></li>
+<li><code><a title="slack_sdk.audit_logs.v1.logs.Details.shared_with" 
href="#slack_sdk.audit_logs.v1.logs.Details.shared_with">shared_with</a></code></li>
+<li><code><a title="slack_sdk.audit_logs.v1.logs.Details.source_team" 
href="#slack_sdk.audit_logs.v1.logs.Details.source_team">source_team</a></code></li>
 <li><code><a title="slack_sdk.audit_logs.v1.logs.Details.target_team" 
href="#slack_sdk.audit_logs.v1.logs.Details.target_team">target_team</a></code></li>
 <li><code><a title="slack_sdk.audit_logs.v1.logs.Details.team" 
href="#slack_sdk.audit_logs.v1.logs.Details.team">team</a></code></li>
 <li><code><a title="slack_sdk.audit_logs.v1.logs.Details.trigger" 
href="#slack_sdk.audit_logs.v1.logs.Details.trigger">trigger</a></code></li>
 <li><code><a title="slack_sdk.audit_logs.v1.logs.Details.type" 
href="#slack_sdk.audit_logs.v1.logs.Details.type">type</a></code></li>
 <li><code><a title="slack_sdk.audit_logs.v1.logs.Details.unknown_fields" 
href="#slack_sdk.audit_logs.v1.logs.Details.unknown_fields">unknown_fields</a></code></li>
+<li><code><a title="slack_sdk.audit_logs.v1.logs.Details.url_private" 
href="#slack_sdk.audit_logs.v1.logs.Details.url_private">url_private</a></code></li>
 <li><code><a title="slack_sdk.audit_logs.v1.logs.Details.web_only" 
href="#slack_sdk.audit_logs.v1.logs.Details.web_only">web_only</a></code></li>
 <li><code><a title="slack_sdk.audit_logs.v1.logs.Details.who_can_post" 
href="#slack_sdk.audit_logs.v1.logs.Details.who_can_post">who_can_post</a></code></li>
 </ul>
@@ -2400,6 +2502,12 @@
 </ul>
 </li>
 <li>
+<h4><code><a title="slack_sdk.audit_logs.v1.logs.SharedWith" 
href="#slack_sdk.audit_logs.v1.logs.SharedWith">SharedWith</a></code></h4>
+<ul class="">
+<li><code><a title="slack_sdk.audit_logs.v1.logs.SharedWith.channel_id" 
href="#slack_sdk.audit_logs.v1.logs.SharedWith.channel_id">channel_id</a></code></li>
+</ul>
+</li>
+<li>
 <h4><code><a title="slack_sdk.audit_logs.v1.logs.User" 
href="#slack_sdk.audit_logs.v1.logs.User">User</a></code></h4>
 <ul class="">
 <li><code><a title="slack_sdk.audit_logs.v1.logs.User.email" 
href="#slack_sdk.audit_logs.v1.logs.User.email">email</a></code></li>
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/python-slack-sdk-3.19.3/docs/api-docs/slack_sdk/index.html 
new/python-slack-sdk-3.19.5/docs/api-docs/slack_sdk/index.html
--- old/python-slack-sdk-3.19.3/docs/api-docs/slack_sdk/index.html      
2022-11-08 05:32:09.000000000 +0100
+++ new/python-slack-sdk-3.19.5/docs/api-docs/slack_sdk/index.html      
2022-12-02 03:26:05.000000000 +0100
@@ -2360,7 +2360,7 @@
         ts: Optional[str] = None,
         source: Optional[str] = None,
         unfurl_id: Optional[str] = None,
-        unfurls: Dict[str, Dict],
+        unfurls: Optional[Dict[str, Dict]] = None,  # or user_auth_*
         user_auth_blocks: Optional[Union[str, Sequence[Union[Dict, Block]]]] = 
None,
         user_auth_message: Optional[str] = None,
         user_auth_required: Optional[bool] = None,
@@ -2383,6 +2383,7 @@
                 &#34;user_auth_url&#34;: user_auth_url,
             }
         )
+        _parse_web_class_objects(kwargs)  # for user_auth_blocks
         kwargs = _remove_none_values(kwargs)
         # NOTE: intentionally using json over params for API methods using 
blocks/attachments
         return self.api_call(&#34;chat.unfurl&#34;, json=kwargs)
@@ -8162,7 +8163,7 @@
 </details>
 </dd>
 <dt id="slack_sdk.WebClient.chat_unfurl"><code class="name flex">
-<span>def <span class="ident">chat_unfurl</span></span>(<span>self, *, 
channel: Optional[str] = None, ts: Optional[str] = None, source: 
Optional[str] = None, unfurl_id: Optional[str] = None, unfurls: 
Dict[str, Dict], user_auth_blocks: Union[str, Sequence[Union[Dict, <a 
title="slack_sdk.models.blocks.blocks.Block" 
href="models/blocks/blocks.html#slack_sdk.models.blocks.blocks.Block">Block</a>]],Â
 ForwardRef(None)] = None, user_auth_message: Optional[str] = None, 
user_auth_required: Optional[bool] = None, user_auth_url: Optional[str] = 
None, **kwargs) ‑> <a title="slack_sdk.web.slack_response.SlackResponse" 
href="web/slack_response.html#slack_sdk.web.slack_response.SlackResponse">SlackResponse</a></span>
+<span>def <span class="ident">chat_unfurl</span></span>(<span>self, *, 
channel: Optional[str] = None, ts: Optional[str] = None, source: 
Optional[str] = None, unfurl_id: Optional[str] = None, unfurls: 
Optional[Dict[str, Dict]] = None, user_auth_blocks: Union[str, 
Sequence[Union[Dict, <a title="slack_sdk.models.blocks.blocks.Block" 
href="models/blocks/blocks.html#slack_sdk.models.blocks.blocks.Block">Block</a>]],Â
 ForwardRef(None)] = None, user_auth_message: Optional[str] = None, 
user_auth_required: Optional[bool] = None, user_auth_url: Optional[str] = 
None, **kwargs) ‑> <a title="slack_sdk.web.slack_response.SlackResponse" 
href="web/slack_response.html#slack_sdk.web.slack_response.SlackResponse">SlackResponse</a></span>
 </code></dt>
 <dd>
 <div class="desc"><p>Provide custom unfurl behavior for user-posted URLs.
@@ -8178,7 +8179,7 @@
     ts: Optional[str] = None,
     source: Optional[str] = None,
     unfurl_id: Optional[str] = None,
-    unfurls: Dict[str, Dict],
+    unfurls: Optional[Dict[str, Dict]] = None,  # or user_auth_*
     user_auth_blocks: Optional[Union[str, Sequence[Union[Dict, Block]]]] = 
None,
     user_auth_message: Optional[str] = None,
     user_auth_required: Optional[bool] = None,
@@ -8201,6 +8202,7 @@
             &#34;user_auth_url&#34;: user_auth_url,
         }
     )
+    _parse_web_class_objects(kwargs)  # for user_auth_blocks
     kwargs = _remove_none_values(kwargs)
     # NOTE: intentionally using json over params for API methods using 
blocks/attachments
     return self.api_call(&#34;chat.unfurl&#34;, json=kwargs)</code></pre>
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/python-slack-sdk-3.19.3/docs/api-docs/slack_sdk/socket_mode/aiohttp/index.html
 
new/python-slack-sdk-3.19.5/docs/api-docs/slack_sdk/socket_mode/aiohttp/index.html
--- 
old/python-slack-sdk-3.19.3/docs/api-docs/slack_sdk/socket_mode/aiohttp/index.html
  2022-11-08 05:32:09.000000000 +0100
+++ 
new/python-slack-sdk-3.19.5/docs/api-docs/slack_sdk/socket_mode/aiohttp/index.html
  2022-12-02 03:26:05.000000000 +0100
@@ -387,6 +387,7 @@
             autoping=False,
             heartbeat=self.ping_interval,
             proxy=self.proxy,
+            ssl=self.web_client.ssl,
         )
         session_id: str = await self.session_id()
         self.auto_reconnect_enabled = self.default_auto_reconnect_enabled
@@ -842,6 +843,7 @@
             autoping=False,
             heartbeat=self.ping_interval,
             proxy=self.proxy,
+            ssl=self.web_client.ssl,
         )
         session_id: str = await self.session_id()
         self.auto_reconnect_enabled = self.default_auto_reconnect_enabled
@@ -1091,6 +1093,7 @@
         autoping=False,
         heartbeat=self.ping_interval,
         proxy=self.proxy,
+        ssl=self.web_client.ssl,
     )
     session_id: str = await self.session_id()
     self.auto_reconnect_enabled = self.default_auto_reconnect_enabled
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/python-slack-sdk-3.19.3/docs/api-docs/slack_sdk/version.html 
new/python-slack-sdk-3.19.5/docs/api-docs/slack_sdk/version.html
--- old/python-slack-sdk-3.19.3/docs/api-docs/slack_sdk/version.html    
2022-11-08 05:32:09.000000000 +0100
+++ new/python-slack-sdk-3.19.5/docs/api-docs/slack_sdk/version.html    
2022-12-02 03:26:05.000000000 +0100
@@ -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.19.3&#34;</code></pre>
+__version__ = &#34;3.19.5&#34;</code></pre>
 </details>
 </section>
 <section>
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/python-slack-sdk-3.19.3/docs/api-docs/slack_sdk/web/async_client.html 
new/python-slack-sdk-3.19.5/docs/api-docs/slack_sdk/web/async_client.html
--- old/python-slack-sdk-3.19.3/docs/api-docs/slack_sdk/web/async_client.html   
2022-11-08 05:32:09.000000000 +0100
+++ new/python-slack-sdk-3.19.5/docs/api-docs/slack_sdk/web/async_client.html   
2022-12-02 03:26:05.000000000 +0100
@@ -2160,7 +2160,7 @@
         ts: Optional[str] = None,
         source: Optional[str] = None,
         unfurl_id: Optional[str] = None,
-        unfurls: Dict[str, Dict],
+        unfurls: Optional[Dict[str, Dict]] = None,  # or user_auth_*
         user_auth_blocks: Optional[Union[str, Sequence[Union[Dict, Block]]]] = 
None,
         user_auth_message: Optional[str] = None,
         user_auth_required: Optional[bool] = None,
@@ -2183,6 +2183,7 @@
                 &#34;user_auth_url&#34;: user_auth_url,
             }
         )
+        _parse_web_class_objects(kwargs)  # for user_auth_blocks
         kwargs = _remove_none_values(kwargs)
         # NOTE: intentionally using json over params for API methods using 
blocks/attachments
         return await self.api_call(&#34;chat.unfurl&#34;, json=kwargs)
@@ -6800,7 +6801,7 @@
         ts: Optional[str] = None,
         source: Optional[str] = None,
         unfurl_id: Optional[str] = None,
-        unfurls: Dict[str, Dict],
+        unfurls: Optional[Dict[str, Dict]] = None,  # or user_auth_*
         user_auth_blocks: Optional[Union[str, Sequence[Union[Dict, Block]]]] = 
None,
         user_auth_message: Optional[str] = None,
         user_auth_required: Optional[bool] = None,
@@ -6823,6 +6824,7 @@
                 &#34;user_auth_url&#34;: user_auth_url,
             }
         )
+        _parse_web_class_objects(kwargs)  # for user_auth_blocks
         kwargs = _remove_none_values(kwargs)
         # NOTE: intentionally using json over params for API methods using 
blocks/attachments
         return await self.api_call(&#34;chat.unfurl&#34;, json=kwargs)
@@ -12602,7 +12604,7 @@
 </details>
 </dd>
 <dt id="slack_sdk.web.async_client.AsyncWebClient.chat_unfurl"><code 
class="name flex">
-<span>async def <span class="ident">chat_unfurl</span></span>(<span>self, *, 
channel: Optional[str] = None, ts: Optional[str] = None, source: 
Optional[str] = None, unfurl_id: Optional[str] = None, unfurls: 
Dict[str, Dict], user_auth_blocks: Union[str, Sequence[Union[Dict, <a 
title="slack_sdk.models.blocks.blocks.Block" 
href="../models/blocks/blocks.html#slack_sdk.models.blocks.blocks.Block">Block</a>]],Â
 ForwardRef(None)] = None, user_auth_message: Optional[str] = None, 
user_auth_required: Optional[bool] = None, user_auth_url: Optional[str] = 
None, **kwargs) ‑> <a 
title="slack_sdk.web.async_slack_response.AsyncSlackResponse" 
href="async_slack_response.html#slack_sdk.web.async_slack_response.AsyncSlackResponse">AsyncSlackResponse</a></span>
+<span>async def <span class="ident">chat_unfurl</span></span>(<span>self, *, 
channel: Optional[str] = None, ts: Optional[str] = None, source: 
Optional[str] = None, unfurl_id: Optional[str] = None, unfurls: 
Optional[Dict[str, Dict]] = None, user_auth_blocks: Union[str, 
Sequence[Union[Dict, <a title="slack_sdk.models.blocks.blocks.Block" 
href="../models/blocks/blocks.html#slack_sdk.models.blocks.blocks.Block">Block</a>]],Â
 ForwardRef(None)] = None, user_auth_message: Optional[str] = None, 
user_auth_required: Optional[bool] = None, user_auth_url: Optional[str] = 
None, **kwargs) ‑> <a 
title="slack_sdk.web.async_slack_response.AsyncSlackResponse" 
href="async_slack_response.html#slack_sdk.web.async_slack_response.AsyncSlackResponse">AsyncSlackResponse</a></span>
 </code></dt>
 <dd>
 <div class="desc"><p>Provide custom unfurl behavior for user-posted URLs.
@@ -12618,7 +12620,7 @@
     ts: Optional[str] = None,
     source: Optional[str] = None,
     unfurl_id: Optional[str] = None,
-    unfurls: Dict[str, Dict],
+    unfurls: Optional[Dict[str, Dict]] = None,  # or user_auth_*
     user_auth_blocks: Optional[Union[str, Sequence[Union[Dict, Block]]]] = 
None,
     user_auth_message: Optional[str] = None,
     user_auth_required: Optional[bool] = None,
@@ -12641,6 +12643,7 @@
             &#34;user_auth_url&#34;: user_auth_url,
         }
     )
+    _parse_web_class_objects(kwargs)  # for user_auth_blocks
     kwargs = _remove_none_values(kwargs)
     # NOTE: intentionally using json over params for API methods using 
blocks/attachments
     return await self.api_call(&#34;chat.unfurl&#34;, json=kwargs)</code></pre>
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/python-slack-sdk-3.19.3/docs/api-docs/slack_sdk/web/async_slack_response.html
 
new/python-slack-sdk-3.19.5/docs/api-docs/slack_sdk/web/async_slack_response.html
--- 
old/python-slack-sdk-3.19.3/docs/api-docs/slack_sdk/web/async_slack_response.html
   2022-11-08 05:32:09.000000000 +0100
+++ 
new/python-slack-sdk-3.19.5/docs/api-docs/slack_sdk/web/async_slack_response.html
   2022-12-02 03:26:05.000000000 +0100
@@ -174,7 +174,8 @@
             params = self.req_args.get(&#34;params&#34;, {})
             if params is None:
                 params = {}
-            params.update({&#34;cursor&#34;: 
self.data[&#34;response_metadata&#34;][&#34;next_cursor&#34;]})
+            next_cursor = self.data.get(&#34;response_metadata&#34;, 
{}).get(&#34;next_cursor&#34;) or self.data.get(&#34;next_cursor&#34;)
+            params.update({&#34;cursor&#34;: next_cursor})
             self.req_args.update({&#34;params&#34;: params})
 
             response = await self._client._request(  # skipcq: PYL-W0212
@@ -423,7 +424,8 @@
             params = self.req_args.get(&#34;params&#34;, {})
             if params is None:
                 params = {}
-            params.update({&#34;cursor&#34;: 
self.data[&#34;response_metadata&#34;][&#34;next_cursor&#34;]})
+            next_cursor = self.data.get(&#34;response_metadata&#34;, 
{}).get(&#34;next_cursor&#34;) or self.data.get(&#34;next_cursor&#34;)
+            params.update({&#34;cursor&#34;: next_cursor})
             self.req_args.update({&#34;params&#34;: params})
 
             response = await self._client._request(  # skipcq: PYL-W0212
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/python-slack-sdk-3.19.3/docs/api-docs/slack_sdk/web/client.html 
new/python-slack-sdk-3.19.5/docs/api-docs/slack_sdk/web/client.html
--- old/python-slack-sdk-3.19.3/docs/api-docs/slack_sdk/web/client.html 
2022-11-08 05:32:09.000000000 +0100
+++ new/python-slack-sdk-3.19.5/docs/api-docs/slack_sdk/web/client.html 
2022-12-02 03:26:05.000000000 +0100
@@ -2151,7 +2151,7 @@
         ts: Optional[str] = None,
         source: Optional[str] = None,
         unfurl_id: Optional[str] = None,
-        unfurls: Dict[str, Dict],
+        unfurls: Optional[Dict[str, Dict]] = None,  # or user_auth_*
         user_auth_blocks: Optional[Union[str, Sequence[Union[Dict, Block]]]] = 
None,
         user_auth_message: Optional[str] = None,
         user_auth_required: Optional[bool] = None,
@@ -2174,6 +2174,7 @@
                 &#34;user_auth_url&#34;: user_auth_url,
             }
         )
+        _parse_web_class_objects(kwargs)  # for user_auth_blocks
         kwargs = _remove_none_values(kwargs)
         # NOTE: intentionally using json over params for API methods using 
blocks/attachments
         return self.api_call(&#34;chat.unfurl&#34;, json=kwargs)
@@ -6791,7 +6792,7 @@
         ts: Optional[str] = None,
         source: Optional[str] = None,
         unfurl_id: Optional[str] = None,
-        unfurls: Dict[str, Dict],
+        unfurls: Optional[Dict[str, Dict]] = None,  # or user_auth_*
         user_auth_blocks: Optional[Union[str, Sequence[Union[Dict, Block]]]] = 
None,
         user_auth_message: Optional[str] = None,
         user_auth_required: Optional[bool] = None,
@@ -6814,6 +6815,7 @@
                 &#34;user_auth_url&#34;: user_auth_url,
             }
         )
+        _parse_web_class_objects(kwargs)  # for user_auth_blocks
         kwargs = _remove_none_values(kwargs)
         # NOTE: intentionally using json over params for API methods using 
blocks/attachments
         return self.api_call(&#34;chat.unfurl&#34;, json=kwargs)
@@ -12593,7 +12595,7 @@
 </details>
 </dd>
 <dt id="slack_sdk.web.client.WebClient.chat_unfurl"><code class="name flex">
-<span>def <span class="ident">chat_unfurl</span></span>(<span>self, *, 
channel: Optional[str] = None, ts: Optional[str] = None, source: 
Optional[str] = None, unfurl_id: Optional[str] = None, unfurls: 
Dict[str, Dict], user_auth_blocks: Union[str, Sequence[Union[Dict, <a 
title="slack_sdk.models.blocks.blocks.Block" 
href="../models/blocks/blocks.html#slack_sdk.models.blocks.blocks.Block">Block</a>]],Â
 ForwardRef(None)] = None, user_auth_message: Optional[str] = None, 
user_auth_required: Optional[bool] = None, user_auth_url: Optional[str] = 
None, **kwargs) ‑> <a title="slack_sdk.web.slack_response.SlackResponse" 
href="slack_response.html#slack_sdk.web.slack_response.SlackResponse">SlackResponse</a></span>
+<span>def <span class="ident">chat_unfurl</span></span>(<span>self, *, 
channel: Optional[str] = None, ts: Optional[str] = None, source: 
Optional[str] = None, unfurl_id: Optional[str] = None, unfurls: 
Optional[Dict[str, Dict]] = None, user_auth_blocks: Union[str, 
Sequence[Union[Dict, <a title="slack_sdk.models.blocks.blocks.Block" 
href="../models/blocks/blocks.html#slack_sdk.models.blocks.blocks.Block">Block</a>]],Â
 ForwardRef(None)] = None, user_auth_message: Optional[str] = None, 
user_auth_required: Optional[bool] = None, user_auth_url: Optional[str] = 
None, **kwargs) ‑> <a title="slack_sdk.web.slack_response.SlackResponse" 
href="slack_response.html#slack_sdk.web.slack_response.SlackResponse">SlackResponse</a></span>
 </code></dt>
 <dd>
 <div class="desc"><p>Provide custom unfurl behavior for user-posted URLs.
@@ -12609,7 +12611,7 @@
     ts: Optional[str] = None,
     source: Optional[str] = None,
     unfurl_id: Optional[str] = None,
-    unfurls: Dict[str, Dict],
+    unfurls: Optional[Dict[str, Dict]] = None,  # or user_auth_*
     user_auth_blocks: Optional[Union[str, Sequence[Union[Dict, Block]]]] = 
None,
     user_auth_message: Optional[str] = None,
     user_auth_required: Optional[bool] = None,
@@ -12632,6 +12634,7 @@
             &#34;user_auth_url&#34;: user_auth_url,
         }
     )
+    _parse_web_class_objects(kwargs)  # for user_auth_blocks
     kwargs = _remove_none_values(kwargs)
     # NOTE: intentionally using json over params for API methods using 
blocks/attachments
     return self.api_call(&#34;chat.unfurl&#34;, json=kwargs)</code></pre>
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/python-slack-sdk-3.19.3/docs/api-docs/slack_sdk/web/index.html 
new/python-slack-sdk-3.19.5/docs/api-docs/slack_sdk/web/index.html
--- old/python-slack-sdk-3.19.3/docs/api-docs/slack_sdk/web/index.html  
2022-11-08 05:32:09.000000000 +0100
+++ new/python-slack-sdk-3.19.5/docs/api-docs/slack_sdk/web/index.html  
2022-12-02 03:26:05.000000000 +0100
@@ -2571,7 +2571,7 @@
         ts: Optional[str] = None,
         source: Optional[str] = None,
         unfurl_id: Optional[str] = None,
-        unfurls: Dict[str, Dict],
+        unfurls: Optional[Dict[str, Dict]] = None,  # or user_auth_*
         user_auth_blocks: Optional[Union[str, Sequence[Union[Dict, Block]]]] = 
None,
         user_auth_message: Optional[str] = None,
         user_auth_required: Optional[bool] = None,
@@ -2594,6 +2594,7 @@
                 &#34;user_auth_url&#34;: user_auth_url,
             }
         )
+        _parse_web_class_objects(kwargs)  # for user_auth_blocks
         kwargs = _remove_none_values(kwargs)
         # NOTE: intentionally using json over params for API methods using 
blocks/attachments
         return self.api_call(&#34;chat.unfurl&#34;, json=kwargs)
@@ -8373,7 +8374,7 @@
 </details>
 </dd>
 <dt id="slack_sdk.web.WebClient.chat_unfurl"><code class="name flex">
-<span>def <span class="ident">chat_unfurl</span></span>(<span>self, *, 
channel: Optional[str] = None, ts: Optional[str] = None, source: 
Optional[str] = None, unfurl_id: Optional[str] = None, unfurls: 
Dict[str, Dict], user_auth_blocks: Union[str, Sequence[Union[Dict, <a 
title="slack_sdk.models.blocks.blocks.Block" 
href="../models/blocks/blocks.html#slack_sdk.models.blocks.blocks.Block">Block</a>]],Â
 ForwardRef(None)] = None, user_auth_message: Optional[str] = None, 
user_auth_required: Optional[bool] = None, user_auth_url: Optional[str] = 
None, **kwargs) ‑> <a title="slack_sdk.web.slack_response.SlackResponse" 
href="slack_response.html#slack_sdk.web.slack_response.SlackResponse">SlackResponse</a></span>
+<span>def <span class="ident">chat_unfurl</span></span>(<span>self, *, 
channel: Optional[str] = None, ts: Optional[str] = None, source: 
Optional[str] = None, unfurl_id: Optional[str] = None, unfurls: 
Optional[Dict[str, Dict]] = None, user_auth_blocks: Union[str, 
Sequence[Union[Dict, <a title="slack_sdk.models.blocks.blocks.Block" 
href="../models/blocks/blocks.html#slack_sdk.models.blocks.blocks.Block">Block</a>]],Â
 ForwardRef(None)] = None, user_auth_message: Optional[str] = None, 
user_auth_required: Optional[bool] = None, user_auth_url: Optional[str] = 
None, **kwargs) ‑> <a title="slack_sdk.web.slack_response.SlackResponse" 
href="slack_response.html#slack_sdk.web.slack_response.SlackResponse">SlackResponse</a></span>
 </code></dt>
 <dd>
 <div class="desc"><p>Provide custom unfurl behavior for user-posted URLs.
@@ -8389,7 +8390,7 @@
     ts: Optional[str] = None,
     source: Optional[str] = None,
     unfurl_id: Optional[str] = None,
-    unfurls: Dict[str, Dict],
+    unfurls: Optional[Dict[str, Dict]] = None,  # or user_auth_*
     user_auth_blocks: Optional[Union[str, Sequence[Union[Dict, Block]]]] = 
None,
     user_auth_message: Optional[str] = None,
     user_auth_required: Optional[bool] = None,
@@ -8412,6 +8413,7 @@
             &#34;user_auth_url&#34;: user_auth_url,
         }
     )
+    _parse_web_class_objects(kwargs)  # for user_auth_blocks
     kwargs = _remove_none_values(kwargs)
     # NOTE: intentionally using json over params for API methods using 
blocks/attachments
     return self.api_call(&#34;chat.unfurl&#34;, json=kwargs)</code></pre>
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/python-slack-sdk-3.19.3/docs/api-docs/slack_sdk/web/internal_utils.html 
new/python-slack-sdk-3.19.5/docs/api-docs/slack_sdk/web/internal_utils.html
--- old/python-slack-sdk-3.19.3/docs/api-docs/slack_sdk/web/internal_utils.html 
2022-11-08 05:32:09.000000000 +0100
+++ new/python-slack-sdk-3.19.5/docs/api-docs/slack_sdk/web/internal_utils.html 
2022-12-02 03:26:05.000000000 +0100
@@ -222,10 +222,11 @@
             return obj.to_dict()
         return obj
 
-    blocks = kwargs.get(&#34;blocks&#34;, None)
-    if blocks is not None and isinstance(blocks, Sequence) and (not 
isinstance(blocks, str)):
-        dict_blocks = [to_dict(b) for b in blocks]
-        kwargs.update({&#34;blocks&#34;: dict_blocks})
+    for blocks_name in [&#34;blocks&#34;, &#34;user_auth_blocks&#34;]:
+        blocks = kwargs.get(blocks_name, None)
+        if blocks is not None and isinstance(blocks, Sequence) and (not 
isinstance(blocks, str)):
+            dict_blocks = [to_dict(b) for b in blocks]
+            kwargs.update({blocks_name: dict_blocks})
 
     attachments = kwargs.get(&#34;attachments&#34;, None)
     if attachments is not None and isinstance(attachments, Sequence) and (not 
isinstance(attachments, str)):
@@ -282,14 +283,24 @@
     if skip_deprecation:
         return
 
-    # At this point, at a minimum, text argument is missing. Warn the user 
about this.
-    message = (
+    # if text argument is missing, Warn the user about this.
+    # However, do not warn if a fallback field exists for all attachments, 
since this can be substituted.
+    missing_text_message = (
         f&#34;The top-level `text` argument is missing in the request payload 
for a {endpoint} call - &#34;
         f&#34;It&#39;s a best practice to always provide a `text` argument 
when posting a message. &#34;
         f&#34;The `text` argument is used in places where content cannot be 
rendered such as: &#34;
         &#34;system push notifications, assistive technology such as screen 
readers, etc.&#34;
     )
-    warnings.warn(message, UserWarning)
+
+    # https://api.slack.com/reference/messaging/attachments
+    # Check if the fallback field exists for all the attachments
+    # Not all attachments have a fallback property; warn about this too!
+    missing_fallback_message = (
+        f&#34;Additionally, the attachment-level `fallback` argument is 
missing in the request payload for a {endpoint} call&#34;
+        &#34; - To avoid this warning, it is recommended to always provide a 
top-level `text` argument when posting a&#34;
+        &#34; message. Alternatively you can provide an attachment-level 
`fallback` argument, though this is now considered&#34;
+        &#34; a legacy field (see 
https://api.slack.com/reference/messaging/attachments#legacy_fields for more 
details).&#34;
+    )
 
     # Additionally, specifically for attachments, there is a legacy field 
available at the attachment level called `fallback`
     # Even with a missing text, one can provide a `fallback` per attachment.
@@ -297,23 +308,14 @@
     attachments = kwargs.get(&#34;attachments&#34;)
     # Note that this method does not verify attachments
     # if the value is already serialized as a single str value.
-    if (
-        attachments is not None
-        and isinstance(attachments, list)
-        and not all(
+    if attachments is not None and isinstance(attachments, list):
+        if not all(
             [isinstance(attachment, dict) and 
len(attachment.get(&#34;fallback&#34;, &#34;&#34;).strip()) &gt; 0 for 
attachment in attachments]
-        )
-    ):
-        # https://api.slack.com/reference/messaging/attachments
-        # Check if the fallback field exists for all the attachments
-        # Not all attachments have a fallback property; warn about this too!
-        message = (
-            f&#34;Additionally, the attachment-level `fallback` argument is 
missing in the request payload for a {endpoint} call&#34;
-            f&#34; - To avoid this warning, it is recommended to always 
provide a top-level `text` argument when posting a&#34;
-            f&#34; message. Alternatively you can provide an attachment-level 
`fallback` argument, though this is now considered&#34;
-            f&#34; a legacy field (see 
https://api.slack.com/reference/messaging/attachments#legacy_fields for more 
details).&#34;
-        )
-        warnings.warn(message, UserWarning)
+        ):
+            warnings.warn(missing_text_message, UserWarning)
+            warnings.warn(missing_fallback_message, UserWarning)
+    else:
+        warnings.warn(missing_text_message, UserWarning)
 
 
 def _build_unexpected_body_error_message(body: str) -&gt; str:
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/python-slack-sdk-3.19.3/docs/api-docs/slack_sdk/web/legacy_client.html 
new/python-slack-sdk-3.19.5/docs/api-docs/slack_sdk/web/legacy_client.html
--- old/python-slack-sdk-3.19.3/docs/api-docs/slack_sdk/web/legacy_client.html  
2022-11-08 05:32:09.000000000 +0100
+++ new/python-slack-sdk-3.19.5/docs/api-docs/slack_sdk/web/legacy_client.html  
2022-12-02 03:26:05.000000000 +0100
@@ -2161,7 +2161,7 @@
         ts: Optional[str] = None,
         source: Optional[str] = None,
         unfurl_id: Optional[str] = None,
-        unfurls: Dict[str, Dict],
+        unfurls: Optional[Dict[str, Dict]] = None,  # or user_auth_*
         user_auth_blocks: Optional[Union[str, Sequence[Union[Dict, Block]]]] = 
None,
         user_auth_message: Optional[str] = None,
         user_auth_required: Optional[bool] = None,
@@ -2184,6 +2184,7 @@
                 &#34;user_auth_url&#34;: user_auth_url,
             }
         )
+        _parse_web_class_objects(kwargs)  # for user_auth_blocks
         kwargs = _remove_none_values(kwargs)
         # NOTE: intentionally using json over params for API methods using 
blocks/attachments
         return self.api_call(&#34;chat.unfurl&#34;, json=kwargs)
@@ -6801,7 +6802,7 @@
         ts: Optional[str] = None,
         source: Optional[str] = None,
         unfurl_id: Optional[str] = None,
-        unfurls: Dict[str, Dict],
+        unfurls: Optional[Dict[str, Dict]] = None,  # or user_auth_*
         user_auth_blocks: Optional[Union[str, Sequence[Union[Dict, Block]]]] = 
None,
         user_auth_message: Optional[str] = None,
         user_auth_required: Optional[bool] = None,
@@ -6824,6 +6825,7 @@
                 &#34;user_auth_url&#34;: user_auth_url,
             }
         )
+        _parse_web_class_objects(kwargs)  # for user_auth_blocks
         kwargs = _remove_none_values(kwargs)
         # NOTE: intentionally using json over params for API methods using 
blocks/attachments
         return self.api_call(&#34;chat.unfurl&#34;, json=kwargs)
@@ -12603,7 +12605,7 @@
 </details>
 </dd>
 <dt id="slack_sdk.web.legacy_client.LegacyWebClient.chat_unfurl"><code 
class="name flex">
-<span>def <span class="ident">chat_unfurl</span></span>(<span>self, *, 
channel: Optional[str] = None, ts: Optional[str] = None, source: 
Optional[str] = None, unfurl_id: Optional[str] = None, unfurls: 
Dict[str, Dict], user_auth_blocks: Union[str, Sequence[Union[Dict, <a 
title="slack_sdk.models.blocks.blocks.Block" 
href="../models/blocks/blocks.html#slack_sdk.models.blocks.blocks.Block">Block</a>]],Â
 ForwardRef(None)] = None, user_auth_message: Optional[str] = None, 
user_auth_required: Optional[bool] = None, user_auth_url: Optional[str] = 
None, **kwargs) ‑> Union[_asyncio.Future, <a 
title="slack_sdk.web.legacy_slack_response.LegacySlackResponse" 
href="legacy_slack_response.html#slack_sdk.web.legacy_slack_response.LegacySlackResponse">LegacySlackResponse</a>]</span>
+<span>def <span class="ident">chat_unfurl</span></span>(<span>self, *, 
channel: Optional[str] = None, ts: Optional[str] = None, source: 
Optional[str] = None, unfurl_id: Optional[str] = None, unfurls: 
Optional[Dict[str, Dict]] = None, user_auth_blocks: Union[str, 
Sequence[Union[Dict, <a title="slack_sdk.models.blocks.blocks.Block" 
href="../models/blocks/blocks.html#slack_sdk.models.blocks.blocks.Block">Block</a>]],Â
 ForwardRef(None)] = None, user_auth_message: Optional[str] = None, 
user_auth_required: Optional[bool] = None, user_auth_url: Optional[str] = 
None, **kwargs) ‑> Union[_asyncio.Future, <a 
title="slack_sdk.web.legacy_slack_response.LegacySlackResponse" 
href="legacy_slack_response.html#slack_sdk.web.legacy_slack_response.LegacySlackResponse">LegacySlackResponse</a>]</span>
 </code></dt>
 <dd>
 <div class="desc"><p>Provide custom unfurl behavior for user-posted URLs.
@@ -12619,7 +12621,7 @@
     ts: Optional[str] = None,
     source: Optional[str] = None,
     unfurl_id: Optional[str] = None,
-    unfurls: Dict[str, Dict],
+    unfurls: Optional[Dict[str, Dict]] = None,  # or user_auth_*
     user_auth_blocks: Optional[Union[str, Sequence[Union[Dict, Block]]]] = 
None,
     user_auth_message: Optional[str] = None,
     user_auth_required: Optional[bool] = None,
@@ -12642,6 +12644,7 @@
             &#34;user_auth_url&#34;: user_auth_url,
         }
     )
+    _parse_web_class_objects(kwargs)  # for user_auth_blocks
     kwargs = _remove_none_values(kwargs)
     # NOTE: intentionally using json over params for API methods using 
blocks/attachments
     return self.api_call(&#34;chat.unfurl&#34;, json=kwargs)</code></pre>
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/python-slack-sdk-3.19.3/integration_tests/web/test_issue_1305.py 
new/python-slack-sdk-3.19.5/integration_tests/web/test_issue_1305.py
--- old/python-slack-sdk-3.19.3/integration_tests/web/test_issue_1305.py        
1970-01-01 01:00:00.000000000 +0100
+++ new/python-slack-sdk-3.19.5/integration_tests/web/test_issue_1305.py        
2022-12-02 03:26:05.000000000 +0100
@@ -0,0 +1,49 @@
+import asyncio
+import os
+import time
+import unittest
+
+from integration_tests.env_variable_names import 
SLACK_SDK_TEST_GRID_ORG_ADMIN_USER_TOKEN
+from integration_tests.helpers import async_test
+from slack_sdk.web import WebClient
+from slack_sdk.web.async_client import AsyncWebClient
+
+
+class TestWebClient(unittest.TestCase):
+    """Runs integration tests with real Slack API
+
+    https://github.com/slackapi/python-slack-sdk/issues/1305
+    """
+
+    def setUp(self):
+        self.org_admin_token = 
os.environ[SLACK_SDK_TEST_GRID_ORG_ADMIN_USER_TOKEN]
+        self.sync_client: WebClient = WebClient(token=self.org_admin_token)
+        self.async_client: AsyncWebClient = 
AsyncWebClient(token=self.org_admin_token)
+
+    def tearDown(self):
+        pass
+
+    def test_sync(self):
+        client = self.sync_client
+        count = 0
+
+        for page in client.admin_conversations_search(limit=1):
+            count += len(page["conversations"])
+            if count > 1:
+                break
+            time.sleep(1)
+
+        self.assertGreater(count, 0)
+
+    @async_test
+    async def test_async(self):
+        client = self.async_client
+        count = 0
+
+        async for page in await client.admin_conversations_search(limit=1):
+            count += len(page["conversations"])
+            if count > 1:
+                break
+            await asyncio.sleep(1)
+
+        self.assertGreater(count, 0)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/python-slack-sdk-3.19.3/slack_sdk/audit_logs/v1/logs.py 
new/python-slack-sdk-3.19.5/slack_sdk/audit_logs/v1/logs.py
--- old/python-slack-sdk-3.19.3/slack_sdk/audit_logs/v1/logs.py 2022-11-08 
05:32:09.000000000 +0100
+++ new/python-slack-sdk-3.19.5/slack_sdk/audit_logs/v1/logs.py 2022-12-02 
03:26:05.000000000 +0100
@@ -163,6 +163,19 @@
         self.unknown_fields = kwargs
 
 
+class SharedWith:
+    channel_id: Optional[str]
+
+    def __init__(
+        self,
+        *,
+        channel_id: Optional[str] = None,
+        **kwargs,
+    ) -> None:
+        self.channel_id = channel_id
+        self.unknown_fields = kwargs
+
+
 class Details:
     name: Optional[str]
     new_value: Optional[Union[str, List[str], Dict[str, Any]]]
@@ -234,6 +247,11 @@
     enable_at_here: Optional[FeatureEnablement]
     enable_at_channel: Optional[FeatureEnablement]
     can_huddle: Optional[FeatureEnablement]
+    url_private: Optional[str]
+    shared_with: Optional[SharedWith]
+    initiated_by: Optional[str]
+    source_team: Optional[str]
+    destination_team: Optional[str]
 
     def __init__(
         self,
@@ -307,6 +325,11 @@
         enable_at_here: Optional[Union[Dict[str, Any], FeatureEnablement]] = 
None,
         enable_at_channel: Optional[Union[Dict[str, Any], FeatureEnablement]] 
= None,
         can_huddle: Optional[Union[Dict[str, Any], FeatureEnablement]] = None,
+        url_private: Optional[str] = None,
+        shared_with: Optional[Union[Dict[str, Any], SharedWith]] = None,
+        initiated_by: Optional[str] = None,
+        source_team: Optional[str] = None,
+        destination_team: Optional[str] = None,
         **kwargs,
     ) -> None:
         self.name = name
@@ -405,6 +428,13 @@
             if can_huddle is None or isinstance(can_huddle, FeatureEnablement)
             else FeatureEnablement(**can_huddle)
         )
+        self.url_private = url_private
+        self.shared_with = (
+            shared_with if shared_with is None or isinstance(shared_with, 
SharedWith) else SharedWith(**shared_with)
+        )
+        self.initiated_by = initiated_by
+        self.source_team = source_team
+        self.destination_team = destination_team
 
 
 class Channel:
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/python-slack-sdk-3.19.3/slack_sdk/socket_mode/aiohttp/__init__.py 
new/python-slack-sdk-3.19.5/slack_sdk/socket_mode/aiohttp/__init__.py
--- old/python-slack-sdk-3.19.3/slack_sdk/socket_mode/aiohttp/__init__.py       
2022-11-08 05:32:09.000000000 +0100
+++ new/python-slack-sdk-3.19.5/slack_sdk/socket_mode/aiohttp/__init__.py       
2022-12-02 03:26:05.000000000 +0100
@@ -353,6 +353,7 @@
             autoping=False,
             heartbeat=self.ping_interval,
             proxy=self.proxy,
+            ssl=self.web_client.ssl,
         )
         session_id: str = await self.session_id()
         self.auto_reconnect_enabled = self.default_auto_reconnect_enabled
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/python-slack-sdk-3.19.3/slack_sdk/version.py 
new/python-slack-sdk-3.19.5/slack_sdk/version.py
--- old/python-slack-sdk-3.19.3/slack_sdk/version.py    2022-11-08 
05:32:09.000000000 +0100
+++ new/python-slack-sdk-3.19.5/slack_sdk/version.py    2022-12-02 
03:26:05.000000000 +0100
@@ -1,2 +1,2 @@
 """Check the latest version at https://pypi.org/project/slack-sdk/""";
-__version__ = "3.19.3"
+__version__ = "3.19.5"
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/python-slack-sdk-3.19.3/slack_sdk/web/async_client.py 
new/python-slack-sdk-3.19.5/slack_sdk/web/async_client.py
--- old/python-slack-sdk-3.19.3/slack_sdk/web/async_client.py   2022-11-08 
05:32:09.000000000 +0100
+++ new/python-slack-sdk-3.19.5/slack_sdk/web/async_client.py   2022-12-02 
03:26:05.000000000 +0100
@@ -2131,7 +2131,7 @@
         ts: Optional[str] = None,
         source: Optional[str] = None,
         unfurl_id: Optional[str] = None,
-        unfurls: Dict[str, Dict],
+        unfurls: Optional[Dict[str, Dict]] = None,  # or user_auth_*
         user_auth_blocks: Optional[Union[str, Sequence[Union[Dict, Block]]]] = 
None,
         user_auth_message: Optional[str] = None,
         user_auth_required: Optional[bool] = None,
@@ -2154,6 +2154,7 @@
                 "user_auth_url": user_auth_url,
             }
         )
+        _parse_web_class_objects(kwargs)  # for user_auth_blocks
         kwargs = _remove_none_values(kwargs)
         # NOTE: intentionally using json over params for API methods using 
blocks/attachments
         return await self.api_call("chat.unfurl", json=kwargs)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/python-slack-sdk-3.19.3/slack_sdk/web/async_slack_response.py 
new/python-slack-sdk-3.19.5/slack_sdk/web/async_slack_response.py
--- old/python-slack-sdk-3.19.3/slack_sdk/web/async_slack_response.py   
2022-11-08 05:32:09.000000000 +0100
+++ new/python-slack-sdk-3.19.5/slack_sdk/web/async_slack_response.py   
2022-12-02 03:26:05.000000000 +0100
@@ -145,7 +145,8 @@
             params = self.req_args.get("params", {})
             if params is None:
                 params = {}
-            params.update({"cursor": 
self.data["response_metadata"]["next_cursor"]})
+            next_cursor = self.data.get("response_metadata", 
{}).get("next_cursor") or self.data.get("next_cursor")
+            params.update({"cursor": next_cursor})
             self.req_args.update({"params": params})
 
             response = await self._client._request(  # skipcq: PYL-W0212
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/python-slack-sdk-3.19.3/slack_sdk/web/client.py 
new/python-slack-sdk-3.19.5/slack_sdk/web/client.py
--- old/python-slack-sdk-3.19.3/slack_sdk/web/client.py 2022-11-08 
05:32:09.000000000 +0100
+++ new/python-slack-sdk-3.19.5/slack_sdk/web/client.py 2022-12-02 
03:26:05.000000000 +0100
@@ -2122,7 +2122,7 @@
         ts: Optional[str] = None,
         source: Optional[str] = None,
         unfurl_id: Optional[str] = None,
-        unfurls: Dict[str, Dict],
+        unfurls: Optional[Dict[str, Dict]] = None,  # or user_auth_*
         user_auth_blocks: Optional[Union[str, Sequence[Union[Dict, Block]]]] = 
None,
         user_auth_message: Optional[str] = None,
         user_auth_required: Optional[bool] = None,
@@ -2145,6 +2145,7 @@
                 "user_auth_url": user_auth_url,
             }
         )
+        _parse_web_class_objects(kwargs)  # for user_auth_blocks
         kwargs = _remove_none_values(kwargs)
         # NOTE: intentionally using json over params for API methods using 
blocks/attachments
         return self.api_call("chat.unfurl", json=kwargs)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/python-slack-sdk-3.19.3/slack_sdk/web/internal_utils.py 
new/python-slack-sdk-3.19.5/slack_sdk/web/internal_utils.py
--- old/python-slack-sdk-3.19.3/slack_sdk/web/internal_utils.py 2022-11-08 
05:32:09.000000000 +0100
+++ new/python-slack-sdk-3.19.5/slack_sdk/web/internal_utils.py 2022-12-02 
03:26:05.000000000 +0100
@@ -194,10 +194,11 @@
             return obj.to_dict()
         return obj
 
-    blocks = kwargs.get("blocks", None)
-    if blocks is not None and isinstance(blocks, Sequence) and (not 
isinstance(blocks, str)):
-        dict_blocks = [to_dict(b) for b in blocks]
-        kwargs.update({"blocks": dict_blocks})
+    for blocks_name in ["blocks", "user_auth_blocks"]:
+        blocks = kwargs.get(blocks_name, None)
+        if blocks is not None and isinstance(blocks, Sequence) and (not 
isinstance(blocks, str)):
+            dict_blocks = [to_dict(b) for b in blocks]
+            kwargs.update({blocks_name: dict_blocks})
 
     attachments = kwargs.get("attachments", None)
     if attachments is not None and isinstance(attachments, Sequence) and (not 
isinstance(attachments, str)):
@@ -254,14 +255,24 @@
     if skip_deprecation:
         return
 
-    # At this point, at a minimum, text argument is missing. Warn the user 
about this.
-    message = (
+    # if text argument is missing, Warn the user about this.
+    # However, do not warn if a fallback field exists for all attachments, 
since this can be substituted.
+    missing_text_message = (
         f"The top-level `text` argument is missing in the request payload for 
a {endpoint} call - "
         f"It's a best practice to always provide a `text` argument when 
posting a message. "
         f"The `text` argument is used in places where content cannot be 
rendered such as: "
         "system push notifications, assistive technology such as screen 
readers, etc."
     )
-    warnings.warn(message, UserWarning)
+
+    # https://api.slack.com/reference/messaging/attachments
+    # Check if the fallback field exists for all the attachments
+    # Not all attachments have a fallback property; warn about this too!
+    missing_fallback_message = (
+        f"Additionally, the attachment-level `fallback` argument is missing in 
the request payload for a {endpoint} call"
+        " - To avoid this warning, it is recommended to always provide a 
top-level `text` argument when posting a"
+        " message. Alternatively you can provide an attachment-level 
`fallback` argument, though this is now considered"
+        " a legacy field (see 
https://api.slack.com/reference/messaging/attachments#legacy_fields for more 
details)."
+    )
 
     # Additionally, specifically for attachments, there is a legacy field 
available at the attachment level called `fallback`
     # Even with a missing text, one can provide a `fallback` per attachment.
@@ -269,23 +280,14 @@
     attachments = kwargs.get("attachments")
     # Note that this method does not verify attachments
     # if the value is already serialized as a single str value.
-    if (
-        attachments is not None
-        and isinstance(attachments, list)
-        and not all(
+    if attachments is not None and isinstance(attachments, list):
+        if not all(
             [isinstance(attachment, dict) and len(attachment.get("fallback", 
"").strip()) > 0 for attachment in attachments]
-        )
-    ):
-        # https://api.slack.com/reference/messaging/attachments
-        # Check if the fallback field exists for all the attachments
-        # Not all attachments have a fallback property; warn about this too!
-        message = (
-            f"Additionally, the attachment-level `fallback` argument is 
missing in the request payload for a {endpoint} call"
-            f" - To avoid this warning, it is recommended to always provide a 
top-level `text` argument when posting a"
-            f" message. Alternatively you can provide an attachment-level 
`fallback` argument, though this is now considered"
-            f" a legacy field (see 
https://api.slack.com/reference/messaging/attachments#legacy_fields for more 
details)."
-        )
-        warnings.warn(message, UserWarning)
+        ):
+            warnings.warn(missing_text_message, UserWarning)
+            warnings.warn(missing_fallback_message, UserWarning)
+    else:
+        warnings.warn(missing_text_message, UserWarning)
 
 
 def _build_unexpected_body_error_message(body: str) -> str:
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/python-slack-sdk-3.19.3/slack_sdk/web/legacy_client.py 
new/python-slack-sdk-3.19.5/slack_sdk/web/legacy_client.py
--- old/python-slack-sdk-3.19.3/slack_sdk/web/legacy_client.py  2022-11-08 
05:32:09.000000000 +0100
+++ new/python-slack-sdk-3.19.5/slack_sdk/web/legacy_client.py  2022-12-02 
03:26:05.000000000 +0100
@@ -2133,7 +2133,7 @@
         ts: Optional[str] = None,
         source: Optional[str] = None,
         unfurl_id: Optional[str] = None,
-        unfurls: Dict[str, Dict],
+        unfurls: Optional[Dict[str, Dict]] = None,  # or user_auth_*
         user_auth_blocks: Optional[Union[str, Sequence[Union[Dict, Block]]]] = 
None,
         user_auth_message: Optional[str] = None,
         user_auth_required: Optional[bool] = None,
@@ -2156,6 +2156,7 @@
                 "user_auth_url": user_auth_url,
             }
         )
+        _parse_web_class_objects(kwargs)  # for user_auth_blocks
         kwargs = _remove_none_values(kwargs)
         # NOTE: intentionally using json over params for API methods using 
blocks/attachments
         return self.api_call("chat.unfurl", json=kwargs)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/python-slack-sdk-3.19.3/tests/slack_sdk/web/test_internal_utils.py 
new/python-slack-sdk-3.19.5/tests/slack_sdk/web/test_internal_utils.py
--- old/python-slack-sdk-3.19.3/tests/slack_sdk/web/test_internal_utils.py      
2022-11-08 05:32:09.000000000 +0100
+++ new/python-slack-sdk-3.19.5/tests/slack_sdk/web/test_internal_utils.py      
2022-12-02 03:26:05.000000000 +0100
@@ -5,7 +5,7 @@
 import pytest
 
 from slack_sdk.models.attachments import Attachment
-from slack_sdk.models.blocks import Block
+from slack_sdk.models.blocks import Block, DividerBlock
 from slack_sdk.web.internal_utils import _build_unexpected_body_error_message, 
_parse_web_class_objects
 
 
@@ -62,3 +62,13 @@
         _parse_web_class_objects(kwargs)
         assert isinstance(kwargs["attachments"], str)
         assert input == kwargs["attachments"]
+
+    def test_can_parse_user_auth_blocks(self):
+        kwargs = {
+            "channel": "C12345",
+            "ts": "1111.2222",
+            "unfurls": {},
+            "user_auth_blocks": [DividerBlock(), DividerBlock()],
+        }
+        _parse_web_class_objects(kwargs)
+        assert isinstance(kwargs["user_auth_blocks"][0], dict)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/python-slack-sdk-3.19.3/tests/slack_sdk/web/test_web_client.py 
new/python-slack-sdk-3.19.5/tests/slack_sdk/web/test_web_client.py
--- old/python-slack-sdk-3.19.3/tests/slack_sdk/web/test_web_client.py  
2022-11-08 05:32:09.000000000 +0100
+++ new/python-slack-sdk-3.19.5/tests/slack_sdk/web/test_web_client.py  
2022-12-02 03:26:05.000000000 +0100
@@ -5,6 +5,7 @@
 
 import slack_sdk.errors as err
 from slack_sdk import WebClient
+from slack_sdk.models.blocks import DividerBlock
 from slack_sdk.models.metadata import Metadata
 from tests.slack_sdk.web.mock_web_api_server import (
     setup_mock_web_api_server,
@@ -218,3 +219,13 @@
             ),
         )
         self.assertIsNone(scheduled.get("error"))
+
+    def test_user_auth_blocks(self):
+        client = self.client
+        new_message = client.chat_unfurl(
+            channel="C12345",
+            ts="1111.2222",
+            unfurls={},
+            user_auth_blocks=[DividerBlock(), DividerBlock()],
+        )
+        self.assertIsNone(new_message.get("error"))
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/python-slack-sdk-3.19.3/tests/slack_sdk_async/web/test_async_web_client.py 
new/python-slack-sdk-3.19.5/tests/slack_sdk_async/web/test_async_web_client.py
--- 
old/python-slack-sdk-3.19.3/tests/slack_sdk_async/web/test_async_web_client.py  
    2022-11-08 05:32:09.000000000 +0100
+++ 
new/python-slack-sdk-3.19.5/tests/slack_sdk_async/web/test_async_web_client.py  
    2022-12-02 03:26:05.000000000 +0100
@@ -1,9 +1,8 @@
 import re
 import unittest
 
-import aiohttp
-
 import slack_sdk.errors as err
+from slack_sdk.models.blocks import DividerBlock
 from slack_sdk.web.async_client import AsyncWebClient
 from tests.slack_sdk_async.helpers import async_test
 from tests.slack_sdk.web.mock_web_api_server import (
@@ -153,3 +152,15 @@
         client = AsyncWebClient(base_url="http://localhost:8888";, 
team_id="T_DEFAULT")
         resp = await client.users_list(token="xoxb-users_list_pagination")
         self.assertIsNone(resp["error"])
+
+    @async_test
+    async def test_user_auth_blocks(self):
+        self.client.token = "xoxb-api_test"
+        client = self.client
+        new_message = await client.chat_unfurl(
+            channel="C12345",
+            ts="1111.2222",
+            unfurls={},
+            user_auth_blocks=[DividerBlock(), DividerBlock()],
+        )
+        self.assertIsNone(new_message.get("error"))

Reply via email to