MCPcopy Create free account
hub / github.com/Dispatcharr/Dispatcharr / Client

Class Client

core/xtream_codes.py:28–477  ·  view source on GitHub ↗

Xtream Codes API Client with robust error handling

Source from the content-addressed store, hash-verified

26
27
28class Client:
29 """Xtream Codes API Client with robust error handling"""
30
31 def __init__(self, server_url, username, password, user_agent=None):
32 self.server_url = self._normalize_url(server_url)
33 self.username = username
34 self.password = password
35 self.user_agent = user_agent
36
37 # Fix: Properly handle all possible user_agent input types
38 if user_agent:
39 if isinstance(user_agent, str):
40 user_agent_string = user_agent
41 elif hasattr(user_agent, 'user_agent'):
42 user_agent_string = user_agent.user_agent
43 else:
44 logger.warning(f"Unexpected user_agent type: {type(user_agent)}, using default")
45 user_agent_string = 'Mozilla/5.0 (Windows NT 10.0; Win64; x64)'
46 else:
47 user_agent_string = 'Mozilla/5.0 (Windows NT 10.0; Win64; x64)'
48
49 # Create persistent session
50 self.session = requests.Session()
51 self.session.headers.update({'User-Agent': user_agent_string})
52
53 # Configure connection pooling
54 adapter = requests.adapters.HTTPAdapter(
55 pool_connections=1,
56 pool_maxsize=2,
57 max_retries=3,
58 pool_block=False
59 )
60 self.session.mount('http://', adapter)
61 self.session.mount('https://', adapter)
62
63 self.server_info = None
64
65 def _normalize_url(self, url):
66 normalized = normalize_server_url(url)
67 if not normalized:
68 raise ValueError("Server URL cannot be empty")
69 return normalized
70
71 def _make_request(self, endpoint, params=None):
72 """Make request with detailed error handling"""
73 try:
74 url = f"{self.server_url}/{endpoint}"
75 logger.debug(f"XC API Request: {url} with params: {params}")
76
77 response = self.session.get(url, params=params, timeout=60)
78 response.raise_for_status()
79
80 # Check if response is empty
81 if not response.content:
82 error_msg = f"XC API returned empty response from {url}"
83 logger.error(error_msg)
84 raise ValueError(error_msg)
85

Callers 2

setUpMethod · 0.85
setUpMethod · 0.85

Calls

no outgoing calls

Tested by 2

setUpMethod · 0.68
setUpMethod · 0.68