Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Contribute to GitLab
Sign in
Toggle navigation
M
MBetterc
Project
Project
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
Mbetter
MBetterc
Commits
91f5dece
Commit
91f5dece
authored
Sep 08, 2025
by
Stefy Lanza (nextime / spora )
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Updated player.py and ssl_utils.py
parent
2a789078
Changes
2
Show whitespace changes
Inline
Side-by-side
Showing
2 changed files
with
106 additions
and
75 deletions
+106
-75
player.py
mbetterclient/qt_player/player.py
+105
-74
ssl_utils.py
mbetterclient/utils/ssl_utils.py
+1
-1
No files found.
mbetterclient/qt_player/player.py
View file @
91f5dece
...
...
@@ -121,7 +121,8 @@ class OverlayWebChannel(QObject):
return
# Debug what data is being sent to JavaScript
logger
.
debug
(
f
"OverlayWebChannel sending to JavaScript: {cleaned_data}"
)
data_keys
=
list
(
cleaned_data
.
keys
())
if
isinstance
(
cleaned_data
,
dict
)
else
[]
logger
.
debug
(
f
"OverlayWebChannel sending to JavaScript: {len(cleaned_data)} items with keys: {data_keys}"
)
logger
.
debug
(
f
"Data type: {type(cleaned_data)}, Data is dict: {isinstance(cleaned_data, dict)}"
)
with
QMutexLocker
(
self
.
mutex
):
...
...
@@ -129,7 +130,8 @@ class OverlayWebChannel(QObject):
# Add additional validation just before emit
if
cleaned_data
and
isinstance
(
cleaned_data
,
dict
)
and
any
(
v
is
not
None
for
v
in
cleaned_data
.
values
()):
self
.
dataUpdated
.
emit
(
cleaned_data
)
logger
.
debug
(
f
"Signal emitted successfully with data: {cleaned_data}"
)
data_keys
=
list
(
cleaned_data
.
keys
())
if
isinstance
(
cleaned_data
,
dict
)
else
[]
logger
.
debug
(
f
"Signal emitted successfully with {len(cleaned_data)} data items: {data_keys}"
)
else
:
logger
.
warning
(
f
"Prevented emission of invalid data: {cleaned_data}"
)
...
...
@@ -323,9 +325,9 @@ class OverlayWebView(QWebEngineView):
def
load_template
(
self
,
template_name
:
str
):
"""Load a specific template file, prioritizing uploaded templates"""
try
:
logger
.
error
(
f
"GREEN SCREEN DEBUG: Starting template load - {template_name}"
)
logger
.
error
(
f
"GREEN SCREEN DEBUG: Current page URL before load: {self.url().toString()}"
)
logger
.
error
(
f
"GREEN SCREEN DEBUG: WebEngine view visible: {self.isVisible()}"
)
logger
.
debug
(
f
"GREEN SCREEN DEBUG: Starting template load - {template_name}"
)
logger
.
debug
(
f
"GREEN SCREEN DEBUG: Current page URL before load: {self.url().toString()}"
)
logger
.
debug
(
f
"GREEN SCREEN DEBUG: WebEngine view visible: {self.isVisible()}"
)
# CRITICAL FIX: Store visibility state before template load
was_visible
=
self
.
isVisible
()
...
...
@@ -362,13 +364,13 @@ class OverlayWebView(QWebEngineView):
return
if
template_path
and
template_path
.
exists
():
logger
.
error
(
f
"GREEN SCREEN DEBUG: About to load template file: {template_path}"
)
logger
.
error
(
f
"GREEN SCREEN DEBUG: Template source: {template_source}"
)
logger
.
debug
(
f
"GREEN SCREEN DEBUG: About to load template file: {template_path}"
)
logger
.
debug
(
f
"GREEN SCREEN DEBUG: Template source: {template_source}"
)
# Check WebEngine state before load
page
=
self
.
page
()
if
page
:
logger
.
error
(
f
"GREEN SCREEN DEBUG: Page background color before load: {page.backgroundColor()}"
)
logger
.
debug
(
f
"GREEN SCREEN DEBUG: Page background color before load: {page.backgroundColor()}"
)
self
.
load
(
QUrl
.
fromLocalFile
(
str
(
template_path
)))
self
.
current_template
=
template_name
...
...
@@ -383,7 +385,7 @@ class OverlayWebView(QWebEngineView):
from
PyQt6.QtCore
import
QTimer
QTimer
.
singleShot
(
100
,
lambda
:
self
.
_ensure_overlay_visibility_post_load
(
was_visible
))
logger
.
error
(
f
"GREEN SCREEN DEBUG: Template load initiated - {template_path}"
)
logger
.
debug
(
f
"GREEN SCREEN DEBUG: Template load initiated - {template_path}"
)
logger
.
info
(
f
"Loaded template: {template_path} (source: {template_source})"
)
else
:
logger
.
error
(
f
"No template found: {template_name}"
)
...
...
@@ -391,7 +393,7 @@ class OverlayWebView(QWebEngineView):
self
.
_load_fallback_overlay
()
except
Exception
as
e
:
logger
.
error
(
f
"GREEN SCREEN DEBUG: Template load failed: {e}"
)
logger
.
debug
(
f
"GREEN SCREEN DEBUG: Template load failed: {e}"
)
logger
.
error
(
f
"Failed to load template {template_name}: {e}"
)
self
.
_load_fallback_overlay
()
...
...
@@ -444,10 +446,10 @@ class OverlayWebView(QWebEngineView):
def
reload_current_template
(
self
):
"""Reload the current template"""
logger
.
error
(
f
"GREEN SCREEN DEBUG: Reloading current template - {self.current_template}"
)
logger
.
error
(
f
"GREEN SCREEN DEBUG: WebEngine state before reload - visible: {self.isVisible()}"
)
logger
.
debug
(
f
"GREEN SCREEN DEBUG: Reloading current template - {self.current_template}"
)
logger
.
debug
(
f
"GREEN SCREEN DEBUG: WebEngine state before reload - visible: {self.isVisible()}"
)
self
.
load_template
(
self
.
current_template
)
logger
.
error
(
f
"GREEN SCREEN DEBUG: Current template reload initiated"
)
logger
.
debug
(
f
"GREEN SCREEN DEBUG: Current template reload initiated"
)
def
get_available_templates
(
self
)
->
List
[
str
]:
"""Get list of available template files from both directories"""
...
...
@@ -957,6 +959,29 @@ class PlayerWindow(QMainWindow):
logger
.
info
(
"PlayerWindow initialized"
)
def
_get_web_server_base_url
(
self
)
->
str
:
"""Get the web server base URL for API requests"""
try
:
# Default web server configuration - matches main.py defaults
host
=
"127.0.0.1"
# Default host
port
=
5001
# Default port
# Try to get web server settings if available
if
hasattr
(
self
,
'_message_bus'
)
and
self
.
_message_bus
:
# Check if we can get web server info from message bus or settings
# For now, use defaults since we don't have direct access to web settings
pass
# Construct base URL
base_url
=
f
"http://{host}:{port}"
logger
.
debug
(
f
"Web server base URL determined as: {base_url}"
)
return
base_url
except
Exception
as
e
:
logger
.
error
(
f
"Failed to determine web server base URL: {e}"
)
# Return default fallback
return
"http://127.0.0.1:5001"
def
setup_ui
(
self
):
"""Setup enhanced window UI"""
self
.
setWindowTitle
(
"MbetterClient - PyQt6 Video Player"
)
...
...
@@ -1077,19 +1102,19 @@ class PlayerWindow(QMainWindow):
# Check video state during overlay positioning
if
hasattr
(
self
,
'media_player'
):
video_state
=
self
.
media_player
.
playbackState
()
logger
.
error
(
f
"GREEN SCREEN DEBUG: Video state during overlay sync: {video_state}"
)
logger
.
debug
(
f
"GREEN SCREEN DEBUG: Video state during overlay sync: {video_state}"
)
# Get main window geometry
main_geo
=
self
.
geometry
()
logger
.
debug
(
f
"Main window geometry: {main_geo}"
)
logger
.
error
(
f
"GREEN SCREEN DEBUG: Syncing overlay position - main geometry: {main_geo}"
)
logger
.
debug
(
f
"GREEN SCREEN DEBUG: Syncing overlay position - main geometry: {main_geo}"
)
# CRITICAL FIX: Store overlay visibility state before sync
overlay_was_visible
=
self
.
overlay_window
.
isVisible
()
# Check overlay window state before positioning
logger
.
error
(
f
"GREEN SCREEN DEBUG: Overlay window before sync - visible: {overlay_was_visible}"
)
logger
.
error
(
f
"GREEN SCREEN DEBUG: Overlay window before sync - geometry: {self.overlay_window.geometry()}"
)
logger
.
debug
(
f
"GREEN SCREEN DEBUG: Overlay window before sync - visible: {overlay_was_visible}"
)
logger
.
debug
(
f
"GREEN SCREEN DEBUG: Overlay window before sync - geometry: {self.overlay_window.geometry()}"
)
# Position overlay window exactly over main window
self
.
overlay_window
.
setGeometry
(
main_geo
)
...
...
@@ -1106,10 +1131,10 @@ class PlayerWindow(QMainWindow):
logger
.
error
(
f
"GREEN SCREEN FIX: WebEngine overlay visibility recovered during sync"
)
logger
.
debug
(
f
"Overlay window positioned at: {self.overlay_window.geometry()}"
)
logger
.
error
(
f
"GREEN SCREEN DEBUG: Overlay window after sync - geometry: {self.overlay_window.geometry()}"
)
logger
.
debug
(
f
"GREEN SCREEN DEBUG: Overlay window after sync - geometry: {self.overlay_window.geometry()}"
)
except
Exception
as
e
:
logger
.
error
(
f
"GREEN SCREEN DEBUG: Overlay sync failed: {e}"
)
logger
.
debug
(
f
"GREEN SCREEN DEBUG: Overlay sync failed: {e}"
)
logger
.
error
(
f
"Failed to sync overlay position: {e}"
)
def
resizeEvent
(
self
,
event
):
...
...
@@ -1673,7 +1698,8 @@ class PlayerWindow(QMainWindow):
# Unknown property, pass through if not null
cleaned_data
[
key
]
=
value
logger
.
debug
(
f
"Cleaned overlay data: {cleaned_data}"
)
data_keys
=
list
(
cleaned_data
.
keys
())
if
isinstance
(
cleaned_data
,
dict
)
else
[]
logger
.
debug
(
f
"Cleaned overlay data: {len(cleaned_data)} items with keys: {data_keys}"
)
return
cleaned_data
def
_update_overlay_safe
(
self
,
overlay_view
,
data
):
...
...
@@ -1682,8 +1708,8 @@ class PlayerWindow(QMainWindow):
# Check video state during overlay update
if
hasattr
(
self
,
'media_player'
):
video_state
=
self
.
media_player
.
playbackState
()
logger
.
error
(
f
"GREEN SCREEN DEBUG: Video state during overlay update: {video_state}"
)
logger
.
error
(
f
"GREEN SCREEN DEBUG: Video position during overlay update: {self.media_player.position()}"
)
logger
.
debug
(
f
"GREEN SCREEN DEBUG: Video state during overlay update: {video_state}"
)
logger
.
debug
(
f
"GREEN SCREEN DEBUG: Video position during overlay update: {self.media_player.position()}"
)
# Clean data before sending to prevent null property issues
cleaned_data
=
self
.
_clean_overlay_data
(
data
)
...
...
@@ -1691,20 +1717,21 @@ class PlayerWindow(QMainWindow):
logger
.
debug
(
"No valid data to send to overlay after cleaning"
)
return
False
logger
.
error
(
f
"GREEN SCREEN DEBUG: About to update overlay with data: {cleaned_data}"
)
data_keys
=
list
(
cleaned_data
.
keys
())
if
isinstance
(
cleaned_data
,
dict
)
else
[]
logger
.
debug
(
f
"GREEN SCREEN DEBUG: About to update overlay with {len(cleaned_data)} data items: {data_keys}"
)
if
self
.
_is_native_overlay
(
overlay_view
):
# Native overlay - always ready, update immediately
logger
.
error
(
f
"GREEN SCREEN DEBUG: Updating native overlay"
)
logger
.
debug
(
f
"GREEN SCREEN DEBUG: Updating native overlay"
)
overlay_view
.
update_overlay_data
(
cleaned_data
)
logger
.
debug
(
"Native overlay updated successfully"
)
logger
.
error
(
f
"GREEN SCREEN DEBUG: Native overlay update completed"
)
logger
.
debug
(
f
"GREEN SCREEN DEBUG: Native overlay update completed"
)
return
True
elif
isinstance
(
overlay_view
,
OverlayWebView
):
# WebEngine overlay - check readiness first
logger
.
error
(
f
"GREEN SCREEN DEBUG: Checking WebEngine overlay readiness"
)
logger
.
error
(
f
"GREEN SCREEN DEBUG: WebEngine URL: {overlay_view.url().toString()}"
)
logger
.
error
(
f
"GREEN SCREEN DEBUG: WebEngine visible: {overlay_view.isVisible()}"
)
logger
.
debug
(
f
"GREEN SCREEN DEBUG: Checking WebEngine overlay readiness"
)
logger
.
debug
(
f
"GREEN SCREEN DEBUG: WebEngine URL: {overlay_view.url().toString()}"
)
logger
.
debug
(
f
"GREEN SCREEN DEBUG: WebEngine visible: {overlay_view.isVisible()}"
)
# CRITICAL FIX: Ensure WebEngine overlay visibility before update
if
not
overlay_view
.
isVisible
():
...
...
@@ -1721,46 +1748,24 @@ class PlayerWindow(QMainWindow):
logger
.
error
(
f
"GREEN SCREEN FIX: Parent overlay window visibility forced"
)
if
self
.
_is_webengine_ready
(
overlay_view
):
logger
.
error
(
f
"GREEN SCREEN DEBUG: WebEngine ready, updating overlay"
)
logger
.
debug
(
f
"GREEN SCREEN DEBUG: WebEngine ready, updating overlay"
)
overlay_view
.
update_overlay_data
(
cleaned_data
)
logger
.
debug
(
"WebEngine overlay updated successfully"
)
logger
.
error
(
f
"GREEN SCREEN DEBUG: WebEngine overlay update completed"
)
logger
.
debug
(
f
"GREEN SCREEN DEBUG: WebEngine overlay update completed"
)
return
True
else
:
logger
.
error
(
f
"GREEN SCREEN DEBUG: WebEngine not ready, skipping update"
)
logger
.
debug
(
f
"GREEN SCREEN DEBUG: WebEngine not ready, skipping update"
)
logger
.
debug
(
"WebEngine overlay not ready, skipping update"
)
return
False
else
:
logger
.
warning
(
f
"Unknown overlay type: {type(overlay_view)}"
)
logger
.
error
(
f
"GREEN SCREEN DEBUG: Unknown overlay type: {type(overlay_view)}"
)
logger
.
debug
(
f
"GREEN SCREEN DEBUG: Unknown overlay type: {type(overlay_view)}"
)
return
False
except
Exception
as
e
:
logger
.
error
(
f
"GREEN SCREEN DEBUG: Overlay update failed: {e}"
)
logger
.
debug
(
f
"GREEN SCREEN DEBUG: Overlay update failed: {e}"
)
logger
.
error
(
f
"Failed to update overlay safely: {e}"
)
return
False
def
_get_web_server_base_url
(
self
)
->
str
:
"""Get the web server base URL for API requests"""
try
:
# Default web server configuration - matches main.py defaults
host
=
"127.0.0.1"
# Default host
port
=
5001
# Default port
# Try to get web server settings if available
if
hasattr
(
self
,
'_message_bus'
)
and
self
.
_message_bus
:
# Check if we can get web server info from message bus or settings
# For now, use defaults since we don't have direct access to web settings
pass
# Construct base URL
base_url
=
f
"http://{host}:{port}"
logger
.
debug
(
f
"Web server base URL determined as: {base_url}"
)
return
base_url
except
Exception
as
e
:
logger
.
error
(
f
"Failed to determine web server base URL: {e}"
)
# Return default fallback
return
"http://127.0.0.1:5001"
def
_protect_video_context_after_template_load
(
self
):
"""Protect video rendering context after template loading operations"""
...
...
@@ -1817,6 +1822,29 @@ class QtVideoPlayer(QObject):
logger
.
info
(
"QtVideoPlayer (PyQt6) initialized"
)
def
_get_web_server_base_url
(
self
)
->
str
:
"""Get the web server base URL for API requests"""
try
:
# Default web server configuration - matches main.py defaults
host
=
"127.0.0.1"
# Default host
port
=
5001
# Default port
# Try to get web server settings if available
if
hasattr
(
self
,
'_message_bus'
)
and
self
.
_message_bus
:
# Check if we can get web server info from message bus or settings
# For now, use defaults since we don't have direct access to web settings
pass
# Construct base URL
base_url
=
f
"http://{host}:{port}"
logger
.
debug
(
f
"Web server base URL determined as: {base_url}"
)
return
base_url
except
Exception
as
e
:
logger
.
error
(
f
"Failed to determine web server base URL: {e}"
)
# Return default fallback
return
"http://127.0.0.1:5001"
def
initialize
(
self
)
->
bool
:
"""Initialize PyQt6 application and components"""
try
:
...
...
@@ -2113,7 +2141,8 @@ class QtVideoPlayer(QObject):
# Unknown property, pass through if not null
cleaned_data
[
key
]
=
value
logger
.
debug
(
f
"Cleaned overlay data: {cleaned_data}"
)
data_keys
=
list
(
cleaned_data
.
keys
())
if
isinstance
(
cleaned_data
,
dict
)
else
[]
logger
.
debug
(
f
"Cleaned overlay data: {len(cleaned_data)} items with keys: {data_keys}"
)
return
cleaned_data
def
_send_safe_overlay_update
(
self
,
overlay_view
,
data
):
...
...
@@ -2477,10 +2506,10 @@ class QtVideoPlayer(QObject):
reload_template
=
template_data
.
get
(
"reload_template"
,
False
)
load_specific_template
=
template_data
.
get
(
"load_specific_template"
,
""
)
logger
.
error
(
f
"GREEN SCREEN DEBUG: Template change message received"
)
logger
.
error
(
f
"GREEN SCREEN DEBUG: Template name: {template_name}"
)
logger
.
error
(
f
"GREEN SCREEN DEBUG: Reload template: {reload_template}"
)
logger
.
error
(
f
"GREEN SCREEN DEBUG: Load specific template: {load_specific_template}"
)
logger
.
debug
(
f
"GREEN SCREEN DEBUG: Template change message received"
)
logger
.
debug
(
f
"GREEN SCREEN DEBUG: Template name: {template_name}"
)
logger
.
debug
(
f
"GREEN SCREEN DEBUG: Reload template: {reload_template}"
)
logger
.
debug
(
f
"GREEN SCREEN DEBUG: Load specific template: {load_specific_template}"
)
if
self
.
window
and
hasattr
(
self
.
window
,
'window_overlay'
):
overlay_view
=
self
.
window
.
window_overlay
...
...
@@ -2488,14 +2517,14 @@ class QtVideoPlayer(QObject):
# Check video player state before template change
if
hasattr
(
self
.
window
,
'media_player'
):
video_state
=
self
.
window
.
media_player
.
playbackState
()
logger
.
error
(
f
"GREEN SCREEN DEBUG: Video playback state during template change: {video_state}"
)
logger
.
error
(
f
"GREEN SCREEN DEBUG: Video position: {self.window.media_player.position()}"
)
logger
.
error
(
f
"GREEN SCREEN DEBUG: Video duration: {self.window.media_player.duration()}"
)
logger
.
debug
(
f
"GREEN SCREEN DEBUG: Video playback state during template change: {video_state}"
)
logger
.
debug
(
f
"GREEN SCREEN DEBUG: Video position: {self.window.media_player.position()}"
)
logger
.
debug
(
f
"GREEN SCREEN DEBUG: Video duration: {self.window.media_player.duration()}"
)
# Check overlay window transparency state
if
hasattr
(
self
.
window
,
'overlay_window'
):
logger
.
error
(
f
"GREEN SCREEN DEBUG: Overlay window geometry: {self.window.overlay_window.geometry()}"
)
logger
.
error
(
f
"GREEN SCREEN DEBUG: Overlay window visible: {self.window.overlay_window.isVisible()}"
)
logger
.
debug
(
f
"GREEN SCREEN DEBUG: Overlay window geometry: {self.window.overlay_window.geometry()}"
)
logger
.
debug
(
f
"GREEN SCREEN DEBUG: Overlay window visible: {self.window.overlay_window.isVisible()}"
)
# CRITICAL FIX: Protect video context during template changes
video_widget
=
None
...
...
@@ -2505,16 +2534,16 @@ class QtVideoPlayer(QObject):
# Load specific template if requested and using WebEngine overlay
if
load_specific_template
and
isinstance
(
overlay_view
,
OverlayWebView
):
logger
.
error
(
f
"GREEN SCREEN DEBUG: About to load specific template: {load_specific_template}"
)
logger
.
error
(
f
"GREEN SCREEN FIX: Protecting video rendering during template load"
)
logger
.
debug
(
f
"GREEN SCREEN DEBUG: About to load specific template: {load_specific_template}"
)
logger
.
debug
(
f
"GREEN SCREEN FIX: Protecting video rendering during template load"
)
overlay_view
.
load_template
(
load_specific_template
)
logger
.
error
(
f
"GREEN SCREEN DEBUG: Specific template load initiated"
)
logger
.
debug
(
f
"GREEN SCREEN DEBUG: Specific template load initiated"
)
# Otherwise reload current template if requested and using WebEngine overlay
elif
reload_template
and
isinstance
(
overlay_view
,
OverlayWebView
):
logger
.
error
(
f
"GREEN SCREEN DEBUG: About to reload current template"
)
logger
.
error
(
f
"GREEN SCREEN FIX: Protecting video rendering during template reload"
)
logger
.
debug
(
f
"GREEN SCREEN DEBUG: About to reload current template"
)
logger
.
debug
(
f
"GREEN SCREEN FIX: Protecting video rendering during template reload"
)
overlay_view
.
reload_current_template
()
logger
.
error
(
f
"GREEN SCREEN DEBUG: Current template reload initiated"
)
logger
.
debug
(
f
"GREEN SCREEN DEBUG: Current template reload initiated"
)
# CRITICAL FIX: Force video widget refresh after template change
if
video_widget
:
...
...
@@ -2541,7 +2570,9 @@ class QtVideoPlayer(QObject):
if
k
not
in
[
'reload_template'
,
'load_specific_template'
]}
if
data_to_send
:
logger
.
error
(
f
"GREEN SCREEN DEBUG: Sending overlay data: {data_to_send}"
)
# Log data summary instead of full content to avoid cluttering logs with HTML
data_keys
=
list
(
data_to_send
.
keys
())
logger
.
debug
(
f
"GREEN SCREEN DEBUG: Sending overlay data with keys: {data_keys}"
)
# Validate and clean template_data before sending to overlay
cleaned_data
=
self
.
_clean_overlay_data
(
data_to_send
)
if
cleaned_data
:
# Only send if we have valid data after cleaning
...
...
@@ -2549,10 +2580,10 @@ class QtVideoPlayer(QObject):
else
:
logger
.
debug
(
"Template data contained only null/undefined values, skipping update"
)
logger
.
error
(
f
"GREEN SCREEN DEBUG: Template change handler completed"
)
logger
.
debug
(
f
"GREEN SCREEN DEBUG: Template change handler completed"
)
except
Exception
as
e
:
logger
.
error
(
f
"GREEN SCREEN DEBUG: Template change handler failed: {e}"
)
logger
.
debug
(
f
"GREEN SCREEN DEBUG: Template change handler failed: {e}"
)
logger
.
error
(
f
"Failed to handle template change: {e}"
)
def
_handle_overlay_update
(
self
,
message
:
Message
):
...
...
mbetterclient/utils/ssl_utils.py
View file @
91f5dece
...
...
@@ -273,7 +273,7 @@ def create_requests_session_with_ssl_support(verify_ssl: bool = True, ca_cert_pa
retry_strategy
=
Retry
(
total
=
3
,
status_forcelist
=
[
429
,
500
,
502
,
503
,
504
],
method_whitelist
=
[
"HEAD"
,
"GET"
,
"OPTIONS"
,
"POST"
,
"PUT"
,
"DELETE"
]
allowed_methods
=
[
"HEAD"
,
"GET"
,
"OPTIONS"
,
"POST"
,
"PUT"
,
"DELETE"
]
)
adapter
=
HTTPAdapter
(
max_retries
=
retry_strategy
)
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment